Nächste: Die nötigen Pakete, Nach oben: Guix-Profile in der Praxis [Inhalt][Index]
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]