Chrooter avec systemd
Ces temps-ci, je n'arrète pas d'installer et de faire fonctionner des programmes dans des chroots, que ce soit des services ou de simples logiciels de développement. Sauf que voilà, la commande chroot est devenue obsolète, et puis systemd refuse catégoriquement de coopérer si l'on a chrooté son shell avec cette commande. D'autre part, lancer un service dans un chroot au démarrage de la machine est rendu possible avec un fichier d'unité systemd, mais on verra ça en seconde partie.
Quel système GNU/Linux peut-on choisir pour son chroot ? De préférence un système incorporant systemd, le reste n'a pas d'importance. Je choisis donc Fedora 18. Si ce chroot a pour vocation de faire tourner un service, je recommande vivement de l'installer sur un Volume Logique (LVM) à part entière. Il pourra servir à stocker la multitude de chroots qui seront créés ultérieurement. Les paquets requis pour l'installation minimale de Fedora sont listés dans le groupe Core.
# yum install --nogpgcheck --releasever=18 --installroot=/contener/fedora-18-x86_64/ @core
Une fois que yum a terminé son exécution, ce n'est pas la peine de commencer à monter /proc
et /sys
en bind dans l'arborescence du chroot. Oui ce temps et révolu ! Et c'est systemd qui virtualise complètement l'arborescence vitale tel que /sys
et /proc
ainsi que /dev
(seuls les fichiers hors-périphérique matériel seront présent dans /dev
). Dans la réalité, il le fera juste au moment de l'invocation de la commande pour chrooter son shell :
# systemd-nspawn -D /contener/fedora-18-x86_64/
À partir de là, vous pouvez faire tout ce que vous voulez jusqu'à la destruction totale et irréversible du système. On s'en fiche on peut en refaire un autre :-D Bon, ça c'est surtout pour les nouveaux, les habitués en revanche installeront un programme dont les dépendances ne sont pas compatibles avec notre système principal (Fedora 19).
Point important : Tant que vous n'aurez pas manipulé yum dans le chroot (install/remove/update), la clé GPG du dépôt fedora ne sera pas importée dans la base RPM du système installé dans le chroot, ce qui aura pour effet de rendre obligatoire l'option --nogpgcheck
dans les commandes yum lancées depuis l'extérieur du chroot. Par example :
# yum update --nogpgcheck --releasever=18 --installroot=/contener/fedora-18-x86_64/
Enfin, pour administrer depuis notre système principal un service systemd préalablement installé dans notre chroot, il suffit de créer dans /etc/systemd/system/
un fichier Unit contenant deux options à ajouter :
[Service]
RootDirectory=/contener/fedora-18-x86_64/
RootDirectoryStartOnly=yes
Le reste de la configuration du fichier est sur la base de n'importe quel service systemd. À noter que si le service installé dans le chroot fournit lui aussi un fichier Unit, celà ne servira strictement à rien de le modifier ou bien de l'activer (systemctl enable
) car il n'est pas utilisé.