Nächste: SELinux-Unterstützung, Vorige: Einrichten der Erstellungsumgebung, Nach oben: Den Daemon einrichten [Inhalt][Index]
Wenn erwünscht, kann der Erstellungs-Daemon Ableitungserstellungen auf
andere Maschinen auslagern, auf denen Guix läuft, mit Hilfe des
offload
-Build-Hooks8. Wenn diese Funktionalität aktiviert ist, wird
eine nutzerspezifizierte Liste von Erstellungsmaschinen aus
/etc/guix/machines.scm gelesen. Wann immer eine Erstellung angefragt
wird, zum Beispiel durch guix build
, versucht der Daemon, sie an eine
der Erstellungsmaschinen auszulagern, die die Einschränkungen der Ableitung
erfüllen, insbesondere ihre Systemtypen – z.B.
x86_64-linux
. Eine einzelne Maschine kann mehrere Systemtypen haben,
entweder weil ihre Architektur eine native Unterstützung vorsieht, weil
Emulation eingerichtet wurde (siehe Transparente Emulation mit QEMU) oder beides. Fehlende Voraussetzungen für
die Erstellung werden über SSH auf die Zielmaschine kopiert, welche dann mit
der Erstellung weitermacht. Hat sie Erfolg damit, so werden die Ausgabe oder
Ausgaben der Erstellung zurück auf die ursprüngliche Maschine kopiert. Die
Auslagerungsfunktion verfügt über einen einfachen Planungsalgorithmus (einen
Scheduler), mit dem versucht wird, die jeweils beste Maschine
auszuwählen. Unter den verfügbaren wird die beste Maschine nach Kriterien
wie diesen ausgewählt:
parallel-builds
-Feldes des
build-machine
-Objekts entspricht.
speed
-Feld ihres build-machine
-Objekts.
overload-threshold
-Feld ihres build-machine
-Objekts
einstellbar.
Die Datei /etc/guix/machines.scm sieht normalerweise so aus:
(list (build-machine
(name "eightysix.example.org")
(systems (list "x86_64-linux" "i686-linux"))
(host-key "ssh-ed25519 AAAAC3Nza…")
(user "bob")
(speed 2.)) ;unglaublich schnell!
(build-machine
(name "armeight.example.org")
(systems (list "aarch64-linux"))
(host-key "ssh-rsa AAAAB3Nza…")
(user "alice")
;; Weil 'guix offload' vom 'guix-daemon' als
;; Administratornutzer root gestartet wird.
(private-key "/root/.ssh/identität-für-guix")))
Im obigen Beispiel geben wir eine Liste mit zwei Erstellungsmaschinen vor,
eine für die x86_64
- und i686
-Architektur und eine für die
aarch64
-Architektur.
Tatsächlich ist diese Datei – wenig überraschend! – eine
Scheme-Datei, die ausgewertet wird, wenn der offload
-Hook gestartet
wird. Der Wert, den sie zurückliefert, muss eine Liste von
build-machine
-Objekten sein. Obwohl dieses Beispiel eine feste Liste
von Erstellungsmaschinen zeigt, könnte man auch auf die Idee kommen, etwa
mit DNS-SD eine Liste möglicher im lokalen Netzwerk entdeckter
Erstellungsmaschinen zu liefern (siehe Guile-Avahi in Using Avahi in Guile Scheme Programs). Der Datentyp
build-machine
wird im Folgenden weiter ausgeführt.
Dieser Datentyp repräsentiert Erstellungsmaschinen, an die der Daemon Erstellungen auslagern darf. Die wichtigen Felder sind:
name
Der Rechnername (d.h. der Hostname) der entfernten Maschine.
systems
Die Systemtypen, die die entfernte Maschine unterstützt – z.B.
(list "x86_64-linux" "i686-linux")
.
user
Das Benutzerkonto, mit dem eine Verbindung zur entfernten Maschine über SSH aufgebaut werden soll. Beachten Sie, dass das SSH-Schlüsselpaar nicht durch eine Passphrase geschützt sein darf, damit nicht-interaktive Anmeldungen möglich sind.
host-key
Dies muss der öffentliche SSH-Rechnerschlüssel („Host Key“) der Maschine im OpenSSH-Format sein. Er wird benutzt, um die Identität der Maschine zu prüfen, wenn wir uns mit ihr verbinden. Er ist eine lange Zeichenkette, die ungefähr so aussieht:
ssh-ed25519 AAAAC3NzaC…mde+UhL hint@example.org
Wenn auf der Maschine der OpenSSH-Daemon, sshd
, läuft, ist der
Rechnerschlüssel in einer Datei wie /etc/ssh/ssh_host_ed25519_key.pub
zu finden.
Wenn auf der Maschine der SSH-Daemon von GNU lsh, nämlich
lshd
, läuft, befindet sich der Rechnerschlüssel in
/etc/lsh/host-key.pub oder einer ähnlichen Datei. Er kann ins
OpenSSH-Format umgewandelt werden durch lsh-export-key
(siehe
Converting keys in LSH Manual):
$ lsh-export-key --openssh < /etc/lsh/host-key.pub ssh-rsa AAAAB3NzaC1yc2EAAAAEOp8FoQAAAQEAs1eB46LV…
Eine Reihe optionaler Felder kann festgelegt werden:
port
(Vorgabe: 22
)Portnummer des SSH-Servers auf der Maschine.
private-key
(Vorgabe: ~root/.ssh/id_rsa)Die Datei mit dem privaten SSH-Schlüssel, der beim Verbinden zur Maschine genutzt werden soll, im OpenSSH-Format. Dieser Schlüssel darf nicht mit einer Passphrase geschützt sein.
Beachten Sie, dass als Vorgabewert der private Schlüssel des root-Benutzers genommen wird. Vergewissern Sie sich, dass er existiert, wenn Sie die Standardeinstellung verwenden.
compression
(Vorgabe: "zlib@openssh.com,zlib"
)compression-level
(Vorgabe: 3
)Die Kompressionsmethoden auf SSH-Ebene und das angefragte Kompressionsniveau.
Beachten Sie, dass Auslagerungen SSH-Kompression benötigen, um beim Übertragen von Dateien an Erstellungsmaschinen und zurück weniger Bandbreite zu benutzen.
daemon-socket
(Vorgabe: "/var/guix/daemon-socket/socket"
)Dateiname des Unix-Sockets, auf dem guix-daemon
auf der Maschine
lauscht.
overload-threshold
(Vorgabe: 0.8
)Der Schwellwert für die Auslastung (englisch „load“), ab der eine
potentielle Auslagerungsmaschine für den Auslagerungsplaner nicht mehr in
Betracht kommt. Der Wert entspricht grob der gesamten Prozessornutzung der
Erstellungsmaschine. Er reicht von 0.0 (0%) bis 1.0 (100%). Wenn er
ignoriert werden soll, dann setzen Sie overload-threshold
auf
#f
.
parallel-builds
(Vorgabe: 1
)Die Anzahl der Erstellungen, die auf der Maschine parallel ausgeführt werden können.
speed
(Vorgabe: 1.0
)Ein „relativer Geschwindigkeitsfaktor“. Der Auslagerungsplaner gibt tendenziell Maschinen mit höherem Geschwindigkeitsfaktor den Vorrang.
features
(Vorgabe: '()
)Eine Liste von Zeichenketten, die besondere von der Maschine unterstützte
Funktionalitäten bezeichnen. Ein Beispiel ist "kvm"
für Maschinen,
die über die KVM-Linux-Module zusammen mit entsprechender
Hardware-Unterstützung verfügen. Ableitungen können Funktionalitäten dem
Namen nach anfragen und werden dann auf passenden Erstellungsmaschinen
eingeplant.
Der Befehl guix
muss sich im Suchpfad der Erstellungsmaschinen
befinden. Um dies nachzuprüfen, können Sie Folgendes ausführen:
ssh build-machine guix repl --version
Es gibt noch eine weitere Sache zu tun, sobald machines.scm
eingerichtet ist. Wie zuvor erklärt, werden beim Auslagern Dateien zwischen
den Stores der Maschinen hin- und hergeschickt. Damit das funktioniert,
müssen Sie als Erstes ein Schlüsselpaar auf jeder Maschine erzeugen, damit
der Daemon signierte Archive mit den Dateien aus dem Store versenden kann
(siehe guix archive
aufrufen):
# guix archive --generate-key
Jede Erstellungsmaschine muss den Schlüssel der Hauptmaschine autorisieren, damit diese Store-Objekte von der Hauptmaschine empfangen kann:
# guix archive --authorize < öffentlicher-schlüssel-hauptmaschine.txt
Andersherum muss auch die Hauptmaschine den jeweiligen Schlüssel jeder Erstellungsmaschine autorisieren.
Der ganze Umstand mit den Schlüsseln soll ausdrücken, dass sich Haupt- und Erstellungsmaschinen paarweise gegenseitig vertrauen. Konkret kann der Erstellungs-Daemon auf der Hauptmaschine die Unverfälschtheit von den Erstellungsmaschinen empfangener Dateien gewährleisten (und umgekehrt), und auch dass sie nicht sabotiert wurden und mit einem autorisierten Schlüssel signiert wurden.
Um zu testen, ob Ihr System funktioniert, führen Sie diesen Befehl auf der Hauptmaschine aus:
# guix offload test
Dadurch wird versucht, zu jeder Erstellungsmaschine eine Verbindung herzustellen, die in /etc/guix/machines.scm angegeben wurde, sichergestellt, dass auf jeder Guix nutzbar ist, und jeweils versucht, etwas auf die Erstellungsmaschine zu exportieren und von dort zu importieren. Dabei auftretende Fehler werden gemeldet.
Wenn Sie stattdessen eine andere Maschinendatei verwenden möchten, geben Sie diese einfach auf der Befehlszeile an:
# guix offload test maschinen-qualif.scm
Letztendlich können Sie hiermit nur die Teilmenge der Maschinen testen, deren Name zu einem regulären Ausdruck passt:
# guix offload test maschinen.scm '\.gnu\.org$'
Um die momentane Auslastung aller Erstellungsrechner anzuzeigen, führen Sie diesen Befehl auf dem Hauptknoten aus:
# guix offload status
Nächste: SELinux-Unterstützung, Vorige: Einrichten der Erstellungsumgebung, Nach oben: Den Daemon einrichten [Inhalt][Index]