software:linux_server:lfs:chapter07
Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| software:linux_server:lfs:chapter07 [2024/07/02 11:38] – [7.12. Util-linux-2.39.3] vladpolskiy | software:linux_server:lfs:chapter07 [Дата неизвестна] (текущий) – удалено - внешнее изменение (Дата неизвестна) 127.0.0.1 | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| - | ======7. Вход в окружение Chroot и создание дополнительных временных инструментов====== | ||
| - | Содержание | ||
| - | * [[software: | ||
| - | * [[software: | ||
| - | * [[software: | ||
| - | * [[software: | ||
| - | * [[software: | ||
| - | * [[software: | ||
| - | |7.6. Создание основных файлов и символических ссылок | ||
| - | ]] | ||
| - | * [[software: | ||
| - | * [[software: | ||
| - | * [[software: | ||
| - | * [[software: | ||
| - | * [[software: | ||
| - | * [[software: | ||
| - | * [[software: | ||
| - | |||
| - | =====7.1. Введение===== | ||
| - | |||
| - | В этой главе рассказывается, | ||
| - | |||
| - | Для правильной работы изолированной среды необходимо установить связь с работающим ядром. Это делается с помощью так называемых виртуальных файловых систем ядра, которые будут смонтированы перед входом в среду chroot. Вы можете проверить, | ||
| - | |||
| - | До [[software: | ||
| - | |||
| - | =====7.2. Смена владельца===== | ||
| - | |||
| - | <WRAP left round info 100%> | ||
| - | **Примечание** \\ | ||
| - | Команды, | ||
| - | </ | ||
| - | |||
| - | В настоящее время вся иерархия каталогов в $LFS принадлежит пользователю **lfs**, существующему только на хост-системе. Если права на файлы и каталоги внутри $LFS оставить как есть, то они будут принадлежать ID пользователя без существующей учетной записи. Это опасно, | ||
| - | |||
| - | Для решения проблемы измените владельца каталогов $LFS/* на пользователя **root**, выполнив следующую команду: | ||
| - | |||
| - | < | ||
| - | chown -R root:root $LFS/ | ||
| - | case $(uname -m) in | ||
| - | x86_64) chown -R root:root $LFS/lib64 ;; | ||
| - | esac | ||
| - | </ | ||
| - | =====7.3. Подготовка виртуальных файловых систем ядра===== | ||
| - | |||
| - | Приложения, | ||
| - | |||
| - | Начните с создания каталогов, | ||
| - | |||
| - | < | ||
| - | mkdir -pv $LFS/ | ||
| - | </ | ||
| - | |||
| - | ====7.3.1. Монтирование и заполнение /dev==== | ||
| - | |||
| - | Во время обычной загрузки ядро автоматически монтирует файловую систему devtmpfs в каталог /dev; ядро создает узлы устройств в этой виртуальной файловой системе в процессе загрузки или при первом обнаружении устройства, | ||
| - | |||
| - | Но в некоторых ядрах хоста отсутствует поддержка devtmpfs, эти хост-дистрибутивы используют разные методы для создания содержимого /dev. Таким образом, | ||
| - | |||
| - | < | ||
| - | mount -v --bind /dev $LFS/dev | ||
| - | </ | ||
| - | |||
| - | ====7.3.2. Монтирование виртуальных файловых систем ядра==== | ||
| - | |||
| - | Теперь смонтируйте оставшиеся виртуальные файловые системы: | ||
| - | |||
| - | < | ||
| - | mount -vt devpts devpts -o gid=5, | ||
| - | mount -vt proc proc $LFS/proc | ||
| - | mount -vt sysfs sysfs $LFS/sys | ||
| - | mount -vt tmpfs tmpfs $LFS/run | ||
| - | </ | ||
| - | |||
| - | Значение параметров монтирования для devpts: | ||
| - | |||
| - | * **gid=5** | ||
| - | Этот параметр гарантирует, | ||
| - | |||
| - | * **mode=0620** | ||
| - | Этот параметр гарантирует, | ||
| - | |||
| - | В некоторых хост-системах /dev/shm является символической ссылкой на каталог /run/shm. /run tmpfs был смонтирован выше, поэтому сейчас необходимо только создать каталог с правильными разрешениями. | ||
| - | |||
| - | В других хост-системах /dev/shm является точкой монтирования для tmpfs. В этом случае монтирование /dev приведет только к созданию /dev/shm как каталога в среде chroot. В этой ситуации мы должны явно смонтировать tmpfs: | ||
| - | |||
| - | < | ||
| - | if [ -h $LFS/ | ||
| - | install -v -d -m 1777 $LFS$(realpath /dev/shm) | ||
| - | else | ||
| - | mount -vt tmpfs -o nosuid, | ||
| - | fi | ||
| - | </ | ||
| - | |||
| - | |||
| - | =====7.4. Вход в окружение Chroot===== | ||
| - | |||
| - | Теперь, | ||
| - | |||
| - | < | ||
| - | chroot " | ||
| - | HOME=/ | ||
| - | TERM=" | ||
| - | PS1=' | ||
| - | PATH=/ | ||
| - | MAKEFLAGS=" | ||
| - | TESTSUITEFLAGS=" | ||
| - | /bin/bash --login | ||
| - | </ | ||
| - | |||
| - | Если вы не хотите использовать все доступные логические ядра, замените параметр $(nproc) количеством логических ядер, которые вы хотите использовать для сборки пакетов в этой и последующих главах. На наборы тестов некоторых пакетов (в частности Autoconf, Libtool и Tar) в [[software: | ||
| - | |||
| - | Параметр -i команды env, очистит все переменные в среде chroot. После этого переменные HOME, TERM, PS1 и PATH будут установлены заново. Конструкция TERM=$TERM установит переменную TERM внутри chroot в то же значение, | ||
| - | |||
| - | С этого момента больше нет необходимости использовать переменную LFS, поскольку вся работа будет ограничена файловой системой LFS; команда chroot запускает оболочку Bash с корневым каталогом (/), установленным в $LFS. | ||
| - | |||
| - | Обратите внимание, | ||
| - | |||
| - | Также обратите внимание, | ||
| - | |||
| - | <WRAP left round info 100%> | ||
| - | **Примечание** \\ | ||
| - | Важно, чтобы все команды в оставшейся части этой главы и следующих главах выполнялись из среды chroot. Если вы покидаете эту среду по какой-либо причине (например, | ||
| - | </ | ||
| - | =====7.5. Создание каталогов===== | ||
| - | |||
| - | Пришло время создать полную структуру каталогов в файловой системе LFS. | ||
| - | |||
| - | <WRAP left round info 100%> | ||
| - | **Примечание** \\ | ||
| - | Некоторые из каталогов, | ||
| - | </ | ||
| - | |||
| - | Создайте несколько каталогов, | ||
| - | |||
| - | < | ||
| - | mkdir -pv / | ||
| - | </ | ||
| - | |||
| - | Создайте необходимые подкаталоги, | ||
| - | |||
| - | < | ||
| - | mkdir -pv / | ||
| - | mkdir -pv / | ||
| - | mkdir -pv / | ||
| - | mkdir -pv / | ||
| - | mkdir -pv / | ||
| - | mkdir -pv / | ||
| - | mkdir -pv / | ||
| - | mkdir -pv / | ||
| - | mkdir -pv / | ||
| - | mkdir -pv / | ||
| - | |||
| - | ln -sfv /run /var/run | ||
| - | ln -sfv /run/lock /var/lock | ||
| - | |||
| - | install -dv -m 0750 /root | ||
| - | install -dv -m 1777 /tmp /var/tmp | ||
| - | </ | ||
| - | |||
| - | По умолчанию каталоги создаются с правами 755, но это нежелательно делать для всех каталогов. В приведенных выше командах вносятся два изменения — одно в домашний каталог пользователя root, а другое в каталоги для временных файлов. | ||
| - | |||
| - | Первое изменение гарантирует, | ||
| - | |||
| - | ====7.5.1. Примечание о соответствии требованиям FHS==== | ||
| - | |||
| - | Это дерево каталогов основано на стандарте иерархии файловой системы (FHS) (доступен по адресу https:// | ||
| - | |||
| - | <WRAP left round alert 100%> | ||
| - | **Предупреждение** \\ | ||
| - | FHS не требует наличия каталога /usr/lib64, и редакторы LFS решили его не использовать. Чтобы инструкции в LFS и BLFS работали корректно, | ||
| - | </ | ||
| - | |||
| - | =====7.6. Создание основных файлов и символических ссылок===== | ||
| - | |||
| - | Исторически сложилось, | ||
| - | |||
| - | < | ||
| - | ln -sv / | ||
| - | </ | ||
| - | |||
| - | Создайте файл **/ | ||
| - | |||
| - | < | ||
| - | cat > /etc/hosts << EOF | ||
| - | 127.0.0.1 | ||
| - | ::1 localhost | ||
| - | EOF | ||
| - | </ | ||
| - | |||
| - | Чтобы пользователь **root** мог войти в систему и распознавался системой, | ||
| - | |||
| - | Создайте файл **/ | ||
| - | |||
| - | < | ||
| - | cat > /etc/passwd << " | ||
| - | root: | ||
| - | bin: | ||
| - | daemon: | ||
| - | messagebus: | ||
| - | systemd-journal-gateway: | ||
| - | systemd-journal-remote: | ||
| - | systemd-journal-upload: | ||
| - | systemd-network: | ||
| - | systemd-resolve: | ||
| - | systemd-timesync: | ||
| - | systemd-coredump: | ||
| - | uuidd: | ||
| - | systemd-oom: | ||
| - | nobody: | ||
| - | EOF | ||
| - | </ | ||
| - | |||
| - | Пароль пользователя **root** будет задан позднее. | ||
| - | |||
| - | Создайте файл **/ | ||
| - | |||
| - | < | ||
| - | cat > /etc/group << " | ||
| - | root:x:0: | ||
| - | bin: | ||
| - | sys:x:2: | ||
| - | kmem:x:3: | ||
| - | tape:x:4: | ||
| - | tty:x:5: | ||
| - | daemon:x:6: | ||
| - | floppy:x:7: | ||
| - | disk:x:8: | ||
| - | lp:x:9: | ||
| - | dialout: | ||
| - | audio:x:11: | ||
| - | video:x:12: | ||
| - | utmp:x:13: | ||
| - | cdrom:x:15: | ||
| - | adm:x:16: | ||
| - | messagebus: | ||
| - | systemd-journal: | ||
| - | input:x:24: | ||
| - | mail:x:34: | ||
| - | kvm:x:61: | ||
| - | systemd-journal-gateway: | ||
| - | systemd-journal-remote: | ||
| - | systemd-journal-upload: | ||
| - | systemd-network: | ||
| - | systemd-resolve: | ||
| - | systemd-timesync: | ||
| - | systemd-coredump: | ||
| - | uuidd:x:80: | ||
| - | systemd-oom: | ||
| - | wheel:x:97: | ||
| - | users: | ||
| - | nogroup: | ||
| - | EOF | ||
| - | </ | ||
| - | |||
| - | Созданные группы не являются частью какого-либо стандарта — это группы, | ||
| - | |||
| - | Идентификатор 65534 используется ядром для NFS и отдельных пользовательских пространств имен для несопоставленных пользователей и групп (они существуют на сервере NFS или родительском пространстве имен пользователя, | ||
| - | |||
| - | Для некоторых тестов в [[software: | ||
| - | |||
| - | < | ||
| - | echo " | ||
| - | echo " | ||
| - | install -o tester -d / | ||
| - | </ | ||
| - | |||
| - | Чтобы удалить приглашение «I have no name!», запустите новую оболочку. Поскольку файлы **/ | ||
| - | |||
| - | < | ||
| - | exec / | ||
| - | </ | ||
| - | |||
| - | Программы **login, agetty, init (и другие)** используют ряд журналов для записи такой информации, | ||
| - | |||
| - | < | ||
| - | touch / | ||
| - | chgrp -v utmp / | ||
| - | chmod -v 664 / | ||
| - | chmod -v 600 / | ||
| - | </ | ||
| - | |||
| - | В файл **/ | ||
| - | |||
| - | <WRAP left round info 100%> | ||
| - | **Примечание** \\ | ||
| - | Файлы wtmp, btmp и lastlog используют для временных меток 32-разрядные целые числа, значения счетчика достигнет максимума (2 147 483 647) 19 января 2038 года (" | ||
| - | </ | ||
| - | =====7.7. Gettext-0.22.4===== | ||
| - | |||
| - | |Пакет Gettext содержит утилиты для интернационализации и локализации. Они позволяют компилировать программы с поддержкой NLS (Native Language Support), позволяя им выводить сообщения на родном языке пользователя.|| | ||
| - | |Приблизительное время сборки: | ||
| - | |Требуемое дисковое пространство: | ||
| - | |||
| - | ====7.7.1. Установка пакета Gettext==== | ||
| - | |||
| - | Для временного набора инструментов нам нужно установить только три программы из пакета Gettext. | ||
| - | |||
| - | Подготовьте Gettext к компиляции: | ||
| - | |||
| - | < | ||
| - | ./configure --disable-shared | ||
| - | </ | ||
| - | |||
| - | ===Значение параметров настройки: | ||
| - | |||
| - | * **--disable-shared** | ||
| - | В настоящее время нам не нужно устанавливать какие-либо общие библиотеки Gettext, поэтому нет необходимости их собирать. | ||
| - | |||
| - | Скомпилируйте пакет: | ||
| - | |||
| - | < | ||
| - | make | ||
| - | </ | ||
| - | |||
| - | Установите программы msgfmt, msgmerge, и xgettext programs: | ||
| - | |||
| - | < | ||
| - | cp -v gettext-tools/ | ||
| - | </ | ||
| - | |||
| - | Подробная информация об этом пакете находится в [[software: | ||
| - | |||
| - | =====7.8. Bison-3.8.2===== | ||
| - | |||
| - | |Пакет Bison содержит генератор синтаксического анализа.|| | ||
| - | |Приблизительное время сборки: | ||
| - | |Требуемое дисковое пространство: | ||
| - | |||
| - | ====7.8.1. Установка пакета Bison==== | ||
| - | |||
| - | Подготовьте Bison к компиляции: | ||
| - | |||
| - | < | ||
| - | ./configure --prefix=/ | ||
| - | --docdir=/ | ||
| - | </ | ||
| - | |||
| - | ===Значение параметров настройки: | ||
| - | |||
| - | * **--docdir=/ | ||
| - | Этот параметр указывает системе сборки установить документацию к bison в каталог с версией пакета. | ||
| - | |||
| - | Скомпилируйте пакет: | ||
| - | |||
| - | < | ||
| - | make | ||
| - | </ | ||
| - | |||
| - | Установите пакет: | ||
| - | |||
| - | < | ||
| - | make install | ||
| - | </ | ||
| - | |||
| - | Подробная информация об этом пакете находится в [[software: | ||
| - | =====7.9. Perl-5.38.2===== | ||
| - | |||
| - | |Пакет Perl содержит практический язык для извлечения данных и составления отчётов (Practical Extraction and Report Language).|| | ||
| - | |Приблизительное время сборки: | ||
| - | |Требуемое дисковое пространство: | ||
| - | |||
| - | ====7.9.1. Установка пакета Perl==== | ||
| - | |||
| - | Подготовьте Perl к компиляции: | ||
| - | |||
| - | < | ||
| - | sh Configure -des \ | ||
| - | | ||
| - | | ||
| - | | ||
| - | | ||
| - | | ||
| - | | ||
| - | | ||
| - | | ||
| - | | ||
| - | </ | ||
| - | |||
| - | ===Значение параметров настройки: | ||
| - | |||
| - | Значение новых опций Configure: | ||
| - | |||
| - | * **-des** | ||
| - | Это комбинация из трех параметров: | ||
| - | |||
| - | * **-Dvendorprefix=/ | ||
| - | Параметр гарантирует, | ||
| - | |||
| - | * **-Duseshrplib** | ||
| - | Собрать библиотеку libperl, необходимую некоторым модулям Perl, как общую библиотеку вместо статической. | ||
| - | |||
| - | * **-Dprivlib, | ||
| - | Эти настройки определяют, | ||
| - | |||
| - | Скомпилируйте пакет: | ||
| - | |||
| - | < | ||
| - | make | ||
| - | </ | ||
| - | |||
| - | Установите пакет: | ||
| - | |||
| - | < | ||
| - | make install | ||
| - | </ | ||
| - | |||
| - | Подробная информация об этом пакете находится в [[software: | ||
| - | |||
| - | =====7.10. Python-3.12.2===== | ||
| - | |||
| - | |Пакет Python 3 содержит среду разработчика Python. Его можно использовать для объектно-ориентированного программирования, | ||
| - | |Приблизительное время сборки: | ||
| - | |Требуемое дисковое пространство: | ||
| - | |||
| - | ====7.10.1. Установка пакета Python==== | ||
| - | |||
| - | <WRAP left round info 100%> | ||
| - | **Примечание** \\ | ||
| - | Существует два пакета, | ||
| - | </ | ||
| - | |||
| - | Подготовка Python к компиляции: | ||
| - | |||
| - | < | ||
| - | ./configure --prefix=/ | ||
| - | --enable-shared \ | ||
| - | --without-ensurepip | ||
| - | </ | ||
| - | |||
| - | ===Значение параметров настройки: | ||
| - | |||
| - | * **--enable-shared** | ||
| - | Этот параметр отключает установку статичных библиотек. | ||
| - | |||
| - | * **--without-ensurepip** | ||
| - | Этот параметр отключает установщик пакетов Python, который на данном этапе не нужен. | ||
| - | |||
| - | Скомпилируйте пакет: | ||
| - | |||
| - | < | ||
| - | make | ||
| - | </ | ||
| - | |||
| - | <WRAP left round info 100%> | ||
| - | **Примечание** \\ | ||
| - | Некоторые модули Python 3 не могут быть собраны сейчас, | ||
| - | </ | ||
| - | |||
| - | Установите пакет: | ||
| - | |||
| - | < | ||
| - | make install | ||
| - | </ | ||
| - | |||
| - | Подробная информация об этом пакете находится в [[software: | ||
| - | |||
| - | =====7.11. Texinfo-7.1===== | ||
| - | |||
| - | |Пакет Texinfo содержит программы для чтения, | ||
| - | |Приблизительное время сборки: | ||
| - | |Требуемое дисковое пространство: | ||
| - | |||
| - | ====7.11.1. Установка пакета Texinfo==== | ||
| - | |||
| - | Подготовьте Texinfo к компиляции: | ||
| - | |||
| - | < | ||
| - | ./configure --prefix=/ | ||
| - | </ | ||
| - | |||
| - | Скомпилируйте пакет: | ||
| - | |||
| - | < | ||
| - | make | ||
| - | </ | ||
| - | |||
| - | Установите пакет: | ||
| - | |||
| - | < | ||
| - | make install | ||
| - | </ | ||
| - | |||
| - | Подробная информация об этом пакете находится в [[software: | ||
| - | |||
| - | =====7.12. Util-linux-2.39.3===== | ||
| - | |||
| - | |Пакет Util-linux содержит различные служебные программы. Среди них утилиты для работы с файловыми системами, | ||
| - | |Приблизительное время сборки: | ||
| - | |Требуемое дисковое пространство: | ||
| - | |||
| - | ====7.12.1. Установка пакета Util-linux==== | ||
| - | |||
| - | FHS рекомендует использовать каталог **/ | ||
| - | |||
| - | < | ||
| - | mkdir -pv / | ||
| - | </ | ||
| - | |||
| - | Подготовьте Util-linux к компиляции: | ||
| - | |||
| - | < | ||
| - | ./configure --libdir=/ | ||
| - | --runstatedir=/ | ||
| - | --disable-chfn-chsh | ||
| - | --disable-login | ||
| - | --disable-nologin | ||
| - | --disable-su | ||
| - | --disable-setpriv | ||
| - | --disable-runuser | ||
| - | --disable-pylibmount \ | ||
| - | --disable-static | ||
| - | --without-python | ||
| - | ADJTIME_PATH=/ | ||
| - | --docdir=/ | ||
| - | </ | ||
| - | |||
| - | ===Значение параметров настройки: | ||
| - | |||
| - | * **ADJTIME_PATH=/ | ||
| - | Этот параметр устанавливает расположение файла для записи информации об аппаратных часах в соответствии с FHS. Он не обязателен для временного инструментария, | ||
| - | |||
| - | * **--libdir=/ | ||
| - | Этот параметр гарантирует, | ||
| - | |||
| - | * **--disable-** | ||
| - | Этот параметр предотвращают появление предупреждений о сборке компонентов, | ||
| - | |||
| - | * **--without-python** | ||
| - | Этот параметр отключает использование Python. Это позволяет избежать попыток создания ненужных привязок. | ||
| - | |||
| - | * **--runstatedir=/ | ||
| - | Этот параметр устанавливает расположение сокета, | ||
| - | |||
| - | Скомпилируйте пакет: | ||
| - | |||
| - | < | ||
| - | make | ||
| - | </ | ||
| - | |||
| - | Установите пакет: | ||
| - | |||
| - | < | ||
| - | make install | ||
| - | </ | ||
| - | |||
| - | Подробная информация об этом пакете находится в [[software: | ||
| - | =====7.13. Очистка и сохранение временной системы===== | ||
software/linux_server/lfs/chapter07.1719909530.txt.gz · Последнее изменение: — vladpolskiy
