lfs-ru/chapter07/kernfs.xml
Poltern 0f038fb272 Fix and unify the commands creating the link target of /dev/shm
$(realpath /dev/shm) will return the absolute path of the target of
/dev/shm, thus the command will work for both absolute symlink and
relative symlink.
2024-02-06 15:12:27 +05:00

117 lines
7.3 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-tools-kernfs">
<?dbhtml filename="kernfs.html"?>
<title>Подготовка виртуальных файловых систем ядра</title>
<indexterm zone="ch-tools-kernfs">
<primary sortas="e-/dev/">/dev/*</primary>
</indexterm>
<para>Приложения, работающие в пользовательском пространстве, используют различные
файловые системы, созданные ядром, для взаимодействия с самим ядром. Эти
файловые системы являются виртуальными: для них не используется дисковое пространство.
Содержимое файловых систем находится в памяти. Эти файловые системы должны быть
смонтированы в дереве каталогов $LFS, чтобы приложения могли найти их в среде
<command>chroot</command>.</para>
<para>Начните с создания каталогов, в которые будут смонтированы эти виртуальные
файловые системы:</para>
<screen><userinput>mkdir -pv $LFS/{dev,proc,sys,run}</userinput></screen>
<sect2 id="ch-tools-bindmount">
<title>Монтирование и заполнение /dev</title>
<para>Во время обычной загрузки ядро автоматически монтирует файловую систему
<systemitem class="filesystem">devtmpfs</systemitem> в каталог
<filename class="directory">/dev</filename>; ядро создает узлы устройств в этой
виртуальной файловой системе в процессе загрузки или при первом обнаружении устройства,
или доступе к нему. Демон udev может изменять владельца или разрешения
узлов устройств, созданных ядром, или создавать новые узлы устройств или
символические ссылки, чтобы облегчить работу разработчиков дистрибутива или
системных администраторов. (Подробности смотрите в
<xref linkend='ch-config-udev-device-node-creation'/>.) Если ядро хоста
поддерживает &devtmpfs;, мы можем просто смонтировать &devtmpfs; в
<filename class='directory'>$LFS/dev</filename> и положиться на ядро для его
заполнения.</para>
<para>Но в некоторых ядрах хоста отсутствует поддержка &devtmpfs;,
эти хост-дистрибутивы используют разные методы для создания содержимого
<filename class="directory">/dev</filename>. Таким образом,
единственный независимый от хоста способ заполнить каталог
<filename class="directory">$LFS/dev</filename> - это привязка к каталогу
<filename class="directory">/dev</filename> хост-системы. Связное монтирование -
это особый тип монтирования, который делает дерево каталога или файл видимым
в каком-либо другом месте. Для этого используйте следующую команду:</para>
<screen><userinput>mount -v --bind /dev $LFS/dev</userinput></screen>
</sect2>
<sect2 id="ch-tools-kernfsmount">
<title>Монтирование виртуальных файловых систем ядра</title>
<para>Теперь смонтируйте оставшиеся виртуальные файловые системы:</para>
<!-- Do not put any option after $LFS/${mountpoint} or jhalfs cannot
handle it! -->
<screen><userinput>mount -vt devpts devpts -o gid=5,mode=0620 $LFS/dev/pts
mount -vt proc proc $LFS/proc
mount -vt sysfs sysfs $LFS/sys
mount -vt tmpfs tmpfs $LFS/run</userinput></screen>
<variablelist>
<title>Значение параметров монтирования для devpts:</title>
<varlistentry>
<term><parameter>gid=5</parameter></term>
<listitem>
<para>Этот параметр гарантирует, что все узлы устройств, созданные devpts, принадлежат
группе с идентификатором 5. Это идентификатор, который мы будем использовать позже для
группы <systemitem class="groupname">tty</systemitem>. Мы используем идентификатор группы
вместо имени, поскольку хост-система может использовать другой идентификатор для своей
группы <systemitem class="groupname">tty</systemitem>.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>mode=0620</parameter></term>
<listitem>
<para>Этот параметр гарантирует, что все узлы устройств, созданные devpts, будут иметь
права 0620 (доступен для чтения и записи пользователем, доступен для записи группе).
Вместе с вышеуказанной опцией это гарантирует, что devpts создаст узлы устройств,
соответствующие требованиям grantpt(), а это означает, что вспомогательный файл Glibc
<command>pt_chown</command> (который не установлен по умолчанию) не требуется.</para>
</listitem>
</varlistentry>
</variablelist>
<para>В некоторых хост-системах <filename>/dev/shm</filename> является
символической ссылкой на каталог <filename class="directory">/run/shm</filename>.
/run tmpfs был смонтирован выше, поэтому сейчас необходимо только создать каталог
с правильными разрешениями.</para>
<para>В других хост-системах <filename>/dev/shm</filename> является точкой
монтирования для tmpfs. В этом случае монтирование /dev приведет только к созданию
/dev/shm как каталога в среде chroot. В этой ситуации мы должны явно смонтировать
tmpfs:</para>
<screen><userinput>if [ -h $LFS/dev/shm ]; then
install -v -d -m 1777 $LFS$(realpath /dev/shm)
else
mount -vt tmpfs -o nosuid,nodev tmpfs $LFS/dev/shm
fi</userinput></screen>
</sect2>
</sect1>