8.76.1. Установка пакета Udev
Udev является частью пакета systemd-255. Используйте файл
systemd-255.tar.xz в качестве исходного архива.
Удалите две ненужные группы render
и sgx
, из правил udev по умолчанию:
sed -i -e 's/GROUP="render"/GROUP="video"/' \
-e 's/GROUP="sgx", //' rules.d/50-udev-default.rules.in
Удалите одно правило udev, требующее полной установки Systemd:
sed '/systemd-sysctl/s/^/#/' -i rules.d/99-systemd.rules.in
Измените жестко заданные пути к файлам конфигурации сети для
автономной установки udev:
sed '/NETWORK_DIRS/s/systemd/udev/' -i src/basic/path-lookup.h
Подготовьте 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 \
..
Значение параметров meson:
-
--buildtype=release
-
Этот параметр переопределяет тип сборки по умолчанию
(«debug»), который создает
неоптимизированные двоичные файлы.
-
-Dmode=release
-
Отключает некоторые функции, которые разработчики считают
экспериментальными.
-
-Ddev-kvm-mode=0660
-
По умолчанию правило udev разрешает всем пользователям доступ
к /dev/kvm
. Редакторы LFS
считают это опасным. Данная опция переопределяет разрешение
по умолчанию.
-
-Dlink-udev-shared=false
-
Эта опция запрещает udev связываться с внутренней общей
библиотекой systemd libsystemd-shared
. Эта библиотека
предназначена для совместного использования многими
компонентами Systemd, и ее использование избыточно, когда
установлен только udev.
-
-Dlogind=false
-Dvconsole=false
-
Эти параметры предотвращают создание нескольких файлов правил
udev, принадлежащих другим компонентам Systemd, которые мы не
будем устанавливать.
Получите список предоставляемых udev helpers и сохраните его в
переменной (экспортировать его не обязательно, но это упрощает
сборку от имени обычного пользователя или при использовании
менеджера пакетов):
export udev_helpers=$(grep "'name' :" ../src/udev/meson.build | \
awk '{print $3}' | tr -d ",'" | grep -v 'udevadm')
Соберите только компоненты, необходимые для udev:
ninja udevadm systemd-hwdb \
$(ninja -n | grep -Eo '(src/(lib)?udev|rules.d|hwdb.d)/[^ ]*') \
$(realpath libudev.so --relative-to .) \
$udev_helpers
Установите пакет:
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
Установите некоторые пользовательские правила и вспомогательные
файлы, полезные в среде LFS:
tar -xvf ../../udev-lfs-20230818.tar.xz
make -f udev-lfs-20230818/Makefile.lfs install
Установите справочные страницы:
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*
Наконец, сбросьте значение переменной udev_helpers
:
unset udev_helpers
8.76.2. Установка Udev - 32-битная версия
Выполните очистку после предыдущей сборки (находясь в каталоге
сборки):
rm -rf *
Подготовьте Udev к компиляции:
PKG_CONFIG_PATH="/usr/lib32/pkgconfig" \
CC="gcc -m32 -march=i686" \
CXX="g++ -m32 -march=i686" \
LANG=en_US.UTF-8 \
meson setup \
--prefix=/usr \
--buildtype=release \
-Dmode=release \
-Ddev-kvm-mode=0660 \
-Dlink-udev-shared=false \
..
Скомпилируйте пакет:
ninja \
$(grep -o -E "^build (src/libudev|src/udev)[^:]*" \
build.ninja | awk '{ print $2 }') \
$(realpath libudev.so --relative-to .)
Установите пакет:
mkdir -pv /usr/lib32/pkgconfig &&
cp -av libudev.so{,*[0-9]} /usr/lib32/ &&
sed -e "s;/usr/lib;&32;g" src/libudev/libudev.pc > /usr/lib32/pkgconfig/libudev.pc