Suivant: , Précédent: , Monter: Paramétrer le démon   [Table des matières][Index]


2.4.2 Utiliser le dispositif de déchargement

Si vous le souhaitez, le démon de construction peut décharger des constructions de dérivations sur d’autres machines Guix avec le crochet de construction offload7. Lorsque cette fonctionnalité est activée, Guix lit une liste de machines de constructions spécifiée par l’utilisateur·rice dans /etc/guix/machines.scm ; à chaque fois qu’une construction est demandée, par exemple par guix build, le démon essaie de la décharger sur une des machines qui satisfont les contraintes de la dérivation, en particulier le type de système, p. ex. x86_64-linux. Les prérequis manquants pour la construction sont copiés par SSH sur la machine de construction qui procède ensuite à la construction ; si elle réussit, les sorties de la construction sont copiés vers la machine de départ.

Le fichier /etc/guix/machines.scm ressemble typiquement à cela :

(list (build-machine
        (name "eightysix.example.org")
        (system "x86_64-linux")
        (host-key "ssh-ed25519 AAAAC3Nza…")
        (user "bob")
        (speed 2.))     ;très rapide !

      (build-machine
        (name "meeps.example.org")
        (system "mips64el-linux")
        (host-key "ssh-rsa AAAAB3Nza…")
        (user "alice")
        (private-key
         (string-append (getenv "HOME")
                        "/.ssh/identity-for-guix"))))

Dans l’exemple ci-dessus nous spécifions une liste de deux machines de construction, une pour l’architecture x86_64 et une pour l’architecture mips64el.

En fait, ce fichier est — et ça ne devrait pas vous surprendre ! — un fichier Scheme qui est évalué au démarrage du crochet offload. Sa valeur de retour doit être une liste d’objets build-machine. Même si cet exemple montre une liste fixée de machines de construction, on pourrait imaginer par exemple utiliser DNS-SD pour renvoyer une liste de machines de constructions potentielles découvertes sur le réseau local (voir Guile-Avahi dans Using Avahi in Guile Scheme Programs). Le type de données build-machine est détaillé plus bas.

Type de données : build-machine

Ce type de données représente les machines de construction sur lesquelles le démon peut décharger des constructions. Les champs importants sont :

name

Le nom d’hôte de la machine distante.

system

Le type de système de la machine distante, p. ex. "x86_64-linux".

user

Le compte à utiliser lors de la connexion à la machine distante par SSH. Remarquez que la paire de clef SSH ne doit pas être protégée par mot de passe pour permettre des connexions non-interactives.

host-key

Cela doit être la clef d’hôte SSH publique de la machine au format OpenSSH. Elle est utilisée pour authentifier la machine lors de la connexion. C’est une longue chaîne qui ressemble à cela :

ssh-ed25519 AAAAC3NzaC…mde+UhL hint@example.org

Si la machine utilise le démon OpenSSH, sshd, la clef d’hôte se trouve dans un fichier comme /etc/ssh/ssh_host_ed25519_key.pub.

Si la machine utilise le démon SSH de GNU lsh, la clef d’hôte est dans /etc/lsh/host-key.pub ou un fichier similaire. Elle peut être convertie au format OpenSSH avec lsh-export-key (voir Converting keys dans LSH Manual) :

$ lsh-export-key --openssh < /etc/lsh/host-key.pub
ssh-rsa AAAAB3NzaC1yc2EAAAAEOp8FoQAAAQEAs1eB46LV…

Il y a un certain nombre de champs facultatifs que vous pouvez remplir :

port (par défaut : 22)

Numéro de port du serveur SSH sur la machine.

private-key (par défaut : ~root/.ssh/id_rsa)

Le fichier de clef privée SSH à utiliser lors de la connexion à la machine, au format OpenSSH. Cette clef ne doit pas être protégée par phrase de passe.

Remarquez que la valeur par défaut est la clef privée du compte root. Assurez-vous qu’elle existe si vous utilisez la valeur par défaut.

compression (par défaut : "zlib@openssh.com,zlib")
compression-level (par défaut : 3)

Les méthodes de compression au niveau SSH et le niveau de compression demandé.

Remarquez que le déchargement utilise la compression SSH pour réduire la bande passante utilisée lors du transfert vers et depuis les machines de construction.

daemon-socket (par défaut : "/var/guix/daemon-socket/socket")

Le nom de fichier du socket Unix-domain sur lequel guix-daemon écoute sur cette machine.

parallel-builds (par défaut : 1)

Le nombre de constructions qui peuvent tourner simultanément sur la machine.

speed (par défaut : 1.0)

Un « facteur de vitesse relatif ». L’ordonnanceur des constructions tendra à préférer les machines avec un plus grand facteur de vitesse.

features (par défaut : '())

Une liste de chaînes qui contient les fonctionnalités spécifiques supportées par la machine. Un exemple est "kvm" pour les machines qui ont le module Linux KVM et le support matériel correspondant. Les dérivations peuvent demander des fonctionnalités par leur nom et seront orchestrées sur les machines de construction correspondantes.

La commande guix doit être dans le chemin de recherche des machines de construction. Vous pouvez vérifier si c’est le cas en lançant :

ssh build-machine guix repl --version

Il reste une dernière chose à faire maintenant que machines.scm est en place. Comme expliqué ci-dessus, lors du déchargement les fichiers sont transférés entre les dépôts des machines. Pour que cela fonctionne, vous devez d’abord générer une paire de clef sur chaque machine pour permettre au démon d’exporter des archives signées des fichiers de son dépôt (voir Invoquer guix archive) :

# guix archive --generate-key

Chaque machine de construction doit autoriser la clef de la machine maîtresse pour qu’ils acceptent les éléments de dépôt de celle-ci :

# guix archive --authorize < master-public-key.txt

De même, la machine maîtresse doit autoriser les clefs de chaque machine de construction.

Toute cette histoire de clefs permet d’exprimer la confiance mutuelle deux-à-deux entre le maître et les machines de construction. Concrètement, lorsque le maître reçoit des fichiers d’une machine de construction (et vice-versa), son démon de construction s’assure qu’ils sont authentiques, n’ont pas été modifiés par un tiers et qu’il sont signés par un clef autorisée.

Pour tester que votre paramétrage fonctionne, lancez cette commande sur le nœud maître :

# guix offload test

Cela essaiera de se connecter à toutes les machines de construction spécifiées dans /etc/guix/machines.scm, s’assurera que Guile et les modules Guix sont disponibles sur toutes les machines et tentera d’exporter vers la machine et d’importer depuis elle, et rapportera toute erreur survenu pendant le processus.

Si vous souhaitez tester un fichier de machines différent, spécifiez-le sur la ligne de commande :

# guix offload test machines-qualif.scm

Enfin, vous pouvez tester un sous-ensemble de machines dont le nom correspond à une expression rationnelle comme ceci :

# guix offload test machines.scm '\.gnu\.org$'

Pour afficher la charge actuelle de tous les hôtes de construction, lancez cette commande sur le nœud principal :

# guix offload status

Notes de bas de page

(7)

Cette fonctionnalité n’est disponible que si Guile-SSH est présent.


Suivant: , Précédent: , Monter: Paramétrer le démon   [Table des matières][Index]