Présentation de systemd-nspawn
systemd-nspawn est une technologie de conteneurisation basée sur les namespaces Linux. Contrairement à Docker, il ne possède pas de gestionnaire d’images intégré et travaille généralement avec un système de fichiers racine (rootfs) modifiable, ce qui le rapproche davantage d’une machine virtuelle légère. Le conteneur est lancé à partir d’un répertoire /var/lib/machines/[hostname], où hostname correspond au nom choisi pour le conteneur.
Cette approche « chroot on steroids » permet d’isoler des processus tout en conservant un accès direct aux ressources matérielles, comme les GPU, ce qui explique son adoption pour l’exécution d’LLM sous Ollama sur des VPS dépourvus de virtualisation imbriquée.
Création d’une rootfs Debian avec debootstrap
Pour les distributions basées sur Debian, l’article recommande debootstrap. Après installation via
sudo apt install debootstrap, la commande suivante crée un rootfs bookworm dans sudo debootstrap --include=systemd,dbus,locales,bash-completion,curl bookworm /var/lib/machines/debian. Les paquets inclus (systemd, dbus, locales, bash‑completion, curl) assurent le bon fonctionnement du conteneur et évitent les avertissements d’apt liés aux locales.Le processus signale que l’architecture cible est exécutable et que le système de base est installé avec succès, ce qui confirme la compatibilité de debootstrap avec les environnements de conteneurisation systemd‑nspawn.
Gestion d’images Fedora et Alpine
Pour Fedora, l’auteur utilise dnf et rpm. Après installation (
sudo apt install dnf rpm) et initialisation de la base rpm (sudo mkdir -p /var/lib/rpm && sudo rpm --initdb), la création d’un répertoire /var/lib/machines/fedora suivi d’une configuration dnf permet d’installer 137 paquets, dont systemd, glibc et util‑linux, pour un téléchargement total de 62 Mo et une taille installée de 206 Mo.Concernant Alpine, le script original alpine-chroot-install montrait des comportements dangereux (montage automatique de /dev, /proc, /sys et liaison du répertoire courant). L’auteur a donc forké le script sous le nom alpine-nspawn-install, supprimant les montages non souhaités et limitant l’installation aux paquets essentiels. L’exécution se fait via
wget https://raw.githubusercontent.com/quantum5/alpine-nspawn-install/refs/heads/master/alpine-nspawn-install
sudo bash alpine-nspawn-install -d /var/lib/machines/alpine, aboutissant à une installation Alpine sécurisée.Utilisation pratique et limites
Une fois la rootfs prête, le conteneur démarre avec
sudo systemd-nspawn -D /var/lib/machines/debian ou l’équivalent Fedora/Alpine. L’accès direct aux fichiers hôte évite le recours à virtiofs, et l’absence de couche d’hyperviseur réduit la surcharge CPU/mémoire. Cependant, l’absence d’un gestionnaire d’images signifie que chaque mise à jour du système de fichiers doit être effectuée manuellement, ce qui peut compliquer la reproductibilité des environnements.En résumé, systemd-nspawn offre une alternative légère à Docker pour les scénarios où la virtualisation imbriquée est impossible, où l’accès matériel direct est requis, ou où la simplicité d’un rootfs modifiable prime sur la portabilité d’images pré‑construites.