-*- mode: org; org-hide-emphasis-markers: t; -*- #+TITLE: Description de ~systemd~ et comment l'utiliser? #+AUTHOR: Des nounous quelconques. #+EMAIL: contact@crans.org #+SEQ_TODO: TODO | in_progress | DONE #+DESCRIPTION: Pfiou que c'est fastidieux d'apprendre à parler au monde entier. #+INSTITUTE: Cr@ns #+LANGUAGE: fr #+STARTUP: overview Le présent document est destiné aux proptiétaires de VMs au Cr@ns, mais plus généralement à nos membres qui souhaitent tirer le plus de ~systemd~. ~systemd~ est une suite logicielle qui a pour objectif de fournir une interface simple et unifiée à de nombreuses fonctionnalités du noyau Linux. En effet, les APIs Linux sont nombreuses et les utilisations multiples des mêmes interfaces peut être redondant. Par exemple, considérons la tâche "lancer une backup" et supposons que l'on veuille (1) que la commande soit lancée un jour après que la dernière itération se soit terminée, et (2) éviter qu'une nouvelle backup soit lancée si l'ancienne n'est pas encore terminée. Systemd permet de paramétrer cela en quelques lignes, là où d'autres seraient tentés de faire un cron, dont la tâche associés commence par effectuer les vérications nécessaires au lancement conditionel. ----- ~systemd~ fournit un langage de configuration unifié et permet de paramétrer son système de manière déclarative, ce qui mène à des configurations plus sûres, systématiques et dont les sémantiques sont claires. * Résumé succint (et partiel) des tâches effectuées par un utilitaire ~systemd~ | *Tâche* | *Utilitaire disponible* | Optionel (pour un système basé sur ~systemd~) | |------------------------+----------------------------+---------------------------------------------| | Boot loader | ~systemd-boot~ | Oui | | Init système (initrd) | ~systemd~ | Oui | | Init système | ~systemd~ | Non | | Gestionaire de service | ~systemd~ | Non | | DNS récursif | ~systemd-resolvd~ | Oui | | Gestion des ~$HOME~ | systemd-homed | Oui | | Montage de disques | ~systemd-fstab-generator~ | Pas à ma connaissance | | | ~systemd-gpt-auto-generator~ | Oui | | | ~systemd-fsck-generator~ | Peut-être | | Chiffrement de disques | ~systemd-cryptsetup~ | Oui | | | ~systemd-cryptenroll~ | Oui | | | ~systemd-crypttab-generator~ | | | Chiffrement de secrets | ~systemd-creds~ | Oui | | Gestion de l'horloge | ~systemd-timedated~ | Oui | | | ~systemd-timesyncd~ | Oui | | Nom d'hôte | ~systemd-hostnamed~ | Je ne sais pas | ** Critiques communes /Cf/. la [[https://www.freedesktop.org/wiki/Software/systemd/FrequentlyAskedQuestions/][FAQ officielle]] du projet. - /Il est dit que ~sd~ fait trop de choses/ ! Ah bon ? Pourtant, ~systemd~ n'apparait pas si souvent dans le tableau ci-dessus. - /Il est dit que ~sd~ est une dictature/ ! Je ne contribue pas, mais suis les messages postés sur les mailing list et parfois les issues du GitHub. Je trouve la communauté très accueillante. ** Évolution de ~systemd~ ~systemd~ évolue rapidement, pour permettre une gestion toujours plus fine des services, VMs, ... Certaines mises à jour de ~systemd~ retirent des fonctionnalités (/e.g./ ~/usr~ séparé ou ~cgroupsv1~). Lorsqu'il y a retrait d'une fonctionnalité, cela est au annoncé à l'avance, pour que chacun·e ait le temps de s'y préparer. Pour les deux exemples susmentionnés, cela a été annoncé plus d'un an à l'avance. * Rappel : processus de démarrage d'un ordinateur /systemd/GNU/Linux/ Ce paragraphe présente la manière dont les machines démarrent. Cette présentation se veut rapide, mais suffisante pour que chacun·e puisse comprendre à quelle étape de ce processus les disques d'un ordinateur sont déchiffrés, montés, /etc./ /Note/ : Je me concentrerai que sur les systèmes (U)EFI utilisant une table de partitions ~gpt~ (/i.e./ le disque sur lequel se trouvent les fichiers de démarrage contient un partitionnement ~gpt~). Procédé de démarrage : 1. le logiciel de la carte mère est le premier élément à démarrer. Il charge vos paramètres (/e.g./ secure boot activé ou non) ; 2. le logiciel cherche à démarrer ou bien votre système d'exploitation directement, ou bien un /système d'amorçage/ (/bootloader/ en, anglais) ; 3. supposons qu'il lance ~systemd-boot~. ~systemd-boot~ va constituer un menu avec - une ou plusieurs entrées pour lancer le(s) système(s) d'exploitation disponible(s) sur votre machine (ou en réseau), - une entrée pour redémarrer dans le panneau de configuration du logiciel UEFI, - une entrée pour redémarrer ; 4. Supposons que l'utilisateurice (ou ~systemd-boot~) choisisse un système sous ~systemd~. ~systemd~, qui est actuellement lancé dans un petit environnement (appelé /initrd/) va chercher à initialiser le système, noramment en : 1. déchiffrant la partition racine du système (si nécessaire), 2. montant la partition racine du sysème, 3. pivotant sur le système final dont ~systemd~ vient de monter ~/~. 5. Nous sommes sur la bonne voie : le système de fichier principal est monté. ~systemd~ monte les partitions/disques/resources réseaux supplémentaires requis, met en place les sous-systèmes nécessaires (journalisation, réseau, ...). L'un des derniers services démarré permet aux utilisateurices de s'authentifier. Le sysème a fini de démarrer. * TODO Configuration ** TODO Unité de configuration (~man systemd.unit~) ** TODO Service (~man systemd.service~) ** TODO Cibles (~man systemd.target~) ** TODO Minuteurs (~man systemd.timer~) * TODO Systemd : aspect pratique ** TODO Chiffrement (mots de passe, recovery key, FIDO2 ou TMP2) L'utilitaire principal pour gérer le chiffrement de disques est ~systemd-cryptenroll~. ** TODO Reconnaissance automatique de partitions Lors de l'installation d'un système d'exploitation (avec UEFI), il y a au moins deux partitions : - une ESP (/EFI System Partition/), laquelle stocke les images de démarrage (dont l'éventuel boot loader) ; - une partition racine (root, ou ~/~), laquelle correspond au chemin ~/~ pour le système. C'est ici que sont généralement stockées vos applications, la configuration système, /etc/. Pour ~systemd~, touts les points de montage sont des /unités de montage/ et le déchiffrement des disques est effectué via des /unités de services/. Ces unités sont /générées/ (/Cf./ plus bas). Lors du démarrage, il faut mettre le système de fichiers en place, /i.e./ monter les disques. Lors de l'installation du système d'exploitation, deux choix s'offrent à vous : - /OU BIEN/ Décrire les blocks à déchiffrer dans ~/etc/crypttab~ (/crypt table/) et les points de montage dans ~/etc/fstab~ (/file systems table/). Ces fichiers seront inclus dans l'image de démarrage (qui est souvent appellée /initrd/ ou /initramfs/), afin que ~systemd~ sache quels disques déchiffrer et monter (et comment). - /OU BIEN/ Indiquer le type de chaque partition ("X est ~/~", "Y est ~/boot~", "Z est ~/home~", /etc./). Si tel est le cas, il n'est plus nécessaire d'inclure les partitions concernées dans ~/etc/fstab~. /Note/ : Si vous utilisez LUKS2 pour chiffrer vos disques, il n'est pas non plus nécessaire d'indiquer ces éléments dans ~/etc/crypttab~. /Exemple/ : Partition ~/home~, troisième partition du disque ~/dev/nvme0n1~. Il suffit : - de changer le type de partition de ~/dev/nvme0n1p3~ : #+begin_src fdisk fdisk /dev/nvme0n1 t # change le type de partition 3 # numéro de la partition à mettre à jour home # (ou 43) abbréviation pour "933ac7e1-2eb4-4f13-b844-0e14e2aef915" w # écrit les changements à la table de partitions #+end_src - retirer la ligne correspondant à ~/home~ dans ~/etc/fstab~ (et si la partition est chiffrée, de ~/etc/crypttab~ aussi), - régénrer les images de démarrage, - redémarrer et tester. /Note/ : se référer à ~man systemd-gpt-auto-generator(8)~ pour une liste complète des tags ~gpt~ reconnus par ~systemd~. ** TODO Redimension automatique de partitions ** TODO UKI et Secure boot * TODO Réseau * TODO Journalisation * TODO Administration à distance