documentation/outils/logiciels/systemd.org

9.0 KiB

Description de systemd et comment l'utiliser?

-- mode: org; org-hide-emphasis-markers: t; --

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 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 :

        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
    • 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