documentation/outils/logiciels/systemd.md

5.4 KiB

Systemd

Systemd est une suite logicielle pour systèmes GNU/Linux. Elle a pour but de standardiser et d'améliorer la gestion du démarrage, des services, des journaux, du réseau, de la virtualisation et plus encore. Ce document introduit certaines fonctionnalités essentielles de Systemd.

Unites de configuration : un format unificateur

Systemd gère différents composants du système à travers des "unités". Chaque unité est un fichier de configuration situé dans /etc/systemd/system/ ou /lib/systemd/system/, avec l'extension .service, .timer, .mount, etc.

Services

Les services sont les démons ou applications qui tournent en arrière-plan.

Exemple : créer un service simple

[Unit]
Description=Script de sauvegarde automatique

[Service]
ExecStart=/usr/local/bin/backup.sh
User=backup

[Install]
WantedBy=multi-user.target

Commandes utiles :

sudo systemctl start nom_du_service     # Démarrage immédiat
sudo systemctl enable nom_du_service    # Activation au démarrage
sudo systemctl status nom_du_service    # Statut
sudo journalctl -u nom_du_service       # Voir les logs

Minuteurs (timers)

Les timers remplacent cron pour la planification de tâches. Ils utilisent une unité .timer couplée à un .service.

Exemple : lancer backup.service tous les jours à minuit

[Unit]
Description=Timer de sauvegarde

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target
sudo systemctl enable backup.timer
sudo systemctl start backup.timer

(Auto)mount

Systemd gère aussi les points de montage statiques ou dynamiques avec les unités .mount et .automount.

Exemple : monter un disque automatiquement

Fichier /etc/systemd/system/data.mount :

[Unit]
Description=Montage du disque data

[Mount]
What=/dev/sdb1
Where=/mnt/data
Type=ext4

[Install]
WantedBy=multi-user.target

Il faut ensuite l'activer avec

sudo systemctl enable --now data.mount

Configuration réseau

Systemd intègre une configuration réseau via systemd-networkd et systemd-resolved. Ces composants permettent une configuration déclarative et centralisée.

Obtenir des adresses IPs

Créez un fichier /etc/systemd/network/20-wired.network :

[Match]
Name=enp3s0

[Network]
DHCP=yes

Activer ensuite le service par

sudo systemctl enable --now systemd-networkd

Configuration DNS (récursif)

Systemd peut agir comme résolveur local avec systemd-resolved.

Pour activer :

sudo systemctl enable --now systemd-resolved
sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

Journalisation (logging)

Systemd fournit journald pour centraliser les logs de tous les services.

Lecture des journaux : les bases

journalctl                       # Tout le journal
journalctl -u ssh               # Pour un service
journalctl -b                   # Depuis le dernier boot
journalctl --since "2 hours ago"

Espaces de noms (namespaces)

Les journaux peuvent être isolés par service, utilisateur ou conteneur. Pour un utilisateur :

journalctl --user

Partage de journaux entre machines

Via systemd-journal-remote, il est possible de centraliser les journaux sur une autre machine.

Installation :

sudo apt install systemd-journal-remote

Activation :

sudo systemctl enable --now systemd-journal-remote

Aspects pratiques (pour utilisateur·ices)

Chiffrement de disque

Systemd supporte systemd-cryptsetup pour gérer les volumes chiffrés au démarrage. Intégration possible avec crypttab.

echo 'cryptdata UUID=xxx none luks' | sudo tee -a /etc/crypttab

Ajouter ensuite une unité .mount pour /mnt/data comme vu plus haut.

Chargeur d'amorçage (bootloader)

Systemd intègre un bootloader : systemd-boot, simple et rapide, surtout utile avec EFI.

Pour l'installer, lancer la commande (sur les systèmes EFI uniquement) :

bootctl install

Dans le fichier de config /boot/loader/loader.conf, ajouter la ligne

default $arch

$arch pointe vers le fichier boot/loader/entries/$arch.conf (remplacer arch par debian ou nixos dans les cas courants).

Conteneurisation et virtualisation

Conteneurisation

systemd-nspawn permet de lancer des conteneurs légers, similaires à chroot ou Docker.

sudo debootstrap stable /var/lib/machines/deb
sudo systemd-nspawn -D /var/lib/machines/deb

Virtualisation

Systemd peut être utilisé avec des outils comme QEMU ou libvirt, mais fournit aussi des commandes comme :

machinectl start nom_machine

Gestion des secrets

Systemd 248+ permet de gérer des secrets via LoadCredential= et SetCredential= dans les unités, pour ne pas stocker de secrets en clair dans les fichiers .service.

Exemple :

[Service]
LoadCredential=token:/etc/secret/token
Environment=API_TOKEN=%d/token

Trucs et astuces

Systèmes dynamiques : gestion des erreurs dans les services

Ajouter Restart=on-failure dans une unité .service permet de redémarrer automatiquement en cas de plantage.

[Service]
Restart=on-failure
RestartSec=5s

Administration à distance

Systemd prend en charge systemd-ssh ou l'utilisation de systemctl à distance via ssh :

systemctl --host user@machine status nginx

Cela fonctionne à condition d'avoir un accès SSH à la machine distante.