Le nouveau systemd

Le remplacement de l’ancestrale sysVinit pour la gestion du démarrage de la machine et de ses services est en soit une petite révolution dans le monde Linux. On lui reprochait de ne pas être assez modulaire et dynamique pour les usages qu’on fait maintenant de nos ordinateurs. Maintenant, il faut une gestion qui se base sur de l’évènementiel plutôt que sur du séquentiel, tout en gérant de l’interdépendance. C’est vrai qu’avec SystemVinit qui date des années 90, on en était loin. Il y eu plusieurs candidats (par exemple Upstart) car le sujet n’est pas nouveau et la tâche n’est pas des plus simple. Mais depuis la Fedora 14, la révolution est en marche et le choix s’est arrêté sur systemd. Celui-ci sera pleinement intégré à la future Fedora 15.

Systemd vient avec la commande systemctl, mais pour éviter d’impacter de manière trop violente nos bonnes vieilles habitudes, les commandes habituelles de gestion de service continueront de fonctionner comme avant. Ainsi, les commandes service et chkconfig peuvent toujours être utilisées sous systemd. Il est de plus compatible avec SysV et les scripts d’init LSB. Ainsi les scripts d’init habituels en shell vont pouvoir cohabiter (ceux dans /etc/init.d) avec systemd, les autres sont remplacés dans systemd par des fichiers descriptifs .service (présents dans /lib/systemd/system).

Voici par exemple, le fichier descriptif ntpd.service, tout à fait compréhensible (heureusement qu’ils ont pas choisi du XML):

[Unit]
Description=Network Time Service
After=syslog.target ntpdate.service

[Service]
EnvironmentFile=/etc/sysconfig/ntpd
ExecStart=/usr/sbin/ntpd -n -u ntp:ntp $OPTIONS

[Install]
WantedBy=multi-user.target

Les gros avantages de systemd sont sa capacité de parallélisation à outrance, la gestion des sockets (port d’écoute) et l’utilisation de DBus pour l’activation des services, ainsi que l’usage des cgroups. Il supporte aussi des options avancées pour la sécurisation des services avec la possibilité d’isolation des processus (chroot ou namespace sur le système de fichiers).

Systemd est découpé en unités (units), disposant chacune d’un nom et d’un type. Par exemple le fichier avahi.service est l’unité avahi et est de type service. Voici les principaux types:

  • service, pour gérer les démons.
  • socket, pour définir un socket. Par exemple l’unité nscd.socket si elle reçoit une demande de connexion pourra lancer l’unité nscd.service.
  • device, udev permettra d’indiquer à systemd qu’un périphérique peut être utilisé comme unité.
  • mount, cette unité permet à systemd de surveiller un point de montage.
  • automount, est associé à une unité mount qui sera activée quand on accédera au répertoire de l’unité automount.
  • target, permet de grouper plusieurs unités. Par exemple multi-user.target correspondera à peu près au demarrage des services du runlevel 5 avec SysV.
  • snapshot, permet de grouper l’état actuel des unités actives, afin de sauvegarder l’état du système pour pouvoir ensuite y revenir.

Il est donc évident que tout ceci est une nouvelle approche dans la gestion du système. Bien sûr les unités peuvent être interdépendantes ou indiquer d’éventuels conflits. Vu les différents types à disposition cela va permettre beaucoup de souplesse. Il sera par exemple possible de déclencher le montage d’un périphérique dès que celui-ci devient disponible, montage qui entrainera lui aussi d’autres dépendances, comme le démarrage d’un service… Que du bon en perspective.

Pour l’utilisateur final, l’objectif est de proposer un temps de boot bien plus rapide, dû principalement au fait que les services seront lancés en parallèle mais aussi qu’ils seront activés que s’ils sont nécessaires. D’autres tâches de gestion du système pourront être automatisées, déclenchées par exemple avec l’apparition ou la disparition d’un périphérique. De quoi disposer d’un système complètement dynamique.

Il ne reste plus qu’à attendre la sortie de la Fedora 15, prévue pour le 24 mai 2011.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *