Merge branch 'guide_systemd' into 'master'

Guide systemd

See merge request nounous/documentation!23
glevy 2025-07-24 17:45:28 +02:00
commit b61a698bbb
1 changed files with 286 additions and 32 deletions

View File

@ -1,57 +1,311 @@
# Systemd # Systemd
Systemd est une suite logiciel pour systèmes GNU/Linux. Cette suite logiciel Systemd est une suite logicielle pour systèmes GNU/Linux.
fournit de nombreuses fonctionnalités, notamment pour configurer son OS et Elle a pour but de standardiser et d'améliorer la gestion
suivre les *daemon*\ s actifs et leurs journaux. 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.
Ce document décrit *certaines* fonctionnalités de Systemd bien choisies, ## Unites de configuration : un format unificateur
lesquelles sont jugées intéressantes pour l'administration système ou pour
utilisateurices. Il sera sans doute découpé en plusieurs morceaux s'il devient
trop long.
## Unités de configuration: un format unifiant. 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. ### Paramètres courants des unités systemd
### Minuteurs. Ci-dessous, on détaille quelques unes des lignes les plus fréquemment
rencontrées dans des fichiers de type `.service`.
### (Auto)mount. `[Unit]`
## Configuration Réseau. `Description=` : Champ texte décrivant lunité.
Saffiche dans les logs et avec systemctl status.
### Obtenir des adresses IPs. `After=` : Spécifie lordre de démarrage.
Lunité sera lancée après celle(s) mentionnée(s),
mais cela ne garantit pas que les dépendances seront satisfaites.
### Configuration DNS (récursif). `Requires=` : Lunité dépend strictement de celle mentionnée.
Si la dépendance échoue à démarrer, celle-ci échoue aussi.
## Journalisation. `Wants=` : Similaire à `Requires=`, mais plus souple :
si la dépendance échoue, cela n'empêche pas le démarrage.
### Lecture des journaux: les bases. `[Service]`
### Espaces de noms. `ExecStart=` : La commande à exécuter pour démarrer le service.
Obligatoire.
### Partage de journaux entre machines. `ExecStop=` : (Optionnel)
Commande à exécuter lors de l'arrêt du service.
## Aspect pratique (pour utilisateurices) `Restart=` : Définit la politique de redémarrage
(`on-failure`, `always`, etc.).
### Chiffrement de disque. `RestartSec=` : Temps à attendre avant de relancer
le service après un échec.
### Chargeur d'amorçage. `User=` : Définit sous quel utilisateur exécuter le service.
## Conteneurisation et virtualisation. `WorkingDirectory=` : Répertoire de travail du processus.
### Conteneurisation. `Environment=` : Définition de variables denvironnement.
### Virtualisation. `[Install]`
## Gestion des secrets. `WantedBy=` : Indique quand ce service doit être activé automatiquement.
Typiquement `multi-user.target` pour les services système.
## Trucs et astuces. `RequiredBy=` : Comme `WantedBy=`, mais avec une dépendance forte.
### Systèmes dynamiques: gestion des erreurs dans les services. Dans la suite de ce document, on illustre l'utilisation de ces paramètres
par des exemples.
### Administration à distance. ### Services
<!-- LocalWords: IPs virtualisation utilisateurices Journalisation daemon Les services sont les démons ou applications qui tournent en arrière-plan.
<!-- LocalWords: Systemd Linux
--> #### Exemple : créer un service simple
-->
```ini
[Unit]
Description=Script de sauvegarde automatique
[Service]
ExecStart=/usr/local/bin/backup.sh
User=backup
[Install]
WantedBy=multi-user.target
```
#### Commandes utiles :
```bash
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
```ini
[Unit]
Description=Timer de sauvegarde
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target
```
```bash
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` :
```ini
[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
```bash
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` :
```ini
[Match]
Name=enp3s0
[Network]
DHCP=yes
```
Activer ensuite le service par
```bash
sudo systemctl enable --now systemd-networkd
```
### Configuration DNS (récursif)
Systemd peut agir comme résolveur local avec `systemd-resolved`.
Pour activer :
```bash
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
```bash
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 :
```bash
journalctl --user
```
### Partage de journaux entre machines
Via `systemd-journal-remote`, il est possible de centraliser les
journaux sur une autre machine.
Installation :
```bash
sudo apt install systemd-journal-remote
```
Activation :
```bash
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`.
```bash
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) :
```bash
bootctl install
```
Dans le fichier de config `/boot/loader/loader.conf`, ajouter la ligne
```ini
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`.
```bash
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
```bash
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 :
```ini
[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.
```ini
[Service]
Restart=on-failure
RestartSec=5s
```
### Administration à distance
Systemd prend en charge `systemd-ssh` ou l'utilisation de
`systemctl` à distance via `ssh`.
```bash
systemctl --host user@machine status nginx
```
Cela fonctionne à condition d'avoir un accès SSH à la machine distante.