Guide de systemd
parent
3db62aef25
commit
7b17025ee0
|
@ -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
|
||||||
|
```
|
||||||
|
|
||||||
|
où `$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.
|
Loading…
Reference in New Issue