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 le classique fichier Unit, mais on verra ça en seconde partie.

Quel système linux 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 à part entière qui servira à 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 fini, 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). En 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 chroot, ce qui aura pour effet de rendre obligatoire l'option --nogpgcheck dans les commandes yum lancées depuis l'extérieur du chroot, comme :

# 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 supplémentaires :

[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 de le manipuler ou bien de l'activer (systemctl enable).