Guide de systemd

merge-requests/23/head
glevy 2025-07-24 09:40:12 +02:00
parent 3db62aef25
commit 7b17025ee0
1 changed files with 213 additions and 32 deletions

View File

@ -1,57 +1,238 @@
# 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. 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.
fournit de nombreuses fonctionnalités, notamment pour configurer son OS et
suivre les *daemon*\ s actifs et leurs journaux.
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. ### Services
### Minuteurs. Les services sont les démons ou applications qui tournent en arrière-plan.
### (Auto)mount. #### Exemple : créer un service simple
## Configuration Réseau. ```ini
[Unit]
Description=Script de sauvegarde automatique
### Obtenir des adresses IPs. [Service]
ExecStart=/usr/local/bin/backup.sh
User=backup
### Configuration DNS (récursif). [Install]
WantedBy=multi-user.target
```
## Journalisation. #### Commandes utiles :
### Lecture des journaux: les bases. ```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
```
### Espaces de noms. ### Minuteurs (timers)
### Partage de journaux entre machines. Les timers remplacent `cron` pour la planification de tâches. Ils utilisent une unité `.timer` couplée à un `.service`.
## Aspect pratique (pour utilisateurices) #### Exemple : lancer `backup.service` tous les jours à minuit
### Chiffrement de disque. ```ini
[Unit]
Description=Timer de sauvegarde
### Chargeur d'amorçage. [Timer]
OnCalendar=daily
Persistent=true
## Conteneurisation et virtualisation. [Install]
WantedBy=timers.target
```
### Conteneurisation. ```bash
sudo systemctl enable backup.timer
sudo systemctl start backup.timer
```
### Virtualisation. ### (Auto)mount
## Gestion des secrets. Systemd gère aussi les points de montage statiques ou dynamiques avec les unités `.mount` et `.automount`.
## Trucs et astuces. #### Exemple : monter un disque automatiquement
### Systèmes dynamiques: gestion des erreurs dans les services. Fichier `/etc/systemd/system/data.mount` :
### Administration à distance. ```ini
[Unit]
Description=Montage du disque data
<!-- LocalWords: IPs virtualisation utilisateurices Journalisation daemon [Mount]
<!-- LocalWords: Systemd Linux 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.