Nächste: , Nach oben: Guix-Profile in der Praxis   [Inhalt][Index]


6.1.1 Grundlegende Einrichtung über Manifeste

Ein Guix-Profil kann über ein Manifest eingerichtet werden. Ein Manifest ist ein in Scheme geschriebenes Codeschnipsel, mit dem die Pakete spezifiziert werden, die Sie in Ihrem Profil haben möchten. Das sieht etwa so aus:

(specifications->manifest
  '("paket-1"
    ;; Version 1.3 von paket-2.
    "paket-2@1.3"
    ;; Die "lib"-Ausgabe von paket-3.
    "paket-3:lib"
    ; …
    "paket-N"))

Siehe Manifeste verfassen in Referenzhandbuch zu GNU Guix für mehr Informationen zur Syntax.

Wir können eine Manifestspezifikation für jedes Profil schreiben und es auf diese Weise installieren:

GUIX_EXTRA_PROFILES=$HOME/.guix-extra-profiles
mkdir -p "$GUIX_EXTRA_PROFILES"/my-project # wenn es noch nicht existiert
guix package --manifest=/pfad/zu/guix-my-project-manifest.scm \
 --profile="$GUIX_EXTRA_PROFILES"/my-project/my-project

Hierbei haben wir eine beliebig benannte Variable ‘GUIX_EXTRA_PROFILES’ eingerichtet, die auf das Verzeichnis verweist, wo wir unsere Profile für den Rest dieses Artikels speichern wollen.

Wenn Sie all Ihre Profile in ein einzelnes Verzeichnis legen und jedes Profil ein Unterverzeichnis darin bekommt, ist die Organisation etwas verständlicher. Dadurch wird jedes Unterverzeichnis all die symbolischen Verknüpfungen für genau ein Profil enthalten. Außerdem wird es von jeder Programmiersprache aus einfach, eine „Schleife über die Profile“ zu schreiben (z.B. in einem Shell-Skript), indem Sie es einfach die Unterverzeichnisse von ‘$GUIX_EXTRA_PROFILES’ in einer Schleife durchlaufen lassen.

Beachten Sie, dass man auch eine Schleife über die Ausgabe von

guix package --list-profiles

schreiben kann, obwohl Sie dabei wahrscheinlich ~/.config/guix/current herausfiltern wollen würden.

Um bei der Anmeldung alle Profile zu aktivieren, fügen Sie dies in Ihre ~/.bash_profile ein (oder etwas Entsprechendes):

for i in $GUIX_EXTRA_PROFILES/*; do
  profile=$i/$(basename "$i")
  if [ -f "$profile"/etc/profile ]; then
    GUIX_PROFILE="$profile"
    . "$GUIX_PROFILE"/etc/profile
  fi
  unset profile
done

Eine Anmerkung für Nutzer von „Guix System“: Obiger Code entspricht dem, wie Ihr voreingestelltes Profil ~/.guix-profile durch /etc/profile aktiviert wird, was nach Vorgabe durch ~/.bashrc geladen wird.

Selbstverständlich können Sie sich auch dafür entscheiden, nur eine Teilmenge zu aktivieren:

for i in "$GUIX_EXTRA_PROFILES"/my-project-1 "$GUIX_EXTRA_PROFILES"/my-project-2; do
  profile=$i/$(basename "$i")
  if [ -f "$profile"/etc/profile ]; then
    GUIX_PROFILE="$profile"
    . "$GUIX_PROFILE"/etc/profile
  fi
  unset profile
done

Wenn ein Profil abgeschaltet ist, lässt es sich mit Leichtigkeit für eine bestimmte Shell aktivieren, ohne die restliche Benutzersitzung zu „verschmutzen“:

GUIX_PROFILE="pfad/zu/my-project" ; . "$GUIX_PROFILE"/etc/profile

Der Schlüssel dazu, wie man ein Profil aktiviert, ist dessen ‘etc/profile’-Datei mit source zu laden. Diese Datei enthält einige Shell-Befehle, um die für das Aktivieren der Software im Profil nötigen Umgebungsvariablen zu exportieren. Die Datei wird durch Guix automatisch erzeugt, um mit source eingelesen zu werden. Sie enthält dieselben Variablen, die Sie nach Ausführung dieses Befehls bekämen:

guix package --search-paths=prefix --profile=$my_profile"

Siehe auch hier das Aufruf von guix package in Referenzhandbuch zu GNU Guix für die Befehlszeilenoptionen.

Um ein Profil zu aktualisieren, installieren Sie das Manifest einfach nochmal:

guix package -m /pfad/zu/guix-my-project-manifest.scm \
 -p "$GUIX_EXTRA_PROFILES"/my-project/my-project

Um alle Profile zu aktualisieren, genügt es, sie in einer Schleife durchlaufen zu lassen. Nehmen wir zum Beispiel an, Ihre Manifestspezifikationen befinden sich in ~/.guix-manifests/guix-$profile-manifest.scm, wobei ‘$profile’ der Name des Profils ist (z.B. „projekt1“), dann könnten Sie in der Bourne-Shell Folgendes tun:

for profile in "$GUIX_EXTRA_PROFILES"/*; do
  guix package --profile="$profile" \
   --manifest="$HOME/.guix-manifests/guix-$profile-manifest.scm"
done

Jedes Profil verfügt über seine eigenen Generationen:

guix package -p "$GUIX_EXTRA_PROFILES"/my-project/my-project --list-generations

Sie können es auf jede Generation zurücksetzen:

guix package -p "$GUIX_EXTRA_PROFILES"/my-project/my-project --switch-generations=17

Zu guter Letzt ist es möglich, zu einem Profil zu wechseln ohne die aktuelle Umgebung zu erben, indem Sie es aus einer leeren Shell heraus aktivieren:

env -i $(which bash) --login --noprofile --norc
. my-project/etc/profile

Nächste: Die nötigen Pakete, Nach oben: Guix-Profile in der Praxis   [Inhalt][Index]