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> [myName4myEnv]

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

 spack env create . [myName4myEnv]

Aktivieren:

Das Environment wird dann mit

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

oder über seinen symbolischen Namen

 spack env activate myName4myEnv

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.

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