8.75. Udev fra Systemd-255

Udev pakken inneholder programmer for dynamisk oppretting av enhetsnoder.

Omtrentlig byggetid: 0.2 SBU
Nødvendig diskplass: 144 MB

8.75.1. Installasjon av Udev

Udev er en del av systemd-255 pakken. Bruk systemd-255.tar.xz file som tarballkilde.

Fjern to unødvendige grupper, render og sgx, fra standard udev regler:

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

Fjern en udevregel som krever en full Systemd installasjon:

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

Juster de hardkodede banene til nettverkskonfigurasjonsfiler for frittstående udev installasjon:

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

Forbered Udev for kompilering:

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              \
      ..

Betydningen av mesonalternativene:

--buildtype=release

Denne bryteren overstyrer standard byggetype (debug), som produserer uoptimaliserte binære filer.

-Dmode=release

Deaktiver noen funksjoner som anses som eksperimentelle av oppstrøms.

-Ddev-kvm-mode=0660

Standard udev regelen vil tillate alle brukere tilgang til /dev/kvm. Utviklerne anser det som farlig. Dette alternativet overstyrer det.

-Dlink-udev-shared=false

Dette alternativet forhindrer udev fra å koble til det interne systemd delte biblioteket, libsystemd-shared. Dette biblioteket er designet for å deles av mange Systemd komponenter og det er overdrevent for kun en udev installasjon.

-Dlogind=false -Dvconsole=false

Disse alternativene forhindrer generering av flere udev regelfiler som tilhører de andre Systemd komponentene som vi ikke vil installere.

Få listen over de sendte Udev hjelperne og lagre den i en miljøvariabel (eksportere den er strengt tatt ikke nødvendig, men den gjør det enklere å bygge som en vanlig bruker eller bruke en pakkebehandling):

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

Bygg bare komponentene som trengs for udev:

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

Installer pakken:

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

Installer noen tilpassede regler og støttefiler som er nyttige i et LFS miljøet:

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

Installer manualsidene:

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*

Til slutt, deaktiverudev_helpers variabelen:

unset udev_helpers

8.75.2. Konfigurerer Udev

Informasjon om maskinvareenheter opprettholdes i /etc/udev/hwdb.d og /usr/lib/udev/hwdb.d mappene. Udev trenger at informasjonen samles inn i en binær database /etc/udev/hwdb.bin. Opprett første database:

udev-hwdb update

Denne kommandoen må kjøres hver gang maskinvareinformasjonen er oppdatert.

8.75.3. Innhold i Udev

Installerte programmer: udevadm, udevd (symlenke til udevadm), og udev-hwdb
Installerte biblioteker: libudev.so
Installerte mapper: /etc/udev og /usr/lib/udev

Korte beskrivelser

udevadm

Generisk udev administrasjonsverktly: kontrollerer udevd nissen, gir informasjon fra Udevdatabasen, overvåker uevents, venter på uevents for å fullføre, tester Udevkonfigurasjonen og utløser uevents for en gitt enhet

udevd

En nisse som lytter etter uevents på netlink socket, oppretter enheter og kjører de konfigurerte eksterne programmene i respons på disse hendelsene

udev-hwdb

Oppdaterer eller spørrer maskinvaredatabasen.

libudev

Et biblioteksgrensesnitt til udev enhetsinformasjon

/etc/udev

Inneholder Udev konfigurasjonsfiler, enhetstillatelser og regler for navngivning av enheter