Suivant: Mettre en place des nœuds de calcul, Monter: Installer Guix sur une grappe de calcul [Table des matières][Index]
L’approche recommandée est d’installer un nœud principal qui
exécuterait guix-daemon
et exporterait /gnu/store sur NFS
vers les nœuds de calcul.
Rappelez-vous que guix-daemon
est responsable du démarrage des
constructions et des téléchargements pour ses clients (voir Invoquer
guix-daemon dans le manuel de référence de GNU Guix), et plus
généralement de l’accès à /gnu/store qui contient tous les binaires
des paquets construits par tous les utilisateur·ices (voir Le dépôt dans le manuel de référence de GNU Guix). Les « clients » signifient
toutes les commandes Guix que voient les utilisateurs et utilisatrices,
comme guix install
. Sur une grappe, ces commandes peuvent être
lancées sur les nœuds de calcul et l’on souhaiterait qu’elles parlent au
guix-daemon
du nœud principal.
Pour commencer, le nœud principal peut être installé suivant les instructions d’installation binaires habituelles (voir Installation binaire dans le manuel de référence de GNU Guix). Grâce au script d’installation, cela devrait être rapide. Une fois l’installation terminée, nous devons faire quelques ajustements.
Comme nous voulons que guix-daemon
soit joignable non seulement
depuis le nœud principal, mais aussi depuis les nœuds de calcul, nous devons
nous arranger pour qu’il se mette en écoute de connexions sur TCP/IP. Pour
ce faire, nous allons modifier le fichier de démarrage systemd de
guix-daemon
, /etc/systemd/system/guix-daemon.service, et
ajouter un argument --listen
à la ligne ExecStart
ur qu’elle
ressemble à quelque chose comme :
ExecStart=/var/guix/profiles/per-user/root/current-guix/bin/guix-daemon --build-users-group=guixbuild --listen=/var/guix/daemon-socket/socket --listen=0.0.0.0
Pour que ces changements fassent effet, le service doit être redémarré :
systemctl daemon-reload systemctl restart guix-daemon
Remarque :
--listen=0.0.0.0
indique queguix-daemon
traitera toutes les connexions TCP entrantes sur le port 44146 (voir Invoquer guix-daemon dans le manuel de référence de GNU Guix). C’est généralement acceptable sur une grappe dont le nœud principal est exclusivement accessible à partir du réseau local de la grappe. Vous ne voulez pas l’exposer sur Internet !
L’étape suivante consiste à définir nos exports NFS dans /etc/exports en ajoutant quelque chose comme :
/gnu/store *(ro) /var/guix *(rw, async) /var/log/guix *(ro)
Le répertoire /gnu/store peut être exporté en lecture-seule car seul
le guix-daemon
du nœud principal le modifiera
jamais. /var/guix contient les profils utilisateurs gérés par
guix package
. Ainsi, pour permettre à tout le monde d’installer des
paquets avec guix package
, il doit être en lecture-écriture.
Les utilisateurs et utilisatrices peuvent créer autant de profils qu’ils et
elles le souhaitent en plus du profil par défaut,
~/.guix-profile. Par exemple, guix package -p ~/dev/python-dev
-i python
installe Python dans un profil accessible depuis le lien
symbolique ~/dev/python-dev
. Pour vous assurer que ce profil est
protégé contre le ramasse-miettes, c.-à-d. que Python ne sera pas supprimé
de /gnu/store alors que le profil existe, les répertoires
personnels devraient également être montés sur le nœud principal pour que
guix-daemon
connaisse ces profils non standards et évite de supprimer
les logiciels auxquels ils se réfèrent.
Vous devriez régulièrement supprimer les paquets inutilisés de
/gnu/store en exécutant guix gc
(voir Invoquer guix gc dans le manuel de référence de GNU Guix). Vous pouvez le faire en
ajoutant une entrée à la crontab du nœud principal :
root@master# crontab -e
… avec quelque chose comme cela :
# Tous les jours à 5h, lancer le ramasse-miettes pour s'assurer # d'avoir au moins 10 Gio libres sur /gnu/store. 0 5 * * 1 /usr/local/bin/guix gc -F10G
Nous en avons terminé avec le nœud principal ! Voyons maintenant les nœuds de calcul.