From 7b17025ee0359e7fbd33ef1d1ddfd52d6b02eb83 Mon Sep 17 00:00:00 2001 From: glevy Date: Thu, 24 Jul 2025 09:40:12 +0200 Subject: [PATCH 1/3] Guide de systemd --- outils/logiciels/systemd.md | 245 +++++++++++++++++++++++++++++++----- 1 file changed, 213 insertions(+), 32 deletions(-) diff --git a/outils/logiciels/systemd.md b/outils/logiciels/systemd.md index dad6398..e2e303b 100644 --- a/outils/logiciels/systemd.md +++ b/outils/logiciels/systemd.md @@ -1,57 +1,238 @@ # Systemd -Systemd est une suite logiciel pour systèmes GNU/Linux. Cette suite logiciel -fournit de nombreuses fonctionnalités, notamment pour configurer son OS et -suivre les *daemon*\ s actifs et leurs journaux. +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. -Ce document décrit *certaines* fonctionnalités de Systemd bien choisies, -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. +## Unites de configuration : un format unificateur -## 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 - - --> +[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 +``` + +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. \ No newline at end of file From 6512a66830965b99168cff612583004626beaa61 Mon Sep 17 00:00:00 2001 From: glevy Date: Thu, 24 Jul 2025 09:49:06 +0200 Subject: [PATCH 2/3] =?UTF-8?q?D=C3=A9tails=20des=20commandes=20+=20lintin?= =?UTF-8?q?g?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- outils/logiciels/systemd.md | 102 ++++++++++++++++++++++++++++++------ 1 file changed, 87 insertions(+), 15 deletions(-) diff --git a/outils/logiciels/systemd.md b/outils/logiciels/systemd.md index e2e303b..078b6b3 100644 --- a/outils/logiciels/systemd.md +++ b/outils/logiciels/systemd.md @@ -1,10 +1,67 @@ # 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 -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 @@ -35,7 +92,8 @@ 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`. +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 @@ -58,7 +116,8 @@ 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`. +Systemd gère aussi les points de montage statiques ou +dynamiques avec les unités `.mount` et `.automount`. #### Exemple : monter un disque automatiquement @@ -85,7 +144,9 @@ 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. +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 @@ -131,7 +192,8 @@ journalctl --since "2 hours ago" ### 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 journalctl --user @@ -139,7 +201,8 @@ journalctl --user ### 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 : @@ -157,7 +220,9 @@ sudo systemctl enable --now systemd-journal-remote ### 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 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) -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) : @@ -188,7 +254,8 @@ où `$arch` pointe vers le fichier `boot/loader/entries/$arch.conf` ### 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 sudo debootstrap stable /var/lib/machines/deb @@ -197,7 +264,8 @@ 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 : +Systemd peut être utilisé avec des outils comme `QEMU` ou `libvirt`, +mais fournit aussi des commandes comme ```bash machinectl start nom_machine @@ -205,7 +273,9 @@ 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`. +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 : @@ -219,7 +289,8 @@ Environment=API_TOKEN=%d/token ### 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 [Service] @@ -229,10 +300,11 @@ RestartSec=5s ### 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 systemctl --host user@machine status nginx ``` -Cela fonctionne à condition d'avoir un accès SSH à la machine distante. \ No newline at end of file +Cela fonctionne à condition d'avoir un accès SSH à la machine distante. From 52c497adc4a13a1a59f0035782bcd2fb633b7725 Mon Sep 17 00:00:00 2001 From: glevy Date: Thu, 24 Jul 2025 09:50:11 +0200 Subject: [PATCH 3/3] Re linting --- outils/logiciels/systemd.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/outils/logiciels/systemd.md b/outils/logiciels/systemd.md index 078b6b3..5dc9869 100644 --- a/outils/logiciels/systemd.md +++ b/outils/logiciels/systemd.md @@ -17,11 +17,12 @@ 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`. +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. +`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),