8.75. Udev de Systemd-255

Le paquet Udev contient des programmes pour la création dynamique de nœuds de périphérique.

Temps de construction approximatif: 0,2 SBU
Espace disque requis: 144 Mo

8.75.1. Installation d'Udev

Udev fait partie du paquet systemd-255. Utilisez le fichier systemd-255.tar.xz comme archive des sources.

Supprimez deux groupes inutiles, render et sgx des règles udev par défaut :

sed -i -e 's/GROUP="render"/GROUP="video"/' \
       -e 's/GROUP="sgx", //' rules.d/50-udev-default.rules.in

Supprimez une règle udev requise pour une installation Systemd complète :

sed '/systemd-sysctl/s/^/#/' -i rules.d/99-systemd.rules.in

Ajustez les chemins codés en dur aux fichiers de configuration réseau pour l’installation udev indépendante :

sed '/NETWORK_DIRS/s/systemd/udev/' -i src/basic/path-lookup.h

Préparez la compilation d'Udev :

mkdir -p build
cd       build

meson setup \
      --prefix=/usr                 \
      --buildtype=release           \
      -Dmode=release                \
      -Ddev-kvm-mode=0660           \
      -Dlink-udev-shared=false      \
      -Dlogind=false                \
      -Dvconsole=false              \
      ..

Voici la signification des options meson :

--buildtype=release

Ce paramètre remplace le type de construction par défaut (« debug »), qui produit des binaires non optimisés.

-Dmode=release

Désactive certaines fonctionnalités considérées comme expérimentales par les développeurs en amont.

-Ddev-kvm-mode=0660

La règle udev par défaut permet à tous les utilisateurs d'accéder à /dev/kvm. Les auteurs pensent que cela est dangereux. Cette option change cela.

-Dlink-udev-shared=false

Cette option évite qu'udev ne se lie à la bibliothèque interne partagée de systemd, libsystemd-shared. Cette bibliothèque est conçue pour être partagée par plusieurs composants Systemd ce qui est excessif poru une installation d'udev seulement.

-Dlogind=false -Dvconsole=false

Ces options évitent la génération de plusieurs fichiers de règles udev qui appartiennent aux autres composants Systemd qui ne seront pas installés.

Récupérez la liste des outils d'aide empaquetés avec udev et sauvegardez-la dans une variable d'environnement (l'exporter n'est pas absolument nécessaire, mais cela facilite la construction en tant qu'utilisateur ordinaire et l'utilisation d'un gestionnaire de paquet) :

export udev_helpers=$(grep "'name' :" ../src/udev/meson.build | \
                      awk '{print $3}' | tr -d ",'" | grep -v 'udevadm')

Ne construisez que les composants nécessaires pour udev :

ninja udevadm systemd-hwdb                                           \
      $(ninja -n | grep -Eo '(src/(lib)?udev|rules.d|hwdb.d)/[^ ]*') \
      $(realpath libudev.so --relative-to .)                         \
      $udev_helpers

Installez le paquet :

install -vm755 -d {/usr/lib,/etc}/udev/{hwdb.d,rules.d,network}
install -vm755 -d /usr/{lib,share}/pkgconfig
install -vm755 udevadm                             /usr/bin/
install -vm755 systemd-hwdb                        /usr/bin/udev-hwdb
ln      -svfn  ../bin/udevadm                      /usr/sbin/udevd
cp      -av    libudev.so{,*[0-9]}                 /usr/lib/
install -vm644 ../src/libudev/libudev.h            /usr/include/
install -vm644 src/libudev/*.pc                    /usr/lib/pkgconfig/
install -vm644 src/udev/*.pc                       /usr/share/pkgconfig/
install -vm644 ../src/udev/udev.conf               /etc/udev/
install -vm644 rules.d/* ../rules.d/README         /usr/lib/udev/rules.d/
install -vm644 $(find ../rules.d/*.rules \
                      -not -name '*power-switch*') /usr/lib/udev/rules.d/
install -vm644 hwdb.d/*  ../hwdb.d/{*.hwdb,README} /usr/lib/udev/hwdb.d/
install -vm755 $udev_helpers                       /usr/lib/udev
install -vm644 ../network/99-default.link          /usr/lib/udev/network

Installez certaines règles personnalisées et autres fichiers auxiliaires utiles dans un environnement LFS :

tar -xvf ../../udev-lfs-20230818.tar.xz
make -f udev-lfs-20230818/Makefile.lfs install

Installez les pages de manuel :

tar -xf ../../systemd-man-pages-255.tar.xz                            \
    --no-same-owner --strip-components=1                              \
    -C /usr/share/man --wildcards '*/udev*' '*/libudev*'              \
                                  '*/systemd.link.5'                  \
                                  '*/systemd-'{hwdb,udevd.service}.8

sed 's|systemd/network|udev/network|'                                 \
    /usr/share/man/man5/systemd.link.5                                \
  > /usr/share/man/man5/udev.link.5

sed 's/systemd\(\\\?-\)/udev\1/' /usr/share/man/man8/systemd-hwdb.8   \
                               > /usr/share/man/man8/udev-hwdb.8

sed 's|lib.*udevd|sbin/udevd|'                                        \
    /usr/share/man/man8/systemd-udevd.service.8                       \
  > /usr/share/man/man8/udevd.8

rm /usr/share/man/man*/systemd*

Enfin, déconfigurez la variable udev_helpers :

unset udev_helpers

8.75.2. Configurer Udev

Les informations sur les périphériques matériels sont maintenues dans les répertoires /etc/udev/hwdb.d et /usr/lib/udev/hwdb.d. Udev a besoin que ces informations soient compilées en une base de données binaire /etc/udev/hwdb.bin. Créez la base de données initiale :

udev-hwdb update

Cette commande doit être lancée à chaque fois que les informations sur le matériel sont mises à jour.

8.75.3. Contenu d'Udev

Programmes installés: udevadm, udevd (lien symbolique vers udevadm) et udev-hwdb
Bibliothèques installées: libudev.so
Répertoires installés: /etc/udev et /usr/lib/udev

Descriptions courtes

udevadm

Outil d'administration générique d'udev : contrôle le démon udevd, fournit des informations sur la base de données Udev, suit les uevents, attend la fin de certains uevents, teste la configuration d'Udev et génère des uevents pour un périphérique donné

udevd

Un démon qui écoute les uevents sur un socket netlink, crée des périphériques et exécute les programmes externes configurés en réponse à ces uevents

udev-hwdb

Met à jour ou exécute des requêtes sur la base de données du matériel.

libudev

Une interface de bibliothèque aux informations de périphériques d'udev

/etc/udev

Contient les fichiers de configuration d'Udev, les permissions de périphériques et les règles de nommage des périphériques