Nächste: Nutzung der Auslagerungsfunktionalität, Nach oben: Den Daemon einrichten [Inhalt][Index]
In einem normalen Mehrbenutzersystem werden Guix und sein Daemon – das
Programm guix-daemon
– vom Systemadministrator installiert;
/gnu/store gehört root
und guix-daemon
läuft als
root
. Nicht mit erweiterten Rechten ausgestattete Nutzer können
Guix-Werkzeuge benutzen, um Pakete zu erstellen oder anderweitig auf den
Store zuzugreifen, und der Daemon wird dies für sie erledigen und dabei
sicherstellen, dass der Store in einem konsistenten Zustand verbleibt und
sich die Nutzer erstellte Pakete teilen.
Wenn guix-daemon
als Administratornutzer root
läuft, wollen
Sie aber vielleicht dennoch nicht, dass Paketerstellungsprozesse auch als
root
ablaufen, aus offensichtlichen Sicherheitsgründen. Um dies zu
vermeiden, sollte ein besonderer Pool aus Erstellungsbenutzern
geschaffen werden, damit vom Daemon gestartete Erstellungsprozesse ihn
benutzen. Diese Erstellungsbenutzer müssen weder eine Shell noch ein
Persönliches Verzeichnis zugewiesen bekommen, sie werden lediglich benutzt,
wenn der Daemon root
-Rechte in Erstellungsprozessen ablegt. Mehrere
solche Benutzer zu haben, ermöglicht es dem Daemon, verschiedene
Erstellungsprozessen unter verschiedenen Benutzeridentifikatoren (UIDs) zu
starten, was garantiert, dass sie einander nicht stören – eine
essenzielle Funktionalität, da Erstellungen als reine Funktionen angesehen
werden (siehe Einführung).
Auf einem GNU/Linux-System kann ein Pool von Erstellungsbenutzern wie folgt
erzeugt werden (mit Bash-Syntax und den Befehlen von shadow
):
# groupadd --system guixbuild # for i in $(seq -w 1 10); do useradd -g guixbuild -G guixbuild \ -d /var/empty -s $(which nologin) \ -c "Guix-Erstellungsbenutzer $i" --system \ guixbuilder$i; done
Die Anzahl der Erstellungsbenutzer entscheidet, wie viele
Erstellungsaufträge parallel ausgeführt werden können, wie es mit der
Befehlszeilenoption --max-jobs vorgegeben werden kann (siehe
--max-jobs). Um guix system
vm
und ähnliche Befehle nutzen zu können, müssen Sie die
Erstellungsbenutzer unter Umständen zur kvm
-Benutzergruppe
hinzufügen, damit sie Zugriff auf /dev/kvm haben, mit -G
guixbuild,kvm
statt -G guixbuild
(siehe guix system
aufrufen).
Das Programm guix-daemon
kann mit dem folgenden Befehl als
root
gestartet werden6:
# guix-daemon --build-users-group=guixbuild
Auf diese Weise startet der Daemon Erstellungsprozesse in einem chroot als
einer der guixbuilder
-Benutzer. Auf GNU/Linux enthält die
chroot-Umgebung standardmäßig nichts außer:
/dev
-Verzeichnis, was größtenteils vom /dev
des Wirtssystems unabhängig erstellt wurde7,
/proc
-Verzeichnis, es zeigt nur die Prozesse des Containers, weil
ein separater Namensraum für Prozess-IDs (PIDs) benutzt wird,
localhost
auf
127.0.0.1
abbildet,
Im chroot ist kein /home-Verzeichnis enthalten und die
Umgebungsvariable HOME
ist auf das nicht existierende
Verzeichnis /homeless-shelter festgelegt. Dadurch fallen
unangemessene Verwendungen von HOME
in den Erstellungs-Skripts von
Paketen auf.
Sie können beeinflussen, in welchem Verzeichnis der Daemon Verzeichnisbäume
zur Erstellung unterbringt, indem sie den Wert der Umgebungsvariablen
TMPDIR
ändern. Allerdings heißt innerhalb des chroots der
Erstellungsbaum immer /tmp/guix-build-Name.drv-0, wobei
Name der Ableitungsname ist – z.B.
coreutils-8.24
. Dadurch hat der Wert von TMPDIR
keinen Einfluss
auf die Erstellungsumgebung, wodurch Unterschiede vermieden werden, falls
Erstellungsprozesse den Namen ihres Erstellungsbaumes einfangen.
Der Daemon befolgt außerdem den Wert der Umgebungsvariablen http_proxy
und https_proxy
für von ihm durchgeführte HTTP- und HTTPS-Downloads,
sei es für Ableitungen mit fester Ausgabe (siehe Ableitungen) oder für
Substitute (siehe Substitute).
Wenn Sie Guix als ein Benutzer ohne erweiterte Rechte installieren, ist es
dennoch möglich, guix-daemon
auszuführen, sofern Sie
--disable-chroot übergeben. Allerdings können Erstellungsprozesse
dann nicht voneinander und vom Rest des Systems isoliert werden. Daher
können sich Erstellungsprozesse gegenseitig stören und auf Programme,
Bibliotheken und andere Dateien zugreifen, die dem restlichen System zur
Verfügung stehen – was es deutlich schwerer macht, sie als reine
Funktionen aufzufassen.
Wenn Ihre Maschine systemd als
„init“-System verwendet, genügt es, die Datei
prefix/lib/systemd/system/guix-daemon.service nach
/etc/systemd/system zu kopieren, damit guix-daemon
automatisch gestartet wird. Ebenso können Sie, wenn Ihre Maschine Upstart
als „init“-System benutzt, die Datei
prefix/lib/upstart/system/guix-daemon.conf nach
/etc/init kopieren.
„Größtenteils“, denn
obwohl die Menge an Dateien, die im /dev
des chroots vorkommen, fest
ist, können die meisten dieser Dateien nur dann erstellt werden, wenn das
Wirtssystem sie auch hat.
Nächste: Nutzung der Auslagerungsfunktionalität, Nach oben: Den Daemon einrichten [Inhalt][Index]