Приложения, работающие в пользовательском пространстве, используют различные файловые системы, созданные ядром, для взаимодействия с самим ядром. Эти файловые системы являются виртуальными: для них не используется дисковое пространство. Содержимое файловых систем находится в памяти. Эти файловые системы должны быть смонтированы в дереве каталогов $LFS, чтобы приложения могли найти их в среде chroot.
Начните с создания каталогов, в которые будут смонтированы эти виртуальные файловые системы:
mkdir -pv $LFS/{dev,proc,sys,run}
Во время обычной загрузки ядро автоматически монтирует файловую
систему devtmpfs
в каталог
/dev
; ядро создает узлы устройств в
этой виртуальной файловой системе в процессе загрузки или при
первом обнаружении устройства, или доступе к нему. Демон udev может
изменять владельца или разрешения узлов устройств, созданных ядром,
или создавать новые узлы устройств или символические ссылки, чтобы
облегчить работу разработчиков дистрибутива или системных
администраторов. (Подробности смотрите в Раздел 9.3.2.2, «Создание
узла устройства».) Если ядро хоста поддерживает devtmpfs
, мы можем просто смонтировать
devtmpfs
в $LFS/dev
и положиться на ядро для его заполнения.
Но в некоторых ядрах хоста отсутствует поддержка devtmpfs
, эти хост-дистрибутивы используют
разные методы для создания содержимого /dev
. Таким образом, единственный независимый от
хоста способ заполнить каталог $LFS/dev
- это привязка к каталогу /dev
хост-системы. Связное монтирование - это
особый тип монтирования, который делает дерево каталога или файл
видимым в каком-либо другом месте. Для этого используйте следующую
команду:
mount -v --bind /dev $LFS/dev
Теперь смонтируйте оставшиеся виртуальные файловые системы:
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
Значение параметров монтирования для devpts:
gid=5
Этот параметр гарантирует, что все узлы устройств, созданные
devpts, принадлежат группе с идентификатором 5. Это
идентификатор, который мы будем использовать позже для группы
tty
. Мы используем
идентификатор группы вместо имени, поскольку хост-система
может использовать другой идентификатор для своей группы
tty
.
mode=0620
Этот параметр гарантирует, что все узлы устройств, созданные devpts, будут иметь права 0620 (доступен для чтения и записи пользователем, доступен для записи группе). Вместе с вышеуказанной опцией это гарантирует, что devpts создаст узлы устройств, соответствующие требованиям grantpt(), а это означает, что вспомогательный файл Glibc pt_chown (который не установлен по умолчанию) не требуется.
В некоторых хост-системах /dev/shm
является символической ссылкой на каталог /run/shm
. /run tmpfs был смонтирован выше,
поэтому сейчас необходимо только создать каталог с правильными
разрешениями.
В других хост-системах /dev/shm
является точкой монтирования для tmpfs. В этом случае монтирование
/dev приведет только к созданию /dev/shm как каталога в среде
chroot. В этой ситуации мы должны явно смонтировать tmpfs:
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