2022-05-18 21:52:36 +03:00
|
|
|
|
<?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-preps-settingenviron">
|
|
|
|
|
<?dbhtml filename="settingenvironment.html"?>
|
|
|
|
|
|
|
|
|
|
<title>Настройка окружения</title>
|
|
|
|
|
|
|
|
|
|
<para>Настроим хорошо работающее окружение, создав два новых файла запуска
|
|
|
|
|
для оболочки <command>bash</command>. Войдя в систему как пользователь
|
|
|
|
|
<systemitem class="username">lfs</systemitem>, введите следующую команду,
|
|
|
|
|
чтобы создать новый <filename>.bash_profile</filename>:</para>
|
|
|
|
|
|
|
|
|
|
<screen><userinput>cat > ~/.bash_profile << "EOF"
|
|
|
|
|
<literal>exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash</literal>
|
|
|
|
|
EOF</userinput></screen>
|
|
|
|
|
|
|
|
|
|
<para>При входе в систему под учетной записью пользователя
|
2023-06-26 21:32:36 +03:00
|
|
|
|
<systemitem class="username">lfs</systemitem> или при переключении на
|
|
|
|
|
&lfs-user;, используя команду <command>su</command> с опцией
|
|
|
|
|
<quote><parameter>-</parameter></quote>, начальная оболочка представляет собой
|
|
|
|
|
оболочку <emphasis>login</emphasis>, которая читает данные из
|
|
|
|
|
<filename>/etc/profile</filename> хоста (который, вероятно, содержит некоторые
|
2022-05-18 21:52:36 +03:00
|
|
|
|
настройки и переменные среды), а затем <filename>.bash_profile</filename>.
|
|
|
|
|
Команда <command>exec env -i.../bin/bash</command> в файле
|
|
|
|
|
<filename>.bash_profile</filename> заменяет запущенную оболочку новой, не
|
|
|
|
|
содержащей переменные среды, за исключением переменных <envar>HOME</envar>,
|
|
|
|
|
<envar>TERM</envar>, и <envar>PS1</envar>. Это гарантирует, что никакие
|
|
|
|
|
нежелательные и потенциально опасные переменные среды из хост-системы не попадут
|
2023-06-26 21:32:36 +03:00
|
|
|
|
в среду сборки.</para>
|
2022-05-18 21:52:36 +03:00
|
|
|
|
|
|
|
|
|
<para>Новый экземпляр оболочки представляет собой <emphasis>non-login</emphasis>
|
|
|
|
|
оболочку, которая не считывает и не выполняет содержимое файлов
|
|
|
|
|
<filename>/etc/profile</filename> и <filename>.bash_profile</filename>,
|
|
|
|
|
а вместо этого выполняет чтение из файла <filename>.bashrc</filename>.
|
|
|
|
|
Создайте файл <filename>.bashrc</filename>:</para>
|
|
|
|
|
|
2023-09-11 17:37:23 +03:00
|
|
|
|
<screen arch="default"><userinput>cat > ~/.bashrc << "EOF"
|
2022-05-18 21:52:36 +03:00
|
|
|
|
<literal>set +h
|
|
|
|
|
umask 022
|
|
|
|
|
LFS=/mnt/lfs
|
|
|
|
|
LC_ALL=POSIX
|
|
|
|
|
LFS_TGT=$(uname -m)-lfs-linux-gnu
|
|
|
|
|
PATH=/usr/bin
|
|
|
|
|
if [ ! -L /bin ]; then PATH=/bin:$PATH; fi
|
|
|
|
|
PATH=$LFS/tools/bin:$PATH
|
|
|
|
|
CONFIG_SITE=$LFS/usr/share/config.site
|
|
|
|
|
export LFS LC_ALL LFS_TGT PATH CONFIG_SITE</literal>
|
2023-09-11 17:37:23 +03:00
|
|
|
|
EOF</userinput></screen>
|
|
|
|
|
<screen arch="ml_32,ml_x32,ml_all"><userinput>cat > ~/.bashrc << "EOF"
|
|
|
|
|
<literal>set +h
|
|
|
|
|
umask 022
|
|
|
|
|
LFS=/mnt/lfs
|
|
|
|
|
LC_ALL=POSIX
|
|
|
|
|
LFS_TGT=x86_64-lfs-linux-gnu
|
|
|
|
|
LFS_TGT32=i686-lfs-linux-gnu
|
|
|
|
|
LFS_TGTX32=x86_64-lfs-linux-gnux32
|
|
|
|
|
PATH=/usr/bin
|
|
|
|
|
if [ ! -L /bin ]; then PATH=/bin:$PATH; fi
|
|
|
|
|
PATH=$LFS/tools/bin:$PATH
|
|
|
|
|
CONFIG_SITE=$LFS/usr/share/config.site
|
|
|
|
|
export LFS LC_ALL LFS_TGT LFS_TGT32 LFS_TGTX32 PATH</literal>
|
2022-05-18 21:52:36 +03:00
|
|
|
|
EOF</userinput></screen>
|
|
|
|
|
|
|
|
|
|
<variablelist>
|
|
|
|
|
<title>Значение настроек в <filename>.bashrc</filename></title>
|
|
|
|
|
|
|
|
|
|
<varlistentry>
|
|
|
|
|
<term><parameter>set +h</parameter></term>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>Команда <command>set +h</command> отключает хэш-функцию
|
|
|
|
|
<command>bash</command>. Хеширование является полезной функцией
|
|
|
|
|
—<command>bash</command> использует хеш-таблицу для запоминания полного
|
|
|
|
|
пути к исполняемому файлу, чтобы избежать многократного поиска одного и того же
|
|
|
|
|
исполняемого файла в переменной окружения <envar>PATH</envar>. Однако новые
|
2023-06-26 21:32:36 +03:00
|
|
|
|
инструменты требуется использовать сразу же после их установки. Отключение
|
|
|
|
|
хэш-функции, заставляет оболочку искать переменную окружения <envar>PATH</envar>,
|
|
|
|
|
всякий раз, когда программу необходимо запустить. Таким образом, оболочка найдет вновь
|
2022-05-18 21:52:36 +03:00
|
|
|
|
скомпилированные инструменты в <filename class="directory">$LFS/tools/bin</filename>,
|
|
|
|
|
как только они станут доступны, не запоминая предыдущую версию той же программы,
|
|
|
|
|
предоставленную хост-дистрибутивом, в <filename class='directory'>/usr/bin</filename> или
|
|
|
|
|
<filename class='directory'>/bin</filename>.</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
</varlistentry>
|
|
|
|
|
|
|
|
|
|
<varlistentry>
|
|
|
|
|
<term><parameter>umask 022</parameter></term>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>Установка значения пользовательской маски создания файлов (umask) 022 гарантирует,
|
|
|
|
|
что вновь созданные файлы и каталоги доступны для записи только их владельцу, но
|
|
|
|
|
будут доступны для чтения и выполнения остальным пользователям (при условии, что
|
2024-02-01 14:39:54 +03:00
|
|
|
|
системный вызов <ulink role='man' url='&man;open.2'>open(2)</ulink> использует режимы по
|
|
|
|
|
умолчанию, новые файлы получат разрешения 644, а каталоги 755).</para>
|
2022-05-18 21:52:36 +03:00
|
|
|
|
</listitem>
|
|
|
|
|
</varlistentry>
|
|
|
|
|
|
|
|
|
|
<varlistentry>
|
|
|
|
|
<term><parameter>LFS=/mnt/lfs</parameter></term>
|
|
|
|
|
<listitem>
|
2023-06-26 21:32:36 +03:00
|
|
|
|
<para>Переменная окружения <envar>LFS</envar> должна указывать на выбранную точку монтирования.</para>
|
2022-05-18 21:52:36 +03:00
|
|
|
|
</listitem>
|
|
|
|
|
</varlistentry>
|
|
|
|
|
|
|
|
|
|
<varlistentry>
|
|
|
|
|
<term><parameter>LC_ALL=POSIX</parameter></term>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>Переменная <envar>LC_ALL</envar> управляет локализацией определенных
|
2023-08-02 23:14:31 +03:00
|
|
|
|
программ, и формирует сообщения в соответствии с локализацией указанной страны.
|
2022-05-18 21:52:36 +03:00
|
|
|
|
Установка в <envar>LC_ALL</envar> значения <quote>POSIX</quote> или <quote>C</quote>
|
2023-06-26 21:32:36 +03:00
|
|
|
|
(они эквивалентны) гарантирует, что все будет работать должным образом в среде
|
|
|
|
|
кросс-компиляции.</para>
|
2022-05-18 21:52:36 +03:00
|
|
|
|
</listitem>
|
|
|
|
|
</varlistentry>
|
|
|
|
|
|
|
|
|
|
<varlistentry>
|
2023-08-12 18:50:06 +03:00
|
|
|
|
<term><parameter>LFS_TGT=$(uname -m)-lfs-linux-gnu</parameter></term>
|
2022-05-18 21:52:36 +03:00
|
|
|
|
<listitem>
|
|
|
|
|
<para>Переменная <envar>LFS_TGT</envar> устанавливает нестандартное, но
|
|
|
|
|
совместимое описание компьютера для использования при создании кросс-компилятора
|
|
|
|
|
и компоновщика, а также при кросс-компиляции временного набора инструментов.
|
2023-06-26 21:32:36 +03:00
|
|
|
|
Дополнительная информация об этом представлена в <xref linkend="ch-tools-toolchaintechnotes" role=""/>.</para>
|
2022-05-18 21:52:36 +03:00
|
|
|
|
</listitem>
|
|
|
|
|
</varlistentry>
|
|
|
|
|
|
|
|
|
|
<varlistentry>
|
|
|
|
|
<term><parameter>PATH=/usr/bin</parameter></term>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>Многие современные дистрибутивы Linux объединили <filename
|
|
|
|
|
class="directory">/bin</filename> и <filename
|
2023-06-26 21:32:36 +03:00
|
|
|
|
class="directory">/usr/bin</filename>. В этом случае стандартной переменной <envar>PATH</envar>
|
|
|
|
|
необходимо установить значение <filename
|
|
|
|
|
class="directory">/usr/bin/</filename> для окружения из <xref
|
|
|
|
|
linkend="chapter-temporary-tools"/>. Когда это не так, следующая строка добавит
|
2022-05-21 23:04:03 +03:00
|
|
|
|
<filename class="directory">/bin</filename> к пути.</para>
|
2022-05-18 21:52:36 +03:00
|
|
|
|
</listitem>
|
|
|
|
|
</varlistentry>
|
|
|
|
|
|
|
|
|
|
<varlistentry>
|
|
|
|
|
<term><parameter>if [ ! -L /bin ]; then PATH=/bin:$PATH; fi</parameter></term>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>Если <filename class="directory">/bin</filename> не является символической
|
2023-06-26 21:32:36 +03:00
|
|
|
|
ссылкой, то его необходимо добавить в переменную <envar>PATH</envar>.</para>
|
2022-05-18 21:52:36 +03:00
|
|
|
|
</listitem>
|
|
|
|
|
</varlistentry>
|
|
|
|
|
|
|
|
|
|
<varlistentry>
|
|
|
|
|
<term><parameter>PATH=$LFS/tools/bin:$PATH</parameter></term>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>Поместив <filename class="directory">$LFS/tools/bin</filename> перед
|
|
|
|
|
стандартным <envar>PATH</envar>, кросс-компилятор, установленный в начале
|
|
|
|
|
<xref linkend="chapter-cross-tools"/>, будет обнаружен оболочкой сразу после
|
|
|
|
|
его установки. Это, в сочетании с отключением хеширования, ограничивает риск
|
2023-06-26 21:32:36 +03:00
|
|
|
|
использования компилятора хоста вместо кросс-компилятора.</para>
|
2022-05-18 21:52:36 +03:00
|
|
|
|
</listitem>
|
|
|
|
|
</varlistentry>
|
|
|
|
|
|
|
|
|
|
<varlistentry>
|
|
|
|
|
<term><parameter>CONFIG_SITE=$LFS/usr/share/config.site</parameter></term>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>В <xref linkend="chapter-cross-tools"/> и <xref linkend="chapter-temporary-tools"/>,
|
|
|
|
|
если эта переменная не задана, сценарии <command>configure</command> могут попытаться
|
|
|
|
|
загрузить элементы конфигурации, специфичные для некоторых дистрибутивов, из
|
|
|
|
|
<filename>/usr/share/config.site</filename> в хост-системе. Переопределите её,
|
2023-06-14 21:49:47 +03:00
|
|
|
|
чтобы предотвратить потенциальное влияние хоста.</para>
|
2022-05-18 21:52:36 +03:00
|
|
|
|
</listitem>
|
|
|
|
|
</varlistentry>
|
|
|
|
|
|
|
|
|
|
<varlistentry>
|
|
|
|
|
<term><parameter>export ...</parameter></term>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>Приведенные выше команды установили некоторые переменные, чтобы сделать
|
|
|
|
|
их видимыми в любых вложенных оболочках, мы экспортируем их.</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
</varlistentry>
|
|
|
|
|
|
|
|
|
|
</variablelist>
|
|
|
|
|
|
|
|
|
|
<important>
|
|
|
|
|
|
2023-06-26 21:32:36 +03:00
|
|
|
|
<para>Некоторые коммерческие дистрибутивы добавляют недокументированный экземпляр
|
|
|
|
|
<filename>/etc/bash.bashrc</filename> для инициализации <command>bash</command>.
|
2022-05-18 21:52:36 +03:00
|
|
|
|
Этот файл потенциально может изменить среду пользователя
|
|
|
|
|
<systemitem class="username">lfs</systemitem> таким образом, что это может
|
|
|
|
|
повлиять на сборку важных пакетов LFS. Чтобы убедиться, что пользовательская
|
|
|
|
|
среда <systemitem class="username">lfs</systemitem> чиста, проверьте наличие
|
|
|
|
|
файла <filename>/etc/bash.bashrc</filename> и, если он есть, переименуйте его.
|
2023-11-22 15:30:04 +03:00
|
|
|
|
От имени пользователя <systemitem class="username">root</systemitem>, запустите:</para>
|
2022-05-18 21:52:36 +03:00
|
|
|
|
|
|
|
|
|
<screen role="nodump"><userinput>[ ! -e /etc/bash.bashrc ] || mv -v /etc/bash.bashrc /etc/bash.bashrc.NOUSE</userinput></screen>
|
|
|
|
|
|
2023-06-26 21:32:36 +03:00
|
|
|
|
<para>Когда пользователь <systemitem class="username">lfs</systemitem> больше не
|
|
|
|
|
нужен (в начале <xref linkend="chapter-chroot-temporary-tools"/> ) вы можете безопасно
|
|
|
|
|
восстановить <filename>/etc/bash.bashrc</filename> (по желанию).</para>
|
2022-05-18 21:52:36 +03:00
|
|
|
|
|
|
|
|
|
<para>Обратите внимание, что пакет LFS Bash, который мы создадим в
|
|
|
|
|
<xref linkend="ch-system-bash"/>, не настроен на загрузку или выполнение
|
|
|
|
|
<filename>/etc/bash.bashrc</filename>, поэтому этот файл бесполезен в
|
|
|
|
|
готовой системе LFS.</para>
|
|
|
|
|
</important>
|
|
|
|
|
|
2023-11-22 15:30:04 +03:00
|
|
|
|
<para>
|
|
|
|
|
Для многих современных систем с несколькими процессорами (или ядрами)
|
|
|
|
|
время компиляции пакета можно сократить, выполнив <quote>параллельную сборку</quote>,
|
|
|
|
|
либо установив переменную среды, либо сообщив программе <command>make</command>,
|
|
|
|
|
сколько ядер задействовать для сборки. Например, процессор Intel Core i9-13900K
|
|
|
|
|
имеет 8 ядер P (производительность) и 16 ядер E (энергоэффективность), ядро P может
|
|
|
|
|
одновременно запускать два потока, поэтому каждое ядро P моделируется ядром Linux
|
|
|
|
|
как два логических ядра. В результате получается 32 логических ядра. Очевидный способ
|
|
|
|
|
задействовать все эти логические ядра - разрешить <command>make</command> создавать
|
|
|
|
|
до 32 заданий сборки. Это можно сделать, передав параметр <parameter>-j32</parameter>
|
2024-02-07 11:10:52 +03:00
|
|
|
|
команде <command>make</command>:
|
2023-11-22 15:30:04 +03:00
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
<screen role='nodump'><userinput>make -j32</userinput></screen>
|
|
|
|
|
|
|
|
|
|
<para>
|
|
|
|
|
Или установите переменную окружения <envar>MAKEFLAGS</envar>, и ее содержимое будет
|
|
|
|
|
автоматически использоваться <command>make</command> в качестве параметров командной
|
|
|
|
|
строки:
|
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
<screen role='nodump'><userinput>export MAKEFLAGS=-j32</userinput></screen>
|
|
|
|
|
|
|
|
|
|
<important>
|
|
|
|
|
<para>
|
|
|
|
|
Никогда не передавайте параметр <parameter>-j</parameter> без номера в
|
|
|
|
|
<command>make</command> и не устанавливайте такой параметр в <envar>MAKEFLAGS</envar>.
|
|
|
|
|
Иначе <command>make</command> будет создавать бесконечные задания сборки,
|
|
|
|
|
что вызовет проблемы со стабильностью системы.
|
|
|
|
|
</para>
|
|
|
|
|
</important>
|
|
|
|
|
|
|
|
|
|
<para>
|
|
|
|
|
Чтобы использовать все логические ядра, доступные для сборки пакетов в
|
|
|
|
|
<xref linkend='chapter-cross-tools'/> и
|
|
|
|
|
<xref linkend='chapter-temporary-tools'/>, укажите параметр <envar>MAKEFLAGS</envar>
|
|
|
|
|
в <filename>.bashrc сейчас</filename>:
|
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
<screen><userinput>cat >> ~/.bashrc << "EOF"
|
|
|
|
|
<literal>export MAKEFLAGS=-j<replaceable>$(nproc)</replaceable></literal>
|
|
|
|
|
EOF</userinput></screen>
|
|
|
|
|
|
|
|
|
|
<para>
|
|
|
|
|
Замените <replaceable>$(nproc)</replaceable> количеством логических ядер, которые
|
|
|
|
|
вы хотите использовать, если вы планируете использовать не все логические ядра.
|
|
|
|
|
</para>
|
|
|
|
|
|
2023-06-26 21:32:36 +03:00
|
|
|
|
<para>Наконец, чтобы убедиться, что среда полностью подготовлена для сборки временных
|
|
|
|
|
инструментов, перечитайте только что созданный профиль пользователя:</para>
|
2022-05-18 21:52:36 +03:00
|
|
|
|
|
|
|
|
|
<screen><userinput>source ~/.bash_profile</userinput></screen>
|
|
|
|
|
|
|
|
|
|
</sect1>
|