Suivant: Support de SELinux, Précédent: Réglages de l’environnement de construction, Monter: Paramétrer le démon [Table des matières][Index]
Si vous le souhaitez, le démon de construction peut décharger des
constructions de dérivation sur d’autres machines Guix avec le crochet
de construction offload
8. 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. Une même
machine peut avoir plusieurs types de systèmes, soit parce que son
architecture le supporte nativement, soit par émulation
(voir Émulation transparente avec QEMU), soit
les deux. 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 dispsitif de déchargement est dotée d’un scheduler de base qui
tente de sélectionner la meilleure machine. La meilleure machine est
choisie parmi les machines disponibles sur la base de critères tels que :
parallel-builds
de son objet build-machine
.
speed
de son
objet build-machine
.
overload-threshold
de son
objet build-machine
.
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.)) ;incroyablement rapide !
(build-machine
(name "armeight.example.org")
(systems (list "aarch64-linux"))
(host-key "ssh-rsa AAAAB3Nza…")
(user "alice")
;; Rappelez-vous que « guix offload » est démarré par
;; « guix-daemon » en root.
(private-key "/root/.ssh/identité-pour-guix")))
Dans l’exemple ci-dessus nous spécifions une liste de deux machines de
construction, une pour l’architecture x86_64
et i686
et une
pour l’architecture aarch64
.
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.
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.
systèmes
Le type de système de la machine distante, p. ex., (list
"x86_64-linux" "i686-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.
overload-threshold
(par défaut : 0.8
)Le seuil de charge au-dessus duquel une machine de déchargement potentielle
est ignorée par le programme de déchargement. Cette valeur se traduit
approximativement par l’utilisation totale du processeur de la machine de
construction, allant de 0,0 (0%) à 1,0 (100%). Elle peut également être
désactivée en réglant overload-threshold
sur #f
.
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 Guix est disponible 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
Suivant: Support de SELinux, Précédent: Réglages de l’environnement de construction, Monter: Paramétrer le démon [Table des matières][Index]