8.77.1. Installation of Udev
Udev is part of the systemd-260.1 package. Use
the systemd-260.1.tar.xz file as the source tarball.
Remove two unneeded groups,
render and
sgx, from the default udev
rules:
sed -e 's/GROUP="render"/GROUP="video"/' \
-e 's/GROUP="sgx", //' \
-i rules.d/50-udev-default.rules.inRemove one udev rule requiring a full Systemd installation:
sed -i '/systemd-sysctl/s/^/#/' rules.d/99-systemd.rules.in
Adjust the hardcoded paths to network configuration files for the
standalone udev installation:
sed -e '/NETWORK_DIRS/s/systemd/udev/' \
-i src/libsystemd/sd-network/network-util.hPrepare Udev for compilation:
mkdir -p build
cd build
meson setup .. \
--prefix=/usr \
--buildtype=release \
-D mode=release \
-D dev-kvm-mode=0660 \
-D link-udev-shared=false \
-D logind=false \
-D vconsole=falseThe meaning of the meson options:
--buildtype=releaseThis switch overrides the default buildtype
(“debug”), which produces unoptimized
binaries.
-D mode=releaseDisable some features considered experimental by upstream.
-D dev-kvm-mode=0660The default udev rule would allow all users to access
/dev/kvm. The editors
consider it dangerous. This option overrides it.
-D link-udev-shared=falseThis option prevents udev from linking to the internal
systemd shared library,
libsystemd-shared.
This library is designed to be shared by many Systemd components
and it's too overkill for a udev-only installation.
-D logind=false -D vconsole=falseThese options prevent the generation of several udev rule
files belonging to the other Systemd components that we won't
install.
Get the list of the shipped udev helpers and save it into an
environment variable (exporting it is not strictly necessary, but it makes
building as a regular user or using a package manager easier):
export udev_helpers=$(grep "'name' :" ../src/udev/meson.build | \
awk '{print $3}' | tr -d ",'" | grep -v 'udevadm')Only build the components needed for udev:
ninja udevadm systemd-hwdb \
$(ninja -n | grep -Eo '(src/(lib)?udev|rules.d|hwdb.d)/[^ ]*') \
$(realpath libudev.so --relative-to .) \
$udev_helpersInstall the package:
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/networkInstall some custom rules and support files useful in an LFS
environment:
tar -xvf ../../udev-lfs-20230818.tar.xz
make -f udev-lfs-20230818/Makefile.lfs install
Install the man pages:
tar -xf ../../systemd-man-pages-260.1.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*Finally, unset the udev_helpers variable:
unset udev_helpers
8.77.2. Installation of Udev - 32-bit
Clean previous build (while still in the build directory):
rm -rf *
Prepare Udev for compilation:
LANG=en_US.UTF-8 \
meson setup --prefix=/usr \
--buildtype=release \
--cross-file=lib32 \
-D mode=release \
-D dev-kvm-mode=0660 \
-D link-udev-shared=false \
-D logind=false \
-D vconsole=false \
..Compile the package:
ninja $(grep -o -E "^build (src/libudev|src/udev)[^:]*" \
build.ninja | awk '{ print $2 }') \
$(realpath libudev.so --relative-to .)Install the package:
mkdir -pv /usr/lib32/pkgconfig
cp -av libudev.so{,*[0-9]} /usr/lib32/
cp src/libudev/libudev.pc /usr/lib32/pkgconfig/