SPACK
zum Bauen von Nutzer-Software

Allgemeines

Mit dem Umstieg auf RHEL 9 wechseln wir auch auf SPACK zur Erstellung des zentralen Modulsystems.

SPACK ermöglicht es aber auch, viele verschiedene Softwarepakete schnell und einfach als Nutzer selbst zu bauen – die bei Spack verfügbaren sehen Sie mit „spack list <name>“.

Da die systemweite SPACK-Installation für das zentrale Modulsystem konfiguriert ist, müssen dafür aber einige der Standardeinstellungen modifiziert werden.

SPACK bietet dafür zwei Möglichkeiten: Environments oder nutzerspezifische Konfigurationsdateien in ~/.spack/.
Wir empfehlen Environments, wie im Folgenden beschrieben.

Anlegen:

 spack env create <$HOME/Pfad/zum/Environment>

Zum Beispiel, wenn man das Environment „Mein_Env“ nennen möchte:

 spack env create $HOME/Mein_Env

oder – wenn man sich schon im entsprechenden Verzeichnis befindet – einfach

 spack env create .

Zum Beispiel, wenn man das Environment „Mein_Env“ erstellen möchte:

 mkdir -p $HOME/Mein_Env
cd Mein_Env
spack env create .

Bitte beachten Sie, dass Sie einen Pfad angeben müssen. Wenn Sie nur einen Verzeichnisnamen angeben, interpretiert Spack dies als sogenanntes „managed Environment“. Dies führt zu einem Fehler, da in diesem Fall das Verzeichnis für das Environment in einem Unterverzeichnis der Spack-Installation erstellt werden sollte, das jedoch in einem schreibgeschützten Dateisystem sich befindet.

Aktivieren:

Das Environment wird dann mit

 spack env activate <$HOME/Pfad/zum/Environment>

oder über seinen symbolischen Namen

 spack env activate Mein_Env

aktiviert.

Statt „spack env activate“ kann man synonym auch den kürzeren Alias „spacktivate“ benutzen.

Deaktivieren:

 spack env deactivate

(oder der kürzere Alias „despacktivate“)

entlädt das Environment, was die verfügbaren Module wieder auf die des zentralen SPACK-Modulsystems reduziert.

Achtung, wichtiger Hinweis!

Vor dem Deaktivieren eines Environments müssen alle mit „spack load <Paketname>“ geladenen Pakete mit „spack unload <Paketname>“ entladen werden, da sonst die Arbeitsumgebung unübersichtlich werden und viele Programme unbrauchbar werden können.

Konfiguration für SPACK Environment

Im neu erzeugten Environment muss die Konfiguration angepasst werden: „spack config edit“.

Alternativ kann die <$HOME/Pfad/zum/Environment>/spack.yaml-Datei mit einem Texteditor Ihrer Wahl bearbeitet werden.

Die Konfiguration sollte wie folgt angepasst werden („# …“ kennzeichnen Kommentare, die weggelassen werden können):

Konfiguration in spack.yaml

# This is a Spack Environment file.
#
# It describes a set of packages to be installed, along with
# configuration settings.
spack:
##### Config Settings #####
  config:
    install_tree:
      root: ~/myspackapps
    build_jobs: 16
    build_stage:
    - $tempdir/$user/spack-stage
    - $user_cache_path/stage
    test_stage: $user_cache_path/test
    source_cache: ~/packapps/cache
    misc_cache: $user_cache_path/cache
  packages:
    all:
      permissions:
        read: group
        write: group
        group: <YOUR USERID/TUID> # alternatively the GROUPID related to a project dir you want to use, need to change install_tree, too
    gcc:
      buildable: true
    llvm:
      buildable: true
    intel-oneapi-compilers:
      buildable: true
  upstreams:
    spack-instance-1:
      install_tree: /shared/spapps
      modules:
        lmod: /shared/spmodules
  
##### Config Settings End #####

  # add package specs to the `specs` list
  specs: []
  
  view: false
  concretizer:
    unify: when_possible
    reuse: true
Alle Parameter in <…> bitte durch eigene Werte ersetzen!

SPACK env ist „additiv“

Mit dieser Konfiguration (siehe „upstreams:“) eines eigenen SPACK-„Environments“ aktivieren Sie ihre eigene Software zusätzlich zu den SPACK-Modulen des zentralen Modulsystems – es wird dabei nicht ausgeblendet oder inaktiv.

Softwaremodule mit SPACK

Eigene Software-Pakete (in Spack-Speak „specs“) können Sie Ihrem Environment auf zweierlei Weise hinzufügen: per spack-Befehl oder über das direkte Editieren der <$HOME/Pfad/zum/Environment>/spack.yaml-Datei, wobei letzteres vor dem Aktivieren erfolgen muss).

Mit

 spack add gcc@8 %gcc@11.4.1

fügen Sie z.B. den GCC hinzu.

Sind alle „specs“ für das Environment definiert, stößt

 spack install

deren Build an (also den Kompilier- und Installiervorgang).

Was € und % bedeuten

Die Spack-Syntax mit „@“ and „%“ bedeutet:

  • software@version = erzeuge die gewünschte Software in genau der gewünschten Version
  • %compiler@version = mit diesem Compiler in genau dessen angegebener Version

Mit dem „:“ (Doppelpunkt) können Sie auch „von-bis-Bereiche“ für Versionen vorgeben:

  • software@1:3 = erzeuge die Software in Version 1, 2 oder 3

Lassen Sie die Angabe „@version“ ganz weg, nimmt Spack die jüngste Version sowohl von „software“ als auch vom „%compiler“ an (bzw. die für dieses „software“-Paket „bevorzugte“ Compilerversion).

Softwaremodule mit SPACK

LMod-kompatible Module

Sie können SPACK auch dazu verwenden, LMod-kompatible Modulfiles für die selbstgebaute Software zu erzeugen. Dazu müssen Sie in der <$HOME/Pfad/zum/Environment>/spack.yaml-Datei ein geeignetes Verzeichnis dafür vorgeben:

  modules:
    default:
      roots:
        lmod: ~/myspackmodules