Détails des commandes + linting
parent
7b17025ee0
commit
6512a66830
|
@ -1,10 +1,67 @@
|
||||||
# Systemd
|
# 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.
|
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
|
## 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.
|
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.
|
||||||
|
|
||||||
|
### Paramètres courants des unités systemd
|
||||||
|
|
||||||
|
Ci-dessous, on détaille quelques unes des lignes les plus fréquemment
|
||||||
|
rencontrées dans des fichiers de type `.service`.
|
||||||
|
|
||||||
|
`[Unit]`
|
||||||
|
|
||||||
|
`Description=` : Champ texte décrivant l’unité. S’affiche dans les logs et avec systemctl status.
|
||||||
|
|
||||||
|
`After=` : Spécifie l’ordre de démarrage.
|
||||||
|
L’unité sera lancée après celle(s) mentionnée(s),
|
||||||
|
mais cela ne garantit pas que les dépendances seront satisfaites.
|
||||||
|
|
||||||
|
`Requires=` : L’unité dépend strictement de celle mentionnée.
|
||||||
|
Si la dépendance échoue à démarrer, celle-ci échoue aussi.
|
||||||
|
|
||||||
|
`Wants=` : Similaire à `Requires=`, mais plus souple :
|
||||||
|
si la dépendance échoue, cela n'empêche pas le démarrage.
|
||||||
|
|
||||||
|
`[Service]`
|
||||||
|
|
||||||
|
`ExecStart=` : La commande à exécuter pour démarrer le service.
|
||||||
|
Obligatoire.
|
||||||
|
|
||||||
|
`ExecStop=` : (Optionnel)
|
||||||
|
Commande à exécuter lors de l'arrêt du service.
|
||||||
|
|
||||||
|
`Restart=` : Définit la politique de redémarrage
|
||||||
|
(`on-failure`, `always`, etc.).
|
||||||
|
|
||||||
|
`RestartSec=` : Temps à attendre avant de relancer
|
||||||
|
le service après un échec.
|
||||||
|
|
||||||
|
`User=` : Définit sous quel utilisateur exécuter le service.
|
||||||
|
|
||||||
|
`WorkingDirectory=` : Répertoire de travail du processus.
|
||||||
|
|
||||||
|
`Environment=` : Définition de variables d’environnement.
|
||||||
|
|
||||||
|
`[Install]`
|
||||||
|
|
||||||
|
`WantedBy=` : Indique quand ce service doit être activé automatiquement.
|
||||||
|
Typiquement `multi-user.target` pour les services système.
|
||||||
|
|
||||||
|
`RequiredBy=` : Comme `WantedBy=`, mais avec une dépendance forte.
|
||||||
|
|
||||||
|
Dans la suite de ce document, on illustre l'utilisation de ces paramètres
|
||||||
|
par des exemples.
|
||||||
|
|
||||||
### Services
|
### Services
|
||||||
|
|
||||||
|
@ -35,7 +92,8 @@ sudo journalctl -u nom_du_service # Voir les logs
|
||||||
|
|
||||||
### Minuteurs (timers)
|
### Minuteurs (timers)
|
||||||
|
|
||||||
Les timers remplacent `cron` pour la planification de tâches. Ils utilisent une unité `.timer` couplée à un `.service`.
|
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
|
#### Exemple : lancer `backup.service` tous les jours à minuit
|
||||||
|
|
||||||
|
@ -58,7 +116,8 @@ sudo systemctl start backup.timer
|
||||||
|
|
||||||
### (Auto)mount
|
### (Auto)mount
|
||||||
|
|
||||||
Systemd gère aussi les points de montage statiques ou dynamiques avec les unités `.mount` et `.automount`.
|
Systemd gère aussi les points de montage statiques ou
|
||||||
|
dynamiques avec les unités `.mount` et `.automount`.
|
||||||
|
|
||||||
#### Exemple : monter un disque automatiquement
|
#### Exemple : monter un disque automatiquement
|
||||||
|
|
||||||
|
@ -85,7 +144,9 @@ sudo systemctl enable --now data.mount
|
||||||
|
|
||||||
## Configuration réseau
|
## 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.
|
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
|
### Obtenir des adresses IPs
|
||||||
|
|
||||||
|
@ -131,7 +192,8 @@ journalctl --since "2 hours ago"
|
||||||
|
|
||||||
### Espaces de noms (namespaces)
|
### Espaces de noms (namespaces)
|
||||||
|
|
||||||
Les journaux peuvent être isolés par service, utilisateur ou conteneur. Pour un utilisateur :
|
Les journaux peuvent être isolés par service, utilisateur ou conteneur.
|
||||||
|
Pour un utilisateur :
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
journalctl --user
|
journalctl --user
|
||||||
|
@ -139,7 +201,8 @@ journalctl --user
|
||||||
|
|
||||||
### Partage de journaux entre machines
|
### Partage de journaux entre machines
|
||||||
|
|
||||||
Via `systemd-journal-remote`, il est possible de centraliser les journaux sur une autre machine.
|
Via `systemd-journal-remote`, il est possible de centraliser les
|
||||||
|
journaux sur une autre machine.
|
||||||
|
|
||||||
Installation :
|
Installation :
|
||||||
|
|
||||||
|
@ -157,7 +220,9 @@ sudo systemctl enable --now systemd-journal-remote
|
||||||
|
|
||||||
### Chiffrement de disque
|
### Chiffrement de disque
|
||||||
|
|
||||||
Systemd supporte `systemd-cryptsetup` pour gérer les volumes chiffrés au démarrage. Intégration possible avec `crypttab`.
|
Systemd supporte `systemd-cryptsetup` pour gérer les
|
||||||
|
volumes chiffrés au démarrage.
|
||||||
|
Intégration possible avec `crypttab`.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
echo 'cryptdata UUID=xxx none luks' | sudo tee -a /etc/crypttab
|
echo 'cryptdata UUID=xxx none luks' | sudo tee -a /etc/crypttab
|
||||||
|
@ -167,7 +232,8 @@ Ajouter ensuite une unité `.mount` pour `/mnt/data` comme vu plus haut.
|
||||||
|
|
||||||
### Chargeur d'amorçage (bootloader)
|
### Chargeur d'amorçage (bootloader)
|
||||||
|
|
||||||
Systemd intègre un bootloader : `systemd-boot`, simple et rapide, surtout utile avec EFI.
|
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) :
|
Pour l'installer, lancer la commande (sur les systèmes EFI uniquement) :
|
||||||
|
|
||||||
|
@ -188,7 +254,8 @@ où `$arch` pointe vers le fichier `boot/loader/entries/$arch.conf`
|
||||||
|
|
||||||
### Conteneurisation
|
### Conteneurisation
|
||||||
|
|
||||||
`systemd-nspawn` permet de lancer des conteneurs légers, similaires à `chroot` ou `Docker`.
|
`systemd-nspawn` permet de lancer des conteneurs légers,
|
||||||
|
similaires à `chroot` ou `Docker`.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo debootstrap stable /var/lib/machines/deb
|
sudo debootstrap stable /var/lib/machines/deb
|
||||||
|
@ -197,7 +264,8 @@ sudo systemd-nspawn -D /var/lib/machines/deb
|
||||||
|
|
||||||
### Virtualisation
|
### Virtualisation
|
||||||
|
|
||||||
Systemd peut être utilisé avec des outils comme `QEMU` ou `libvirt`, mais fournit aussi des commandes comme :
|
Systemd peut être utilisé avec des outils comme `QEMU` ou `libvirt`,
|
||||||
|
mais fournit aussi des commandes comme
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
machinectl start nom_machine
|
machinectl start nom_machine
|
||||||
|
@ -205,7 +273,9 @@ machinectl start nom_machine
|
||||||
|
|
||||||
## Gestion des secrets
|
## 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`.
|
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 :
|
Exemple :
|
||||||
|
|
||||||
|
@ -219,7 +289,8 @@ Environment=API_TOKEN=%d/token
|
||||||
|
|
||||||
### Systèmes dynamiques : gestion des erreurs dans les services
|
### 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.
|
Ajouter `Restart=on-failure` dans une unité `.service`
|
||||||
|
permet de redémarrer automatiquement en cas de plantage.
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
[Service]
|
[Service]
|
||||||
|
@ -229,7 +300,8 @@ RestartSec=5s
|
||||||
|
|
||||||
### Administration à distance
|
### Administration à distance
|
||||||
|
|
||||||
Systemd prend en charge `systemd-ssh` ou l'utilisation de `systemctl` à distance via `ssh` :
|
Systemd prend en charge `systemd-ssh` ou l'utilisation de
|
||||||
|
`systemctl` à distance via `ssh`.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
systemctl --host user@machine status nginx
|
systemctl --host user@machine status nginx
|
||||||
|
|
Loading…
Reference in New Issue