Spack-Installation¶
Anforderungen¶
Interpreter für Spack:
Software erstellen
C/C++ Compiler
make
,patch
undbash
Archive erstellen und extrahieren
tar
,gzip
undbzip
Verwalten von Software-Repositories
git
Signieren und Verifizieren von Build-Caches
gnupg2
fürgpg
-Subcommand
$ sudo apt install build-essential patch tar gzip bzip2 git gnupg2
$ xcode-select --install
$ brew install make bash gzip bzip2 git gnupg
$ brew link gnupg
Anschließend wird die Shell konfiguriert, indem z.B. für die Bash folgendes in die Bash-Konfiguration eingetragen wird:
$ source /usr/local/opt/modules/init/bash
Installation¶
$ git clone https://github.com/spack/spack.git
Cloning into 'spack'...
...
$ cd spack
$ git switch releases/v0.19
Shell konfigurieren¶
Zur Konfiguration des Bash-Environment wird folgendes in
~/.bashrc
eingetragen:export SPACK_ROOT=~/spack . $SPACK_ROOT/share/spack/setup-env.sh
Die geänderte Konfiguration wird nun übernommen mit
$ source ~/.bashrc
Bootstrapping clingo
¶
Spack uses clingo to resolve optimal versions and variants of dependencies when installing packages. To install clingo from pre-built binaries you can simply specify a package:
Spack benutzt clingo um optimale Versionen und Varianten von Abhängigkeiten bei der Installation von Paketen aufzulösen. Um clingo aus vorgefertigten Binärdateien zu installieren, könnt ihr einfach ein Paket angeben:
$ spack spec zlib
==> Bootstrapping clingo from pre-built binaries
==> Fetching https://mirror.spack.io/bootstrap/github-actions/v0.4/build_cache/linux-centos7-x86_64-gcc-10.2.1-clingo-bootstrap-spack-idkenmhnscjlu5gjqhpcqa4h7o2a7aow.spec.json
==> Fetching https://mirror.spack.io/bootstrap/github-actions/v0.4/build_cache/linux-centos7-x86_64/gcc-10.2.1/clingo-bootstrap-spack/linux-centos7-x86_64-gcc-10.2.1-clingo-bootstrap-spack-idkenmhnscjlu5gjqhpcqa4h7o2a7aow.spack
==> Installing "clingo-bootstrap@spack%gcc@10.2.1~docs~ipo+python+static_libstdcpp build_type=Release arch=linux-centos7-x86_64" from a buildcache
Input spec
--------------------------------
zlib
Concretized
--------------------------------
zlib@1.2.13%gcc@11.3.0+optimize+pic+shared build_system=makefile arch=linux-ubuntu22.04-sandybridge
Bemerkung
Um von vorgefertigten Binärdateien zu booten, benötigt Spack patchelf
unter Linux oder otool
unter macOS. Ansonsten baut Spack sie aus den
Quellen und mit einem C++ Compiler.
Bootstrap store¶
Alle Werkzeuge, die Spack benötigt, werden in einem separaten Speicher
installiert, der sich im Verzeichnis $HOME/.spack
befindet. Die dort
installierte Software kann abgefragt werden mit:
$ spack find --bootstrap
==> Warning: `spack find --bootstrap` is deprecated and will be removed in v0.19.
Use `spack --bootstrap find` instead.
==> Showing internal bootstrap store at "/srv/jupyter/.spack/bootstrap/store"
-- linux-centos7-x86_64 / gcc@10.2.1 ----------------------------
bison@3.0.4 clingo-bootstrap@spack python@3.10
==> 3 installed packages
Compiler-Konfiguration¶
$ spack compilers
==> Available compilers
-- gcc ubuntu22.04-x86_64 ---------------------------------------
gcc@11.3.0
Baut euren eigenen Compiler¶
$ spack install gcc
...
==> gcc: Successfully installed gcc-11.2.0-azhiay4ugfrs634hqlez7u3f2li3wvzd
Fetch: 12.09s. Build: 2h 8m 13.92s. Total: 2h 8m 26.01s.
[+] /Users/veit/spack/opt/spack/darwin-bigsur-cannonlake/apple-clang-13.0.0/gcc-11.2.0-azhiay4ugfrs634hqlez7u3f2li3wvzd
Allerdings findet Spack den Compiler zunächst nicht:
$ $ spack compilers
==> Available compilers
-- apple-clang bigsur-x86_64 ------------------------------------
apple-clang@13.0.0
Ihr könnt ihn jedoch mit spack compiler find
hinzufügen:
$ spack compiler find /srv/jupyter/spack/opt/spack/linux-ubuntu22.04-sandybridge/gcc-11.3.0/gcc-12.2.0-gbaw464qxjuz6i3uud42cd5mb4xujxia/
==> Added 1 new compiler to /srv/jupyter/.spack/linux/compilers.yaml
gcc@12.2.0
==> Compilers are defined in the following files:
/srv/jupyter/.spack/linux/compilers.yaml
$ spack compilers
==> Available compilers
-- gcc ubuntu22.04-x86_64 ---------------------------------------
gcc@12.2.0 gcc@11.3.0
Wenn ihr die Standard- und Site-Einstellungen überschreiben möchtet, könnt ihr
$HOME/.spack/packages.yaml
ändern:
packages:
all:
compiler: [gcc@12.2.0]
GPG Signing¶
Spack unterstützt das Signieren und Verifizieren von Paketen mit GPG-Schlüsseln. Für Spack wird ein separater Schlüsselring verwendet, weswegen keine Schlüssel aus dem Home-Verzeichnis von Nutzern verfügbar sind.
Wenn Spack zum ersten Mal installiert wird, ist dieser Schlüsselring leer.
Die in /var/spack/gpg
gespeicherten Schlüssel sind die Standardschlüssel
für eine Spack-Installation. Diese Schlüssel werden durch spack gpg init
importiert. Dadurch werden die Standardschlüssel als vertrauenswürdige Schlüssel
in den Schlüsselbund importiert.
Schlüsseln vertrauen¶
Zusätzliche Schlüssel können mit spack gpg trust <keyfile>
dem
Schlüsselring hinzugefügt werden. Sobald ein Schlüssel vertrauenswürdig ist,
können Pakete, die vom Besitzer dieses Schlüssels signiert wurden, installiert
werden.
Schlüssel erstellen¶
Ihr könnt auch eigene Schlüssel erstellen, um eure eigenen Pakete signieren zu können mit
$ spack gpg export <location> [<key>…]
Schlüssel auflisten¶
Die im Schlüsselbund verfügbaren Schlüssel können aufgelistet werden mit
$ spack gpg list
Schlüssel entfernen¶
Schlüssel können entfernt werden mit
$ spack gpg untrust <keyid>
Schlüssel-IDs können E-Mail-Adressen, Namen oder Fingerprints sein.