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


2.4.2 Nutzung der Auslagerungsfunktionalität

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:

  1. Ob Zeitfenster für Erstellungen frei sind („build slots“). Eine Erstellungsmaschine kann so viele Erstellungszeitfenster (Verbindungen) unterhalten wie es dem Wert des parallel-builds-Feldes des build-machine-Objekts entspricht.
  2. Was ihre relative Geschwindigkeit ist, gemäß ihrer Definition im speed-Feld ihres build-machine-Objekts.
  3. Ihrer Auslastung („load“). Die normalisierte Auslastung der Maschine darf einen Schwellwert nicht überschreiten. Dieser ist über das overload-threshold-Feld ihres build-machine-Objekts einstellbar.
  4. Verfügbarem Speicherplatz auf ihrem Datenträger. Es müssen mehr als 100 MiB verfügbar sein.

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.

Datentyp: build-machine

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

Fußnoten

(8)

Diese Funktionalität ist nur verfügbar, wenn Guile-SSH vorhanden ist.


Nächste: SELinux-Unterstützung, Vorige: Einrichten der Erstellungsumgebung, Nach oben: Den Daemon einrichten   [Inhalt][Index]