8.75. Udev originário de Systemd-255

O pacote "Udev" contém aplicativos para criação dinâmica de nós de dispositivos.

Tempo aproximado de construção: 0,2 UPC
Espaço em disco exigido: 144 MB

8.75.1. Instalação do "Udev"

O "Udev" é parte do pacote systemd-255. Use o arquivo systemd-255.tar.xz como o tarball fonte.

Remova dois grupos desnecessários, render e sgx, das regras padrão do "udev":

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

Remova uma regra do "udev" que exige uma instalação completa do "Systemd":

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

Ajuste os caminhos rigidamente codificados para os arquivos de configuração da rede de intercomunicação para a instalação autônoma do "Udev":

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

Prepare o "Udev" para compilação:

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

O significado das opções "meson":

--buildtype=release

Essa chave substitui o tipo de construção padrão (debug), que produz binários não otimizados.

-Dmode=release

Desabilite alguns recursos considerados experimentais pelo(a) desenvolvedor(a).

-Ddev-kvm-mode=0660

A regra padrão do "udev" permitiria que todos(as) os(as) usuários(as) acessassem /dev/kvm. Os(As) editores(as) a consideram perigosa. Essa opção a substitui.

-Dlink-udev-shared=false

Essa opção evita que o "udev" se vincule à biblioteca interna compartilhada do "systemd", libsystemd-shared. Essa biblioteca foi projetada para ser compartilhada por muitos componentes do "Systemd" e é muito exagerada para uma instalação somente do "udev".

-Dlogind=false -Dvconsole=false

Essas opções evitam a geração de vários arquivos de regras do "Udev" pertencentes a outros componentes do "Systemd" que nós não instalaremos.

Obtenha a lista dos auxiliares "Udev" enviados e salve-a em uma variável de ambiente (exportá-la não é estritamente necessário, mas facilita construir como um(a) usuário(a) comum ou usar um gerenciador de pacotes):

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

Construa somente os componentes necessários para o "udev":

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

Instale o pacote:

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

Instale algumas regras personalizadas e arquivos de suporte úteis em um ambiente LFS:

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

Instale as páginas de manual:

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*

Finalmente, desconfigure a variável "udev_helpers":

unset udev_helpers

8.75.2. Configurando o "Udev"

Informações acerca de dispositivos de hardware são mantidas nos diretórios /etc/udev/hwdb.d e /usr/lib/udev/hwdb.d. O Udev precisa que essas informações sejam compiladas em uma base de dados binária /etc/udev/hwdb.bin. Crie a base de dados inicial:

udev-hwdb update

Esse comando precisa ser executado sempre que as informações de hardware forem atualizadas.

8.75.3. Conteúdo do "Udev"

Aplicativos instalados: udevadm, udevd (link simbólico para udevadm) e udev-hwdb
Bibliotecas instaladas: libudev.so
Diretórios instalados: /etc/udev e /usr/lib/udev

Descrições Curtas

udevadm

Ferramenta genérica de administração do "udev": controla o processo de segundo plano "udevd"; fornece informações a partir da base de dados do "Udev"; monitora "uevents"; aguarda "uevents" finalizarem; testa a configuração do "Udev"; e aciona "uevents" para um dado dispositivo

udevd

Um processo de segundo plano que escuta "uevents" no soquete "netlink", cria dispositivos e executa os aplicativos externos configurados em resposta a esses "uevents"

udev-hwdb

Atualiza ou consulta a base de dados de hardware.

libudev

Uma interface de biblioteca para informações de dispositivo do "udev"

/etc/udev

Contém arquivos de configuração do "Udev", permissões de dispositivos e regras para nomeação de dispositivos