lfs-ru/chapter08/udev.xml
2024-02-12 01:28:02 +05:00

379 lines
16 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="UTF-8"?>
<!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 из Systemd-&systemd-version;</title>
<indexterm zone="ch-system-udev">
<primary sortas="a-Udev">Udev</primary>
</indexterm>
<sect2 role="package">
<title/>
<para>Пакет Udev содержит программы для динамического создания узлов устройств.</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>Установка пакета Udev</title>
<para>Udev является частью пакета systemd-&systemd-version;. Используйте файл
systemd-&systemd-version;.tar.xz в качестве исходного архива.</para>
<para>Удалите две ненужные группы
<systemitem class="groupname">render</systemitem> и
<systemitem class="groupname">sgx</systemitem>, из правил udev по умолчанию:</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>Удалите одно правило udev, требующее полной установки Systemd:</para>
<screen><userinput remap="pre">sed '/systemd-sysctl/s/^/#/' -i rules.d/99-systemd.rules.in</userinput></screen>
<para>Измените жестко заданные пути к файлам конфигурации сети для автономной
установки udev:</para>
<screen><userinput remap="pre">sed '/NETWORK_DIRS/s/systemd/udev/' -i src/basic/path-lookup.h</userinput></screen>
<para>Подготовьте Udev к компиляции:</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 \
-Dlogind=false \
-Dvconsole=false \
..</userinput></screen>
<variablelist>
<title>Значение параметров meson:</title>
<varlistentry>
<term><parameter>--buildtype=release</parameter></term>
<listitem>
<para>Этот параметр переопределяет тип сборки по умолчанию (<quote>debug</quote>),
который создает неоптимизированные двоичные файлы.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>-Dmode=release</parameter></term>
<listitem>
<para>Отключает некоторые функции, которые разработчики считают экспериментальными.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>-Ddev-kvm-mode=0660</parameter></term>
<listitem>
<para>По умолчанию правило udev разрешает всем пользователям доступ к
<filename class='devicefile'>/dev/kvm</filename>. Редакторы LFS считают
это опасным. Данная опция переопределяет разрешение по умолчанию.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>-Dlink-udev-shared=false</parameter></term>
<listitem>
<para>Эта опция запрещает udev связываться с внутренней общей библиотекой
systemd <systemitem class='library'>libsystemd-shared</systemitem>. Эта
библиотека предназначена для совместного использования многими компонентами
Systemd, и ее использование избыточно, когда установлен только udev.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>-Dlogind=false -Dvconsole=false</parameter></term>
<listitem>
<para>Эти параметры предотвращают создание нескольких файлов правил udev,
принадлежащих другим компонентам Systemd, которые мы не будем устанавливать.</para>
</listitem>
</varlistentry>
</variablelist>
<para>Получите список предоставляемых udev helpers и сохраните его в переменной
(экспортировать его не обязательно, но это упрощает сборку от имени обычного пользователя
или при использовании менеджера пакетов):</para>
<screen><userinput remap="make">export udev_helpers=$(grep "'name' :" ../src/udev/meson.build | \
awk '{print $3}' | tr -d ",'" | grep -v 'udevadm')</userinput></screen>
<para>Соберите только компоненты, необходимые для udev:</para>
<screen><userinput remap="make">ninja udevadm systemd-hwdb \
$(ninja -n | grep -Eo '(src/(lib)?udev|rules.d|hwdb.d)/[^ ]*') \
$(realpath libudev.so --relative-to .) \
$udev_helpers</userinput></screen>
<para>Установите пакет:</para>
<screen><userinput remap="install">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</userinput></screen>
<para>Установите некоторые пользовательские правила и вспомогательные файлы,
полезные в среде LFS:</para>
<screen><userinput remap="install">tar -xvf ../../&udev-lfs-version;.tar.xz
make -f &udev-lfs-version;/Makefile.lfs install</userinput></screen>
<para>Установите справочные страницы:</para>
<!-- Please make sure systemd man pages tarball has a common leading
component in the path. -->
<screen><userinput remap="install">tar -xf ../../systemd-man-pages-&systemd-man-version;.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*</userinput></screen>
<para>Наконец, сбросьте значение переменной <envar>udev_helpers</envar>:</para>
<!-- remap="make" seems confusing but we don't have sth. like
remap="clean". -->
<screen><userinput remap="install">unset udev_helpers</userinput></screen>
</sect2>
<!-- - - - - - - - - - -->
<!-- Multilib - 32bit -->
<!-- - - - - - - - - - -->
<sect2 arch="ml_32,ml_all" role="installation">
<title>Установка Udev - 32-битная версия</title>
<para>Выполните очистку после предыдущей сборки (находясь в каталоге сборки):</para>
<screen><userinput remap="pre">rm -rf *</userinput></screen>
<para>Подготовьте Udev к компиляции:</para>
<screen><userinput remap="configure">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 \
..</userinput></screen>
<para>Скомпилируйте пакет:</para>
<screen><userinput remap="make">ninja \
$(grep -o -E "^build (src/libudev|src/udev)[^:]*" \
build.ninja | awk '{ print $2 }') \
$(realpath libudev.so --relative-to .)</userinput></screen>
<para>Установите пакет:</para>
<screen><userinput remap="install">mkdir -pv /usr/lib32/pkgconfig &amp;&amp;
cp -av libudev.so{,*[0-9]} /usr/lib32/ &amp;&amp;
sed -e "s;/usr/lib;&amp;32;g" src/libudev/libudev.pc > /usr/lib32/pkgconfig/libudev.pc</userinput></screen>
</sect2><!-- m32 -->
<!-- - - - - - - - - - -->
<!-- Multilib - x32bit -->
<!-- - - - - - - - - - -->
<sect2 arch="ml_x32,ml_all" role="installation">
<title>Установка Udev - с поддержкой x32 ABI</title>
<para>Выполните очистку после предыдущей сборки (находясь в каталоге сборки):</para>
<screen><userinput remap="pre">rm -rf *</userinput></screen>
<para>Подготовьте Udev к компиляции:</para>
<screen><userinput remap="configure">PKG_CONFIG_PATH="/usr/libx32/pkgconfig" \
CC="gcc -mx32" \
CXX="g++ -mx32" \
CFLAGS+=" -Wno-error=shift-overflow" \
CXXFLAGS+=" -Wno-error=shift-overflow" \
LANG=en_US.UTF-8 \
meson setup \
--prefix=/usr \
--buildtype=release \
-Dmode=release \
-Ddev-kvm-mode=0660 \
-Dlink-udev-shared=false \
..</userinput></screen>
<para>Скомпилируйте пакет:</para>
<screen><userinput remap="make">ninja \
$(grep -o -E "^build (src/libudev|src/udev)[^:]*" \
build.ninja | awk '{ print $2 }') \
$(realpath libudev.so --relative-to .)</userinput></screen>
<para>Установите пакет:</para>
<screen><userinput remap="install">mkdir -pv /usr/libx32/pkgconfig &amp;&amp;
cp -av libudev.so{,*[0-9]} /usr/libx32/ &amp;&amp;
sed -e "s;/usr/lib;&amp;x32;g" src/libudev/libudev.pc > /usr/libx32/pkgconfig/libudev.pc</userinput></screen>
</sect2><!-- mx32 -->
<sect2 id="conf-udev" role="configuration">
<title>Настройка 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>Информация об аппаратных устройствах хранится в каталогах
<filename class="directory">/etc/udev/hwdb.d</filename> и
<filename class="directory">/usr/lib/udev/hwdb.d</filename>.
<application>Udev</application> необходимо, чтобы эта информация была скомпилирована
в двоичную базу данных <filename>/etc/udev/hwdb.bin</filename>. Создайте исходную
базу данных:</para>
<screen><userinput>udev-hwdb update</userinput></screen>
<para>Эту команду необходимо запускать каждый раз при обновлении информации об
оборудовании.</para>
</sect2>
<sect2 id="contents-udev" role="content">
<title>Содержимое пакета Udev</title>
<segmentedlist>
<segtitle>Установленные программы</segtitle>
<segtitle>Установленные библиотеки</segtitle>
<segtitle>Созданные каталоги</segtitle>
<seglistitem>
<seg>udevadm, udevd (символическая ссылка на udevadm) и udev-hwdb</seg>
<seg>libudev.so</seg>
<seg>/etc/udev и /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>Универсальный инструмент администрирования udev: управляет демоном
udevd, предоставляет информацию из базы данных Udev, отслеживает uevents,
ожидает завершения uevents, проверяет конфигурацию Udev и запускает
uevents для данного устройства</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>Демон, который прослушивает uevents в сокете netlink, создает устройства
и запускает настроенные внешние программы в ответ на эти 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>Обновляет или запрашивает базу данных оборудования</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>Библиотека для получения информации об устройствах udev</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>Содержит файлы конфигурации Udev, разрешения для устройств и правила
именования устройств</para>
<indexterm zone="ch-system-udev etc-udev">
<primary sortas="e-/etc/udev">/etc/udev</primary>
</indexterm>
</listitem>
</varlistentry>
</variablelist>
</sect2>
</sect1>