diff --git a/minimalist/_config.yml b/minimalist/_config.yml
index 872e833..f020d89 100644
--- a/minimalist/_config.yml
+++ b/minimalist/_config.yml
@@ -27,6 +27,9 @@ sidebar:
- name: Software
icon:
link: ./software.html
+ - name: Spack
+ icon:
+ link: ./spack.html
- name: Definizioni
icon:
link: ./definizioni.html
diff --git a/minimalist/definizioni.md b/minimalist/definizioni.md
index 891fb1a..99f9c2b 100644
--- a/minimalist/definizioni.md
+++ b/minimalist/definizioni.md
@@ -22,6 +22,14 @@ non esclusivo alle risorse (nodi informatici) per un certo periodo di tempo in
modo che possano eseguire i *job*. Fornisce una struttura per l'avvio,
l'esecuzione e il monitoraggio dei *job*.
+Modulo
+: I `modulefile` sono file scritti in Tool Command Language, TCL, e sono
+interpretati dal programma `module` tramite l'interfaccia utente del modulo.
+I file dei moduli possono essere caricati (`load`), scaricati (`unload`) o
+commutati al volo (`switch`) mentre l'utente sta lavorando; e possono essere
+utilizzati per implementare le politiche del cluster relative all'accesso e
+all'utilizzo delle applicazioni.
+
Scalabilità forte (strong scaling)
: Il numero di processori aumenta mentre la dimensione del problema rimane costante. Ciò si traduce anche in un carico di lavoro ridotto per processore.
diff --git a/minimalist/spack.md b/minimalist/spack.md
index 12b36c9..a8f7e25 100644
--- a/minimalist/spack.md
+++ b/minimalist/spack.md
@@ -1,7 +1,13 @@
+---
+layout: default
+---
+
# Spack
[Spack](https://spack.io/) rappresenta uno strumento avanzato di gestione dei pacchetti, mirato a supportare simultaneamente diverse versioni e configurazioni di software su una vasta gamma di piattaforme e ambienti. In particolare, è stato appositamente progettato per rispondere alle esigenze dei grandi centri di supercalcolo, in cui numerosi utenti e team applicativi condividono installazioni comuni di software su cluster caratterizzati da architetture non convenzionali e l'utilizzo di librerie prive di un'ABI standardizzata. Un aspetto distintivo di Spack è la sua natura non distruttiva: l'installazione di una nuova versione non interferisce con le installazioni preesistenti, consentendo così la coesistenza di molteplici configurazioni sullo stesso sistema.
+## Amministrazione
+
L'ambiente Spack può essere ottenuto via *git*
```bash
git clone --depth=100 --branch=releases/v0.21 https://github.com/spack/spack.git spack
@@ -11,10 +17,103 @@ Una volta clonato, è possibile caricare l'ambiente con
cd spack
. share/spack/setup-env.sh
```
-
Adesso possiamo visualizzare quali sono i compilatori già installti sul sistema
e quelli disponibili:
```bash
spack compiler find
spack compilers
```
+
+Impieghiamo Spack sul cluster per l'installazione del software e la generazione
+di *module file* per [Environment Modules](https://modules.readthedocs.io/en/latest/).
+
+Nello specifico, configuriamo la generazione dei moduli tramite il file di configurazione
+dei moduli in `/mnt/raid/software/spack/etc/spack/modules.yaml`
+```yaml
+modules:
+ default:
+ enable:
+ - tcl
+ tcl:
+ hash_length: 0
+ include:
+ - gcc
+ exclude_implicits: true
+ projections:
+ all: '{name}/{version}-{compiler.name}-{compiler.version}'
+ gcc: '{name}/{version}'
+ all:
+ conflict:
+ - '{name}'
+```
+Per aggiornare i moduli si può usare il comando
+```bash
+spack module tcl refresh --delete-tree -y
+```
+Per rendere disponibili i file di modulo su tutti i nodi è necessario aggiungere
+il path alla configurazione di sistema. Questo può essere fatto creando il file
+`addspackmodulepath.sh`:
+```bash
+#!/bin/bash
+
+apt-get install -y environment-modules
+
+echo '/mnt/raid/software/spack/share/spack/modules/linux-ubuntu20.04-aarch64/ # Spack Modules' >> /etc/environment-modules/modulespath
+```
+ed eseguendo
+```bash
+./runsetup.sh addspackmodulepath.sh
+```
+
+## Utenza
+
+Per l'utenza la presenza di Spack è *virtualmente invisibile*, ciò a cui gli utenti
+hanno accesso sono i file di modulo per il caricamento nell'ambiente del software
+installato.
+
+Si possono investigare i moduli disponibili con il comando
+```bash
+module avail
+```
+e caricare nell'ambiente con il comando
+```bash
+module load programma/versione-compilatore
+```
+o rimuovere con
+```bash
+module unload programma/versione-compilatore
+```
+Un ambiente pulito può essere ottenuto con il comando
+```bash
+module purge
+```
+È importante che si faccia uso sempre di catene di moduli compatibili, ovvero
+di moduli (software) generato/compilato con il medesimo compilatore. Altrimenti
+si rischia la creazione di ambienti inconsistenti e impossibili da usare.
+
+**Esempio:** carichiamo un diverso compilatore, al *login* la richiesta
+```bash
+gcc --version
+```
+risponderà
+```
+gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0
+Copyright (C) 2019 Free Software Foundation, Inc.
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+```
+Eseguiamo il comando
+```bash
+module load gcc/12.3.0
+```
+seguito da
+```bash
+gcc --version
+```
+che ora ci risponderà
+```
+gcc (Spack GCC) 12.3.0
+Copyright (C) 2022 Free Software Foundation, Inc.
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+```