Nächste: , Nach oben: Den Daemon einrichten   [Inhalt][Index]


2.4.1 Einrichten der Erstellungsumgebung

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:

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.

All this usually enough to ensure details of the environment do not influence build processes. In some exceptional cases where more control is needed—typically over the date, kernel, or CPU—you can resort to a virtual build machine (siehe virtual build machines).

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.


Fußnoten

(6)

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.

(7)

„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]