Replace eudev with udev from systemd

This commit is contained in:
Xi Ruoyao 2023-07-16 11:02:09 +08:00
parent c7ee38fb5a
commit a289860668
No known key found for this signature in database
GPG Key ID: ACAAD20E19E710E3
9 changed files with 267 additions and 224 deletions

View File

@ -13,7 +13,7 @@
<title>Udev configuration rules</title>
<para>The rules in this appendix are listed for convenience. Installation is
normally done via instructions in <xref linkend='ch-system-eudev'/>. </para>
normally done via instructions in <xref linkend='ch-system-udev'/>. </para>
<sect1 id="lfsrules" role="wrap">
<title>55-lfs.rules</title>

View File

@ -43,6 +43,10 @@
<listitem>
<para>2023-07-15</para>
<itemizedlist>
<listitem>
<para>[xry111] - Replace eudev-3.2.12 with udev from systemd-253.
Fixes <ulink url='&lfs-ticket-root;5285'>#5085</ulink>.</para>
</listitem>
<listitem>
<para>[bdubbs] - Update to iana-etc-20230629. Addresses
<ulink url='&lfs-ticket-root;5006'>#5006</ulink>.</para>

View File

@ -91,9 +91,9 @@
<!--<listitem>
<para>E2fsprogs-&e2fsprogs-version;</para>
</listitem>-->
<listitem revision="sysv">
<para>Eudev-&eudev-version;</para>
</listitem>
<!--<listitem revision="sysv">
<para>Udev-&systemd-version; (from systemd)</para>
</listitem>-->
<!--<listitem>
<para>Expat-&expat-version;</para>
</listitem>-->
@ -304,6 +304,10 @@
<title>Added:</title>
<listitem><para></para></listitem> <!-- satisfy build -->
<listitem revision="sysv">
<para>Udev-&systemd-version; (from systemd)</para>
</listitem>
<listitem>
<para>Libxcrypt-&libxcrypt-version;</para>
</listitem>
@ -333,6 +337,10 @@
<title>Removed:</title>
<listitem><para></para></listitem> <!-- satisfy build -->
<listitem>
<para>eudev-3.2.12</para>
</listitem>
<listitem>
<para>Pkg-config-0.29.2</para>
</listitem>

View File

@ -174,14 +174,6 @@
</listitem>
</varlistentry>
<varlistentry revision="sysv">
<term>Eudev (&eudev-version;) - <token>&eudev-size;</token>:</term>
<listitem>
<para>Download: <ulink url="&eudev-url;"/></para>
<para>MD5 sum: <literal>&eudev-md5;</literal></para>
</listitem>
</varlistentry>
<varlistentry>
<term>Expat (&expat-version;) - <token>&expat-size;</token>:</term>
<listitem>
@ -697,7 +689,7 @@
</listitem>
</varlistentry>
<varlistentry revision="systemd">
<varlistentry>
<term>Systemd (&systemd-version;) - <token>&systemd-size;</token>:</term>
<listitem>
<para>Home page: <ulink url="&systemd-home;"/></para>

View File

@ -91,7 +91,7 @@
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbus.xml"/>
<!-- sysv only -->
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="eudev.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="udev.xml"/>
<!-- Both sysv on systemd builds -->
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="man-db.xml"/>

View File

@ -1,202 +0,0 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
<sect1 id="ch-system-eudev" role="wrap" revision="sysv">
<?dbhtml filename="eudev.html"?>
<sect1info condition="script">
<productname>eudev</productname>
<productnumber>&eudev-version;</productnumber>
<address>&eudev-url;</address>
</sect1info>
<title>Eudev-&eudev-version;</title>
<indexterm zone="ch-system-eudev">
<primary sortas="a-Eudev">Eudev</primary>
</indexterm>
<sect2 role="package">
<title/>
<para>The Eudev package contains programs for dynamic creation of device
nodes.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
<segtitle>&diskspace;</segtitle>
<seglistitem>
<seg>&eudev-fin-sbu;</seg>
<seg>&eudev-fin-du;</seg>
</seglistitem>
</segmentedlist>
</sect2>
<sect2 role="installation">
<title>Installation of Eudev</title>
<!-- No longer seems needed. bdubbs 5/18/23
<para>First fix the location of udev rules in the .pc file:</para>
<screen><userinput remap="pre">sed -i '/udevdir/a udev_dir=${udevdir}' src/udev/udev.pc.in</userinput></screen>
-->
<!-- different from systemd: we do not have a render group and file is
named differently -->
<para>Remove an unneeded group
<systemitem class="groupname">sgx</systemitem>, from the default udev
rules:</para>
<screen><userinput remap="pre">sed -i -e 's/GROUP="sgx", //' rules/50-udev-default.rules</userinput></screen>
<para>Prepare Eudev for compilation:</para>
<screen><userinput remap="configure">./configure --prefix=/usr \
--bindir=/usr/sbin \
--sysconfdir=/etc \
--enable-manpages \
--disable-static</userinput></screen>
<para>Compile the package:</para>
<screen><userinput remap="make">make</userinput></screen>
<para>Create some directories now that are needed for tests, but
will also be used as a part of installation:</para>
<screen><userinput remap="test">mkdir -pv /usr/lib/udev/rules.d
mkdir -pv /etc/udev/rules.d</userinput></screen>
<para>To test the results, issue:</para>
<screen><userinput remap="test">make check</userinput></screen>
<para>Install the package:</para>
<screen><userinput remap="install">make install</userinput></screen>
<para>Install some custom rules and support files useful in an LFS
environment:</para>
<screen><userinput remap="install">tar -xvf ../&udev-lfs-version;.tar.xz
make -f &udev-lfs-version;/Makefile.lfs install</userinput></screen>
</sect2>
<sect2 id="conf-eudev" role="configuration">
<title>Configuring Eudev</title>
<indexterm zone="conf-eudev">
<primary sortas="a-Eudev">Eudev</primary>
<secondary>configuring</secondary>
</indexterm>
<indexterm zone="conf-eudev">
<primary sortas="e-/etc/udev/rules.d/65-kvm.rules">/etc/udev/rules.d/65-kvm.rules</primary>
</indexterm>
<para>
The default udev rule installed by Eudev would allow all users to
access <filename class='devicefile'>/dev/kvm</filename>. The editors
consider it dangerous. Create a configuration file to override it:
</para>
<screen><userinput>cat > /etc/udev/rules.d/65-kvm.rules &lt;&lt; "EOF"
<literal>KERNEL=="kvm", GROUP="kvm", MODE="0660", TAG+="uaccess"</literal>
EOF</userinput></screen>
<indexterm zone="conf-eudev">
<primary sortas="e-/etc/udev/hwdb.bin">/etc/udev/hwdb.bin</primary>
</indexterm>
<para>Information about hardware devices is maintained in the
<filename class="directory">/etc/udev/hwdb.d</filename> and
<filename class="directory">/usr/lib/udev/hwdb.d</filename> directories.
<application>Eudev</application> needs that information to be compiled
into a binary database <filename>/etc/udev/hwdb.bin</filename>. Create the
initial database:</para>
<screen><userinput>udevadm hwdb --update</userinput></screen>
<para>This command needs to be run each time the hardware information is
updated.</para>
</sect2>
<sect2 id="contents-eudev" role="content">
<title>Contents of Eudev</title>
<segmentedlist>
<segtitle>Installed programs</segtitle>
<segtitle>Installed libraries</segtitle>
<segtitle>Installed directories</segtitle>
<seglistitem>
<seg><!-- These are in /usr/lib/udev and not to be called by the user:
accelerometer, ata_id, cdrom_id, collect, mtd_probe,
scsi_id, v4l_id,--> udevadm and udevd</seg>
<seg>libudev.so</seg>
<seg>/etc/udev, /usr/lib/udev, and /usr/share/doc/udev-&udev-lfs-version;</seg>
</seglistitem>
</segmentedlist>
<variablelist>
<bridgehead renderas="sect3">Short Descriptions</bridgehead>
<?dbfo list-presentation="list"?>
<?dbhtml list-presentation="table"?>
<varlistentry id="udevadm" revision="sysv">
<term><command>udevadm</command></term>
<listitem>
<para>Generic udev administration tool: controls the udevd daemon,
provides info from the Udev database, monitors uevents, waits for
uevents to finish, tests Udev configuration, and triggers uevents
for a given device</para>
<indexterm zone="ch-system-eudev udevadm">
<primary sortas="b-udevadm">udevadm</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="udevd">
<term><command>udevd</command></term>
<listitem>
<para>A daemon that listens for uevents on the netlink socket,
creates devices and runs the configured external programs in
response to these uevents</para>
<indexterm zone="ch-system-eudev udevd">
<primary sortas="b-udevd">udevd</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libudev">
<term><filename class="libraryfile">libudev</filename></term>
<listitem>
<para>A library interface to udev device information</para>
<indexterm zone="ch-system-eudev libudev">
<primary sortas="c-libudev">libudev</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="etc-udev">
<term><filename class="directory">/etc/udev</filename></term>
<listitem>
<para>Contains Udev configuration files,
device permissions, and rules for device naming</para>
<indexterm zone="ch-system-eudev etc-udev">
<primary sortas="e-/etc/udev">/etc/udev</primary>
</indexterm>
</listitem>
</varlistentry>
</variablelist>
</sect2>
</sect1>

245
chapter08/udev.xml Normal file
View File

@ -0,0 +1,245 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
<sect1 id="ch-system-udev" role="wrap" revision="sysv">
<?dbhtml filename="udev.html"?>
<sect1info condition="script">
<productname>udev</productname>
<productnumber>&systemd-version;</productnumber>
<address>&systemd-url;</address>
</sect1info>
<title>Udev from Systemd-&systemd-version;</title>
<indexterm zone="ch-system-udev">
<primary sortas="a-Udev">Udev</primary>
</indexterm>
<sect2 role="package">
<title/>
<para>The Udev package contains programs for dynamic creation of device
nodes.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
<segtitle>&diskspace;</segtitle>
<seglistitem>
<seg>&udev-fin-sbu;</seg>
<seg>&udev-fin-du;</seg>
</seglistitem>
</segmentedlist>
</sect2>
<sect2 role="installation">
<title>Installation of Udev</title>
<para>Udev is part of the systemd-&systemd-version; package. Use
the systemd-&systemd-version;.tar.xz file as the source tarball.</para>
<para>Remove two unneeded groups,
<systemitem class="groupname">render</systemitem> and
<systemitem class="groupname">sgx</systemitem>, from the default udev
rules:</para>
<screen><userinput remap="pre">sed -i -e 's/GROUP="render"/GROUP="video"/' \
-e 's/GROUP="sgx", //' rules.d/50-udev-default.rules.in</userinput></screen>
<para>Prepare Udev for compilation:</para>
<screen><userinput remap="configure">mkdir -p build
cd build
meson setup \
--prefix=/usr \
--buildtype=release \
-Dmode=release \
-Ddev-kvm-mode=0660 \
-Dlink-udev-shared=false \
..</userinput></screen>
<variablelist>
<title>The meaning of the meson options:</title>
<varlistentry>
<term><parameter>--buildtype=release</parameter></term>
<listitem>
<para>This switch overrides the default buildtype
(<quote>debug</quote>), which produces unoptimized
binaries.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>-Dmode=release</parameter></term>
<listitem>
<para>Disable some features considered experimental by upstream.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>-Ddev-kvm-mode=0660</parameter></term>
<listitem>
<para>The default udev rule would allow all users to access
<filename class='devicefile'>/dev/kvm</filename>. The editors
consider it dangerous. This option overrides it.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>-Dlink-udev-shared=false</parameter></term>
<listitem>
<para>This option prevents udev from linking to the internal
systemd shared library,
<systemitem class='library'>libsystemd-shared</systemitem>.
This library is designed to be shared by many Systemd components
and it's too overkill for a udev-only installation.</para>
</listitem>
</varlistentry>
</variablelist>
<para>Only build the components needed for udev:</para>
<screen><userinput remap="make">ninja udevadm systemd-hwdb \
$(grep -o -E "^build (src/libudev|src/udev|rules.d|hwdb.d)[^:]*" \
build.ninja | awk '{ print $2 }') \
$(realpath libudev.so --relative-to .)</userinput></screen>
<para>Install the package:</para>
<screen><userinput remap="install">install -vm755 -d {/usr/lib,/etc}/udev/{hwdb,rules}.d
install -vm755 udevadm /usr/bin/
install -vm755 systemd-hwdb /usr/bin/udev-hwdb
ln -sv ../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/{*.rules,README} /usr/lib/udev/rules.d/
install -vm644 hwdb.d/* ../hwdb.d/{*.hwdb,README} /usr/lib/udev/hwdb.d/
install -vm755 $(find src/udev -type f | grep -F -v ".") /usr/lib/udev</userinput></screen>
<para>Install some custom rules and support files useful in an LFS
environment:</para>
<screen><userinput remap="install">tar -xvf ../../&udev-lfs-version;.tar.xz
make -f &udev-lfs-version;/Makefile.lfs install</userinput></screen>
</sect2>
<sect2 id="conf-udev" role="configuration">
<title>Configuring Udev</title>
<indexterm zone="conf-udev">
<primary sortas="a-Udev">Udev</primary>
<secondary>configuring</secondary>
</indexterm>
<indexterm zone="conf-udev">
<primary sortas="e-/etc/udev/hwdb.bin">/etc/udev/hwdb.bin</primary>
</indexterm>
<para>Information about hardware devices is maintained in the
<filename class="directory">/etc/udev/hwdb.d</filename> and
<filename class="directory">/usr/lib/udev/hwdb.d</filename> directories.
<application>Udev</application> needs that information to be compiled
into a binary database <filename>/etc/udev/hwdb.bin</filename>. Create the
initial database:</para>
<screen><userinput>udev-hwdb update</userinput></screen>
<para>This command needs to be run each time the hardware information is
updated.</para>
</sect2>
<sect2 id="contents-udev" role="content">
<title>Contents of Udev</title>
<segmentedlist>
<segtitle>Installed programs</segtitle>
<segtitle>Installed libraries</segtitle>
<segtitle>Installed directories</segtitle>
<seglistitem>
<seg>udevadm, udevd (symlink to udevadm), and udev-hwdb</seg>
<seg>libudev.so</seg>
<seg>/etc/udev and /usr/lib/udev</seg>
</seglistitem>
</segmentedlist>
<variablelist>
<bridgehead renderas="sect3">Short Descriptions</bridgehead>
<?dbfo list-presentation="list"?>
<?dbhtml list-presentation="table"?>
<varlistentry id="udevadm" revision="sysv">
<term><command>udevadm</command></term>
<listitem>
<para>Generic udev administration tool: controls the udevd daemon,
provides info from the Udev database, monitors uevents, waits for
uevents to finish, tests Udev configuration, and triggers uevents
for a given device</para>
<indexterm zone="ch-system-udev udevadm">
<primary sortas="b-udevadm">udevadm</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="udevd">
<term><command>udevd</command></term>
<listitem>
<para>A daemon that listens for uevents on the netlink socket,
creates devices and runs the configured external programs in
response to these uevents</para>
<indexterm zone="ch-system-udev udevd">
<primary sortas="b-udevd">udevd</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="udev-hwdb">
<term><command>udev-hwdb</command></term>
<listitem>
<para>Updates or query the hardware database.</para>
<indexterm zone="ch-system-udev udev-hwdb">
<primary sortas="b-udev-hwdb">udev-hwdb</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libudev">
<term><filename class="libraryfile">libudev</filename></term>
<listitem>
<para>A library interface to udev device information</para>
<indexterm zone="ch-system-udev libudev">
<primary sortas="c-libudev">libudev</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="etc-udev">
<term><filename class="directory">/etc/udev</filename></term>
<listitem>
<para>Contains Udev configuration files,
device permissions, and rules for device naming</para>
<indexterm zone="ch-system-udev etc-udev">
<primary sortas="e-/etc/udev">/etc/udev</primary>
</indexterm>
</listitem>
</varlistentry>
</variablelist>
</sect2>
</sect1>

View File

@ -37,7 +37,7 @@
<para>The interface names depend on the implementation and
configuration of the udev daemon running on the system. The udev
daemon for LFS (installed in <xref linkend="ch-system-eudev"/>) will
daemon for LFS (installed in <xref linkend="ch-system-udev"/>) will
not run until the LFS system is booted. So the interface names
in the LFS system cannot always be determined by running
those commands on the host distro,

View File

@ -156,13 +156,6 @@
<!ENTITY elfutils-fin-du "120 MB">
<!ENTITY elfutils-fin-sbu "0.3 SBU">
<!ENTITY eudev-version "3.2.12">
<!ENTITY eudev-size "2,145 KB">
<!ENTITY eudev-url "https://github.com/eudev-project/eudev/releases/download/v&eudev-version;/eudev-&eudev-version;.tar.gz">
<!ENTITY eudev-md5 "6f1559ca7c27013ff68816e2732498a3">
<!ENTITY eudev-fin-du "83 MB">
<!ENTITY eudev-fin-sbu "0.1 SBU">
<!ENTITY expat-version "2.5.0">
<!ENTITY expat-size "450 KB">
<!ENTITY expat-url "&sourceforge;expat/expat-&expat-version;.tar.xz">
@ -713,6 +706,9 @@
<!ENTITY tzdata-md5 "5aa672bf129b44dd915f8232de38e49a">
<!ENTITY tzdata-home "https://www.iana.org/time-zones">
<!ENTITY udev-fin-du "83 MB">
<!ENTITY udev-fin-sbu "0.1 SBU">
<!ENTITY udev-lfs-version "udev-lfs-20171102">
<!ENTITY udev-lfs-size "11 KB">
<!ENTITY udev-lfs-url "&anduin-sources;/&udev-lfs-version;.tar.xz">