Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия |
software:linux_server:lfs-example:chapter04 [2024/07/12 16:50] – [4.3. Создание пользователя LFS] vladpolskiy | software:linux_server:lfs-example:chapter04 [2024/07/19 03:39] (текущий) – [4.4. Настройка окружения] vladpolskiy |
---|
======Часть II. Глава 4. Заключительный этап подготовки====== | ======Часть II. Глава 4. Заключительный этап подготовки====== |
* [[software:linux_server:lfs-example:chapter03|<- назад]] | * Пред. [[software:linux_server:lfs-example:chapter03|]] |
Содержание | Содержание |
* [[software:linux_server:lfs:chapter04#4.1. Введение|4.1. Введение]] | * [[software:linux_server:lfs:chapter04#4.1. Введение|4.1. Введение]] |
В этой главе мы выполним несколько дополнительных настроек для подготовки к сборке временной системы. Мы создадим несколько каталогов в $LFS (в котором установим временные инструменты), добавим непривилегированного пользователя и настроим окружение для этого пользователя. Кроме этого, будут даны пояснения по стандартной единице времени сборки, или «SBU», которую мы используем для измерения времени необходимого для сборки пакетов LFS, и предоставим некоторую информацию о наборах тестов. | В этой главе мы выполним несколько дополнительных настроек для подготовки к сборке временной системы. Мы создадим несколько каталогов в $LFS (в котором установим временные инструменты), добавим непривилегированного пользователя и настроим окружение для этого пользователя. Кроме этого, будут даны пояснения по стандартной единице времени сборки, или «SBU», которую мы используем для измерения времени необходимого для сборки пакетов LFS, и предоставим некоторую информацию о наборах тестов. |
| |
| <code> |
| sudo su |
| </code> |
| {{:software:linux_server:lfs-example:lfs_example_102.png?|}} |
=====4.2. Создание ограниченной иерархии папок в файловой системе LFS===== | =====4.2. Создание ограниченной иерархии папок в файловой системе LFS===== |
| |
| |
Создайте необходимую иерархию каталогов, выполнив следующую команду: | Создайте необходимую иерархию каталогов, выполнив следующую команду: |
{{:software:linux_server:lfs-example:lfs_example_46.png?|}} | |
<code> | <code> |
sudo mkdir -pv $LFS/{etc,var} $LFS/usr/{bin,lib,sbin} | mkdir -pv $LFS/{etc,var} $LFS/usr/{bin,lib,sbin} |
| </code> |
| {{:software:linux_server:lfs-example:lfs_example_104.png?|}} |
| <code> |
for i in bin lib sbin; do | for i in bin lib sbin; do |
ln -sv usr/$i $LFS/$i | ln -sv usr/$i $LFS/$i |
done | done |
| </code> |
| {{:software:linux_server:lfs-example:lfs_example_105.png?|}} |
| <code> |
case $(uname -m) in | case $(uname -m) in |
x86_64) mkdir -pv $LFS/lib64 ;; | x86_64) mkdir -pv $LFS/lib64 ;; |
esac | esac |
</code> | </code> |
{{:software:linux_server:lfs-example:lfs_example_46.png?|}} | {{:software:linux_server:lfs-example:lfs_example_106.png?|}} |
| Проверим созданные ссылки и каталоги |
| <code> |
| ls -l $LFS |
| </code> |
| {{:software:linux_server:lfs-example:lfs_example_107.png?|}} |
| {{:software:linux_server:lfs-example:lfs_example_108.png?|}} |
Программы в [[software:linux_server:lfs:chapter06|Главе 6]] будут скомпилированы с помощью кросс-компилятора (более подробная информация приведена в разделе [[software:linux_server:lfs:partintro#ii. Технические примечания по сборочным инструментам|Технические примечания по сборочным инструментам]]). Чтобы отделить кросс-компилятор от других программ, он будет установлен в специальный каталог. Создайте этот каталог с помощью следующей команды: | Программы в [[software:linux_server:lfs:chapter06|Главе 6]] будут скомпилированы с помощью кросс-компилятора (более подробная информация приведена в разделе [[software:linux_server:lfs:partintro#ii. Технические примечания по сборочным инструментам|Технические примечания по сборочным инструментам]]). Чтобы отделить кросс-компилятор от других программ, он будет установлен в специальный каталог. Создайте этот каталог с помощью следующей команды: |
| |
<code> | <code> |
sudo mkdir -pv $LFS/tools | mkdir -pv $LFS/tools |
</code> | </code> |
{{:software:linux_server:lfs-example:lfs_example_48.png?|}} | {{:software:linux_server:lfs-example:lfs_example_48.png?|}} |
<WRAP left round tip 100%> | <WRAP left round tip 100%> |
**Примечание** \\ | **Примечание** \\ |
Директория **lost+found** которую мы не создавали, была создана утилитой fsck, которая предназначена для проверки файловой системы. | Директория **lost+found** которую мы не создавали, может быть создана утилитой fsck, которая предназначена для проверки файловой системы. |
Если утилита fsck в ходе проверки находит данные в файловой системе, которые повреждены или не имеют имени в системе («осиротевшие»), то такие файлы помещаются в директорию lost+found. | Если утилита fsck в ходе проверки находит данные в файловой системе, которые повреждены или не имеют имени в системе («осиротевшие»), то такие файлы помещаются в директорию lost+found. |
| |
Чтобы просмотреть содержимое директории **lost+found** можно воспользоваться следующими командами: | Чтобы просмотреть содержимое директории **lost+found** можно воспользоваться следующими командами: |
<code> | <code> |
sudo ls -l $LFS/lost+found | ls -l $LFS/lost+found |
</code> | </code> |
</WRAP> | </WRAP> |
| |
<code> | <code> |
sudo groupadd lfs | groupadd lfs |
sudo useradd -s /bin/bash -g lfs -m -k /dev/null lfs | useradd -s /bin/bash -g lfs -m -k /dev/null lfs |
</code> | </code> |
{{:software:linux_server:lfs-example:lfs_example_53.png?|}} | {{:software:linux_server:lfs-example:lfs_example_53.png?|}} |
| |
<code> | <code> |
sudo passwd lfs | passwd lfs |
</code> | </code> |
{{:software:linux_server:lfs-example:lfs_example_55.png?|}} | {{:software:linux_server:lfs-example:lfs_example_55.png?|}} |
| |
<code> | <code> |
sudo chown -v lfs $LFS/{usr{,/*},lib,var,etc,bin,sbin,tools} | chown -v lfs $LFS/{usr{,/*},lib,var,etc,bin,sbin,tools} |
| </code> |
| {{:software:linux_server:lfs-example:lfs_example_109.png?|}} |
| <code> |
case $(uname -m) in | case $(uname -m) in |
x86_64) sudo chown -v lfs $LFS/lib64 ;; | x86_64) chown -v lfs $LFS/lib64 ;; |
esac | esac |
</code> | </code> |
| {{:software:linux_server:lfs-example:lfs_example_56.png?|}} |
<WRAP left round info 100%> | <WRAP left round info 100%> |
**Примечание** \\ | **Примечание** \\ |
В некоторых хост-системах следующая команда не выполняется должным образом и приостанавливает вход пользователя lfs в фоновом режиме. Если подсказка "lfs:~$" не появляется сразу, ввод команды fg устранит проблему. | В некоторых хост-системах следующая команда не выполняется должным образом и приостанавливает вход пользователя lfs в фоновом режиме. Если подсказка "lfs:~$" не появляется сразу, ввод команды fg устранит проблему. |
</WRAP> | </WRAP> |
| Проверим, что пользователь lfs является владельцем наших каталогов |
| <code> |
| ls -l $LFS/ |
| </code> |
| {{:software:linux_server:lfs-example:lfs_example_57.png?|}} |
Затем запустите оболочку, работающую от имени пользователя //lfs//. Это можно сделать, войдя в систему как //lfs// на виртуальной консоли или с помощью следующей команды замены/переключения пользователя: | Затем запустите оболочку, работающую от имени пользователя //lfs//. Это можно сделать, войдя в систему как //lfs// на виртуальной консоли или с помощью следующей команды замены/переключения пользователя: |
| |
su - lfs | su - lfs |
</code> | </code> |
| Логинимся от имени lfs |
| {{:software:linux_server:lfs-example:lfs_example_58.png?|}} |
Аргумент «-» передает значение команде su для запуска оболочки входа в систему, а не обычной оболочки. Разница между этими двумя типами оболочек подробно описана в [[https://man.archlinux.org/man/bash.1|bash(1)]] и info bash. | Аргумент «-» передает значение команде su для запуска оболочки входа в систему, а не обычной оболочки. Разница между этими двумя типами оболочек подробно описана в [[https://man.archlinux.org/man/bash.1|bash(1)]] и info bash. |
| |
| |
При входе в систему под учетной записью пользователя lfs или при переключении на lfs, используя команду su с опцией «-», начальная оболочка представляет собой оболочку login, которая читает данные из /etc/profile хоста (который, вероятно, содержит некоторые настройки и переменные среды), а затем .bash_profile. Команда exec env -i.../bin/bash в файле .bash_profile заменяет запущенную оболочку новой, не содержащей переменные среды, за исключением переменных HOME, TERM, и PS1. Это гарантирует, что никакие нежелательные и потенциально опасные переменные среды из хост-системы не попадут в среду сборки. | При входе в систему под учетной записью пользователя lfs или при переключении на lfs, используя команду su с опцией «-», начальная оболочка представляет собой оболочку login, которая читает данные из /etc/profile хоста (который, вероятно, содержит некоторые настройки и переменные среды), а затем .bash_profile. Команда exec env -i.../bin/bash в файле .bash_profile заменяет запущенную оболочку новой, не содержащей переменные среды, за исключением переменных HOME, TERM, и PS1. Это гарантирует, что никакие нежелательные и потенциально опасные переменные среды из хост-системы не попадут в среду сборки. |
| {{:software:linux_server:lfs-example:lfs_example_59.png?|}} |
Новый экземпляр оболочки представляет собой non-login оболочку, которая не считывает и не выполняет содержимое файлов /etc/profile и .bash_profile, а вместо этого выполняет чтение из файла .bashrc. Создайте файл .bashrc: | Новый экземпляр оболочки представляет собой non-login оболочку, которая не считывает и не выполняет содержимое файлов /etc/profile и .bash_profile, а вместо этого выполняет чтение из файла .bashrc. Создайте файл .bashrc: |
| |
EOF | EOF |
</code> | </code> |
| <details> |
**Значение настроек в .bashrc** | <summary>«**Список значения настроек в .bashrc**»</summary> |
| |
* **set +h** | * **set +h** |
* **export ...** | * **export ...** |
Приведенные выше команды установили некоторые переменные, чтобы сделать их видимыми в любых вложенных оболочках, мы экспортируем их. | Приведенные выше команды установили некоторые переменные, чтобы сделать их видимыми в любых вложенных оболочках, мы экспортируем их. |
| </details> |
| {{:software:linux_server:lfs-example:lfs_example_60.png?|}} |
| |
<WRAP left round important 100%> | <WRAP left round important 100%> |
**Важно** \\ | **Важно** \\ |
Некоторые коммерческие дистрибутивы добавляют недокументированный экземпляр /etc/bash.bashrc для инициализации bash. Этот файл потенциально может изменить среду пользователя lfs таким образом, что это может повлиять на сборку важных пакетов LFS. Чтобы убедиться, что пользовательская среда lfs чиста, проверьте наличие файла /etc/bash.bashrc и, если он есть, переименуйте его. От имени пользователя root, запустите: | Некоторые коммерческие дистрибутивы добавляют недокументированный экземпляр /etc/bash.bashrc для инициализации bash. Этот файл потенциально может изменить среду пользователя lfs таким образом, что это может повлиять на сборку важных пакетов LFS. Чтобы убедиться, что пользовательская среда lfs чиста, проверьте наличие файла /etc/bash.bashrc и, если он есть, переименуйте его. От имени пользователя root, запустите: |
| <code> |
| exit |
| </code> |
<code> | <code> |
[ ! -e /etc/bash.bashrc ] || mv -v /etc/bash.bashrc /etc/bash.bashrc.NOUSE | [ ! -e /etc/bash.bashrc ] || mv -v /etc/bash.bashrc /etc/bash.bashrc.NOUSE |
</code> | </code> |
| {{:software:linux_server:lfs-example:lfs_example_62.png?|}} |
Когда пользователь lfs больше не нужен (в начале [[software:linux_server:lfs:chapter07|Главы 7]]) вы можете безопасно восстановить /etc/bash.bashrc (по желанию). | Когда пользователь lfs больше не нужен (в начале [[software:linux_server:lfs:chapter07|Главы 7]]) вы можете безопасно восстановить /etc/bash.bashrc (по желанию). |
| |
export MAKEFLAGS=-j32 | export MAKEFLAGS=-j32 |
</code> | </code> |
| Посмотрим данные о процессоре |
| <code> |
| sudo apt-get install hwinfo |
| hwinfo --short |
| </code> |
| {{:software:linux_server:lfs-example:lfs_example_64.png?|}} |
| На тестовой машине установлен AMD Ryzen 7 3700X 8-Core Processor |
| {{:software:linux_server:lfs-example:lfs_example_65.png?|}} |
| Откроем файл ~/.bashrc в редакторе nano |
| <code> |
| nano ~/.bashrc |
| </code> |
| {{:software:linux_server:lfs-example:lfs_example_111.png?|}} |
| Добавим в конце нашу строку **export MAKEFLAGS=-j32** |
| {{:software:linux_server:lfs-example:lfs_example_110.png?|}} |
| CTRL+O -> ENTER -> CTRL+X для сохранения и выхода из редактора |
| <code> |
| nproc |
| </code> |
| {{:software:linux_server:lfs-example:lfs_example_112.png?|}} |
<WRAP left round important 100%> | <WRAP left round important 100%> |
**Важно** \\ | **Важно** \\ |
<code> | <code> |
cat >> ~/.bashrc << "EOF" | cat >> ~/.bashrc << "EOF" |
export MAKEFLAGS=-j$(nproc) | export MAKEFLAGS=-j32 |
EOF | EOF |
</code> | </code> |
| {{:software:linux_server:lfs-example:lfs_example_113.png?|}} |
Замените **$(nproc)** количеством логических ядер, которые вы хотите использовать, если вы планируете использовать не все логические ядра. | Замените **$(nproc)** количеством логических ядер, которые вы хотите использовать, если вы планируете использовать не все логические ядра. |
| |
Наконец, чтобы убедиться, что среда полностью подготовлена для сборки временных инструментов, перечитайте только что созданный профиль пользователя: | Наконец, чтобы убедиться, что среда полностью подготовлена для сборки временных инструментов, перечитайте только что созданный профиль пользователя: |
| Перейдем к пользователю lfs |
| <code> |
| su - lfs |
| </code> |
<code> | <code> |
source ~/.bash_profile | source ~/.bash_profile |
</code> | </code> |
| <code> |
| echo $MAKEFLAGS |
| </code> |
| {{:software:linux_server:lfs-example:lfs_example_114.png?|}} |
| Посмотрим что внутри нашего файла .bash_profile |
| <code> |
| nano ~/.bash_profile |
| </code> |
| {{:software:linux_server:lfs-example:lfs_example_69.png?|}} |
| Жмем CTRL+X для выхода из редактора nano |
| {{:software:linux_server:lfs-example:lfs_example_68.png?|}} |
| <code> |
| exit |
| </code> |
| {{:software:linux_server:lfs-example:lfs_example_114.1.png?|}} |
=====4.5. О SBU (Стандартная единица времени сборки)===== | =====4.5. О SBU (Стандартная единица времени сборки)===== |
| |
| |
Иногда наборы тестов не работают, по причинам, о которых знают разработчики и которые они считают некритичными. Просмотрите журналы, расположенные по адресу https://mirror.linuxfromscratch.ru/lfs/build-logs/12.1/, чтобы проверить, ожидаются ли сбои. Этот сайт актуален для всех наборов тестов, описанных в книге. | Иногда наборы тестов не работают, по причинам, о которых знают разработчики и которые они считают некритичными. Просмотрите журналы, расположенные по адресу https://mirror.linuxfromscratch.ru/lfs/build-logs/12.1/, чтобы проверить, ожидаются ли сбои. Этот сайт актуален для всех наборов тестов, описанных в книге. |
| * След. [[software:linux_server:lfs-example:chapter05|]] |