Suivant: , Monter: Installer Guix sur une grappe de calcul   [Table des matières][Index]


9.1 Mettre en place un nœud principal

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 que guix-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.


Suivant: Mettre en place des nœuds de calcul, Monter: Installer Guix sur une grappe de calcul   [Table des matières][Index]