Translated chapter07

This commit is contained in:
Poltern 2023-06-30 03:00:18 +05:00
parent 98d02fdebb
commit 9650365d12
6 changed files with 105 additions and 78 deletions

View File

@ -10,12 +10,12 @@
<title>Вход в окружение Chroot</title>
<para>Теперь, когда все пакеты, необходимые для сборки остальных инструментов находятся
<para>Теперь, когда все пакеты, необходимые для сборки остальных инструментов установлены
в системе, пришло время войти в окружение chroot и завершить установку временных
инструментов. Это окружение также будет использоваться для установки конечной системы.
инструментов. Эта среда также будет использоваться для установки конечной системы.
От имени пользователя <systemitem class="username">root</systemitem> выполните
следующую команду для входа в окружение, которое на данный момент заполнено только
временными инструментами:</para>
следующую команду для входа в chroot, в которой на данный момент нет ничего, кроме
временных инструментов:</para>
<screen role="nodump"><userinput>chroot "$LFS" /usr/bin/env -i \
HOME=/root \
@ -24,25 +24,25 @@
PATH=/usr/bin:/usr/sbin \
/bin/bash --login</userinput></screen>
<para>Параметр <parameter>-i</parameter> команды <command>env</command>
очищает все переменные в окружении chroot. После этого переменные
<para>Параметр <parameter>-i</parameter> команды <command>env</command>, очистит
все переменные в среде chroot. После этого переменные
<envar>HOME</envar>, <envar>TERM</envar>, <envar>PS1</envar> и
<envar>PATH</envar> будут установлены заново. Конструкция
<parameter>TERM=$TERM</parameter> установит переменную TERM внутри chroot
в то же значение, что и вне chroot. Эта переменная необходима для корректной работы таким
программам как <command>vim</command> и <command>less</command>. Если понадобятся
в то же значение, что и вне chroot. Эта переменная необходима для корректной работы таких
программ как <command>vim</command> и <command>less</command>. Если понадобятся
другие переменные окружения, такие как <envar>CFLAGS</envar> или <envar>CXXFLAGS</envar>,
то это подходящее место для их установки.</para>
<para>С этого момента больше нет необходимости использовать переменную
<envar>LFS</envar>, поскольку вся работа будет ограничена файловой системой
LFS. Это связано с тем, что оболочке Bash сообщается, что
<filename class="directory">$LFS</filename> теперь является корневым
каталогом (<filename class="directory">/</filename>).</para>
LFS; команда <command>chroot</command> запускает оболочку Bash с корневым
каталогом (<filename class="directory">/</filename>), установленным в
<filename class="directory">$LFS</filename>.</para>
<para>Обратите внимание, что каталог <filename class="directory">/tools/bin</filename> не
указан в переменной окружения <envar>PATH</envar>. Это означает, что кросс-тулчейн
больше не будет использоваться внутри chroot окружения.</para>
больше не будет использоваться.</para>
<para>Обратите внимание, что в командной строке <command>bash</command> будет указано
<computeroutput>I have no name!</computeroutput>. Это нормально, поскольку файл

View File

@ -18,10 +18,10 @@
<screen><userinput>rm -rf /usr/share/{info,man,doc}/*</userinput></screen>
<para>Во-вторых, файлы .la библиотеки libtool полезны только при компоновке
статических библиотек. Они не нужны и потенциально опасны при использовании
динамических библиотек, особенно при использовании систем сборки, отличных от
autotools. Удалите эти файлы, пока вы находитесь в chroot:</para>
<para>Во-вторых, в современных системах Linux файлы .la библиотеки libtool полезны
только для libltdl. Никакие библиотеки в LFS не загружаются с помощью libltdl.
Известно, что некоторые файлы .la могут привести к сбою во время сборки
пакетов BLFS. Удалите эти файлы сейчас:</para>
<screen><userinput>find /usr/{lib,libexec} -name \*.la -delete</userinput></screen>
@ -42,8 +42,8 @@
последующего повторного использования. В случае фатальных сбоев в следующих
главах часто оказывается, что удалить все и начать заново (более осторожно) —
лучший вариант восстановления. К сожалению, все временные файлы также будут удалены.
Чтобы не тратить лишнее время на переделку того, что было успешно собрано, полезно
создать резервную копию текущей системы LFS.
Чтобы не тратить лишнее время на повторную сборку того, что было успешно собрано,
полезно создать резервную копию текущей системы LFS.
</para>
<note><para>
@ -57,9 +57,8 @@
Следующие шаги выполняются вне среды chroot. Это означает, что прежде чем
продолжить вы должны покинуть среду chroot. Причиной этого является то,
что необходимо получить доступ к расположению файловой системы за пределами
среды chroot для хранения/чтения архива резервных копий, который не следует
помещать в иерархию <filename class="directory">$LFS</filename> из соображений
безопасности.
среды chroot для хранения/чтения архива резервных копий, который не должен
размещаться в иерархии <filename class="directory">$LFS</filename>.
</para>
<para>
@ -72,9 +71,9 @@
<para>
Все следующие инструкции выполняются пользователем
<systemitem class="username">root</systemitem> в вашей хост-системе.
Будьте особенно внимательны к командам, которые вы собираетесь запускать,
так как ошибки здесь могут изменить вашу хост-систему. Имейте в виду,
что переменная окружения <envar>LFS</envar> по умолчанию установлена
Будьте особенно внимательны к командам, которые вы собираетесь запускать,
поскольку ошибки, допущенные здесь, могут изменить вашу хост-систему. Имейте
в виду, что переменная окружения <envar>LFS</envar> по умолчанию установлена
для пользователя <systemitem class="username">lfs</systemitem>, но
может не быть установлена для <systemitem class="username">root</systemitem>.
</para>
@ -90,7 +89,8 @@
<para>Перед созданием резервной копии размонтируйте виртуальные файловые системы:</para>
<screen role="nodump"><userinput>umount $LFS/dev/pts
<screen role="nodump"><userinput>mountpoint -q $LFS/dev/shm &amp;&amp; umount $LFS/dev/shm
umount $LFS/dev/pts
umount $LFS/{sys,proc,run,dev}</userinput></screen>
<para>
@ -102,13 +102,9 @@ umount $LFS/{sys,proc,run,dev}</userinput></screen>
<para>
Обратите внимание, что в приведенных ниже инструкциях указан домашний каталог
пользователя <systemitem class="username">root</systemitem> хост-системы,
который обычно находится в корневой файловой системе.
</para>
<para>
Замените <envar>$HOME</envar> каталогом по вашему выбору, если вы не хотите,
чтобы резервная копия хранилась в домашнем каталоге пользователя <systemitem
class="username">root</systemitem>.
который обычно находится в корневой файловой системе. Замените <envar>$HOME</envar>
каталогом на ваш выбор, если вы не хотите, чтобы резервная копия хранилась
в домашнем каталоге пользователя <systemitem class="username">root</systemitem>.
</para>
<para>
@ -143,7 +139,7 @@ tar -cJpf $HOME/lfs-temp-tools-&version;.tar.xz .</userinput></screen>
время на восстановление. Поскольку исходники находятся в папке
<filename class="directory">$LFS</filename>, они также включены в архив резервной
копии, поэтому их не нужно загружать повторно. Убедившись, что переменная <envar>$LFS</envar>
настроена правильно, восстановите резервную копию, выполнив следующие команды:
настроена правильно, вы можете восстановить резервную копию, выполнив следующие команды:
</para>
<!-- Make the following look different so users don't blindly run the
@ -159,7 +155,7 @@ rm -rf ./*
tar -xpf $HOME/lfs-temp-tools-&version;.tar.xz</computeroutput></screen>
<para>
Еще раз проверьте, правильно ли настроено окружение, и продолжайте сборку системы.
Еще раз проверьте, правильно ли настроено окружение, и продолжайте сборку остальной части системы.
</para>
<important>

View File

@ -38,7 +38,7 @@
систем в файле <filename>/etc/mtab</filename>. Современные ядра хранят этот список
внутри себя и предоставляют его пользователю через файловую систему <filename
class="directory">/proc</filename>. Чтобы удовлетворять требованиям утилит, которые
ожидают наличие <filename>/etc/mtab</filename> создайте следующую символическую ссылку:</para>
ожидают наличия <filename>/etc/mtab</filename>, создайте следующую символическую ссылку:</para>
<screen><userinput>ln -sv /proc/self/mounts /etc/mtab</userinput></screen>
@ -46,8 +46,8 @@
некоторые наборы тестов, а также один из файлов конфигурации Perl:</para>
<screen><userinput>cat &gt; /etc/hosts &lt;&lt; EOF
127.0.0.1 localhost $(hostname)
::1 localhost
<literal>127.0.0.1 localhost $(hostname)
::1 localhost</literal>
EOF</userinput></screen>
<para>Чтобы пользователь <systemitem class="username">root</systemitem> мог войти в
@ -153,10 +153,10 @@ users:x:999:
nogroup:x:65534:</literal>
EOF</userinput></screen>
<para>Созданные группы не являются частью какого-либо стандарта — эти группы
частично определяются требованиями конфигурации Udev в главе
9, и частично соглашением, используемым рядом существующих Linux
дистрибутивов. Кроме того, некоторые наборы тестов зависят от конкретных пользователей или
<para>Созданные группы не являются частью какого-либо стандарта — это группы,
определяемые частично требованиями конфигурации Udev в главе 9, а частично
общими соглашениями, используемыми в ряде существующих дистрибутивов Linux.
Кроме того, некоторые наборы тестов зависят от конкретных пользователей или
групп. Специфкация LSB (доступна по адресу <ulink
url="https://refspecs.linuxfoundation.org/lsb.shtml"/>) рекомендует, чтобы,
помимо группы <systemitem class="groupname">root</systemitem> с
@ -177,7 +177,7 @@ EOF</userinput></screen>
и <systemitem class="groupname">nogroup</systemitem> для того, чтобы избежать
несопоставленных идентификаторов. Другие дистрибутивы могут обрабатывать этот
идентификатор по-разному, поэтому любая переносимая программа не должна зависеть
от этого.</para>
от этого присвоения.</para>
<para>Для некоторых тестов в <xref linkend="chapter-building-system"/> требуется
обычный пользователь. Добавим такого пользователя здесь и удалим эту учетную запись

View File

@ -10,10 +10,11 @@
<title>Создание каталогов</title>
<para>Пришло время создать структуру каталогов для файловой системы LFS.</para>
<para>Пришло время создать полную структуру каталогов в файловой системе LFS.</para>
<note><para>Некоторые каталоги были созданы ранее с помощью явных инструкций или
при установке некоторых пакетов. Они повторяются ниже для полноты картины.</para></note>
<note><para>Некоторые из каталогов, упомянутых в этом разделе, возможно, уже
были созданы ранее с помощью явных инструкций или при установке некоторых пакетов.
Они повторяются ниже для полноты картины.</para></note>
<para>Создайте несколько каталогов, которые не входили в ограниченный набор,
используемый в предыдущих главах, выполнив следующую команду:</para>
@ -39,29 +40,40 @@ ln -sfv /run/lock /var/lock
install -dv -m 0750 /root
install -dv -m 1777 /tmp /var/tmp</userinput></screen>
<para>По умолчанию каталоги создаются с правами 755, но это нежелательно для
всех каталогов. В приведенных выше командах вносятся два изменения &mdash; одно
в домашний каталог пользователя <systemitem
class="username">root</systemitem>, а другое в каталог для временных файлов.</para>
<para>По умолчанию каталоги создаются с правами 755, но это нежелательно делать
для всех каталогов. В приведенных выше командах вносятся два изменения &mdash; одно
в домашний каталог пользователя <systemitem class="username">root</systemitem>,
а другое в каталоги для временных файлов.</para>
<para>Первое изменение гарантирует, что никто не сможет войти в каталог
<filename class="directory">/root</filename> &mdash; но он так же, как обычный пользователь
сможет работать в своем домашнем каталоге. Второе изменение гарантирует, что любой
пользователь может писать в каталоги <filename class="directory">/tmp</filename> и <filename
class="directory">/var/tmp</filename>, но не может удалять из них файлы другого пользователя.
Последнее запрещено так называемым <quote>sticky bit (липким битом)</quote>, старшим
битом (1) в битовой маске 1777</para>
<filename class="directory">/root</filename> &mdash; точно так же, как обычный
пользователь сделал бы это со своим собственным домашним каталогом. Второе изменение
гарантирует, что любой пользователь может писать в каталоги <filename class="directory">/tmp</filename>
и <filename class="directory">/var/tmp</filename>, но не может удалять из них файлы
другого пользователя. Последнее запрещено так называемым <quote>sticky bit (липким битом)</quote>,
старшим битом (1) в битовой маске 1777</para>
<sect2>
<title>Примечание о соответствии требованиям FHS</title>
<para>Дерево каталогов основано на стандарте иерархии файловой системы (FHS)
<para>Это дерево каталогов основано на стандарте иерархии файловой системы (FHS)
(доступен по адресу <ulink
url="https://refspecs.linuxfoundation.org/fhs.shtml"/>). FHS также указывает, что наличие
некоторых каталогов необязательно, например, <filename
class="directory">/usr/local/games</filename> и <filename
class="directory">/usr/share/games</filename>. Мы создаем только необходимые каталоги.
Несмотря на это, вы имеете полное право создать их.</para>
class="directory">/usr/share/games</filename>. В LFS мы создаем только те каталоги,
которые действительно необходимы. Однако, не стесняйтесь создавать дополнительные
каталоги, если хотите.</para>
<warning>
<para>
FHS не требует наличия каталога <filename class="directory">/usr/lib64</filename>,
и редакторы LFS решили его не использовать. Чтобы инструкции в LFS и BLFS работали
корректно, крайне важно, чтобы этот каталог не существовал. Время от времени вам
следует проверять, что он не существует, потому что его легко создать непреднамеренно,
и это, вероятно, приведет к поломке вашей системы.
</para>
</warning>
</sect2>

View File

@ -18,15 +18,15 @@
</para>
<para>Для правильной работы изолированной среды необходимо установить связь с
работающим ядром. Это делается через так называемые <emphasis>виртуальные файловые
системы ядра</emphasis>, которые необходимо монтировать при входе в среду chroot.
работающим ядром. Это делается с помощью так называемых <emphasis>виртуальных файловых
систем ядра</emphasis>, которые будут смонтированы перед входом в среду chroot.
Вы можете проверить, смонтированы ли они, выполнив команду <command>findmnt</command>.</para>
<para>До <xref linkend="ch-tools-chroot"/> команды должны выполняться от имени
<systemitem class="username">root</systemitem> с установленной переменной
<envar>LFS</envar>. После входа в chroot все команды выполняются от имени &root;,
к счастью, без доступа к операционной системе компьютера, на котором вы собираете LFS.
В любом случае будьте осторожны, так как с помощью ошибочно введенных команд легко
разрушить всю систему LFS.</para>
В любом случае будьте осторожны, так как неверными командами легко разрушить всю
систему LFS.</para>
</sect1>

View File

@ -14,12 +14,15 @@
<primary sortas="e-/dev/">/dev/*</primary>
</indexterm>
<para>Различные файловые системы, экспортируемые ядром, используются для обмена
данными с самим ядром и из него. Эти файловые системы являются виртуальными в
том смысле, что для них не используется дисковое пространство. Содержимое
файловых систем хранится в памяти.</para>
<para>Приложения, работающие в пользовательском пространстве, используют различные
файловые системы, созданные ядром, для взаимодействия с самим ядром. Эти
файловые системы являются виртуальными: для них не используется дисковое пространство.
Содержимое файловых систем находится в памяти. Эти файловые системы должны быть
смонтированы в дереве каталогов $LFS, чтобы приложения могли найти их в среде
<command>chroot</command>.</para>
<para>Сначала создайте каталоги, в которые будут смонтированы файловые системы:</para>
<para>Начните с создания каталогов, в которые будут смонтированы эти виртуальные
файловые системы:</para>
<screen><userinput>mkdir -pv $LFS/{dev,proc,sys,run}</userinput></screen>
@ -27,17 +30,26 @@
<title>Монтирование и заполнение /dev</title>
<para>Во время обычной загрузки ядро автоматически монтирует файловую систему
<systemitem class="filesystem">devtmpfs</systemitem> в каталоге
<filename class="directory">/dev</filename>, это позволяет
динамически создавать устройства в этой виртуальной файловой системе по мере их
обнаружения или получения доступа. Создание устройств обычно выполняется во время
процесса загрузки ядром и Udev.
Поскольку наша новая система еще не имеет Udev и не загружена, необходимо смонтировать
и заполнить <filename class="directory">/dev</filename> вручную.Это достигается
путем связного монтирования каталога
<filename class="directory">/dev</filename> хост-системы. Связное монтирование - это особый
тип монтирования, позволяющий создавать зеркальный каталог или точку монтирования в
какое-либо другое место. Используйте следующую команду для этого:</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>
@ -85,8 +97,15 @@ mount -vt tmpfs tmpfs $LFS/run</userinput></screen>
символической ссылкой на <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
mkdir -pv $LFS/$(readlink $LFS/dev/shm)
else
mount -t tmpfs -o nosuid,nodev tmpfs $LFS/dev/shm
fi</userinput></screen>
</sect2>