lfs-ru/chapter07/kernfs.xml

114 lines
6.5 KiB
XML
Raw Normal View History

<?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>
2023-06-30 01:00:18 +03:00
<para>Приложения, работающие в пользовательском пространстве, используют различные
файловые системы, созданные ядром, для взаимодействия с самим ядром. Эти
файловые системы являются виртуальными: для них не используется дисковое пространство.
Содержимое файловых систем находится в памяти. Эти файловые системы должны быть
смонтированы в дереве каталогов $LFS, чтобы приложения могли найти их в среде
<command>chroot</command>.</para>
2023-06-30 01:00:18 +03:00
<para>Начните с создания каталогов, в которые будут смонтированы эти виртуальные
файловые системы:</para>
<screen><userinput>mkdir -pv $LFS/{dev,proc,sys,run}</userinput></screen>
<sect2 id="ch-tools-bindmount">
<title>Монтирование и заполнение /dev</title>
<para>Во время обычной загрузки ядро автоматически монтирует файловую систему
2023-06-30 01:00:18 +03:00
<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>
<screen><userinput>mount -v --bind /dev/pts $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>The meaning of the mount options for devpts:</title>
<varlistentry>
<term><parameter>gid=5</parameter></term>
<listitem>
<para>This ensures that all devpts-created device nodes are owned by
group ID 5. This is the ID we will use later on for the <systemitem
class="groupname">tty</systemitem> group. We use the group ID instead
of a name, since the host system might use a different ID for its
<systemitem class="groupname">tty</systemitem> group.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>mode=0620</parameter></term>
<listitem>
<para>This ensures that all devpts-created device nodes have mode 0620
(user readable and writable, group writable). Together with the
option above, this ensures that devpts will create device nodes that
meet the requirements of grantpt(), meaning the Glibc
<command>pt_chown</command> helper binary (which is not installed by
default) is not necessary.</para>
</listitem>
</varlistentry>
</variablelist>
-->
<para>В некоторых хост-системах <filename>/dev/shm</filename> является
символической ссылкой на <filename class="directory">/run/shm</filename>.
/run tmpfs был смонтирован выше, поэтому нужно создать только каталог.</para>
2023-06-30 01:00:18 +03:00
<para>В других хост-системах <filename>/dev/shm</filename> является точкой
монтирования для tmpfs. В этом случае монтирование /dev приведет только к созданию
/dev/shm как каталога в среде chroot. В этой ситуации мы должны явно смонтировать
tmpfs:</para>
<screen><userinput>if [ -h $LFS/dev/shm ]; then
mkdir -pv $LFS/$(readlink $LFS/dev/shm)
2023-06-30 01:00:18 +03:00
else
mount -t tmpfs -o nosuid,nodev tmpfs $LFS/dev/shm
fi</userinput></screen>
</sect2>
</sect1>