6.63. Systemd-216

Le paquet Systemd contient des programmes pour contrôler le démarrage, l'exécution et l'arrêt du système.

Temps de construction approximatif: 2.1 SBU
Espace disque requis: 678 Mo

6.63.1. Installation de Systemd

Tout d'abord, créez un fichier pour permettre à Systemd de se construire en utilisant Util-Linux construit au chapitre 5 et désactiver LTO par défaut :

cat > config.cache << "EOF"
KILL=/bin/kill
HAVE_BLKID=1
BLKID_LIBS="-lblkid"
BLKID_CFLAGS="-I/tools/include/blkid"
cc_cv_CFLAGS__flto=no
EOF

LTO est désactivé par défaut car il cause la liaison de systemd et d'autre programmes auxiliaires vers libgcc_s.so, ce qui ralenti la construction et rend le code compilé plus volumineux.

En outre, corrigez une erreur de construction due à l'utilisation d'Util-Linux construit au chapitre 5 :

sed -i "s:blkid/::" $(grep -rl "blkid/blkid.h")

Appliquez un correctif pour que les fichiers pkg-config de compat soient installés sans installer les bibliothèques compat qui sont inutiles dans LFS :

patch -Np1 -i ../systemd-216-compat-1.patch

Préparez la compilation de Systemd :

./configure --prefix=/usr                                           \
            --sysconfdir=/etc                                       \
            --localstatedir=/var                                    \
            --config-cache                                          \
            --with-rootprefix=                                      \
            --with-rootlibdir=/lib                                  \
            --enable-split-usr                                      \
            --disable-gudev                                         \
            --disable-firstboot                                     \
            --disable-ldconfig                                      \
            --disable-sysusers                                      \
            --without-python                                        \
            --docdir=/usr/share/doc/systemd-216                     \
            --with-dbuspolicydir=/etc/dbus-1/system.d               \
            --with-dbusinterfacedir=/usr/share/dbus-1/interfaces    \
            --with-dbussessionservicedir=/usr/share/dbus-1/services \
            --with-dbussystemservicedir=/usr/share/dbus-1/system-services

Voici la signification des options de configure :

--config-cache

Ce paramètre dit au système de construction d'utiliser le fichier config.cache qui a été créé plus haut.

--with-root*

Ces paramètres garantissent que les programmes et les bibliothèques partagées du cœur s'installent dans les sous-répertoires de la partition racine.

--enable-split-usr

Ce paramètre garantit que systemd fonctionnera sur des systèmes où les répertoires /bin, /lib et /sbin ne sont pas des liens symboliques vers leurs répertoires /usr correspondant.

--disable-gudev --without-python

Ces paramètres désactivent des fonctions facultatives car LFS n'a pas les dépendances.

--disable-firstboot

Ce paramètre empêche l'installation d'un service de systemd qui est responsable de la mise en place du système pour la première fois. Ceux-ci ne sont pas utiles pour LFS car tout est fait manuellement.

--disable-ldconfig

Ce paramètre empêche l'installation d'une unité de systemd qui lance ldconfig au démarrage, et qui rend celui-ci plus long. Retirez ceci si la fonction est désirée, même si cela n'est pas utile pour une distribution source tel que LFS.

--disable-sysusers

Ce paramètre empêche l'instalation de services de systemd responçables de la mise en place des fichiers /etc/group et /etc/passwd. Ces fichiers sont créés plus tôt dans ce chapitre.

--with-dbus*

Ces paramètres garantissent que les fichiers de configuration de D-Bus s'installent où il faut.

Compilez le paquet :

make LIBRARY_PATH=/tools/lib

Si vous lancez les suites de test, empêchez d'abord l'exécution de certains tests car ils échouent dans un environnement chroot :

sed -e "s:test/udev-test.pl::g"              \
    -e "s:test-bus-cleanup\$(EXEEXT) ::g"    \
    -e "s:test-condition-util\$(EXEEXT) ::g" \
    -e "s:test-dhcp6-client\$(EXEEXT) ::g"   \
    -e "s:test-engine\$(EXEEXT) ::g"         \
    -e "s:test-journal-flush\$(EXEEXT) ::g"  \
    -e "s:test-path-util\$(EXEEXT) ::g"      \
    -e "s:test-sched-prio\$(EXEEXT) ::g"     \
    -e "s:test-strv\$(EXEEXT) ::g"           \
    -i Makefile

Pour tester les résultats, exécutez :

make check

Installez le paquet :

make LD_LIBRARY_PATH=/tools/lib install

Déplacez les bibliothèques NSS dans /lib :

mv -v /usr/lib/libnss_{myhostname,mymachines,resolve}.so.2 /lib

Supprimez un répertoire inutile :

rm -rfv /usr/lib/rpm

Créez les liens symbolique de compatibilité avec Sysvinit, ainsi systemd est utilisé comme système d'init par défaut :

for tool in runlevel reboot shutdown poweroff halt telinit; do
     ln -sfv ../bin/systemctl /sbin/${tool}
done
ln -sfv ../lib/systemd/systemd /sbin/init

Supprimez la référence à un groupe inexistant :

sed -i "s:0775 root lock:0755 root root:g" /usr/lib/tmpfiles.d/legacy.conf

Créez le fichier /etc/machine-id dont a besoin Journald :

systemd-machine-id-setup

6.63.2. Contenu de systemd

Programmes installés: bootctl, busctl, coredumpctl, halt, hostnamectl, init, journalctl, kernel-install, localectl, loginctl, machinectl, networkctl, poweroff, reboot, runlevel, shutdown, systemctl, systemd-analyze, systemd-ask-password, systemd-cat, systemd-cgls, systemd-cgtop, systemd-delta, systemd-detect-virt, systemd-escape, systemd-inhibit, systemd-machine-id-setup, systemd-notify, systemd-nspawn, systemd-path, systemd-run, systemd-stdio-bridge, systemd-tmpfiles, systemd-tty-ask-password-agent, telinit, timedatectl et udevadm
Bibliothèques installées: libnss_myhostname.so.2, libnss_mymachines.so.2, libnss_resolve.so.2, libsystemd.so, libudev.so
Répertoires installés: /etc/binfmt.d, /etc/init.d, /etc/kernel, /etc/modules-load.d, /etc/sysctl.d, /etc/systemd, /etc/tmpfiles.d, /etc/udev, /etc/xdg/systemd, /lib/systemd, /lib/udev, /usr/include/systemd, /usr/lib/binfmt.d, /usr/lib/kernel, /usr/lib/modules-load.d, /usr/lib/sysctl.d, /usr/lib/systemd, /usr/lib/tmpfiles.d, /usr/share/doc/systemd-216, /usr/share/factory, /usr/share/systemd, /var/lib/systemd, /var/log/journal

Descriptions courtes

bootctl

utilisé pour voir les paramètres du firmware et du gestionnaire de démarrage.

busctl

Utilisé pour examiner et surveiller le bus D-Bus.

coredumpctl

Utilisé pour récupérer les fichiers coredumps du Journal de Systemd

halt

Appelle en principe shutdown avec ;e paramètre -h, sauf si on est déjà au niveau d'exécution 0, où il dit au noyau d'arrêter le système ; il inscrit dans le fichier /var/log/wtmp que le système va s'éteindre.

hostnamectl

Utilisé pour voir et changer le nom d'hôte du système et les paramètres afférents.

init

Le premier processus qui démarre après l'initialisation du matériel par le noyau, il poursuit le processus de démarrage et lance les processus qu'on lui a demandés.

journalctl

Utilisé pour voir le contenu du journal de Systemd.

kernel-install

Utilisé pour ajouter et supprimer des images de noyau et des initramfs dans /boot.

localectl

Utilisé pour voir et modifier la locale du système et les paramètres de la disposition du clavier.

loginctl

Utilisé pour examiner et contrôler l'état du gestionnaire d'identification.

machinectl

Utilisé pour examiner et contrôler l'état du gestionnaire des enregistrements de machines virtuelles et de conteneurs

poweroff

Dit au noyau d'arrêter le système et d'éteindre l'ordinateur (voir halt).

reboot

Dit au noyau de redémarrer le système (voir halt).

runlevel

Renvoie le niveau d'exécution actuel et précédent indiqué dans le journal du dernier niveau d'exécution situé dans /var/run/utmp.

shutdown

Éteint le système de manière sécurisée en envoyant à tous les processus un signal et en notifiant tous les utilisateurs connectés.

systemctl

Utilisé pour examiner et contrôler l'état du gestionnaire des services du système de Systemd.

systemd-analyze

Utilisé pour déterminer les performances de démarrage du système lors du dernier démarrage.

systemd-ask-password

Utilisé pour afficher le mot ou la phrase de passe d'un utilisateur en utilisant une question définie en ligne de commande.

systemd-cat

Utilisé pour relier les STDOUT et STDERR d'un processus au journal.

systemd-cgls

Affiche de manière récursive le contenu de la hiérarchie des groupes de Linux sélectionnée dans une arborescence.

systemd-cgtop

Affiche les groupes de contrôle dans la hiérarchie des groupes du Linux local, triés par processus, charge mémoire et d'E/S disque.

systemd-delta

Utilisé pour identifier et comparer des fichiers de configuration de /etc, qui ont leur correspondance par défaut dans /usr.

systemd-detect-virt

Détecte l'exécution dans un environnement virtualisé.

systemd-escape

Utilisé pour échapper les chaînes incluse dans les noms d'unités systemd.

systemd-inhibit

Utilisé pour exécuter un programme avec un marqueur d'extinction, de veille ou d'inactivité qui le verrouille.

systemd-machine-id-setup

Utilisé par les outils d'installation du système pour initialiser l'ID de la machine contenu dans /etc/machine-id lors de l'installation, avec un ID généré de façon aléatoire.

systemd-notify

Utilisé par les démons pour indiquer au système de démarrage les changements d'état.

systemd-nspawn

Utilisé pour lancer une commande ou un OS dans un conteneur léger dont le nom contient des espaces.

systemd-path

Utilisé pour voir les path système et utilisateur

systemd-run

Utilisé pour créer et démarrer une unité transitoire .service ou .scope et pour y lancer la commande spécifiée.

systemd-tmpfiles

Crée, efface et nettoie les fichiers et les répertoires volatiles et temporaires sur la base d'un format et d'un emplacement du fichier de configuration indiqués dans les répertoires tmpfiles.d.

systemd-tty-ask-password-agent

Utilisé pour lister ou traiter les requêtes de mots de passe en attente dans Systemd

telinit

Dit à init quel niveau d'exécution adopter.

timedatectl

Utilisé pour voir et modifier l'horloge du système et ses paramètres.

udevadm

Outil générique d'administration d'Udev : contrôle le démon udevd, donne des infos à partir de la base de données d'Udev, surveille les événements uevents, attend la fin des uevents, teste la configuration d'Udev et synchronise les événements d'un périphérique donné.

libsystemd

Bibliothèque d'outils de systemd.

libudev

Une bibliothèque pour accéder aux informations d'Udev .