WSL supporte désormais Systemd

Par:
fredericmazue

ven, 23/09/2022 - 15:08

Le sous-système Windows pour Linux (WSL) peut désormais exécuter systemd à l'intérieur de vos distributions Linux WSL. Ce changement signifie que WSL sera encore plus similaire à l'utilisation de vos distributions Linux préférées sur une machine bare metal et vous permettra d'utiliser des logiciels qui dépendent de la prise en charge de systemd.

Pour mémoire, Systemd fournit un gestionnaire de système et de service qui s'exécute en tant que PID 1 et démarre le reste du système. Il vient en remplacement de l'ancien system SysV init. Après avoir été très controversé, il a été adopté par la grande majorité des distributions Linux.

Ce support de Systemd a impliqué de gros changements dans l'architecture de WSL. En effet,  comme systemd nécessite le PID 1 (tout comme l'ancien processus init qu'il remplace), le processus d'initialisation WSL démarré dans la distribution Linux devient un processus enfant de systemd. Étant donné que le processus d'initialisation WSL est chargé de fournir l'infrastructure de communication entre les composants Linux et Windows, la modification de cette hiérarchie a nécessité de repenser certaines des hypothèses formulées avec le processus d'initialisation WSL, souligne Microsoft. Des modifications supplémentaires ont dû être apportées pour garantir un arrêt propre (car cet arrêt est désormais contrôlé par systemd) et pour assurer la compatibilité avec WSLg. Il est également important de noter qu'avec ces modifications, les services systemd ne maintiendront PAS votre instance WSL en vie

Pour utiliser systemd dans vos Linux WSL, vous devez tout d'abord vous assurer que votre système WSL est de version 0.67.6 ou supérieure. Vous devez ensuite modifier le fichier wsl.conf pour vous assurer que systemd est lancé au démarrage :

[boot]
systemd=true

et bien sûr vous devez redémarrer votre Linux sous WSL. Vous pouvez enfin vérifier que votre Linux a bien démarré sous systemd en tapant cette commande :

wsl.exe --shutdownsystemctl list-unit-files --type=service