Spack-Installation

Anforderungen

  • Interpreter für Spack:

  • Software erstellen

    • C/C++ Compiler

    • make, patch und bash

  • Archive erstellen und extrahieren

    • tar, gzip und bzip

  • Verwalten von Software-Repositories

    • git

  • Signieren und Verifizieren von Build-Caches

    • gnupg2 für gpg-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

  1. Zur Konfiguration des Bash-Environment wird folgendes in ~/.bashrc eingetragen:

    export SPACK_ROOT=~/spack
    . $SPACK_ROOT/share/spack/setup-env.sh
    
  2. 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.