--- 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 ``` Una volta clonato, è possibile caricare l'ambiente con ```bash 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}' ^mpi: '{name}/{version}-{^mpi.name}-{^mpi.version}-{compiler.name}-{compiler.version}' all: conflict: - '{name}' autoload: direct ``` 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. I file di modulo sono generati in modo da richiedere il caricamento delle dipendenze dirette che sono state usate nella loro creazione, tipicamente dipendenze sulla implementazione di MPI scelta (`OpenMPI` o `MPICH`). **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. ```