"Своими успехами в бизнесе я обязан прежде всего способности сосредоточиться на перспективных целях, не поддаваясь соблазну решать сиюминутные задачи." Билл Гейтс

Содержание:

6.11. Zlib-1.2.11

Пакет Zlib содержит библиотеку для сжатия и распаковки, которую используют некоторые программы.
Подготовим пакет Zlib к компиляции:

./configure --prefix=/usr

Скомпилируем пакет:

make

Для выполнения тестов, выполните команду:

make check

Установим пакет:

make install

Разделяемые библиотеки нужно переместить в /lib, и в результате .so файл в /usr/lib нужно будет создать заново:

mv -v /usr/lib/libz.so.* /lib
ln -sfv ../../lib/$(readlink /usr/lib/libz.so) /usr/lib/libz.so


Установленные библиотеки: libz.{a,so}
libz Содержит функции для сжатия и распаковки, которые используют некоторые программы.

6.12. File-5.34

Пакет содержит утилиты для определения типов файлов. Некоторым пакетам требуется, чтобы этот пакет был установлен.
Подготовим пакет File к компиляции:

./configure --prefix=/usr

Скомпилируем пакет:

make

Для выполнения тестов, выполним команду:

make check

Установим пакет:

make install

Установленная программа: file Пытается классифицировать каждый переданный файл; он делает это, выполняя несколько тестов: тесты файловой системы, тесты магических чисел и языковые тесты.
Установленная библиотека: libmagic.so Подпрограммы для распознавания магических чисел, используемые программой file.

6.13. Readline-7.0

Пакет Readline - набор библиотек, который предлагает редактирование командной строки и возможности просмотра истории.
Для установки рабочего пакета Readline, необходимо переместить старые библиотеки в <libraryname>.old. Как правило проблем не будет, однако иногда могут возникать ошибки привязки с ldconfig. Это можно обойти, выполнив следующие команды sed:

sed -i '/MV.*old/d' Makefile.in
sed -i '/{OLDSUFF}/c:' support/shlib-install


Подготовим пакет Readline к компиляции:

./configure --prefix=/usr \
--disable-static \
--docdir=/usr/share/doc/readline-7.0


Скомпилируем пакет:

make SHLIB_LIBS="-L/tools/lib -lncursesw"

Значение аргументов команды make:
SHLIB_LIBS="-L/tools/lib -lncursesw" Аргумент сообщает выполнить принудительную линковку с библиотекой libncursesw.
У этого пакета нет тестов.
Установим пакет:

make SHLIB_LIBS="-L/tools/lib -lncurses" install

Переместим динамические библиотеки в подходящее место и исправьте символические ссылки:

mv -v /usr/lib/lib{readline,history}.so.* /lib
chmod -v u+w /lib/lib{readline,history}.so.*
ln -sfv ../../lib/$(readlink /usr/lib/libreadline.so) /usr/lib/libreadline.so
ln -sfv ../../lib/$(readlink /usr/lib/libhistory.so ) /usr/lib/libhistory.so


Можно установить документацию:

install -v -m644 doc/*.{ps,pdf,html,dvi} /usr/share/doc/readline-7.0

Содержимое пакета Readline.
Установленные библиотеки:
libhistory.so Обеспечивает согласованный пользовательский интерфейс для вызова строк истории.
libreadline.so Предоставляет набор команд для манипулирования текстом, введенным в интерактивной сессии программы.
Установленные каталоги: /usr/include/readline, /usr/share/readline, and /usr/share/doc/readline-7.0

6.14. M4-1.4.18

Пакет содержит общий макропроцессор текста - полезный инструмент для выполнения сборки других программ.
Сделаем некоторые исправления, требуемые glibc-2.28:

sed -i 's/IO_ftrylockfile/IO_EOF_SEEN/' lib/*.c
echo "#define _IO_IN_BACKUP 0x100" >> lib/stdio-impl.h


Подготовим пакет M4 к компиляции:

./configure --prefix=/usr

Скомпилируем пакет:

make

Для выполнения тестов, выполните команду:

make check

Установим пакет:

make install

Установленная программа:
m4 Копирует данные файлы при расширении макросов, которые они содержат. Эти макросы являются встроенными или определяемыми пользователем и могут принимать любое количество аргументов. Помимо выполнения макрорасширения, m4 имеет встроенные функции для включения именованных файлов, выполнения команд Unix, выполнения целочисленной арифметики, обработки текста, рекурсии и т.д. Программа m4 может использоваться либо как фронт-енд для компилятора, или как самостоятельный макропроцессор.

6.15. Bc-1.07.1

BC (basic calculator) — интерактивный интерпретатор Си-подобного языка, позволяет выполнять вычисления с произвольно заданной точностью. Часто используется как калькулятор в командной строке UNIX-подобных операционных систем.
Изменим внутренний файл сценария, чтобы он использовал программу sed вместо ed:

cat > bc/fix-libmath_h << "EOF"
#! /bin/bash
sed -e '1 s/^/{"/' \
-e 's/$/",/' \
-e '2,$ s/^/"/' \
-e '$ d' \
-i libmath.h sed -e '$ s/$/0}/' \
-i libmath.h
EOF


Создадим временную символическую ссылку, чтобы пакет смог обнаружить библиотеку readline и подтвердить, что необходимая библиотека libncurses доступна. Хотя, на данный моммент, эти библиотеки находятся в каталоге /tools/lib, в конце главы система будет использовать каталог /usr/lib.

ln -sv /tools/lib/libncursesw.so.6 /usr/lib/libncursesw.so.6
ln -sfv libncurses.so.6 /usr/lib/libncurses.so


Исправьте проблему отсутствия некоторых файлов на раннем этапе сборки LFS в файле configure:

sed -i -e '/flex/s/as_fn_error/: ;; # &/' configure

Подготовим пакет Bc к компиляции:

./configure --prefix=/usr \
--with-readline \
--mandir=/usr/share/man \
--infodir=/usr/share/info


Значение параметров конфигурации:
--with-readline Аргумент сообщает BC использовать библиотеку readline которая была установлена ранее в системе, вместо использования встроенной.
Скомпилируем пакет:

make

Выполним тестирования пакета BC. В процессе выполнения тестирования на экране будет отображаться достаточно большое количество информации о результатах. Можно выполнить перенаправление вывода в файл. Будет небольшой процент тестов (10 из 12,144) указывающих на ошибку округления на последней цифре.

echo "quit" | ./bc/bc -l Test/checklib.b

Установим пакет:

make install

Содержимое пакета Bc:
bc Калькулятор командной строки.
dc Калькулятор командной строки с обратной обработкой.

6.16. Binutils-2.31.1

Пакет содержит компоновщик, ассемблер, и другие утилиты и инструменты для работы с объектными файлам. Программы в этом пакете необходимы для компиляции как большинства пакетов системы LFS, так и многих пакетов за её пределами.
Проверим, что псевдотерминалы (PTY) правильно работают в среде chroot. Для этого выполним простой тест:

expect -c "spawn ls"

Результатом выполнения команды, на экране должна появиться следующая строка:

spawn ls

Если вместо вышеуказанного результата, появилось сообщение, как показано ниже, это означает что среда не правильно настроена для работы с псевдотерминалами. Эту проблему необходимо решить до запуска тестов пакета Binutils и GCC:

The system has no more ptys.
Ask your system administrator to create more.


В документации к пакету BinUtils рекомендуется выполнять компиляцию в отдельном каталоге:

mkdir -v build
cd build


Подготовим пакет Binutils к компиляции:

../configure --prefix=/usr \
--enable-gold \
--enable-ld=default \
--enable-plugins \
--enable-shared \
--disable-werror \
--enable-64-bit-bfd \
--with-system-zlib


Значение параметров конфигурации:
--enable-gold Выполнять сборку gold-компоновщика и устанавливает его как ld.gold (рядом с линковщиком по умолчанию).
--enable-ld=default Выполнить сборку обычного bdf компоновщика и установить его как ld (компоновщик по умолчанию) и как ld.bfd.
--enable-plugins Включить поддержку плагинов для компоновщика.
--enable-64-bit-bfd Включение 64-битной поддержки (для хостов с ограниченным размером слова). Может не потребоваться на 64-битной системе, однако эта опция не нанесет вреда.
--with-system-zlib Использовать уже установленную библиотеку zlib, вместо использования встроенной версии.
Скомпилируем пакет:

make tooldir=/usr

Значение параметра tooldir=/usr. Как правило, значение tooldir (каталог в котором будут располагаться исполняемые файлы) установлено как $(exec_prefix)/$(target_alias). Например, на машине x86_64 значение приобретёт вид /usr/x86_64-unknown-linux-gnu. Потому что это пользовательская система, и её целевой каталог в /usr не требуется. Путь $(exec_prefix)/$(target_alias) будет использоваться только в том случае, если система будет задействована в качестве кросс-компилятора (например, необходимо выполнить компиляцию пакета на машине Intel которая должна сгенерировать код, работающий на машинах PowerPC).
Выполнение тестов пакета Binutils считается критичным. Не пропускаем их выполнение ни при каких обстоятельствах:

make -k check

Один тест, debug_msg.sh, как известно, не проходит.
Установим пакет:

make tooldir=/usr install

Содержимое пакета Binutils.
Каталог установки /usr/lib/ldscripts
Краткое описание установленных программ и библиотек:
addr2line Переводит адреса программ на имена файлов и номера строк; учитывая адрес и имя исполняемого файла, он использует отладочную информацию в исполняемом файле, чтобы определить, какой исходный файл и строка число связано с адресом.
ar создаёт и изменяет архивы, а также извлекает файлы из них.
as Ассемблер, известный как GAS (Gnu Assembler). Выполняет создание объектного файла из вывода команды gcc.
c++filt Используется компоновщиком для удаления символов C++ и Java и сохранения перегруженных функции от конфликтов.
elfedit Обновляет ELF заголовок в файлах ELF.
gprof Отображает график вызовов данных профилирования.
ld Компоновщик, который объединяет ряд объектных и архивных файлов в один файл, перемещая их данные и связывает ссылки.
ld.gold — это компоновщик для ELF файлов. Он стал официальным пакетом GNU и был добавлен в binutils в марте 2008 года и был впервые выпущен в составе binutils версии 2.19. Мотивацией для написания gold было создание компоновщика, который является более быстрым, чем GNU linker, особенно для больших приложений, написанных на C++.
ld.bfd Жесткая ссылка на ld.
nm Перечисляет символы, встречающиеся в данном объектном файле.
objcopy Копирование объектных файлов (возможно с изменениями).
objdump Отображает информацию о данном объектном файле с возможностью контроля необходимой информации для отображения; Эта информация может быть полезна для программистов, которые работают над инструментами для компиляции.
ranlib Создает индекс содержимого архива и сохраняет его в архиве; индекс перечисляет все символы, определенные архивом, которые являются перемещаемыми объектными файлами.
readelf показ содержимого исполняемых файлов в формате ELF.
size вывод общего размера и размера секций.
strings Выводит для каждого заданного файла, последовательности печатаемых символов, которые имеют, по меньшей мере, указанную длину (по умолчанию 4); для объектных файлов он печатает по умолчанию только строки из разделов инициализации и загрузки, а для других типов файлов - сканирует весь файл.
strip Отбрасывает символы из объектных файлов.
libbfd Библиотека двоичных файловых дескрипторов (Binary File Descriptor).
libopcodes - библиотека для работы с опкодами, используется в сборке утилит вроде objdump. Опкоды - «читаемые» версии инструкций процессора.

6.17. GMP-6.1.2

Библиотека GMP (GNU Multi-Precision Library ), предназначенная для вычислений с плавающей запятой, целыми и рациональными числами с произвольной точностью. Библиотека широко используется в криптографических целях и для компьютерных вычислений. Данная библиотека необходима для сборки gcc.
Если выполняется сборка для 32-битной машины x86, но процессор, который совместим и может выполнять 64-битные инструкции и указана переменная окружения CFLAGS, сценарий конфигурирования будет запускаться для 64-битной системы и в результате процесс завершиться с ошибкой. Такого поведения можно избежать, если запустить команду configure:

ABI=32 ./configure ...

Значения по умолчанию GMP создают библиотеки оптимизированные для процессора хост-системы. Если библиотеки, подходящие для процессоров, не желательны, чем процессор хост-системы, то общие библиотеки могут быть созданы следующим образом:

cp -v configfsf.guess config.guess
cp -v configfsf.sub config.sub


Подготовим пакет GMP к компиляции:

./configure --prefix=/usr \
--enable-cxx \
--disable-static \
--docdir=/usr/share/doc/gmp-6.1.2


Значения новых параметров конфигурации:
--enable-cxx Аргумент включает поддержку языка Си++.
--docdir=/usr/share/doc/gmp-6.1.2 Значение этого аргумента указывает на правильное местоположение документации.
Выполним компиляцию пакета, и сгенерируйте HTML документацию:

make
make html


Выполнение тестов пакета GMP считается критичным. Не пропускаем их выполнение ни при каких обстоятельствах:

make check 2>&1 | tee gmp-check-log

Код, скомпилированный пакетом очень сильно оптимизирован для того процессора, на котором он был скомпилирован. Иногда код, который считывает процессор, неверно идентифицирует возможности системы и будут возникать ошибки в тестах или других программах, использующих библиотеки gmp, с сообщением "Illegal instruction". В таком случае, необходимо выполнить повторную конфигурацию пакета с аргументом --build=x86_64-unknown-linux-gnu и выполнить сборку повторно.
Убедимся, что все 190 тестов в наборе прошли успешно:

awk '/# PASS:/{total+=$3} ; END{print total}' gmp-check-log

Установим пакет и его документацию:

make install
make install-html


Содержимое пакета GMP:
libgmp.so Содержит функции предназначенные для вычислений с плавающей запятой, целыми и рациональными числами с произвольной точностью.
libgmpxx.so Содержит функции для языка Си++ предназначенные для вычислений с плавающей запятой, целыми и рациональными числами с произвольной точностью.
Каталог установки: /usr/share/doc/gmp-6.1.2

6.18. MPFR-4.0.1

Пакет MPFR включает функции по работе с вычислениями с произвольной точностью.
Подготовим пакет MPFR к компиляции:

./configure --prefix=/usr \
--disable-static \
--enable-thread-safe \
--docdir=/usr/share/doc/mpfr-4.0.1


Выполним компиляцию пакета и сгенерируйте HTML документацию:

make
make html


Выполнение тестов пакета MPFR считается критичным. Не пропускаем их выполнение ни при каких обстоятельствах и убедимся, что все тесты выполнились успешно:

make check

Установим пакет и его документацию:

make install
make install-html


Установленная библиотека: libmpfr.so Содержит функции по работе с вычислениями с произвольной точностью.
Каталог установки: /usr/share/doc/mpfr-4.0.1

6.19. MPC-1.1.0

Пакет MPC содержит функции предназначенные для вычислений с плавающей запятой, целыми и рациональными числами с произвольной точностью. Он необходим пакету GCC.
Подготовьте пакет MPC к компиляции:

./configure --prefix=/usr \
--disable-static \
--docdir=/usr/share/doc/mpc-1.1.0


Выполним компиляцию пакета, и сгенерируйте HTML документацию:

make
make html


Для выполнения тестов, выполните команду:

make check

Установим пакет и его документацию:

make install
make install-html


Содержимое пакета MPC: Установленная библиотека libmpc.so содержит функции предназначенные для вычислений с плавающей запятой, целыми и рациональными числами с произвольной точностью.
Каталог установки /usr/share/doc/mpc-1.1.0

6.20. GCC-8.2.0

Пакет содержит набор компиляторов GNU, для таких языков, как Си и Си++.
Если сборка пакета будет происходить на 64-битной машине, то необходимо сменить каталог по умолчанию для 64-битных библиотек на каталог «lib»:

case $(uname -m) in
x86_64)
sed -e '/m64=/s/lib64/lib/' \
-i.orig gcc/config/i386/t-linux64
;;
esac


Удалим символическую ссылку, созданную ранее, так как окончательная версия gcc после сборки будет содержать необходимые файлы:

rm -f /usr/lib/gcc

В документации к пакету рекомендуется выполнять процедуру сборки из отдельного каталога:

mkdir -v build
cd build


Подготовим пакет GCC к компиляции:

SED=sed \
../configure --prefix=/usr \
--enable-languages=c,c++ \
--disable-multilib \
--disable-bootstrap \
--with-system-zlib


Обратим внимание, что другие языки имеют некоторые дополнительные зависимости, которые на данный момент еще не доступны. Обратимся к документации книги BLFS чтобы узнать как выполнить сборку GCC со всеми поддерживаемыми языками программирования.
Значения новых параметров конфигурации:
SED=sed Установка этой переменной среды предотвращает использование жестко закодированного пути к каталогу /tools/bin/sed.
--with-system-zlib Аргумент сообщает, чтобы GCC использовал ссылку на установленную ранее в системе библиотеку Zlib, вместо использования встроенной версии.
Скомпилируем пакет:

make

Выполнение тестов пакета GCC считается критичным. Не пропускаем их выполнение ни при каких обстоятельствах.
Известно, что один набор тестов GCC исчерпывает стек, поэтому увеличьте его размер до запуска тестов:

ulimit -s 32768

Проверим результаты, но не останавливаемся на ошибках:

make -k check

Чтобы получить сводку результатов о выполнении тестов, запустим:

../contrib/test_summary

Чтобы увидеть только сводку:

grep -A7 Summ

Результаты можно сравнить с результатами, расположенными здесь и здесь.
Несколько неожиданных сбоев не всегда удается избежать. Разработчики GCC как правило знают о таких проблемах, но некоторые из них могут быть ещё не решены. В частности известно, что шесть тестов в библиотеке libstdc++ не пройдут, если выполнять тестирование от имени пользователя root, как мы и выполняем. Если результаты выполнения тестов не особо отличаются от результатов, опубликованных по ссылкам выше, то можно продолжать далее.
При некоторых конфигурациях ядра хост-системы и при наличии процессора AMD, могут возникать ошибки при тестировании. Ошибок может быть более 1100 в тестах gcc.target/i386/mpx (которые спроектированы для тестирования опции MPX для современных процессоров Intel). Такие ошибки можно игнорировать, если у вас процессор AMD. Эти тесты также не выполнятся на процессорах Intel, если поддержка MPX не включена в ядро, даже если они и поддерживаются процессором.
Установим пакет:

make install

По историческим причинам, создаём символическую ссылку FHS

ln -sv ../usr/bin/cpp /lib

Многие пакеты используют команду cc для вызова компилятора языка Си. Для соблюдения совместимости, добавим следующую символическую ссылку:

ln -sv gcc /usr/bin/cc

Добавим ещё одну символическую ссылку, для соблюдения совместимости и возможности сборки программ с поддержкой LTO (Оптимизация времени линковки):

install -v -dm755 /usr/lib/bfd-plugins
ln -sfv ../../libexec/gcc/$(gcc -dumpmachine)/8.2.0/liblto_plugin.so \
/usr/lib/bfd-plugins/


Когда все инструменты на своем месте, важно снова убедиться в том, что всё компиляция и линковка работают правильно. Выполним проверки, аналогичную тем, что выполняли на предыдущих этапах:

echo 'int main(){}' > dummy.c
cc dummy.c -v -Wl,--verbose &> dummy.log
readelf -l a.out | grep ': /lib'


В результате выполнения этой команды не должно быть ошибок, и вывод (в зависимости от платформы) должен соответствовать следующей строке:

[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]

Теперь убедимся что настройка стартовых файлов запуска выполнена правильно:

grep -o '/usr/lib.*/crt[1in].*succeeded' dummy.log

Вывод должен соответствовать следующей строке:

/usr/lib/gcc/x86_64-pc-linux-gnu/8.2.0/../../../../lib/crt1.o succeeded
/usr/lib/gcc/x86_64-pc-linux-gnu/8.2.0/../../../../lib/crti.o succeeded
/usr/lib/gcc/x86_64-pc-linux-gnu/8.2.0/../../../../lib/crtn.o succeeded


В зависимости от архитектуры машины, вывод, указанный выше, может немного отличаться. Разница может быть в наименовании каталогов после /usr/lib/gcc. Важным моментом на который стоит обратить внимание, это наличие трёх файлов crt*.o которые ищет gcc в каталоге /usr/lib.
Проверим, что компилятор выполняет поиск заголовочных файлов в нужных местах:

grep -B4 '^ /usr/include' dummy.log

Вывод должен соответствовать следующей строке:

#include <...> search starts here:
/usr/lib/gcc/x86_64-pc-linux-gnu/8.2.0/include
/usr/local/include
/usr/lib/gcc/x86_64-pc-linux-gnu/8.2.0/include-fixed
/usr/include


Обратим внимание, что наименование каталога после целевого триплета может отличаться, в зависимости от архитектуры машины.
Далее проверим, что компоновщик использует правильные пути поиска:

grep 'SEARCH.*/usr/lib' dummy.log |sed 's|; |\n|g'

Ссылки на пути с наличием у компонента суффикса '-linux-gnu' должны быть проигнорированы, и вывод должен соответствовать следующей строке:

SEARCH_DIR("/usr/x86_64-pc-linux-gnu/lib64")
SEARCH_DIR("/usr/local/lib64")
SEARCH_DIR("/lib64")
SEARCH_DIR("/usr/lib64")
SEARCH_DIR("/usr/x86_64-pc-linux-gnu/lib")
SEARCH_DIR("/usr/local/lib")
SEARCH_DIR("/lib")
SEARCH_DIR("/usr/lib");


На 32-битных машинах можно заметить что появились некоторые другие каталоги. Например, вывод на архитектуре i686 может быть такой:

SEARCH_DIR("/usr/i686-pc-linux-gnu/lib32")
SEARCH_DIR("/usr/local/lib32")
SEARCH_DIR("/lib32")
SEARCH_DIR("/usr/lib32")
SEARCH_DIR("/usr/i686-pc-linux-gnu/lib")
SEARCH_DIR("/usr/local/lib")
SEARCH_DIR("/lib")
SEARCH_DIR("/usr/lib");


Проверим что используется нужная библиотека libc:

grep "/lib.*/libc.so.6 " dummy.log

Вывод должен соответствовать следующей строке:

attempt to open /lib/libc.so.6 succeeded

Проверим что GCC использует правильный динамический компоновщик:

grep found dummy.log

Вывод (в зависимости от платформы в наименовании динамического компоновщика) должен соответствовать следующей строке:

found ld-linux-x86-64.so.2 at /lib/ld-linux-x86-64.so.2

Если вывод на выполнение команд не выводиться или команды не выполняются вовсе, то это признак того, что в предыдущих инструкциях была допущена серьезная ошибка. Исследуйте предыдущие шаги и проверьте правильность их выполнения. Постарайтесь найти ошибку в вводимых командах. Наиболее вероятно, что причина в проблемах - не правильная настройка специальных файлов при перенастройке временного набора инструментов. Все проблемы должны быть найдены и исправлены до выполнения следующих этапов.
Если все работает правильно, выполним очистку тестовых файлов:

rm -v dummy.c a.out dummy.log

Переместим файлы в правильное местоположение:

mkdir -pv /usr/share/gdb/auto-load/usr/lib
mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib


Содержимое пакета GCC.
Установленные каталоги:
/usr/include/c++, /usr/lib/gcc, /usr/libexec/gcc и /usr/share/gcc-8.2.0
Краткое описание установленных программ и библиотек:
c++ Компилятор. Си++
cc Компилятор. Си
cpp Препроцессор Си; используется компилятором для замены в исходном коде инструкций #include, #define и аналогичных.
g++ Компилятор Си++
gcc Компилятор Си
gcc-ar Обёртка для команды ar добавляющая плагин к командной строке. Эта программа используется только чтобы добавлять опцию "Оптимизация времени линковки" и не особо полезна для выполнения сборки с аргументами по умолчанию.
gcc-nm Обёртка для команды nm добавляющая плагин к командной строке. Эта программа используется только чтобы добавлять опцию "Оптимизация времени линковки" и не особо полезна для выполнения сборки с аргументами по умолчанию.
gcc-ranlib Обёртка для команды ranlib добавляющая плагин к командной строке. Эта программа используется только чтобы добавлять опцию "Оптимизация времени линковки" и не особо полезна для выполнения сборки с аргументами по умолчанию.
gcov Инструмент покрытия тестами; он используется для анализа программ и определяет, будет-ли оптимизация наиболее эффективной.
libasan Библиотека времени выполнения очистки адресного пространства.
libgcc Содержит поддержка времени выполнения для gcc.
libgcov Библиотека связывается с указанной программой. когда GCC необходимо выполнить профилирование.
libgomp Реализация проекта GNU API библиотеки OpenMP для кроссплатформенного программирования в разделяемой памяти парралельного программирования на языках Си,Си++ и Фортран.
libiberty Содержит программы и утилиты, которые используются различными программами GNU, такие как getopt, obstack, strerror, strtol, и strtoul.
liblto_plugin GCC's расширение оптимизации времени линковки (LTO), GCC позволяющее выполнять оптимизацию при компиляции модулей.
libquadmath Библиотека API для выполнения математических вычислений четырехмерной точности.
libssp Содержит программы для обеспечения защиты стека от атак переполнения буфера в стеке (stack-smashing).
libstdc++ Стандартная библиотека Си++
libsupc++ Предоставляет вспомогательные процедуры для языка программирования Си++
libtsan Библиотека времени выполнения очистки потоков.

6.21. Bzip2-1.0.6

Пакет содержит программы для сжатия и распаковки файлов. Он необходим для распаковки многих пакетов LFS. Сжатие текстовых файлов при помощи программы bzip2 даёт больший процент сжатия чем gzip.
Применим патч (исправление) который позволит установить документацию к пакету:

patch -Np1 -i ../bzip2-1.0.6-install_docs-1.patch

Следующая команда гарантирует установку символических ссылок по относительному пути:

sed -i 's@\(ln -s -f \)$(PREFIX)/bin/@\1@' Makefile

Убедимся что страницы руководств будут установлены в правильное место:

sed -i "s@(PREFIX)/man@(PREFIX)/share/man@g" Makefile

Подготовим пакет Bzip2 для компиляции:

make -f Makefile-libbz2_so
make clean


Значение параметров make:
-f Makefile-libbz2_so Аргумент сообщает Bzip2 выполнить сборку используя другой Makefile, при указании значения аргумента Makefile-libbz2_so позволит создать динамическую библиотеку libbz2.so и ссылки с Bzip2.
Скомпилируем и выполним тестирование пакета:

make

Установим программы:

make PREFIX=/usr install

Установите общие bzip2 бинарные файлы в каталог /bin, сделайте несколько необходимых символических ссылок и затем, выполните очистку:

cp -v bzip2-shared /bin/bzip2
cp -av libbz2.so* /lib
ln -sv ../../lib/libbz2.so.1.0 /usr/lib/libbz2.so
rm -v /usr/bin/{bunzip2,bzcat,bzip2}
ln -sv bzip2 /bin/bunzip2
ln -sv bzip2 /bin/bzcat


Содержимое пакета Bzip2.
Каталог установки: /usr/share/doc/bzip2-1.0.6
Краткое описание установленных программ и библиотеки:
bunzip2 Распаковывает файлы bzip.
bzcat Распаковка в стандартный вывод.
bzcmp Запускает программу cmp для запакованных файлов.
bzdiff Запускает программу diff для запакованных файлов.
bzegrep Запускает программу egrep для запакованных файлов.
bzfgrep Запускает программу fgrep для запакованных файлов.
bzgrep Запускает программу grep для запакованных файлов.
bzip2 Утилита командной строки для сжатия данных, реализация алгоритма Барроуза — Уилера. Программа bzip2 была написана для замены программы gzip. Она действительно показывает лучшие характеристики по степени сжатия данных, но с другой стороны она потребляет значительно больше памяти при работе.
bzip2recover Выполняет попытку восстановить данные из поврежденного файла архива.
bzless Запускает программу less для запакованных файлов.
bzmore Запускает программу moreдля запакованных файлов.
libbz2 Библиотека, реализующая блочную сортировку данных без потерь сжатие с использованием алгоритма Барроуза — Уилера.

6.22. Pkg-config-0.29.2

Утилита, предоставляющая интерфейс для получения информации об установленных программных библиотеках, включающую в себя параметры для Си или Си++ компилятора, параметры для компоновщика, а также версию пакета. Инструмент позволяет передавать для включения пути или пути к библиотекам инструментам для сборки во время процесса конфигурирования (configure) и выполнения команд программы make.
Подготовьте пакет Pkg-config к компиляции:

./configure --prefix=/usr \
--with-internal-glib \
--disable-host-tool \
--docdir=/usr/share/doc/pkg-config-0.29.2


Значения новых параметров конфигурации:
--with-internal-glib Аргумент позволяет использовать внутреннюю версию пакета Glib
--disable-host-tool Этот параметр отключает создание нежелательной жесткой ссылки на программу pkg-config.
Скомпилируем пакет:

make

Для выполнения тестов, выполните команду:

make check

Установим пакет:

make install

Содержимое пакета Pkg-config Возвращает метаданные для указанной библиотеки или пакета. Каталог установки: /usr/share/doc/pkg-config-0.29.2

6.23. Ncurses-6.1

Пакет содержит библиотеку, предназначенную для управления вводом-выводом на терминал, в числе прочего, библиотека позволяет задавать экранные координаты (в знакоместах) и цвет выводимых символов. Предоставляет программисту уровень абстракции, позволяющий не беспокоиться об аппаратных различиях терминалов и писать переносимый код. Он необходим для ряда пакетов.
Не следует устанавливать статическую библиотеку, которая не обрабатывается сценарием configure:

sed -i '/LIBTOOL_INSTALL/d' c++/Makefile.in

Подготовим пакет Ncurses к компиляции:

./configure --prefix=/usr \
--mandir=/usr/share/man \
--with-shared \
--without-debug \
--without-normal \
--enable-pc-files \
--enable-widec


Значения новых параметров конфигурации:
--enable-widec Этот аргумент указывает, что необходимо скомпилировать библиотеки расширенных символов (таких как, libncursesw.so.6.1) вместо обычных (таких как, libncurses.so.6.1). Эти библиотеки расширенных символов используются и в многобайтовой и традиционной 8-битной локали, в то время как обычные библиотеки работают должным образом только в 8-битных локалях. библиотеки расширенных символов и обычные совместимы на уровне исходного кода, но не совместимы в двоичном.
--enable-pc-files Этот аргумент создает и устанавливает .pc файлы для pkg-config.
--without-normal Этот аргумент отключает сборку и установку большинства статических библиотек.
Скомпилируем пакет:

make

У пакета присутствуют наборы тестов, однако их запуск возможен только после установки пакета. Наборы тестов располагаются в каталоге test/. Читаем файл README в этом каталоге для получения дополнительной информации.
Установим пакет:

make install

Переместите разделяемые библиотеки в каталог /lib где они и должны находиться:

mv -v /usr/lib/libncursesw.so.6* /lib

Поскольку разделяемые библиотеки были перемещены, одна символическая ссылка теперь указывает на несуществующий файл. Создадим эту ссылку заново:

ln -sfv ../../lib/$(readlink /usr/lib/libncursesw.so) /usr/lib/libncursesw.so

Многие приложения по-прежнему ожидают, что компоновщик сможет найти библиотеки Ncurses не расширенных символов, а обычных. Обмануть такие программы и связать их с библиотеками расширенных символов при помощи создания символических ссылок и сценариев компоновщика:

for lib in ncurses form panel menu ; do
rm -vf /usr/lib/lib${lib}.so
echo "INPUT(-l${lib}w)" > /usr/lib/lib${lib}.so
ln -sfv ${lib}w.pc /usr/lib/pkgconfig/${lib}.pc
done


Убедимся что старые программы будут искать файлы -lcurses во время сборки и останутся пригодными для последующей сборки:

rm -vf /usr/lib/libcursesw.so
echo "INPUT(-lncursesw)" > /usr/lib/libcursesw.so
ln -sfv libncurses.so /usr/lib/libcurses.so


При желании установим документацию к Ncurses:

mkdir -v /usr/share/doc/ncurses-6.1
cp -v -R doc/* /usr/share/doc/ncurses-6.1


Приведенные выше инструкции не создают библиотеки расширенных символов, так как ни один пакет, установленный путем компиляции из исходного кода, не будет ссылаться на них во время выполнения. Тем не менее, единственные известные двоичные приложения, которые связываются с библиотеками Ncurses нерасширенных символов, требуют версии 5. Если такие библиотеки необходимы из-за какого-либо приложения только для двоичных файлов или для совместимости с LSB, выполните компиляцию пакета снова с помощью следующих команд:

make distclean
./configure --prefix=/usr \
--with-shared \
--without-normal \
--without-debug \
--without-cxx-binding \
--with-abi-version=5
make sources libs
cp -av lib/lib*.so.5* /usr/lib


Содержимое пакета Ncurses.
Установленные каталоги: /usr/share/tabset, /usr/share/terminfo и /usr/share/doc/ncurses-6.1
Краткое описание установленных программ и библиотек:
captoinfo Преобразовывает termcap описание в terminfo.
clear По возможности, очищает экран.
infocmp Сравнивает или распечатывает описания terminfo.
infotocap Преобразует описание terminfo в описание termcap.
ncursesw6-config Предоставляет сведения о конфигурации для ncurses.
reset Повторная инициализация терминала до значений по умолчанию.
tabs Очищает и устанавливает табуляторы на терминале.
tic Компилятор описания записи terminfo, преобразующий файл terminfo из исходного формата в двоичный формат, необходимый для процедур библиотеки ncurses [файл terminfo содержит информацию о возможности определенного терминала.]
toe Выводит список всех доступных типов терминалов с основным именем и описанием.
tput Принимает значения зависимыз от терминала доступных в оболочке ; ее можно также использовать для того чтобы переустановить или инициализировать терминал или сообщить его полное наименование.
tset Может быть использована для инициализации терминала.
libcursesw Ссылка на файл libncursesw.
libncursesw Содержит функции для отображения текста многими сложными способами на экране терминала; хорошим примером использования этих функций является меню, отображаемое во время создания файла конфигурации ядра make menuconfig.
libformw Содержит функции для реализации форм.
libmenuw Содержитфункции для реализации меню.
libpanelw Содержит функции для реализации панелей. their non-wide-character counterparts without "w" in the library names

6.24. Attr-2.4.48

Программы для администрирования расширенных атрибутов объектов файловой системы.
Подготовим пакет Attr к компиляции:

./configure --prefix=/usr \
--bindir=/bin \
--disable-static \
--sysconfdir=/etc \
--docdir=/usr/share/doc/attr-2.4.48


Скомпилируем пакет:

make

Тесты необходимо запускать на тех файловых системах, в которых есть поддержка расширенных файловых атрибутов. Например, такая поддержка присутствует в файловых системах ext2, ext3, и ext4:

make check

Установим пакет:

make install

Разделяемые библиотеки необходимо перенести в каталог /lib, и в результате файлы .so в каталоге /usr/lib необходимо создать заново:

mv -v /usr/lib/libattr.so.* /lib
ln -sfv ../../lib/$(readlink /usr/lib/libattr.so) /usr/lib/libattr.so


Содержимое пакета Attr.
Установленные каталоги: /usr/include/attr и /usr/share/doc/attr-2.4.48
Краткое описание установленных программ и библиотеки:
attr Расширяет атрибуты объектов файловой системы.
getfattr Получает расширенные атрибуты объектов файловой системы.
setattr Задает дополнительные атрибуты объектов файловой системы.
libattr Библиотека содержит функции для работы с расширенными атрибутами.

6.25. Acl-2.2.53

Access Control List или ACL — список управления доступом, который определяет, кто или что может получать доступ к объекту (программе, процессу или файлу), и какие именно операции разрешено или запрещено выполнять субъекту (пользователю, группе пользователей).Данный пакет содержит утилиты для администрирования списками управления доступом (ACL).
Подготовим пакет Acl к компиляции:

./configure --prefix=/usr \
--bindir=/bin \
--disable-static \
--libexecdir=/usr/lib \
--docdir=/usr/share/doc/acl-2.2.53


Скомпилируем пакет:

make

Тесты необходимо запустить на файловой системе, которая поддерживает списки управления доступом, после сборки пакета Coreutils с библиотеками Acl. При желании, вернитесь позднее к этому пакету и выполните команду make check после сборки пакета Coreutils который будет установлен немного позднее
Установим пакет:

make install

Разделяемые библиотеки необходимо перенести в каталог /lib, и в результате файлы .so в каталоге /usr/lib необходимо создать заново:

mv -v /usr/lib/libacl.so.* /lib
ln -sfv ../../lib/$(readlink /usr/lib/libacl.so) /usr/lib/libacl.so


Содержимое пакета Acl.
Установленные каталоги: /usr/include/acl и /usr/share/doc/acl-2.2.53
Краткое описание установленных программ и библиотеки:
chacl Изменение списка управления доступом к файлу или к каталогу.
getfacl Получает списки управления доступом к файлам.
setfacl Устанавливает списки управления доступом к файлам.
libacl Библиотека содержит функции для управления списками управления доступом.

6.26. Libcap-2.25

Пакет Libcap реализует интерфейсы пользовательского пространства для возможностей POSIX 1003.1e, доступных в ядрах Linux. Эти возможности представляют собой разделение привилегий All powerful root на набор различных привилегий.
Запретим установку статической библиотеки:

sed -i '/install.*STALIBNAME/d' libcap/Makefile

Скомпилируем пакет:

make

У этого пакета нет тестов.
Установим пакет:

make RAISE_SETFCAP=no lib=lib prefix=/usr install
chmod -v 755 /usr/lib/libcap.so


Значение аргументов команды make:
RAISE_SETFCAP=no Этот параметр пропускает попытки использовать setcap для себя. Это позволяет избежать ошибки установки, если ядро или файловая система не поддерживает расширенные возможности.
lib=lib Аргумент указывает, что установка библиотеки должна происходить в каталог $prefix/lib вместо $prefix/lib64 на архитектурах x86_64. Это не влияет на машины с архитектурой x86.
Разделяемые библиотеки необходимо перенести в каталог /lib, и в результате файлы .so file in /usr/lib необходимо создать заново:

mv -v /usr/lib/libcap.so.* /lib
ln -sfv ../../lib/$(readlink /usr/lib/libcap.so) /usr/lib/libcap.so


Содержимое пакета Libcap.
Краткое описание установленных программ и библиотеки:
capsh Обёртка к оболочке для изучения и ограничения поддержки возможностей.
getcap Проверяет возможности файлов.
getpcaps Отображает возможности запрашиваемого процесса или процессов.
setcap Устанавливает возможности файлов.
libcap Библиотека содержит функции для управления возможностями POSIX 1003.1e.

6.27. Sed-4.5

Sed - потоковый текстовый редактор (а также язык программирования), применяющий различные предопределённые текстовые преобразования к последовательному потоку текстовых данных. Он необходим для многих пакетов LFS, на этапе конфигурирования.
Устраним проблему в среде LFS и удалим ошибочный тест:

sed -i 's/usr/tools/' build-aux/help2man
sed -i 's/testsuite.panic-tests.sh//' Makefile.in


Подготовим пакет Sed к компиляции:

./configure --prefix=/usr --bindir=/bin

Выполним компиляцию пакета, и сгенерируйте HTML документацию:

make
make html


Для выполнения тестов, выполните команду:

make check

Установим пакет и его документацию:

make install
install -d -m755 /usr/share/doc/sed-4.5
install -m644 doc/sed.html /usr/share/doc/sed-4.5


Содержимое пакета Sed.
Установленная программа: sed Фильтрация и преобразование текстовых файлов за один проход.
Каталог установки: /usr/share/doc/sed-4.5

6.28. Shadow-4.6

Пакет Shadow содержит программы для работы с паролями безопасным способом.
Если необходимо принудительно использовать надежные пароли, изучаем информацию здесь для установки библиотеки CrackLib до того, как будет установлен пакет Shadow. Потом добавbv еще один аргумент --with-libcrack в сценарий конфигурирования пакета.
Запретим установку программы groups и её руководств, так как пакет Coreutils предоставляет более лучшую версию. Также предотвратите установку страниц руководств которые уже содержатся в пакете man pages.

sed -i 's/groups$(EXEEXT) //' src/Makefile.in
find man -name Makefile.in -exec sed -i 's/groups\.1 / /' {} \;
find man -name Makefile.in -exec sed -i 's/getspnam\.3 / /' {} \;
find man -name Makefile.in -exec sed -i 's/passwd\.5 / /' {} \;


Вместо того, чтобы использовать метод по умолчанию crypt, будем использовать более стойкий и безопасный метод SHA-512 для шифрования паролей, который также позволяет хранить пароли длиннее чем 8 символов. Следует также изменить устаревший путь к каталогу /var/spool/mail, местоположением для почтовых ящиков пользователей, которые Shadow использует по умолчанию в каталоге /var/mail:

sed -i -e 's@#ENCRYPT_METHOD DES@ENCRYPT_METHOD SHA512@' \
-e 's@/var/spool/mail@/var/mail@' etc/login.defs


Если принято решение выполнять сборку Shadow с поддержкой Cracklib, выполним команду:

sed -i 's@DICTPATH.*@DICTPATH\t/lib/cracklib/pw_dict@' etc/login.defs

Внесём незначительные изменения, чтобы создать первый номер группы, сгенерированный программой useradd равным 1000:

sed -i 's/1000/999/' etc/useradd

Подготовим пакет Shadow к компиляции:

./configure --sysconfdir=/etc --with-group-name-max-length=32

Значения параметров конфигурации:
--with-group-name-max-length=32 Максимальная длина имени пользователя-32 символа. Сделаем такое же значение для групп.
Скомпилируем пакет:

make

У этого пакета нет тестов.
Установим пакет:

make install

Переместим программу в нужное место:

mv -v /usr/bin/passwd /bin

Конфигурация Shadow:
Пакет содержит утилиты для добавления, модификации и удаления пользователей и групп; установки и изменения паролей; а также выполняет другие задачи по администрированию. Для полного разъяснения что означает password shadowing, обратитесь к документации, которая расположена в каталоге doc/HOWTO в архиве пакета. Если вы используете функциональную поддержку Shadow, необходимо держать в уме что программы, которым необходима проверка паролей (дисплейные менеджеры, программы FTP, pop3 сервисы, и т.д.) должны быть совместимы с Shadow. То есть, они должны иметь возможность работать с shadowed паролями.
Включаем поддержку shadowed паролей:

pwconv

Включаем поддержку shadowed паролей групп:

grpconv

Конфигурация Shadow по умолчанию для программы useradd имеет ряд предостережений, и нуждается в дополнительных разъяснениях. Перовое действие для программы useradd - создание пользователя и группы с тем же наименованием, как имя пользователя. По умолчанию, идентификатор пользователя (UID) и идентификатор группы (GID) начинаются с 1000. Это означает, что если к программе useradd не было добавлено аргументов, каждый пользователь станет членом уникальной группы в системе. Если такое поведение нежелательно, то можно передать аргумент -g к вызову программы useradd. Параметр по умолчанию хранится в файле /etc/default/useradd. Можно модифицировать два аргумента в этом файле, так как считаете необходимым.
Объяснения значений параметров:
GROUP=1000 Значение аргумента устанавливает начало нумерации, используемой в файле /etc/group. Значение можно модифицировать на ваше усмотрение. Однако обратите внимание, что команда useradd никогда не будет повторно использовать UID или GID. Если номер, указанный в значении аргумента будет занят, будет использован следующий номер по порядку. Если в системе нет номера 1000 в первый момент использования команды useradd без аргумента -g, вы получите сообщение, в котором будет следующая информация: useradd: unknown GID 1000. Можно игнорировать сообщение, и номер группы 1000 будет использован.
CREATE_MAIL_SPOOL=yes Аргумент сообщает команде useradd создать файл почтового ящика для нового пользователя. useradd назначит этому файлу группу mail и права 0660. Если не нужно, чтобы создавались эти файлы, выполним команду:

sed -i 's/yes/no/' /etc/default/useradd

Установка пароля для корневного пользователя (root)
Придумаем пароль для пользователя root и укажим его:

passwd root

Каталог установки: /etc/default
Краткое описание установленных программ пакета Shadow:
chage Изменение максимального количества дней между обязательными сменами пароля.
chfn Изменение полного имени пользователя и другой информации.
chgpasswd Обновление групповых паролей в пакетном режиме.
chpasswd Обновление пользовательских паролей в пакетном режиме.
chsh Используется для изменения оболочки пользователя по умолчанию.
expiry Проверяет и применяет текущую политику истечения срока действия пароля.
faillog Используется для проверки журнала ошибок входа, для установки максимального значения количество сбоев до блокировки учетной записи или сброс количества неудачных попыток.
gpasswd Используется для добавления и удаления членов и администраторов группы.
groupadd Создает группу с заданным именем.
groupdel Удаляет группу с заданным именем.
groupmems Позволяет пользователю управлять своим списком групп без требования привилегий корневого пользователя (root).
groupmod Используется для изменения наименования указанной группы или идентификтора группы (GID).
grpck Проверяет целостность файлов группы /etc/group и /etc/gshadow.
grpconv Создает или обновляет shadow файл группы из обычного файла группы.
grpunconv Обновляет файл /etc/group из /etc/gshadow и затем удаляет последний.
lastlog Сообщает о последнем входе в систему для всех пользователей или указанного пользователя.
login Используется для входа пользователей в систему.
logoutd Используется ли сервис для ограничения времени входа в систему и порты.
newgidmap Используется для установки отображения идентификатора группы (GID) пространства имен пользователя.
newgrp Используется для изменения текущего идентификатора группы (GID) во время сеанса входа в систему.
newuidmap Используется для установки отображения идентификатора пользователя (UID) пространства имен пользователя.
newusers Используется для создания или обновления всей серии пользователей.
nologin Отображает сообщение о недоступности учетной записи; создан для использования в качестве оболочки по умолчанию для учетных записей, которые были отключены.
passwd Используется для изменения пароля для учетной записи пользователя или группы.
pwck Проверяет целостность файлов паролей /etc/passwd и /etc/shadow.
pwconv Создает или обновляет shadow файл пароля из обычного файла паролей.
pwunconv Обновляет /etc/passwd из /etc/shadow и затем, удаляет последний.
sg Выполняет заданную команду, пока пользовательский GID устанавливается в соответствии с заданной группой.
su Запускает оболочку с заменённым идентификатором пользователя и группы.
useradd Создает нового пользователя с заданным именем или обновляет значение по умолчанию информации для нового пользователя.
userdel Удаляет указанного пользователя.
usermod Используется для изменения имени пользователя, пользователя Идентификация (UID), оболочка, начальная группа, домашний каталог и т.д.
vigr Редактирует файлы /etc/group или /etc/gshadow.
vipw Редактирует файлы /etc/passwd или /etc/shadow.

6.29. Psmisc-23.1

Пакет Psmisc содержит программы для отображения информации о запущенных процессах.
Подготовим пакет Psmisc к компиляции:

./configure --prefix=/usr

Скомпилируем пакет:

make

У этого пакета нет тестов.
Установим пакет:

make install

Переместим файлы программ killall и fuser в место, определённое стандартом FHS:

mv -v /usr/bin/fuser /bin
mv -v /usr/bin/killall /bin


Краткое описание установленных программ:
fuser Сообщает идентификатор процесса (PID) процесса, который использует данный файл или файловая система.
killall Уничтожает процесс по наименованию; посылает сигнал всем процессам, которые были запущены указанной командой.
peekfd Просмотр файловых дескрипторов запущенного процесса, учитывая его PID.
prtstat Отображает информацию о процессе.
pstree Отображает запущенные процессы в виде дерева.
pstree.x11 (link to pstree) Тоже самое что pstree, кроме того, что команда будет ожидать подтверждения перед выходом.

6.30. Iana-Etc-2.30

Пакет Iana-Etc содержит данные для сетевых служб и протоколов. Следующая команда преобразует необработанные данные, предоставленные IANA, в требуемые форматы для файлов с данными /etc/protocols и /etc/services:

make

У этого пакета нет тестов.
Установим пакет:

make install

Краткое описание установленных файлов:
/etc/protocols Описывает различные интернет-протоколы DARPA, которые доступны из подсистемы TCP/IP.
/etc/services Обеспечивает соответствие между текстовыми именами для интернет служб и назначенными номерами портов и протоколов.

6.31. Bison-3.0.5

Пакет содержит GNU версию yacc (Ещё один компилятор компиляторов) необходимый для сборки некоторых пакетов LFS системы.
Подготовим пакет Bison к компиляции:

./configure --prefix=/usr --docdir=/usr/share/doc/bison-3.0.5

Скомпилируем пакет:

make

Есть циклическая зависимость между bison и flex при проверке. При желании, после установки пакета flex, наборы тестов для bison можно будет запустить командой make check. Установим пакет:

make install

Содержимое пакета Bison.
Каталог установки: /usr/share/bison
Краткое описание установленных программ и библиотеки:
bison Генерирует из набора правил программу для анализа структуры текстовых файлов. Bison является заменой Yacc (еще один компилятор компиляторов).
yacc Обертка для bison,предназначенная для программ, которые все еще вызывают yacc вместо bison; она вызывает bisonс аргументом -y.
liby Библиотека Yacc содержит реализацию Yacc-совместимых функций yyerror и main; Эта библиотека обычно не очень полезна, но POSIX требует её.

6.32. Flex-2.6.4

Flex (Fast Lexical Analyzer) — генератор лексических анализаторов. Это инструмент для лексического анализа, который может использоваться для выделения из исходного текста определенных строк заранее заданным способом.
Необходимо исправить проблему, обнаруженную в glibc-2.26:

sed -i "/math.h/a #include <malloc.h>" src/flexdef.h

В процессе процедуры сборки предполагается наличие программы help2man - программа для создания справочной страницы из исполняемого файла --help. Её нет, поэтому используем переменную среды, чтобы пропустить этот процесс. Выполним подготовку пакета к компиляции:

HELP2MAN=/tools/bin/true \
./configure --prefix=/usr --docdir=/usr/share/doc/flex-2.6.4


Скомпилируем пакет:

make

Для выполнения тестов, выполним команду:

make check

Установим пакет:

make install

Некоторые программы ничего пока не знают о flex, и будут пытаться запустить предшественника lex. Чтобы обуспечить возможность использования flex, создадим символическую ссылку с названием lex которая запустить требуемую программу flex в режиме эмуляции lex:

ln -sv flex /usr/bin/lex

Содержимое пакета Flex.
Каталог установки: /usr/share/doc/flex-2.6.4
Краткое описание установленных программ и библиотеки:
flex Инструмент для генерации программ, распознающих шаблоны в тексте; она позволяет универсально определять правила для поиска паттернов, исключая необходимость разработки специализированной программы.
flex++ Расширение для flex, используемая для генерации кода Си++ и классов. Является символической ссылкой на flex.
lex Символическая ссылка, которая запускает flex в режиме эмуляции lex.
libfl Библиотека flex.

6.33. Grep-3.1

Пакет содержит программу, которая находит на вводе строки, отвечающие заданному регулярному выражению, и выводит их, если вывод не отменён специальным ключом. Пакет используется в процедурах сборки для большинства пакетов.
Подготовим пакет Grep к компиляции:

./configure --prefix=/usr --bindir=/bin

Скомпилируем пакет:

make

Для выполнения тестов, выполним команду:

make check

Установим пакет:

make install

Краткое описание установленных программ пакета Grep:
egrep Печать строк, соответствующих расширенному регулярному выражению.
fgrep Печать строк, соответствующих списку фиксированных строк.
grep Печать строк, соответствующих базовому регулярному выражению.

6.34. Bash-4.4.18

Усовершенствованная и модернизированная вариация командной оболочки Bourne shell. Этот пакет выполняет требования стандарта LFS Core для обеспечения интерфейса Bourne Shell в системе. Он был выбран из числа других оболочек из-за широкого распространения, возможностей которые выходят далеко за пределы базовых функций программ-оболочек.
Подготовим пакет Bash к компиляции:

./configure --prefix=/usr \
--docdir=/usr/share/doc/bash-4.4.18 \
--without-bash-malloc \
--with-installed-readline


Значение новых параметров конфигурации:
--with-installed-readline Аргумент сообщает Bash использовать библиотеку readline, которая используется в хост-системе, вместо того, чтобы использовать собственную версию.
Скомпилируем пакет:

make

Пропускаем этот раздел и переходим к установке пакета, если нет необходимости запускать наборы тестов.
Подготовим тесты к выполнению, и убедитесь, что пользователь nobody может имет права на запись в дерево исходных текстов пакета:

chown -Rv nobody

Запускаем тесты от пользователя nobody:

su nobody -s /bin/bash -c "PATH=$PATH make tests"

Установим пакет и переместим основные исполняемые файлы в каталог /bin:

make install
mv -vf /usr/bin/bash /bin


Запустим новый скомпилированный bash (заменив тот, который в настоящее время выполняется):

exec /bin/bash --login +h

Аргументы используемые для bash сообщают обрабатывать интерактивную оболочку входа и отключить хэширование чтобы новые программы были найдены по мере их появления.
Содержимое пакета Bash.
Каталог установки: /usr/share/doc/bash-4.4.18
Краткое описание установленных программ:
bash Широко используемый командный интерпретатор; он выполняет множество типов расширений и подстановок в заданной командной строке перед выполнением это, что делает интерпретатор мощным инструментом.
bashbug Сценарий оболочки, который поможет пользователю составить и отправить по почте стандартное отформатированное сообщение об ошибках, относительно bash.
sh Сивольнач ссылка на программу bash; при вызове команды sh, bash пытается имитировать начальное поведение исторических версий sh как как можно ближе, в соответствии со стандартом POSIX.

6.35. Libtool-2.4.6

GNU libtool является общей библиотекой поддержки скриптов. Libtool скрывает сложность использования распределенных библиотек под последовательным, переносимым интерфейсом. Библиотека необходима для выполнения тестов других пакетов LFS.
Подготовим пакет Libtool к компиляции:

./configure --prefix=/usr

Скомпилируем пакет:

make

Для выполнения тестов, выполните команду:

make check

Вреся выполнения тестов можно сократить на машине с несколькими ядрами. Чтобы это сделать добавьте аргумент к вышеуказанной команде: TESTSUITEFLAGS=-j<N>. Если аппаратные средства позволяют, то при использовании аргумента -j4 может сократить время тестирования почти на 60 процентов.
Пять тестов не пройдут в окружении сборки LFS из-за циклических зависимостей, но все тесты пройдут, если их повторно запустить после установки пакета automake.
Установим пакет:

make install

Содержимое пакета Libtool.
Установленные каталоги: /usr/include/libltdl и /usr/share/libtool
Краткое описание установленных программ и библиотек: libtool Обеспечивает вспомогательные общие службы для сборки.
libtoolize Обеспечивает стандартный путь для добавления поддержки libtool для пакета.
libltdl Скрывает различные трудности dlopening библиотек.

6.36. GDBM-1.17

GDBM - библиотека функций базы данных, которая использует расширяемое хэширование и работает аналогично стандартным функциям dbm UNIX. Эти процедуры предоставляются программисту, которому необходимо создать и обработать хешированную базу данных. Основное предназначение gdbm — хранить пары ключ/данные в файле данных. Каждый ключ должен быть уникальным и сопряженным только с одним элементом данных. Ключи не могут быть напрямую доступны в отсортированном порядке.
Подготовим пакет GDBM к компиляции:

./configure --prefix=/usr \
--disable-static \
--enable-libgdbm-compat


Значения параметров конфигурации:
--enable-libgdbm-compat Аргумент включает возможность совместимости библиотеки libgdbm для сборки, поскольку некоторые пакеты за пределами обсуждений книги, могут требовать более старые механизмы DBM.
Скомпилируем пакет:

make

Для выполнения тестов, выполните команду:

make check

Установим пакет:

make install

Краткое описание установленные программы и библиотек:
gdbm_dump Создаёт дамп базы данных GDBM в файл.
gdbm_load Восстанавливает базу данных GDBM из файла дампа.
gdbmtool Проверяет и изменяет базу данных GDBM.
libgdbm Содержит функции для управления хешированной базой данных.
libgdbm_compat Библиотека совместимости, содержащая более старые функции DBM.

6.37. Gperf-3.1

Gperf генерирует превосходную хэш-функцию из набора ключей.
Подготовим пакет Gperf к компиляции:

./configure --prefix=/usr --docdir=/usr/share/doc/gperf-3.1

Скомпилируем пакет:

make

Тесты могут не проходить, если выполнение происходит в парралельном режиме (если значение аргумента -j больше чем 1) Для выполнения тестов, выполните следующую команду:

make -j1 check

Установим пакет:

make install

Содержимое пакета Gperf.
Установленная программа: gperf Генерирует превосходную хэш-функцию из набора ключей.
Каталог установки: /usr/share/doc/gperf-3.1

6.38. Expat-2.2.5

Expat потокоориентированная библиотека парсинга XML, написанная на C. Как один из наиболее доступных XML парсеров, широко используется в открытом программном обеспечении.
Исправим проблему при работе с регрессионными тестами в окружении LFS:

sed -i 's|usr/bin/env |bin/|' run.sh.in

Подготовим пакет Expat к компиляции:

./configure --prefix=/usr \
--disable-static \
--docdir=/usr/share/doc/expat-2.2.5


Скомпилируем пакет:

make

Для выполнения тестов, выполним команду:

make check

Установим пакет:

make install

При желании, можно установить документацию:

install -v -dm755 /usr/share/doc/expat-2.2.5
install -v -m644 doc/*.{html,png,css} /usr/share/doc/expat-2.2.5


Содержимое пакета Expat.
Установленная программа: xmlwf Утилита для проверки XML документов на предмет правильного оформления.
Установленные библиотеки: libexpat.so Содержит функции API для разбора (парсинга) XML.
Каталог установки: /usr/share/doc/expat-2.2.5

6.39. Inetutils-1.9.4

Пакет Inetutils содержит базовые программы для работы с сетью.
Подготовим пакет Inetutils к компиляции:

./configure --prefix=/usr \
--localstatedir=/var \
--disable-logger \
--disable-whois \
--disable-rcp \
--disable-rexec \
--disable-rlogin \
--disable-rsh \
--disable-servers


Значение параметров конфигурации:
--disable-logger Аргумент запрещает устанавливать программу logger, которая используется сценариями для перенаправления сообщений системной службе логирования (System Log Daemon). Не устанавливаем его, потому что Util-linux устанавливает более новую версию.
--disable-whois Аргумент запрещает устанавливать программу whois, которая является устаревшей. Инструкции для установки лучшей альтернативы whois располагается BLFS.
--disable-r* Аргумент запрещает устанавливать устаревшие программы которые по соображениям безопасности не должны быть установлены. Функции, поддерживаемые этими программами можно заменить функционалом из пакета openssh из книги BLFS.
--disable-servers Отключает установку различных сетевых серверов из пакета Inetutils. Эти серверы считаются не соответствующих базовой системе LFS. Некоторые из них небезопасны по своей природе и считаются безопасным только в надежных сетях. Обратите внимание, что для многих из этих серверов есть лучшие замены.
Скомпилируем пакет:

make

Для выполнения тестов, выполним команду:

make check

Один тест, libls.sh, может не пройти в среде chroot но пройдет корректно, если повторить проверку после окончательной установки системы LFS. Ещё один тест ping-localhost.sh также не пройдёт если хост система не поддерживает возможности ipv6.
Установим пакет:

make install

Переместим некоторые программы, чтобы они были доступны, если каталог /usr недоступен:

mv -v /usr/bin/{hostname,ping,ping6,traceroute} /bin
mv -v /usr/bin/ifconfig /sbin


Установленные программы:
dnsdomainname Показывает системное DNS имя.
ftp Программа для передачи файлов по протоколу FTP.
hostname Указывает, или задаёт имя хоста.
ifconfig Управление сетевыми интерфейсами.
ping Отправляет пакеты эхо-запросов и сообщает, как долго ответы принимались.
ping6 Версия ping для IPv6 сетей.
talk Используется для общения с другими пользователями.
telnet Интерфейс для протокола TELNET.
tftp Программа для передачи файлов по протоколу TFTP (Trivial File Transfer Protocol — простой протокол передачи файлов).
traceroute Cлужебная компьютерная программа, предназначенная для определения маршрутов следования данных в сетях TCP/IP. Traceroute может использовать разные протоколы передачи данных в зависимости от операционной системы. Такими протоколами могут быть UDP, TCP, ICMP или GRE.

6.40. Perl-5.28.0

Высокоуровневый интерпретируемый динамический язык программирования общего назначения, он необходим для установки и выполнения тестов некоторых пакетов LFS.
Создадим файл /etc/hosts для определения ссылки в файлах конфигурации Perl и для прохождения опциональных наборов тестов:

echo "127.0.0.1 localhost $(hostname)" > /etc/hosts

Эта версия Perl теперь собирает Compress::Raw::Zlib и Compress::Raw::BZip2 модули. По умолчанию, Perl будет использовать внутреннюю копию исходных файлов для сборки. Выполним следующую команду, чтобы использовать уже установленные системные библиотеки:

export BUILD_ZLIB=False
export BUILD_BZIP2=0


Чтобы иметь полный контроль над настройкой, можно убрать аргумент «-des» из нижеуказанной команды и вручную укажите местоположения для сборки. В качестве альтернативы используйте команду, как показано ниже и используйте настройки по умолчанию, которые автоматически обнаружит Perl:

sh Configure -des -Dprefix=/usr \
-Dvendorprefix=/usr \
-Dman1dir=/usr/share/man/man1 \
-Dman3dir=/usr/share/man/man3 \
-Dpager="/usr/bin/less -isR" \
-Duseshrplib \
-Dusethreads


Значение параметров конфигурации:
-Dvendorprefix=/usr Гарантирует что perl будет знать место, куда выполнять установку модулей.
-Dpager="/usr/bin/less -isR" Гарантирует что будет использована программа less вместо more.
-Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3 Поскольку Groff ещё не установлен, сценарий Configure думает что нам не требуется документация. Эти аргументы переопределяют это решение.
-Duseshrplib Сборка общей библиотеки libperl необходимая для некоторых модулей Perl.
-Dusethreads Сборка Perl с поддержкой потоков.
Скомпилируем пакет:

make

Для выполнения тестов, выполним следующую команду:

make -k test

Один тест не пройдет из-за использования последней версии gdbm.
Установим и очистим пакет:

make install
unset BUILD_ZLIB BUILD_BZIP2

Содержимое пакета Perl.
Установленные программы:
c2ph Выполняет дамп структур Сгенерированных из cc -g -S.
corelist Интерфейс командной строки для модуля Module::CoreList.
cpan Взаимодействие с Comprehensive Perl Archive Network (CPAN) из командной строки.
enc2xs Создает расширение Perl для модуля Encode из Unicode Character Mappings или файлы кодировки Tcl.
encguess Предполагает тип кодировки одного или нескольких файлов.
h2ph Преобразует .h заголовочные файлы Си в .ph заголовочные файлы Perl.
h2xs Преобразует .h заголовочные файлы Си в расширение Perl.
instmodsh Сценарий оболочки для проверки установленных модулей Perl и создание архива из установленного модуля.
json_pp Преобразует данные между определенными форматами ввода и вывода.
libnetcfg Может использоваться для настройки модуля libnet.
perl Объединяет некоторые из лучших возможностей языка Си, sed, awk и shв один язык.
perl5.28.0 Жесткая ссылка на perl. perlbug Используется для создания отчетов об ошибках Perl или входящих в состав модулей, для отправки по электронной почте.
perldoc Отображает часть документации в формате pod, которая встроена в дерево установки Perl или в сценарии Perl.
perlivp Процедура проверки установки Perl; его можно использовать для того чтобы убедиться в корректности установки и настройки Perl и его библиотек.
perlthanks Используется для создания благодарственных сообщений на электронную почту разработчиков Perl.
piconv Версия Perl конвертера кодировки символов iconv.
pl2pm Грубый инструмент для преобразования файлов Perl4.pl в модули Perl5.pm.
pod2html Преобразует файлы из формата pod в формат HTML.
pod2man Преобразует данные pod в форматированны формат * roff.
pod2text Преобразует данные pod в форматированный текст ASCII.
pod2usage Отображает сообщений об использовании из встроенных документов pod в файлы.
podchecker Проверяет синтаксис файлов документации формата pod. podselect Отображение выбранных разделов pod документации. prove Инструмент командной строки для запуска тестов модуля Test :: Harness.
pstruct Дампы структур Си, сгенерированные из cc -g -S. ptar Похожая на tarпрограмма, написанная на языке Perl.
ptardiff Программа Perl, которая сравнивает извлеченный архив с нераспакованной областью.
ptargrep Программа Perl, применяющая сопоставление шаблонов к содержимому файлов в архиве tar.
shasum Печать или проверка контрольных сумм SHA.
splain Используется для диагностики предупреждений в Perl.
xsubpp Преобразует Perl XS код в Си код.
zipdetails Отображает сведения о внутренней структуре Zip-файла.
Многие библиотеки не могут быть перечислены здесь.
Каталог установки: /usr/lib/perl5

6.41. XML::Parser-2.44

XML::Parser - Модуль (автор James Clark), который является интерфейсом Perl для библиотеки Expat.
Подготовим пакет XML::Parser к компиляции:

perl Makefile.PL

Скомпилируем пакет:

make

Для выполнения тестов, выполним команду:

make test

Установим пакет:

make install

Краткое описание установленного модуля:
Expat Обеспечивает интерфейс Perl для Expat.

6.42. Intltool-0.51.0

Intltool - инструмент интернационализации, используемый для извлечения переводимых строк из исходных файлов.
Исправим предупреждение, вызванное в perl-5.22 и более поздних версиях:

sed -i 's:\\\${:\\\$\\{:' intltool-update.in

Подготовим пакет Intltool к компиляции:

./configure --prefix=/usr

Скомпилируем пакет:

make

Для выполнения тестов, выполним команду:

make check

Установим пакет:

make install
install -v -Dm644 doc/I18N-HOWTO /usr/share/doc/intltool-0.51.0/I18N-HOWTO


Установленные каталоги: /usr/share/doc/intltool-0.51.0 и /usr/share/intltool
Краткое описание установленных программ:
intltoolize Подготовит пакет для использования intltool.
intltool-extract Создаёт заголовочные файлы, которые могут быть прочитаны программой gettext.
intltool-merge Объединяет переведенные строки в различные типы файлов.
intltool-prepare Обновляет файлы pot и объединяет их с файлами перевода.
intltool-update Обновляет файлы шаблонов po и объединяет их с переводами.

6.43. Autoconf-2.69

Программы для воспроизведения сценариев командной оболочки которые могут выполнять автоматическую настройку исходного кода из определенного пользовательского файла-шаблона. Он также необходим для повторной компиляции пакета после обновления процедур сборки.
Подготовим пакет Autoconf к компиляции:

./configure --prefix=/usr

Скомпилируем пакет:

make

Для выполнения тестов, выполним команду:

make check

Выполнение тестов может занять продолжительное время. Кроме того, будет пропущено несколько тестов, использующих Automake. Для полного покрытия тестами пакет можно повторно протестировать после установки пакета Automake. Также, два теста не пройдут из-за изменений в библиотеке libtool-2.4.3 и более поздней.
Время на проведение тестирование можно значительно сократить на системах с несколькими ядрами у центрального процессора. Для того, чтобы это сделать, добавьте команду TESTSUITEFLAGS=-j<N> к строке выше.
Установим пакет:

make install

Содержимое пакета Autoconf.
Каталог установки: /usr/share/autoconf
Краткое описание установленных программ:
autoconf Генерирует сценарии оболочки которые автоматически выполняют конфигурирование исходного кода программного обеспечения для адаптации ко многим разновидностям Unix-подобными системам; сценарии конфигурирования, сгенерированные программой autoconf независимы и не требуют программы autoconf.
autoheader Инструмент для создания шаблона для языка Си из выражения #define для конфигурирования.
autom4te Обертка для макро процессора M4.
autoreconf Автоматически запускает autoconf, autoheader, aclocal, automake, gettextize, и libtoolize в правильном порядке чтобы сохранить время когда были сделаны изменения у файлов-шаблонов autoconf и automake.
autoscan Помогает создать файл configure.in для пакета; он проверяет исходные файлы в дереве каталогов, выполняет поиск общих проблем с переносимостью и создаёт файл configure.scan который является предварительным файлом configure.in пакета.
autoupdate Модифицирует файл configure.in который по прежнему вызывает макросы autoconf по их старым именам для использования имен макросов.
ifnames Помогает при написании файла configure.in для пакета; команда отображает идентификаторы препроцессора Си которые использует пакет. [Если пакет уже настроен для переносимости, эта программа может помочь определить что сценарий configure требует для проведения проверки. Он также может заполнить пробелы в файле configure.in, сформированным autoscan.]

6.44. Automake-1.16

Программы для создания файлов Makefile для использования его программой Autoconf. Он также необходим для повторной компиляции пакета после обновления процедур сборки.
Подготовим пакет Automake к компиляции:

./configure --prefix=/usr --docdir=/usr/share/doc/automake-1.16

Скомпилируем пакет:

make

Есть несколько тестов, которые ссылаются на неправильную версию библиотеки flex. Кроме того, использование опции -j4 make ускоряет тесты, даже на системах с одним процессором из-за внутренних задержек в отдельных тестах. Для выполнения тестов, выполним команду:

sed -i "s:./configure:LEXLIB=/usr/lib/libfl.a &:" t/lex-{clean,depend}-cxx.sh
make -j4 check


Два теста не пройдут в среде LFS: check12.sh и check12-w.sh.
Установим пакет:

make install

Содержимое пакета Automake.
Установленные каталоги: /usr/share/aclocal-1.16, /usr/share/automake-1.16, и /usr/share/doc/automake-1.16
Краткое описание установленнх программ:
aclocal Формирует файлы aclocal.m4 на основе содержимого файла configure.in.
aclocal-1.16 Жесткая ссылка на aclocal.
automake Инструмент для автоматического создания файлов Makefile.in из файлов Makefile.am [Чтобы создать файлы Makefile.in для пакета, запустите программу в вышестоящем каталоге. Сканируя файл configure.in, выполняется автоматический поиск каждого подходящего файла Makefile.am и формирование соответствующего файла Makefile.in.]
automake-1.16 Жесткая ссылка на automake.

6.45. Xz-5.2.4

Пакет содержит программы для сжатия и распаковки файлов. Он обеспечивает высокое сжатие и используется для распаковки пакетов форматов XZ и LZMA. Сжатие текстовых файлов при помощи программы xzдаёт больший процент сжатия чем gzip или bzip2.
Подготовим пакет Xz для компиляции:

./configure --prefix=/usr \
--disable-static \
--docdir=/usr/share/doc/xz-5.2.4


Скомпилируем пакет:

make

Для выполнения тестов, выполним команду:

make check

Установим пакет и убедимся, что все основные файлы находятся в правильном каталоге:

make install
mv -v /usr/bin/{lzma,unlzma,lzcat,xz,unxz,xzcat} /bin
mv -v /usr/lib/liblzma.so.* /lib
ln -svf ../../lib/$(readlink /usr/lib/liblzma.so) /usr/lib/liblzma.so


Содержимое пакета Xz.
Установленные каталоги: /usr/include/lzma и /usr/share/doc/xz-5.2.4
Краткое описание установленных программ и библиотеки:
lzcat Выполняется распаковка в стандартный вывод.
lzcmp Запускает программу cmp для запакованных файлов при помощи алгоритма LZMA.
lzdiff Запускает программу diff для запакованных файлов при помощи алгоритма LZMA.
lzegrep Запускает программу egrep для запакованных файлов при помощи алгоритма LZMA.
lzfgrep Запускает программу fgrep для запакованных файлов при помощи алгоритма LZMA.
lzgrep Запускает программу grep для запакованных файлов при помощи алгоритма LZMA.
lzless Запускает программу less для запакованных файлов при помощи алгоритма LZMA.
lzma Запаковывает и распаковывает файлы используя формат LZMA.
lzmadec Небольшой и быстрый декодер для запакованных файлов в формате LZMA.
lzmainfo Показывает информацию, хранящуюся в заголовке сжатого файла LZMA.
lzmore Запускает программу more для запакованных файлов при помощи алгоритма LZMA.
unlzma Распаковывает файлы используя формат LZMA.
unxz Распаковывает файлы используя формат XZ.
xz Запаковывает и распаковывает файлы используя формат XZ.
xzcat Выполняется распаковка в стандартный вывод.
xzcmp Запускает программу cmp для сжатых файлов в формте XZ.
xzdec Небольшой и быстрый декодер для запакованных файлов в формате XZ.
xzdiff Запускает программу diff для запакованных файлов в формате XZ.
xzegrep Запускает программу egrep для запакованных файлов в формате XZ.
xzfgrep Запускает программу fgrep для запакованных файлов в формате XZ.
xzgrep Запускает программу grep для запакованных файлов в формате XZ.
xzless Запускает программу less для запакованных файлов в формате XZ.
xzmore Запускает программу more для запакованных файлов в формате XZ.
liblzma LZMA((англ. Lempel-Ziv-Markov chain-Algorithm) Библиотека, реализующая алгоритм на схеме сжатия данных по словарю и обеспечивает высокий коэффициент сжатия (обычно превышающий коэффициент, получаемый при сжатии с использованием bzip2), а также позволяет использовать словари различного размера.

6.46. Kmod-25

Kmod пакет содержит библиотеки и утилиты для загрузки модулей ядра.
Подготовим пакет Kmod к компиляции:

./configure --prefix=/usr \
--bindir=/bin \
--sysconfdir=/etc \
--with-rootlibdir=/lib \
--with-xz \
--with-zlib


Значение параметров конфигурации:
--with-xz, --with-zlib Эти аргументы позволяют Kmod обрабатывать сжатые модули ядра.
--with-rootlibdir=/lib Этот параметр обеспечивает размещение разных файлов, связанных с библиотекой в правильных каталогах.
Скомпилируем пакет:

make

В пакете не предусмотрено выполнение тестов в среде LFS. Как минимум требуется программа git и несколько тестов не будут выполняться вне репозитория git.
Установим пакет, и создадим символические ссылки для обеспечения совместимости с Module-Init-Tools (пакет, который ранее обрабатывал модули ядра Linux):

make install
for target in depmod insmod lsmod modinfo modprobe rmmod; do
ln -sfv ../bin/kmod /sbin/$target
done
ln -sfv kmod /bin/lsmod


Краткое описание установленных программ и библиотеки:
depmod Создает файл зависимостей на основе символов, которые он находит в существующем наборе модулей; этот файл зависимостей используется программой modprobe для автоматической загрузки необходимых модулей.
insmod Программа для вставки модуля в ядро Linux.
kmod Загружает и выгружает модули ядра.
lsmod Выводит список загруженных модулей.
modinfo Изучает объектный файл, связанный с модулем ядра и отображает любую информацию, которую он может получить.
modprobe Использует файл зависимостей, созданный depmod, для автоматической загрузки соответствующих модулей.
rmmod Выгружает модули из работающего ядра.
libkmod Эта библиотека используется другими программами для загрузки и выгрузки модулей ядра.

6.47. Gettext-0.19.8.1

Пакет содержит утилиты и библиотеки для работы с локализацией и интернационализацией необходимые для некоторых пакетов. Что позволяет программам, которые скомпилированы с поддержкой NLS (Поддержка нативных языков), показывать сообщения в пользовательском нативном языке.
Подавляем два вызова test-lock, которые на некоторых машинах могут вызвать бесконечный цикл:

sed -i '/^TESTS =/d' gettext-runtime/tests/Makefile.in && sed -i 's/test-lock..EXEEXT.//' gettext-tools/gnulib-tests/Makefile.in

Исправим файл конфигурации:

sed -e '/AppData/{N;N;p;s/\.appdata\./.metainfo./}' \
-i gettext-tools/its/appdata.loc


Подготовим пакет Gettext к компиляции:

./configure --prefix=/usr \
--disable-static \
--docdir=/usr/share/doc/gettext-0.19.8.1


Скомпилируем пакет:

make

Для выполнения тестов (выполнение может занять много времени), выполним команду:

make check

Установим пакет:

make install
chmod -v 0755 /usr/lib/preloadable_libintl.so


Содержимое пакета Gettext.
Установленные каталоги: /usr/lib/gettext, /usr/share/doc/gettext-0.19.8.1 и /usr/share/gettext
Краткое описание установленных программ и библиотек:
autopoint Копирует стандартные файлы инфраструктуры Gettext в исходный код пакета.
envsubst Заменяет переменные среды в строках формата оболочки.
gettext Переводит сообщение на естественном языке на язык пользователя поиск перевода в каталоге сообщений.
gettext.sh В первую очередь служит в качестве библиотеки функций оболочки для gettext.
gettextize Копирует все стандартные файлы Gettext в заданный верхний уровень каталог пакета для его интернационализации.
msgattrib Фильтрует сообщения каталога переводов по их атрибутам и манипулирует атрибутами.
msgcat Объединяет переданные файлы .po.
msgcmp Сравнивает два файла .po для проверки, что оба содержат один и тот же набор строк msgid.
msgcomm Находит сообщения, которые являются общими для файлов .po.
msgconv Преобразует каталог переводов в иную кодировку символов.
msgen Создает английский каталог переводов.
msgexec Применяет команду ко всем переводам каталога.
msgfilter Применяет фильтр ко всем переводам каталога.
msgfmt Создает двоичный каталог сообщений из транслируемого каталога.
msggrep Извлекает все сообщения каталога переводов, которые соответствуют шаблону или принадлежат к некоторым заданным исходным файлам.
msginit Создаёт новый .po файл, инициализирующий метаинформацию со значениями из пользовательской среды.
msgmerge Объединяет два необработанных перевода в один файл.
msgunfmt Декомпилирует каталог бинарных сообщений в исходный текст перевода.
msguniq Унифицирует дубликаты переводов в каталоге переводов.
ngettext Отображает переводы на родном языке текстового сообщения, грамматическая форма зависит от числа.
recode-sr-latin Редактирует сербский текст с кириллицы на латиницу.
xgettext Извлекает переведенные строки сообщений из данного источника файлов для создания первого шаблона перевода.
libasprintf Определяет класс autosprintf, который создает Си-форматированный вывод полезный для работы в программах на языке Си++, для использования со <string> строками и <iostream> потоками.
libgettextlib частная библиотека, содержаща общие процедуры, используемые различными программами Gettext; они не предназначены для общего использования.
libgettextpo Используется для написания специализированных программ, которые обрабатывают файлы .po; эта библиотека используется, когда стандартных приложений, поставляемых с Gettext (таких как msgcomm, msgcmp, msgattrib, и msgen) будет недостаточно.
libgettextsrc Частная библиотека, содержащая общие подпрограммы, используемые различными программами Gettext; они не предназначены для общего использования.
preloadable_libintl Библиотека, предназначенная для использования LD_PRELOAD, которая помогает libintl в журналировании непереведённых сообщений.

6.48. Libelf 0.173

Libelf - библиотека для обработки файлов формата ELF ( Executable and Linkable Format — формат исполнимых и компонуемых файлов). формат двоичных файлов, используемый во многих современных UNIX-подобных операционных системах, таких как FreeBSD, Linux, Solaris и др. Также этот формат используется и во многих других системах. Большинство утилит доступны в других пакетах, но эта библиотека необходима для сборки ядра Linux используя конфигурацию по умолчанию (и наиболее эффективную). Libelf является частью пакета elfutils-0.173. Необходимо использовать файл elfutils-0.173.tar.xz как архив с исходными текстами.
Подготовим Libelf к компиляции:

./configure --prefix=/usr

Скомпилируем пакет:

make

Для выполнения набора тестов, выполним команду:

make check

Выполним установку только Libelf:

make -C libelf install
install -vm644 config/libelf.pc /usr/lib/pkgconfig


6.49. Libffi-3.2.1

Переносимый, высокоуровневый интерфейс по различным соглашениям о вызовах. Программы во время компиляции могу не знать об аргументах, которые были переданы функции. Например, интерпретатору можно указать во время выполнения количество аргументов и указать их тип, для вызова функции. Libffi может использоваться в программах как "мост" от интерпретатора к скомпилированному коду.
Модифицируем Makefile чтобы установить заголовочные файлы в стандартный каталог /usr/include вместо /usr/lib/libffi-3.2.1/include:

sed -e '/^includesdir/ s/$(libdir).*$/$(includedir)/' \
-i include/Makefile.in
sed -e '/^includedir/ s/=.*$/=@includedir@/' \
-e 's/^Cflags: -I${includedir}/Cflags:/' \
-i libffi.pc.in


Подготовим пакет libffi к компиляции:

./configure --prefix=/usr --disable-static --with-gcc-arch=native

Значения параметров конфигурации:
--with-gcc-arch=native Убедимся, что gcc оптимизирован для текущей системы. Если это не указано, система угадывается, и генерируемый код может быть неправильным для некоторых систем. Если сгенерированный код будет скопирован из собственной системы в менее эффективную систему, используйте менее эффективную систему в качестве параметра. Подробнее о альтернативных типах систем см. Параметры x86 в руководстве gcc.
Скомпилируем пакет:

make

Для выполнения тестов, выполним команду:

make check

Установите пакет:

make install

Установленная библиотека: libffi.so Содержит libffi API функции.

6.50. OpenSSL-1.1.0h

OpenSSL пакет содержит инструменты управления и библиотеки криптографии. Они полезны для предоставления криптографических функций к другим пакетам, таким как OpenSSH, почтовым приложениям и веб-браузерам (для доступа к сайтам HTTPS).
Подготовим пакет OpenSSL к компиляции:

./config --prefix=/usr \
--openssldir=/etc/ssl \
--libdir=lib \
shared \
zlib-dynamic


Скомпилируем пакет:

make

Для выполнения тестов, выполним команду:

make test

Один тест 40-test_rehash.t не проходит в окружении chroot, но выполнится корректно при его перезапуске в обычном окружении.
Установим пакет:

sed -i '/INSTALL_LIBS/s/libcrypto.a libssl.a//' Makefile
make MANSUFFIX=ssl install


При желании, можно установить документацию:

mv -v /usr/share/doc/openssl /usr/share/doc/openssl-1.1.0h
cp -vfr doc/* /usr/share/doc/openssl-1.1.0h


Содержимое пакета OpenSSL.
Установленные каталоги: /etc/ssl, /usr/include/openssl, /usr/lib/engines и /usr/share/doc/openssl-1.1.0h
Краткое описание установленных программ и библиотек:
c_rehash Сценарий Perl, который сканирует все файлы в каталоге и добавляет символические ссылки к их хэш-значениям.
openssl Инструмент командной строки для использования различных криптографических функций библиотеки OpenSSL из оболочки. Его можно использовать для различных функций которые документированы в man 1 openssl.
libcrypto.so Реализует широкий спектр криптографических алгоритмов, используемых в различных Internet стандартах. Сервисы, предоставляемые библиотекой используются OpenSSL реализацией SSL, TLS и S/MIME, и также используются в реализации OpenSSH, OpenPGP, и других криптографических стандартах.
libssl.so Реализация протокола защиты транспортного уровня (TLS v1). Предоставляет функции API, документацию с которой можно ознакомиться, выполнив команду man 3 ssl.

6.51. Python-3.7.0

Python 3 - Высокоуровневый язык программирования общего назначения, ориентированный на повышение производительности разработчика и читаемости кода. Содержит среду разработки для объектно-ориентированного программирования, написания сценариев, прототипирования крупных программ и разработки полноценных приложений.
Подготовим пакет Python к компиляции:

./configure --prefix=/usr \
--enable-shared \
--with-system-expat \
--with-system-ffi \
--with-ensurepip=yes


Значение параметров конфигурации:
--with-system-expat Значение аргумента позволяет установить связь с системной библиотекой Expat.
--with-system-ffi Значение аргумента позволяет установить связь с системной библиотекой libffi.
--with-ensurepip=yes Значение аргумента включает сборку pip и setuptools программ для работы с пакетами.
Скомпилируем пакет:

make

Для выполнения тестов необходимы TK и X Windows сессия, и они не могут быть выполнены до тех пор, пока пакет не будет переустановлен по инструкциям в книге BLFS.
Установим пакет:

make install
chmod -v 755 /usr/lib/libpython3.7m.so
chmod -v 755 /usr/lib/libpython3.so


Значение команд установки:
chmod -v 755 /usr/lib/libpython3.{7m.,}so Исправляет установку разрешений для библиотек для совместимости с другими библиотеками.
При желании установим заранее отформатированную документацию:

install -v -dm755 /usr/share/doc/python-3.7.0/html
tar --strip-components=1 \
--no-same-owner \
--no-same-permissions \
-C /usr/share/doc/python-3.7.0/html \
-xvf ../python-3.7.0-docs-html.tar.bz2


Значения команд установки документации:
--no-same-owner и --no-same-permissions Гарантирует что установленные файлы будут иметь правильные права владения. Без этих опций, при использовании программы tar при распаковке, будут установлены права на распакованные файлы с указанием владельца пакета.
Содержимое пакета Python 3.
Установленные библиотеки: libpython3.7m.so и libpython3.so
Установленные каталоги: /usr/include/python3.7m, /usr/lib/python3 и /usr/share/doc/python-3.7.0
Краткое описание установленных программ:
2to3 Программа Python которая читает исходный код Python 2.x и применяет ряд исправлений для преобразования в правильный код Python 3.x.
idle3 Обёртка для сценария которая открывает графический редактор Python. Для запуска этого сценария убедитесь в том, что установлена программа Tk до запуска Python и модуль Tkinter также был собран.
pydoc3 Инструмент Python для работы с документацией.
python3 Интерпретируемый, интерактивный, объектно-ориентированный язык программирования.
pyvenv Создает виртуальные Python среды в целевых каталогах.

6.52. Ninja-1.8.2

Ninja - утилита для сборки программ, фокусирующая на скорости. От других систем сборки программ она отличается двумя основными аспектами: для работы используется свой формат входных файлов, созданных системой построения более высокого уровня, и она предназначена для быстрой сборки программ.
Когда программа ninja запущена, как правило, используется максимальное количество процессов параллельно. По умолчанию этому числу присваивается значение количество ядер компьютера плюс два. В некоторых случаях это может привести к перегреву центрального процессора, и (или) переполнению оперативной памяти. Если выполнять запуск через командную строку, можно передать аргумент -jN, в котором можно явно указать количество потоков для выполнения. Но в некоторых пакетах данное значение встроено и аргумент -jN будет игнорирован.
Можно использовать опциональный патч, который позволит устанавливать количество потоков выполнения через переменную среды, NINJAJOBS. Например указание значения переменной среды:

export NINJAJOBS=4

ограничит одновременное выполнение ninja в четыре процесса.
При желании установим патч выполнив команду:

patch -Np1 -i ../ninja-1.8.2-add_NINJAJOBS_var-1.patch

Выполним сборку Ninja:

python3 configure.py --bootstrap

Значения аргумента сборки:
--bootstrap Аргумент указывает ninja пересобрать себя в текущей системе.
Для выполнения тестов, выполним команду:

python3 configure.py
./ninja ninja_test
./ninja_test --gtest_filter=-SubprocessTest.SetWithLots


Установим пакет:

install -vm755 ninja /usr/bin/
install -vDm644 misc/bash-completion /usr/share/bash-completion/completions/ninja
install -vDm644 misc/zsh-completion /usr/share/zsh/site-functions/_ninja


Установленные программы:
ninja системы сборки ninja.

6.53. Meson-0.47.1

Meson - высокопроизводительная и удобная система сборки с открытым исходным кодом. Пакет содержит инструменты для автоматизации сборки программ. Основная цель Meson - минимизировать затраты времени на конфигурирование системы сборки.
Для компиляции пакета Meson, выполним команду:

python3 setup.py build

У этого пакета нет тестов.
Установим пакет:

python3 setup.py install --root=dest
cp -rv dest/* /


Значения параметров установки:
--root=dest По умолчанию команда python3 setup.py install выполняет установку различных файлов (например файлы руководств) в Python Eggs. Если указать значение dest в аргументе root, setup.py выполнит установку файлов в обычную иерархию каталогов. Затем мы можем скопировать иерархию, чтобы все файлы в итоге были в обычном месте.
Содержимое пакета Meson.
Каталог установки: /usr/lib/python3.7/site-packages/meson-0.47.1-py3.7.egg
Краткое описание установленных программ:
meson Высокопроизводительная система сборки.
mesonconf Инструмент для конфигурации процесса сборки с помощью meson.
mesonintrospect Инструмент для получения информации о сборке Meson.
mesontest Инструмент тестирования для системы сборки Meson.
wraptool Загрузчик исходного кода зависимостей.

6.54. Procps-ng-3.3.15

Пакет Procps-ng содержит программы для мониторинга за процессами.
Подготовим пакет procps-ng к компиляции:

./configure --prefix=/usr \
--exec-prefix= \
--libdir=/usr/lib \
--docdir=/usr/share/doc/procps-ng-3.3.15 \
--disable-static \
--disable-kill


Значение параметров конфигурации:
--disable-kill Этот аргумент отключает сборку программы kill которая содержится в пакете Util-linux и будет установлена позднее.
Скомпилируем пакет:

make

Для выполнения набора тестов в среде LFS, требуется внести некоторые модификации. Удалите тесто которые не работает когда используется tty устройство и исправьте два других. Для выполнения тестов, выполним команду:

sed -i -r 's|(pmap_initname)\\\$|\1|' testsuite/pmap.test/pmap.exp
sed -i '/set tty/d' testsuite/pkill.test/pkill.exp
rm testsuite/pgrep.test/pgrep.exp
make check


Установим пакет:

make install

Переместим необходимые библиотеки в каталог, который может быть найден, если каталог /usr не примонтирован:

mv -v /usr/lib/libprocps.so.* /lib
ln -sfv ../../lib/$(readlink /usr/lib/libprocps.so) /usr/lib/libprocps.so


Содержимое пакета Procps-ng.
Установленные каталоги: /usr/include/proc и /usr/share/doc/procps-ng-3.3.15
Краткое описание установленных программ и библиотеки:
free Сообщает количество свободной и используемой памяти (как физических, так и файла подкачки) в системе.
pgrep Поиск процессов на основе их имени и других атрибутов.
pidof Сообщает PID указанной программы.
pkill Обработка сигналов на основе их имени и других атрибутов.
pmap Сообщает карту памяти данного процесса.
ps Перечисляет текущие запущенные процессы.
pwdx Сообщает текущий рабочий каталог процесса.
slabtop Отображает подробную информацию о slab кеше в реальном времени.
sysctl Изменяет параметры ядра во время выполнения.
tload Распечатывает график текущей средней загрузки системы.
top Отображает список наиболее интенсивных процессов. Это обеспечивает постоянный просмотр активности процессора в режиме реального времени.
uptime Сообщает, сколько времени работает система, сколько пользователей вошедшие в систему и средние значения загрузки системы.
vmstat Статистика виртуальной памяти, информация о процессах, памяти, пейджинге, блоке ввода / вывода (IO), ловушки и активность центрального процессора.
w Показывает, какие пользователи в настоящее время зарегистрированы, где и с каких пор.
watch Повторно запускает заданную команду, отображая первый полный экран его вывода; это позволяет пользователю наблюдать за изменениеми с течением времени.
libprocps Содержит функции используемые многими проограммами пакета.

6.55. E2fsprogs-1.44.3

Утилиты для обработки файловых систем ext2, ext3 и ext4. Это наиболее распространенные и тщательно протестированные файловые системы, поддерживаемые Linux.
В документации к E2fsprogs указанно, что следует выполнять сборку в отдельном каталоге:

mkdir -v build
cd build


Подготовим пакет E2fsprogs к компиляции:

../configure --prefix=/usr \
--bindir=/bin \
--with-root-prefix="" \
--enable-elf-shlibs \
--disable-libblkid \
--disable-libuuid \
--disable-uuidd \
--disable-fsck


Значения переменных среды и аргументов конфигурации:
--with-root-prefix="" и --bindir=/bin Некоторые программы (такие как e2fsck) считаются важными программами. Когда, например, каталог /usr не примонтирован, необходимо, чтобы эти программы оставались доступны. Они принадлежат каталогам /lib и /sbin. Если эти аргументы не указать, установка будет произведена в каталог /usr.
--enable-elf-shlibs Создаёт общие библиотеки, которые используются некоторыми программами пакета.
--disable-* Исключает установку библиотек libuuid и libblkid, службы uuidd и fsck обертки, которые содержатся в пакете Util-Linux и являются более актуальными.
Скомпилируем пакет:

make

Для выполнения тестов, нужно сначала создать некоторые символические ссылки на библиотеки из каталога /tools/lib куда ссылаются программы тестирования:

ln -sfv /tools/lib/lib{blk,uu}id.so.1 lib
make LD_LIBRARY_PATH=/tools/lib check


Один из тестов пакета E2fsprogs попытается выделить 256 MB памяти. Если нет такого объема оперативной памяти, включаем требуемое пространство в файл подкачки для выполнения теста. Два теста, f_bigalloc_badinode и f_bigalloc_orphan_list, не пройдут.
Установим бинарные файлы, документацию, и разделяемые библиотеки:

make install

Установим статические библиотеки и заголовочные файлы:

make install-libs

Установим права на запись статическим библиотекам, для того, чтобы позднее, удалить отладочные символы:

chmod -v u+w /usr/lib/{libcom_err,libe2p,libext2fs,libss}.a

Пакет установит запакованный файл .info и не обновит системный файл dir. Распакуем файл и обновим файл dir:

gunzip -v /usr/share/info/libext2fs.info.gz
install-info --dir-file=/usr/share/info/dir /usr/share/info/libext2fs.info


При необходимости создадим и установим дополнительную документацию:

makeinfo -o doc/com_err.info ../lib/et/com_err.texinfo
install -v -m644 doc/com_err.info /usr/share/info
install-info --dir-file=/usr/share/info/dir /usr/share/info/com_err.info


Содержимое пакета E2fsprogs.
Установленные каталоги: /usr/include/e2p, /usr/include/et, /usr/include/ext2fs, /usr/include/ss, /usr/share/et, и /usr/share/ss
Краткое описание установленных программ и библиотек:
badblocks Поиск поврежденных блоков на устройстве (обычно дисковый раздел).
chattr Изменение атрибутов файлов на файловой системе ext2, также изменяет файловую систему ext3, журналирование файловой системы ext2.
compile_et Компилятор таблицы ошибок; он преобразует таблицу кода ошибки имена и сообщения в исходный файл C, подходящий для использования с библиотекой com_err.
debugfs Отладчик файловой системы; debugger можно использовать для изучения и изменения состояния файловой системы ext2.
dumpe2fs Распечатывает супер-блок и блокирует информацию о группе для файловой системы, присутствующей на устройстве.
e2freefrag Сообщает информацию о фрагментации свободного пространства.
e2fsck Используется для проверки и, при необходимости, ремонта файловых систем ext2 и ext3.
e2image Используется для сохранения критичных данных файловой системы ext2 в файл.
e2label Отображает или изменяет метку файловой системы для файловой системы ext2 на данном устройстве.
e2undo Заменяет журнал undo_log для файловых систем ext2/ext3/ext4 на данном устройстве. [можно использовать для отмены неудачной операции при использовании программы e2fsprogs.]
e4defrag Онлайн дефрагментатор для файловой системы ext4.
filefrag Отчет о том, насколько сильно файл может быть фрагментированным.
fsck.ext2 Проверка файловой системы ext2 и жесткая ссылка на e2fsck.
fsck.ext3 Проверка файловой системы ext3 и жесткая ссылка на e2fsck.
fsck.ext4 Проверка файловой системы ext4 и жесткая ссылка на e2fsck.
fsck.ext4dev Проверка файловой системы ext4 для разработчиков и жесткая ссылка на e2fsck.
logsave Сохраняет вывод команды в файле журнала.
lsattr Перечисляет атрибуты файлов во второй расширенной файловой системе.
mk_cmds Преобразует таблицу имен команд и справочных сообщений в C исходный файл, подходящий для использования с библиотекой подсистемы libss.
mke2fs Создает файловую систему ext2 или ext3 на устройстве.
mkfs.ext2 Создает файловую систему ext2 и является жесткой ссылкой на mke2fs.
mkfs.ext3 Создает файловую систему ext3 и является жесткой ссылкой на mke2fs.
mkfs.ext4 Создает файловую систему ext4 и является жесткой ссылкой на mke2fs.
mkfs.ext4dev Создает файловую систему ext4 для разработчиков и является жесткой ссылкой на mke2fs.
mklost+found Создает каталог lost+found на файловой системе ext2; он предварительно выделяет блоки диска для каталога, для выполнения задач e2fsck.
resize2fs Может использоваться для увеличения или сжатия файловой системы ext2.
tune2fs Используется для модифицирования параметров файловой системы ext2.
libcom_err Общая процедура отображения ошибок.
libe2p Используется dumpe2fs, chattr, и lsattr.
libext2fs Содержит программы позволяющие программам пользовательского уровня манипулировать файловыми системами ext2.
libss Используется debugfs.

6.56. Coreutils-8.30

Coreutils - пакет программного обеспечения GNU, содержащий большое количество основных утилит, таких как cat, ls и rm, необходимых для UNIX-подобных операционных систем. Пакет включает несколько более ранних пакетов — textutils, shellutils и fileutils и другие разнообразные утилиты.
POSIX требует, чтобы программы из Coreutils правильно распознавали границы символов даже в многобайтовых локалях. Следующий патч исправляет это несоблюдение и другие ошибки, связанные с интернационализацией.

patch -Np1 -i ../coreutils-8.30-i18n-1.patch

Ранее в этом патче было обнаружено множество ошибок. При возникновении новых ошибок разработчикам, проверим, воспроизводятся ли они без этого патча.
Уберем тест, который на некоторых машинах может привести к вечному зацикливанию:

sed -i '/test.lock/s/^/#/' gnulib-tests/gnulib.mk

Выполним подготовку пакета Coreutils к компиляции:

FORCE_UNSAFE_CONFIGURE=1 ./configure \
--prefix=/usr \
--enable-no-install-program=kill,uptime


Значение параметров конфигурации:
FORCE_UNSAFE_CONFIGURE=1 Эта переменная среды позволяет выполнить сборку пакета от корневого пользователя root.
--enable-no-install-program=kill,uptime Целью этого аргумента является предотвращение использования Coreutils установки двоичных файлов, которые позже будут установлены другими пакетами.
Скомпилируем пакет:

FORCE_UNSAFE_CONFIGURE=1 make

Перейдём к разделу «установка пакета» если не планируем запускать тесты.
Набор тестов готов к запуску. Сначала запустим те тесты, которые предназначены для запуска от корневого пользователя root:

make NON_ROOT_USERNAME=nobody check-root

Будем запускать оставшиеся тесты от пользователя nobody. Однако некоторые тесты требуют, чтобы пользователь был членом более чем одной группы. Чтобы эти тесты не были пропущены, добавим временную группу сделаем пользователя nobody её членом:

echo "dummy:x:1000:nobody" >> /etc/group

Исправим некоторые разрешения, чтобы пользователь, не являющийся пользователем root, мог компилировать и выполять тесты:

chown -Rv nobody

Запустим тесты. Убедимся, что переменная окружения PATH в среде su содержит каталог /tools/bin:

su nobody -s /bin/bash \
-c "PATH=$PATH make RUN_EXPENSIVE_TESTS=yes check"


Тест test-getlogin не пройдет в частично собранной системе, в среде chroot, но успешно выполнится в дальнейшем. Тестовая программа tty.sh также не работает.
Удалим временную группу:

sed -i '/dummy/d' /etc/group

Установим пакет:

make install

Переместим программы в места, указанные в FHS:

mv -v /usr/bin/{cat,chgrp,chmod,chown,cp,date,dd,df,echo} /bin
mv -v /usr/bin/{false,ln,ls,mkdir,mknod,mv,pwd,rm} /bin
mv -v /usr/bin/{rmdir,stty,sync,true,uname} /bin
mv -v /usr/bin/chroot /usr/sbin
mv -v /usr/share/man/man1/chroot.1 /usr/share/man/man8/chroot.8
sed -i s/\"1\"/\"8\"/1 /usr/share/man/man8/chroot.8


Некоторые сценарии в пакете LFS-Bootscripts зависят от head, sleep, и nice. Так как каталог /usr может быть недоступен на ранних стадиях процесса загрузки, то эти бинарные файлы должны находится в корневом каталоге раздела:

mv -v /usr/bin/{head,sleep,nice} /bin

Содержимое пакета Coreutils.
Каталог установки: /usr/libexec/coreutils
Краткое описание установленных программ и библиотеки:
base32 Кодирует и декодирует данные в соответствии со спецификацией base32 (RFC 4648).
base64 Кодирует и декодирует данные в соответствии со спецификацией base64 (RFC 4648).
basename Удаляет любой путь и заданный суффикс из имени файла.
cat Объединение файлов в стандартный вывод.
chcon Изменяет контекст безопасности для файлов и каталогов.
chgrp Изменяет групповое владение файлами и каталогами.
chmod Изменяет разрешения каждого файла на заданный режим; режим может быть либо символическим представлением изменений или восьмеричное число, представляющее новые разрешения.
chown Изменяет права пользователя и / или группы на файлы и каталоги.
chroot Выполняет команду с указанным каталогом как корневой каталог /.
cksum Показывает контрольную сумму (CRC) и количество байт для каждого указанного файла.
comm Сравнивает два файла, выводящих в трех столбцах строки которые являются уникальными, и линии, которые являются общими.
cp Выполняет копирование файлов.
csplit Разделяет данный файл на несколько новых файлов, разделяя их в соответствии с заданными шаблонами или номерами строк и выводит количество байтов каждого нового файла.
cut Распечатывает разделы линий, выбирая детали в соответствии с данными поля или позиции.
date Отображает текущее время в данном формате или устанавливает системную дату
dd Копирует файл с использованием заданного размера и количества блоков, в то время как возможно выполнение конверсий с ним.
df Показывает список всех файловых систем по именам устройств, сообщает их размер, занятое и свободное пространство и точки монтирования.
dir Выводит список содержимого каждого переданного каталога (тоже самое что команда ls).
dircolors Устанавливает цветовую схему и устанавливает значение переменной среды LS_COLOR для вывода команды ls.
dirname Удаляет имя файла из полного пути.
du Сообщает объем дискового пространства, используемого текущим каталогом, для каждого из указанных каталогов (включая все подкаталоги) или по каждому из указанных файлов.
echo Отображает строку текста.
env Выполняет команду в измененной среде.
expand Преобразует знаки табуляции в пробелы.
expr Вычисляет выражения.
factor Раскладывает число на простые множители.
false Ничего не выполняет, выходит со статусом, отображающим завершение со сбоем.
fmt Переформатирует абзацы в указанных файлах.
fold Разбивает длинные строки для устройств вывода с ограниченной шириной.
groups Выводит группы, в которых состоит пользователь.
head Выводит несколько первых строк файла (или заданное количество).
hostid Выводит цифровой идентификатор для текущего хоста (в шестнадцатеричном виде).
id Выводит реальный/эффективный UID и GID и группы, в которых состоит указанный пользователь.
install Копирует файлы и устанавливает атрибуты.
join Объединяет файлы по общему полю.
link Вызывает функцию link() для создания жесткой ссылки на файл.
ln Создаёт символическую ссылку на файл.
logname Сообщает имя пользователя текущего пользователя.
ls Перечисляет содержимое каждого заданного каталога.
md5sum Вычисляет и проверяет хеш MD5.
mkdir Создает каталог с указанным наименованием.
mkfifo Создаёт FIFO (именованные каналы).
mknod Создает узлы устройства с указанными именами; узел устройства является символьным специальным файлом, специальным файлом блока или файлом FIFO.
mktemp Создает временные файлы безопасным образом; он используется при работе различных сценариев.
mv Перемещает и переименовывает файлы или каталоги.
nice Запускает программу с указанным приоритетом.
nl Количество строк у заданного файла.
nohup Позволить команде выполняться после выхода пользователя (logout).
nproc Распечатывает количество блоков обработки, доступных для процесса.
numfmt Преобразует числа в строки или наборот в удобочитаемом виде.
od Выводит содержимое файлов в восьмеричном и других форматах.
paste Слияние заданных файлов, объединение последовательно строк вместе, разделенных символами табуляции.
pathchk Проверяет допустимость или переносимость имен файлов.
pinky Легкий клиент сетевого протокола, предназначенного для предоставления информации о пользователях удалённого компьютера; он сообщает некоторую информацию о данных пользователя.
pr Преобразует текстовые файлы в формат для печати.
printenv Выводит переменные окружения.
printf Выводит заданные аргументы в соответствии с заданным форматом. Что то вроде функции языка Си printf.
ptx Создает перестановочный индекс из содержимого данных файлов, с каждым ключевым словом в его контексте.
pwd Выводит текущий рабочий каталог.
readlink Выводит значение символической ссылки.
realpath Возвращает полученный абсолютный или относительный путь к файлу.
rm Удаляет файлы или каталоги.
rmdir Удаляет пустые каталоги.
runcon Запускает команду с указанным контекстом безопасности.
seq Выводит числа по порядку с указанными диапазоном и шагом.
sha1sum Вывод или проверка 160-битного алгоритма безопасного хеша 1 (SHA1) контрольной суммы.
sha224sum Вывод или проверка 224-битного алгоритма безопасного хеша контрольной суммы.
sha256sum Вывод или проверка 256-битного алгоритма безопасного хеша контрольной суммы.
sha384sum Вывод или проверка 384-битного алгоритма безопасного хеша контрольной суммы.
sha512sum Вывод или проверка 512-битного алгоритма безопасного хеша контрольной суммы.
shred Перезаписывает файлы чтобы скрыть содержимое (так называемое безопасное удаление), и опционально удаляет файлы.
shuf Перемешивает строки текста.
sleep Пауза на заданное количество времени.
sort Сортирует строки из заданных файлов.
split Разделяет файл на куски, по размеру или по числу линий.
stat Отображает статус файла или файловой системы.
stdbuf Выполняет команды с измененными операциями буферизации для своего стандартного потока.
stty Изменяет и выводит настройки терминала.
sum Проверяет контрольные суммы файла.
sync Сбрасывает буферы файловой системы; заставляет измененные блоки сохранить на диск и обновить суперблок.
tac Объединение данных файлов в обратном порядке.
tail Распечатывает последние десять строк (или заданное количество строк) каждого заданного файла.
tee Отправляет вывод на множество файлов.
test Сравнивает значения и проверяет типы файлов.
timeout Выполняет команду с ограничением по времени.
touch Изменяет временные метки файлов, устанавливая доступ и модификацию время данных файлов до текущего времени; файлов, которые не существуют создаются с нулевой длиной.
tr Переводит, сжимает и удаляет данные из стандартного ввода.
true Ничего не делает; всегда выходит со статусом успех.
truncate Сжимает или расширяет файл до указанного размера.
tsort Выполняет топологическую сортировку; он пишет полностью упорядоченный список в соответствии с частичным упорядочением в заданном файле.
tty Сообщает имя файла терминала, подключенного к стандартному вводу.
uname Информация о системе.
unexpand Преобразует пробелы в знаки табуляции.
uniq Удаляет повторяющиеся строки из упорядоченного файла.
unlink Вызывает функцию unlink() для удаления заданных файлов.
users Сообщает имена пользователей, которые в настоящее время вошли в систему.
vdir Тоже самое что и команда ls -l.
wc Сообщает количество строк, слов и байтов для каждого заданного файл, а также общую строку, когда дано более одного файла.
who Выводит список всех вошедших пользователей.
whoami Сообщает имя пользователя, связанное с действующим идентификатором пользователя.
yes До бесконечности выводит «y» или заданную строку, пока процесс не будет принудительно завершен.
libstdbuf библиотека, используемая stdbuf.

6.57. Check-0.12.0

Check - платформа для работы с модульными тестами для языка программирования Си.
Подготовим пакет Check к компиляции:

./configure --prefix=/usr

Выполним сборку пакета:

make

Запустить тесты:

make check

Тесты могут выполняться довольно продолжительное время.
Установим пакет:

make install

Установленная программа:
checkmk Сценарий Awk для создания модульных тестов Си для использования с Check.
Установленная библиотека:
libcheck.{a,so} Содержит функции, позволяющие вызывать Check из программ для тестирования.

6.58. Diffutils-3.6

Пакет содержит программы, которые отображают разницу в содержимом между файлами и каталогами. Эти программы могут быть использованы, для создания патчей, а также они используются в процедурах сборки для большинства пакетов.
Подготовим пакет Diffutils к компиляции:

./configure --prefix=/usr

Скомпилируйте пакет:

make

Для выполнения тестов, выполним команду:

make check

Установим пакет:

make install

Установленные программы:
cmp Сравнивает два файла и сообщает, в каких байтах есть различия.
diff Сравнивает два файла или каталога и сообщает, в каких строках есть различия.
diff3 Сравнивает три файла, строка за строкой.
sdiff Объединяет два файла и интерактивно выводит результаты.

6.59. Gawk-4.2.1

Пакет содержит программы для манипуляции с текстовыми файлами. Это GNU версия awk (Aho-Weinberg-Kernighan). Он используется в процедурах сборки для большинства пакетов.
Убедимся, что некоторые ненужные файлы не будут установлены:

sed -i 's/extras//' Makefile.in

Подготовим пакет Gawk к компиляции:

./configure --prefix=/usr

Скомпилируем пакет:

make

Для выполнения тестов, выполним команду:

make check

Установим пакет:

make install

При желании, можно установить документацию:

mkdir -v /usr/share/doc/gawk-4.2.1
cp -v doc/{awkforai.txt,*.{eps,pdf,jpg}} /usr/share/doc/gawk-4.2.1


Содержимое пакета Gawk. Установленные библиотеки: filefuncs.so, fnmatch.so, fork.so, inplace.so, ordchr.so, readdir.so, readfile.so, revoutput.so, revtwoway.so, rwarray.so, testext.so и time.so
Установленные каталоги: /usr/lib/gawk, /usr/libexec/awk, /usr/share/awk, и /usr/share/doc/gawk-4.2.1
Краткое описание установленных программ:
awk Символическая ссылка на gawk.
gawk программа для манипуляции с текстовыми файлами; GNU реализация программы awk.
gawk-4.2.1 Жесткая ссылка на gawk.
igawk Делает возможным gawk включать файлы.

6.60. Findutils-4.6.0

Findutils пакет содержит программы для поиска файлов. Программы предоставляют способы для рекурсивного поиска файлов по дереву каталогов, создания, обслуживания и поиска в базе данных (как правильно поиск выполняется быстрее, чем рекурсивный поиск, но менее надёжен, если база данных не в актуальном состоянии).
Уберем тест, который на некоторых машинах может привести к вечному зацикливанию:

sed -i 's/test-lock..EXEEXT.//' tests/Makefile.in

Сделаем исправления, требуемые glibc-2.28:

sed -i 's/IO_ftrylockfile/IO_EOF_SEEN/' gl/lib/*.c
sed -i '/unistd/a #include <sys/sysmacros.h>' gl/lib/mountlist.c
echo "#define _IO_IN_BACKUP 0x100" >> gl/lib/stdio-impl.h


Подготовим пакет Findutils к компиляции:

./configure --prefix=/usr --localstatedir=/var/lib/locate

Значение параметров конфигурации:
--localstatedir Этот аргумент изменяет местоположение базы данных locate на каталог /var/lib/locate, для совместимости с FHS.
Скомпилируем пакет:

make

Для выполнения тестов, выполните команду:

make check

Установим пакет:

make install

Некоторые сценарии в пакете LFS-Bootscripts зависят от find. Так как каталог /usr может быть не доступен на ранних стадиях загрузки системы, эти программы должны быть размещены в корневом каталоге раздела. Сценарий updatedb также должен быть модифицирован для указания правильного пути:

mv -v /usr/bin/find /bin
sed -i 's|find:=${BINDIR}|find:=/bin|' /usr/bin/updatedb


Краткое описание установленных программ:
code Раньше использовался для воспроизведения базы данных locate; является предшественником программы frcode.
find Ищет файлы в указанном каталоге, по указанным критериям.
locate Быстрый поиск файлов в одной или нескольких базах данных имён файлов с использованием заданных пользователем критериев.
oldfind Старая версия find, использует иной алгоритм.
updatedb Создание и/или обновление баз данных, используемых программой locate.
xargs Формирование и исполнение команд на основании данных, считанных из стандартного ввода.

6.61. Groff-1.22.3

Пакет Groff содержит программы для обработки и форматирования текста. Одна из самых важных функций - форматирование man страниц.
Groff ожидает переменную окружения PAGE значение которой должно содержать размер бумаги по умолчанию. Для пользователей из США уместным будет указать значение переменной PAGE=letter. В ином месте указание значение переменной PAGE=A4 может быть более подходящим. Хотя значение по умолчанию размер бумаги задается во время компиляции, ее можно переопределить позже путем выполнения команды echo с указанием значения «A4» или «letter» в файле /etc/papersize.
Подготовим пакет Groff к компиляции:

PAGE=<paper_size> ./configure --prefix=/usr

Этот пакет не поддерживает параллельную сборку. Выполним компиляцию пакета:

make -j1

У этого пакета нет тестов.
Установим пакет:

make install

Содержимое пакета Groff.
Установленные каталоги: /usr/lib/groff и /usr/share/doc/groff-1.22.3, /usr/share/groff
Краткое описание установленных программ:
addftinfo Читает файл шрифта troff и добавляет дополнительную информацию о шрифтах, которая используется системой groff.
afmtodit Создает файл шрифта для использования с groff и grops.
chem Препроцессор Groff для создания диаграмм химической структуры.
eqn Составляет описания уравнений, встроенных в входные файлы troff, в команды, которые понимаются troff.
eqn2graph Преобразует EQN (уравнение) troff в обрезанное изображение.
gdiffmk Отмечает различия между файлами groff / nroff / troff.
glilypond Превращает ноты, записанные на языке lilypond, в язык groff.
gperl Препроцессор для groff, позволяющий добавлять Perl код в файлы groff.
gpinyin Препроцессор для groff, позволяющий добавить китайский европейский язык Pinyin в файлы groff.
grap2graph Преобразует диаграмму графа в обрезанное растровое изображение.
grn Препроцессор groff для файлов gremlin.
grodvi Драйвер для groff, который создает формат TeX dvi.
groff Интерфейс для системы форматирования документов groff; обычно он запускает программу troff и постпроцессор, соответствующий выбранному устройству.
groffer Отображает файлы groff и справочные страницы на терминалах X и tty.
grog Читает файлы и угадывает, какие из параметров groff -e, -man, -me, -mm, -ms, -p, -s и -t необходимы для печати файлов, и сообщает команду groff, включая эти параметры.
grolbp Является драйвером groff для принтеров Canon CAPSL (лазерные принтеры серии LBP-4 и LBP-8).
grolj4 Является драйвером для groff, который производит вывод в формате PCL5, подходящем для принтера HP LaserJet 4.
gropdf Переводит вывод GNU troff в PDF.
grops Переводит вывод GNU troff в PostScript.
grotty Переводит вывод GNU troff в форму, подходящую для пишущих машин.
hpftodit Создает файл шрифта для использования с groff -Tlj4 из метрического файла шрифтов с меткой HP.
indxbib Создает инвертированный индекс для библиографических баз данных с указанным файлом для использования со ссылками, lookbib и lkbib.
lkbib Поиск библиографических баз данных для ссылок, содержащих указанные ключи и отчеты, любые найденные ссылки.
lookbib Распечатывает приглашение стандартной ошибки (если стандартный вход не является терминалом), считывает строку, содержащую набор ключевых слов из стандартного ввода, выполняет поиск библиографических баз данных в указанном файле для ссылок, содержащих эти ключевые слова, печатает любые ссылки, найденные на стандартный выход и повторяет этот процесс до конца ввода.
mmroff Простой препроцессор для groff.
neqn Форматирует уравнения для выпуска американского стандартного кода для обмена информацией (ASCII).
nroff Сценарий, который эмулирует команду nroff с использованием groff.
pdfmom Является оберткой вокруг groff, которая облегчает создание PDF-документов из файлов, отформатированных с помощью макросов mom.
pdfroff Создает PDF-документы, используя groff.
pfbtops Переводит шрифт PostScript в формате .pfb в ASCII.
pic Составляет описания изображений, встроенных в входные файлы troff или TeX, в команды, понятные TeX или troff.
pic2graph Преобразует диаграмму PIC в обрезанное изображение.
post-grohtml Переводит вывод GNU troff в HTML.
preconv Преобразует кодировку входных файлов в нечто, что GNU troff понимает.
pre-grohtml Переводит вывод GNU troff в HTML.
refer Копирует содержимое файла на стандартный вывод, за исключением того, что строки между. [and .] Интерпретируются как цитаты, а строки между .R1 и .R2 интерпретируются как команды для того, как обрабатывать цитации.
roff2dvi Преобразование файлов roff в формат DVI.
roff2html Преобразование файлов roff в формат HTML.
roff2pdf Преобразование файлов roff в формат PDF.
roff2ps Преобразует файлы roff в файлы ps.
roff2text Преобразует файлы roff в текстовые файлы.
roff2x Преобразует файлы roff в другие форматы.
soelim Читает файлы и заменяет строки файла .so формы содержимым указанного файла.
tbl Создаёт описания таблиц, встроенных в входные файлы troff, в команды, которые понимаются troff.
tfmtodit Создает файл шрифта для использования с groff -Tdvi.
troff Совместим с Unix troff; его обычно следует вызывать с помощью команды groff, которая также будет запускать препроцессоры и постпроцессоры в соответствующем порядке и с соответствующими параметрами.

6.62. GRUB-2.02

GRUB является эталонной реализацией загрузчика, соответствующего спецификации Multiboot и может загрузить любую совместимую с ней операционную систему. Среди них: Linux, FreeBSD, Solaris и многие другие. Кроме того, GRUB умеет по цепочке передавать управление другому загрузчику, что позволяет ему загружать Windows (через загрузчик NTLDR или bootmgr), MS-DOS, OS/2 и другие системы.
Подготовим пакет GRUB к компиляции:

./configure --prefix=/usr \
--sbindir=/sbin \
--sysconfdir=/etc \
--disable-efiemu \
--disable-werror


Значения новых параметров конфигурации:
--disable-werror Аргумент позволяет завершить сборку с предупреждениями с более поздними версиями Flex.
--disable-efiemu Аргумент минимизирует что будет собрано, отключив функции и программы тестирования, которые не требуются для системы LFS.
Скомпилируем пакет:

make

У этого пакета нет тестов.
Установим пакет:

make install

Содержимое пакета GRUB.
Установленные каталоги: /usr/lib/grub, /etc/grub.d, /usr/share/grub, и boot/grub (первый запуск grub-install)
Краткое описание установленных программ:
grub-bios-setup Является вспомогательной программой для grub-install.
grub-editenv Инструмент для редактирования блока среды.
grub-file Проверяет, имеет ли файл FILE указанный тип.
grub-fstest Инструмент для отладки драйвера файловой системы.
grub-glue-efi Обрабатывает изображения ia32 и amd64 EFI и склеивает их в соответствии с форматом Apple.
grub-install Установит GRUB на диск.
grub-kbdcomp Скрипт, преобразующий макет xkb в один, распознанный GRUB.
grub-macbless Mac-стиль благословляет файлы HFS или HFS+.
grub-menulst2cfg Преобразует GRUB Legacy menu.lst в grub.cfg для использования с GRUB 2.
grub-mkconfig Создаёт конфигурационный файл grub.
grub-mkimage Создаёт загрузочный образ GRUB.
grub-mklayout Создаёт файл раскладки клавиатуры GRUB.
grub-mknetdir Подготовит пакет a GRUB netboot directory.
grub-mkpasswd-pbkdf2 Создаёт зашифрованный пароль PBKDF2 для использования в меню загрузки.
grub-mkrelpath Создает системное имя пути относительно его root.
grub-mkrescue Создайте загрузочный образ GRUB, подходящий для флоппи-диска или CD-ROM / DVD.
grub-mkstandalone Создает автономное изображение.
grub-ofpathname Является вспомогательной программой, которая печатает путь устройства GRUB.
grub-probe Информация устройства зонда для заданного пути или устройства.
grub-reboot Устанавливает загрузочную запись по умолчанию для GRUB для следующей загрузки.
grub-render-label Воспроизводит Apple .disk_label для Apple Macs.
grub-script-check Проверяет скрипт конфигурации GRUB для синтаксических ошибок.
grub-set-default Устанавливает загрузочную запись по умолчанию для GRUB.
grub-sparc64-setup Является вспомогательной программой для настройки grub.
grub-syslinux2cfg Преобразование конфигурационного файла syslinux в формат grub.cfg.

6.63. Less-530

Программа Less используется для просмотра (но не изменения) содержимого текстовых файлов на экране.Она также используется пакетом Man-DB для просмотра страниц руководств.
Подготовим пакет Less к компиляции:

./configure --prefix=/usr --sysconfdir=/etc

Значение параметров конфигурации:
--sysconfdir=/etc Этот параметр указывает программам, созданным пакетом, для просмотра файлов конфигурации /etc.
Скомпилируем пакет:

make

У этого пакета нет тестов.
Установим пакет:

make install

Краткое описание установленнх программ:
less Просмотрщик файлов; он отображает содержимое указанного файла, позволяя пользователю выполнять навигацию по файлу, находить строки и переходить к заметкам.
lessecho Необходим для расширения мета-символов, таких как * и ? в наименованиях файлов систем Unix.
lesskey Используется для указания привязок клавиш для less.

6.64. Gzip-1.9

Пакет содержит программы для сжатия и распаковки файлов. Он необходим, чтобы выполнять распаковку большинства пакетов LFS.
Сделаем некоторые исправления, требуемые glibc-2.28:

sed -i 's/IO_ftrylockfile/IO_EOF_SEEN/' lib/*.c
echo "#define _IO_IN_BACKUP 0x100" >> lib/stdio-impl.h


Подготовим пакет Gzip к компиляции:

./configure --prefix=/usr

Скомпилируем пакет:

make

Для выполнения тестов, выполните команду:

make check

Два теста не пройдут в среде LFS: help-version и zmore.
Установим пакет:

make install

Переместим программу, которая должна находиться в корневой файловой системе:

mv -v /usr/bin/gzip /bin

Краткое описание установленных программ: gunzip Распаковывает сжатые файлы.
gzexe Создает самораспаковывающиеся исполняемые файлы.
gzip Сжимает данные файлы с помощью алгоритма Lempel-Ziv (LZ77).
uncompress Распаковывает сжатые файлы.
zcat Распаковывает GZIP-файлы в стандартный вывод.
zcmp Запускает программу cmp для сжатых файлов.
zdiff Запускает программу diff для сжатых файлов.
zegrep Запускает программу egrep для сжатых файлов.
zfgrep Запускает программу fgrep для сжатых файлов.
zforce Присваивает расширение .gz всем архивам gzip, чтобы gzip не сжимал их дважды. Это может быть полезно для файлов, чьи имена были усечены при перемещении файлов. Для файловых систем с максимальной длиной имени файла в 14 символов исходное имя укорачивается, чтобы вместить суффикс .gz. Например, файл 12345678901234 переименовывается в 12345678901.gz. Файлы с именами, подобными файл .tgz, не затрагиваются.
zgrep Запускает программу grep для сжатых файлов.
zless Запускает программу less для сжатых файлов.
zmore Запускает программу more для сжатых файлов.
znew Перепаковывает файлы из формата .Z (compress) в формат .gz (gzip). Если вы хотите перепаковать файл, уже находящийся в формате gzip, присвойте ему расширение .Z и выполните znew.

6.65. IPRoute2-4.17.0

Iproute2 — это набор программ для управления параметрами сетевых устройств в ядре Linux. Эти утилиты были разработаны в качестве унифицированного интерфейса к ядру Linux, которое непосредственно управляет сетевым трафиком. Iproute2 заменил полный набор классических сетевых утилит UNIX, которые ранее использовались для настройки сетевых интерфейсов, таблиц маршрутизации и управления arp‐таблицами: ifconfig, route, arp, netstat и других, предназначенных для создания IP‐туннелей. iproute2 предлагает унифицированный синтаксис для управления самыми разными аспектами сетевых интерфейсов.
Программа arpd в этом пакете не будет собрана, так как зависит от Berkeley DB, которая не будет устанавливаться в LFS. Однако, каталог для arpd и страницы руководств будут установлены. Предотвратим это, выполнив приведенные ниже команды. Если бинарный файл arpd необходим, инструкции по установке пакета Berkeley DB можно найти в книге BLFS.

sed -i /ARPD/d Makefile
rm -fv man/man8/arpd.8


Необходимо запретить сборку двух модулей, для которых необходим пакет:

sed -i 's/.m_ipt.o//' tc/Makefile

Скомпилируем пакет:

make

В этом пакете нет рабочих тестов.
Установим пакет:

make DOCDIR=/usr/share/doc/iproute2-4.17.0 install

Содержимое пакета IPRoute2.
Установленные каталоги: /etc/iproute2, /usr/lib/tc и /usr/share/doc/iproute2-4.17.0
Краткое описание установленных программ:
bridge Настраивает сетевые мосты.
ctstat Утилита состояния соединения.
genl Общий интерфейс утилиты netlink.
ifcfg Оболочка shell script для команды ip [Для нее требуются программы arping и rdisk из пакета iputils.].
ifstat Показывает статистику интерфейса, включая количество переданных и полученных пакетов по интерфейсу.
ip Основной исполняемый файл. Он имеет несколько различных функций:
ip link <device> Позволяет пользователям просматривать состояние устройств и вносить изменения.
ip addr Позволяет пользователям просматривать адреса и их свойства, добавлять новые адреса и удалять старые.
ip neighbor Позволяет пользователям просматривать привязки соседей и их свойства, добавлять новые записи соседей и удалять старые.
ip rule Позволяет пользователям просматривать политики маршрутизации и изменять их.
ip route Позволяет пользователям просматривать таблицу маршрутизации и изменять правила таблицы маршрутизации.
ip tunnel Позволяет пользователям просматривать туннели IP и их свойства и изменять их.
ip maddr Позволяет пользователям просматривать адреса многоадресной рассылки и их свойства и изменять их.
ip mroute Позволяет пользователям устанавливать, изменять или удалять многоадресную маршрутизацию.
ip monitor Позволяет пользователям постоянно контролировать состояние устройств, адресов и маршрутов.
lnstat Обеспечивает статистику сети Linux; это обобщенная и более функциональная замена старой программы rtstat.
nstat Показывает сетевую статистику.
routef Компонент ip-маршрута. Это для очистки таблиц маршрутизации.
routelКомпонент ip-маршрута. Это для перечисления таблиц маршрутизации.
rtacct Отображает содержимое /proc/net/rt_acct.
rtmon Утилита мониторинга маршрута.
rtpr Преобразует выход ip -o обратно в читаемую форму.
rtstat Утилита состояния маршрута.
ss Аналогично команде netstat; показывает активные соединения.
tc Исполнение управляющего трафика; это для обеспечения качества обслуживания (QOS) и класса обслуживания (COS).
tc qdisc Позволяет пользователям настраивать порядок очередей.
tc class Позволяет пользователям настраивать классы на основе планирования дисциплины в очереди.
tc estimator Позволяет пользователям оценивать сетевой поток в сети.
tc filter Позволяет пользователям настраивать фильтрацию пакетов QOS/COS.
tc policy Позволяет пользователям настраивать политику QOS/COS.

6.66. Kbd-2.0.4

key-table файлы, утилиты для клавиатуры для не US наборов, а также консольные шрифты.
Поведение клавиш Backspace и Delete несовместимо в раскладке пакета Kbd. Следующий патч исправляет это для раскладок i386:

patch -Np1 -i ../kbd-2.0.4-backspace-1.patch

После исправления ключ Backspace генерирует символ с кодом 127, и клавиша Delete генерирует известную управляющую последовательность.
Удалить избыточную программу resizecons (требует отсутствующей библиотеки svgalib для предоставления файлов видеорежима - для нормального использования setfont в консоли) вместе с страницами руководства.

sed -i 's/\(RESIZECONS_PROGS=\)yes/\1no/g' configure
sed -i 's/resizecons.8 //' docs/man/man8/Makefile.in


Подготовьте пакет Kbd к компиляции:

PKG_CONFIG_PATH=/tools/lib/pkgconfig ./configure --prefix=/usr --disable-vlock

Значение параметров конфигурации:
--disable-vlock Этот аргумент запрещает создание встроенной утилиты vlock, для которой требуется библиотека PAM, недоступной в среде chroot.
Скомпилируем пакет:

make

Для выполнения тестов, выполним команду:

make check

Установим пакет:

make install

Для некоторых языков (например, для белорусского) пакет Kbd не предоставляет полезную комбинацию клавиш, где макет клавиатуры «by» предполагает кодировку ISO-8859-5, и обычно используется клавиатура CP1251. Пользователи таких языков должны загружать рабочие расписания отдельно.
При желании, можно установить документацию:

mkdir -v /usr/share/doc/kbd-2.0.4
cp -R -v docs/doc/* /usr/share/doc/kbd-2.0.4


Содержимое пакета Kbd.
Установленные каталоги: /usr/share/consolefonts, /usr/share/consoletrans, /usr/share/keymaps, /usr/share/doc/kbd-2.0.4, и /usr/share/unimaps
Краткое описание установленных программ:
chvt Изменяет виртуальный терминал переднего плана.
deallocvt Удаляет неиспользуемые виртуальные терминалы.
dumpkeys Сбрасывает таблицы перевода клавиатуры.
fgconsole Распечатывает номер активного виртуального терминала.
getkeycodes Распечатывает таблицу сопоставления ядра scancode-to-keycode.
kbdinfo Получает информацию о статусе консоли.
kbd_mode Отчеты или настройка режима клавиатуры.
kbdrate Устанавливает частоту повторения и задержки клавиатуры.
loadkeys Загружает таблицы перевода клавиатуры.
loadunimap Загружает таблицу отображения unicode-to-font ядра.
mapscrn Устаревшая программа, которая использовала для загрузки пользовательской таблицы сопоставления выходных символов в драйвер консоли; это теперь делается setfont.
openvt Запускает программу на новом виртуальном терминале (VT).
psfaddtable Добавляет таблицу символов Unicode к шрифту консоли.
psfgettable Извлекает встроенную таблицу символов Unicode из шрифта консоли.
psfstriptable Удаляет встроенную таблицу символов Unicode из шрифта консоли.
psfxtable Обрабатывает таблицы символов Unicode для консольных шрифтов.
setfont Изменяет шрифты Enhanced Graphic Adapter (EGA) и Video Graphics Array (VGA) на консоли.
setkeycodes Загружает записи таблицы сопоставления ядра scancode-to-keycode; это полезно, если на клавиатуре есть необычные клавиши.
setleds Устанавливает флаги клавиатуры и светоизлучающие диоды (светодиоды).
setmetamode Определяет обработку meta-key клавиатуры.
setvtrgb Устанавливает цветовую карту консоли во всех виртуальных терминалах.
showconsolefont Показывает текущий экран экрана консоли EGA/VGA.
showkey Сообщает о scancodes, кодах клавиш и кодах ASCII клавиш, нажатых на клавиатуре.
unicode_start Помещает клавиатуру и консоль в режим UNICODE [Не используйте эту программу, если ваш файл ключевой карты не находится в кодировке ISO-8859-1. Для других кодировок эта утилита выводит неверные результаты.].
unicode_stop Отменяет клавиатуру и консоль в режиме UNICODE.

6.67. Libpipeline-1.5.0

Библиотека для манипулирования работы с подпроцессами гибким и удобным способом.
Подготовим пакет Libpipeline к компиляции:

./configure --prefix=/usr

Скомпилируем пакет:

make

Для выполнения тестов, выполните команду:

make check

Установим пакет:

make install

libpipeline Эта библиотека используется для безопасного построения подпроцессов.

6.68. Make-4.2.1

Пакет содержит программы которые автоматизируют процесс преобразования файлов из одной формы в другую. Чаще всего это компиляция исходного кода в объектные файлы и последующая компоновка в исполняемые файлы или библиотеки. Он необходим для сборки пакетов LFS.
Необходимо обойти ошибку, вызванную glibc-2.27:

sed -i '211,217 d; 219,229 d; 232 d' glob/glob.c

Подготовим пакет Make к компиляции:

./configure --prefix=/usr

Скомпилируем пакет:

make

Набор тестов должен знать, где находятся файлы perl. Для этого будем использовать переменную окружения:

make PERL5LIB=$PWD/tests/ check

Установим пакет:

make install

make Автоматически определяет, какие части пакета должны быть (повторно) скомпилированы, и затем выдает соответствующие команды.

6.69. Patch-2.7.6

Пакет содержит программу предназначенную для переноса правок (изменений) между разными версиями текстовых файлов. Информация о правке обычно содержится в отдельном файле, называемом "заплаткой" (patch), "правкой" или "файлом правки" (англ. patch file). Подобный файл, как правило, создается с помощью другой утилиты Unix — diff, позволяющей автоматически извлечь информацию о различиях в тексте файлов. Он необходим для выполнения сборки некоторых пакетов LFS.
Подготовим пакет Patch к компиляции:

./configure --prefix=/usr

Скомпилируем пакет:

make

Для выполнения тестов, выполним команду:

make check

Установим пакет:

make install

patch Изменяет файлы в соответствии с файлом патча (исправления). [Патч-файл обычно представляет собой список различий, созданный с помощью программы diff. Применяя эти различия к исходным файлам, патч создает исправленные версии.]

6.70. Sysklogd-1.5.1

Системные утилиты, которые обеспечивают поддержку журналирования системы и перехват сообщений ядра. Поддержка доменных гнёзд интернет и unix позволяет этому пакету утилит поддерживать и локальное и удалённое журналирование.
Устраним проблемы, которые приводят к ошибке сегментации - Segmentation fault (ошибка программного обеспечения, возникающая при попытке обращения к недоступным для записи участкам памяти либо при попытке изменить память запрещённым способом.) и исправьте некоторые условия в klogd для устаревших конструкций программ:

sed -i '/Error loading kernel symbols/{n;n;d}' ksym_mod.c
sed -i 's/union wait/int/' syslogd.c


Скомпилируем пакет:

make

У этого пакета нет тестов.
Установим пакет:

make BINDIR=/sbin install

Настройка Sysklogd.
Создаём новый файл /etc/syslog.conf:

cat > /etc/syslog.conf << "EOF"
# Begin /etc/syslog.conf
auth,authpriv.* -/var/log/auth.log
*.*;auth,authpriv.none -/var/log/sys.log
daemon.* -/var/log/daemon.log
kern.* -/var/log/kern.log
mail.* -/var/log/mail.log
user.* -/var/log/user.log
*.emerg *
# End /etc/syslog.conf
EOF


Краткое описание установленных программ:
klogd Системная служба для перехвата и регистрации сообщений ядра.
syslogd Регистрирует сообщения, предлагаемые системными программами для ведения журнала. [Каждое зарегистрированное сообщение содержит как минимум отметку даты и имя хост-системы, и обычно это имя программы, но это зависит от доверия служб регистрации.]

6.71. Sysvinit-2.90

Пакет Sysvinit содержит программы для управления загрузкой, выполнением, и выключением системы.
Применим патч, который удаляет несколько программ, установленных другими пакетами, очищает сообщение и исправляет предупреждение компилятора:

patch -Np1 -i ../sysvinit-2.90-consolidated-1.patch

Скомпилируем пакет:

make -C src

У этого пакета нет тестов.
Установим пакет:

make -C src install

Краткое описание установленных программ:
bootlogd Загружает сообщения в файл журнала.
fstab-decode Запускает команду с закодированными fstab аргументами.
halt Обычно вызывается останов с параметром -h, за исключением случаев, когда он уже находится на уровне уровня 0, а затем указывает ядру на остановку системы; он отмечает в файле /var/log/wtmp, что система сбита.
init Первый процесс, который должен быть запущен, когда ядро инициализировало аппаратное обеспечение, которое берет на себя процесс загрузки, и запускает все процессы, указанные в его файле конфигурации.
killall5 Отправляет сигнал всем процессам, за исключением процессов в его собственном сеансе, поэтому он не будет убивать свою родительскую оболочку.
poweroff Сообщает ядру о прекращении работы системы и выключении компьютера (см. Остановку).
reboot Сообщает ядру перезагрузить систему (см. Остановку).
runlevel Сообщает о предыдущем и текущем уровне выполнения, как указано в последней записи уровня выполнения в /var/run/utmp.
shutdown Обеспечивает безопасную передачу системы, сигнализацию всех процессов и уведомление всех зарегистрированных пользователей.
telinit Сообщает init, какой уровень запуска для изменения.

6.72. Eudev-3.2.5

Eudev - диспетчер устройств. Он контролирует записи в каталоге /dev, так как устройства добавляются или удаляются из системы динамически.
Обойдем проблему при которой каталог /tools будет жестко закодирован в библиотеки Eudev:

cat > config.cache <<"EOF"
HAVE_BLKID=1
BLKID_LIBS="-lblkid"
BLKID_CFLAGS="-I/tools/include"
EOF


Подготовим пакет Eudev к компиляции:

./configure --prefix=/usr \
--bindir=/sbin \
--sbindir=/sbin \
--libdir=/usr/lib \
--sysconfdir=/etc \
--libexecdir=/lib \
--with-rootprefix= \
--with-rootlibdir=/lib \
--enable-manpages \
--disable-static \
--config-cache


Скомпилируем пакет:

LIBRARY_PATH=/tools/lib make

Переменная окружения LIBRARY_PATH и LD_LIBRARY_PATH, ниже, необходимы для того, чтобы использовать библиотеки, которые были установлены в каталоге /tools, но не были установлены в создаваемой системе. Переменная окружения LIBRARY_PATH используется для поиска библиотек в процессе компоновки. Переменная окружения LD_LIBRARY_PATH используется для поиска библиотек в процессе выполнения.
Создадим каталоги, которые необходимы для успешного прохождения тестов, которые также будут использоваться в процессе установки:

mkdir -pv /lib/udev/rules.d
mkdir -pv /etc/udev/rules.d


Для выполнения тестов, выполним команду:

make LD_LIBRARY_PATH=/tools/lib check

Установим пакет:

make LD_LIBRARY_PATH=/tools/lib install

Установим дополнительные правила и файлы, используемые в окружении LFS:

tar -xvf ../udev-lfs-20171102.tar.bz2
make -f udev-lfs-20171102/Makefile.lfs install


Настройка Eudev.
Информация об устройствах располагается в файлах /etc/udev/hwdb.d и каталогах /lib/udev/hwdb.d. Eudev требуется чтобы эта информация была скомпилирована в двоичную базу данных в каталоге /etc/udev/hwdb.bin. Создадим пустую базу данных:

LD_LIBRARY_PATH=/tools/lib udevadm hwdb --update

Эта команда должна быть запущена каждый раз, когда информация об оборудовании обновится.
Содержимое пакета Eudev.
Установленные каталоги: /etc/udev, /lib/udev и /usr/share/doc/udev-udev-lfs-20171102
Краткое описание установленных программ и биьлиотек:
udevadm Универсальный инструмент администрирования udev: управляет демонами udevd, предоставляет информацию из базы данных Udev, контролирует uevents, ждет завершения работы с UEVE, тестирует конфигурацию Udev и триггеры для данного устройства.
udevd Демон, который прослушивает uevents в сетевом сокете, создает устройства и из команды настраиваемых внешних программ в ответ на эти uevents.
libudev Интерфейс библиотеки для информации об устройстве udev.
/etc/udev Содержит Udev файлы конфигурации, разрешения устройства и правила для именования устройств.

6.73. Util-linux-2.32.1

Пакет содержит стандартный набор служебных утилит командной строки, такие как - утилиты для работы с файловой системой, консолью, разделами, и сообщениями.
Стандарт FHS рекомендует использовать каталог /var/lib/hwclock вместо обычного использования каталога /etc где располагается файл adjtime. Создадим каталог чтобы включить хранилище программы hwclock:

mkdir -pv /var/lib/hwclock

Удалим ранее созданные символические ссылки:

rm -vf /usr/include/{blkid,libmount,uuid}

Подготовим пакет Util-linux к компиляции:

./configure ADJTIME_PATH=/var/lib/hwclock/adjtime \
--docdir=/usr/share/doc/util-linux-2.32.1 \
--disable-chfn-chsh \
--disable-login \
--disable-nologin \
--disable-su \
--disable-setpriv \
--disable-runuser \
--disable-pylibmount \
--disable-static \
--without-python \
--without-systemd \
--without-systemdsystemunitdir


Аргументы --disable и --without предотвратят появление предупреждений, о требуемых пакетах, которые не несовместимы с программами, установленными другими пакетами.
Скомпилируем пакет:

make

По желанию, можно запустить тесты, от не корневого пользователя.
При запуске тестов от корневого пользователя может повредить систему. Чтобы правильно запустить тесты, аргумент CONFIG_SCSI_DEBUG для текущего ядра должен быть доступен и должен быть доступен как модуль ядра. Сборка его в ядро помешает загрузке системы. Для полного покрытия тестами, необходимо установить некоторые пакеты из книги BLFS. По желанию, тесты могут быть запущены после перезагрузки системы, выполнив команды:

bash tests/run.sh --srcdir=$PWD --builddir=$PWD
chown -Rv nobody
su nobody -s /bin/bash -c "PATH=$PATH make -k check"


Установим пакет:

make install

Установленные каталоги: /usr/include/blkid, /usr/include/libfdisk, /usr/include/libmount, /usr/include/libsmartcols, /usr/include/uuid, /usr/share/doc/util-linux-2.32.1 и /var/lib/hwclock
Краткое описание установленных программ и библиотек:
addpart Сообщает ядру Linux о новых разделах.
agetty Открывает порт tty, запрашивает имя для входа, а затем вызывает программу входа в систему.
blkdiscard Отбрасывает сектора на устройстве.
blkid Утилита командной строки для поиска и печати атрибутов блока устройства.
blockdev Позволяет пользователям вызывать блокирующие устройства ioctls из командной строки.
cal Отображает простой календарь.
cfdisk Манипулирует таблицу разделов данного устройства.
chcpu Изменяет состояние процессоров.
chrt Манипулирует атрибуты процесса в реальном времени.
col Фильтрует каналы обратной линии.
colcrt Фильтрует вывод nroff для терминалов, которые не обладают некоторыми возможностями, такими как перенапряжение и half-lines.
colrm Фильтрует данные столбцы.
column Форматирует заданный файл на несколько столбцов.
ctrlaltdel Устанавливает функцию комбинации клавиш Ctrl + Alt + Del на жесткий или мягкий сброс.
delpart Просит ядро Linux удалить раздел.
dmesg Сбрасывает сообщения загрузки ядра.
eject Извлекает съемные носители.
fallocate Предварительно выделяет пространство в файл.
fdformat Низкоуровневые форматы гибких дисков.
fdisk Манипулирует таблицу разделов данного устройства.
findfs Находит файловую систему по метке или универсально уникальный идентификатор (UUID).
findmnt Является ли интерфейс командной строки библиотеке libmount для работы с файлами mountinfo, fstab и mtab.
flock Получает блокировку файла, а затем выполняет команду с заблокированной блокировкой.
fsck Используется для проверки и, при необходимости, ремонта файловых систем.
fsck.cramfs Выполняет проверку согласованности файловой системы Cramfs на данном устройстве.
fsck.minix Выполняет проверку согласованности файловой системы Minix на данном устройстве.
fsfreeze Является очень простой оболочкой вокруг операций драйвера ядра FIFREEZE/FITHAW ioctl.
fstrim Отбрасывает неиспользуемые блоки в смонтированной файловой системе.
getopt Параметры парсов в данной командной строке.
hexdump Сбрасывает данный файл в шестнадцатеричном виде или в другом заданном формате.
hwclock Считывает или устанавливает аппаратные часы системы, также называемые часами реального времени (RTC) или базовой системой ввода-вывода (BIOS).
i386 Символическая ссылка на setarch.
ionice Получает или задает класс планирования и приоритет для программы.
ipcmk Создает различные ресурсы IPC.
ipcrm Удаляет данный ресурс Inter-Process Communication (IPC).
ipcs Предоставляет информацию о статусе IPC.
isosize Сообщает размер файловой системы iso9660.
kill Отправляет сигналы процессам.
last Показывает, какие пользователи вошли в систему (и выходят), просматривая файл /var/log/wtmp; он также показывает системные загрузки, shutdowns, и выполняет команду-изменения уровня.
lastb Показывает неудачные попытки входа в систему, как зарегистрированный в /var/log/btmp.
ldattach Привязывает линейную дисциплину к серийной линии.
linux32 Символическая ссылка на setarch.
linux64 Символическая ссылка на setarch.
logger Вводит данное сообщение в системный журнал.
look Отображает строки, начинающиеся с заданной строки.
losetup Устанавливает и управляет устройствами контура.
lsblk Перечисляет информацию обо всех или выбранных блочных устройствах в древовидном формате.
lscpu Распечатывает информацию о архитектуре процессора.
lsipc Распечатывает информацию о объектах IPC, которые в настоящее время используются в системе.
lslocks Списки локальных системных замков.
lslogins Перечисляет информацию о пользователях, группах и системных учетных записях.
mcookie Создает волшебные куки (128-разрядные случайные шестнадцатеричные числа) для xauth.
mesg Контролирует, могут ли другие пользователи отправлять сообщения на терминал текущего пользователя.
mkfs Создает файловую систему на устройстве (обычно это жесткий диск).
mkfs.bfs Создает файловую систему bfs в Santa Cruz Operations (SCO).
mkfs.cramfs Создает файловую систему cramfs.
mkfs.minix Создает файловую систему Minix.
mkswap Инициализирует данное устройство или файл, который будет использоваться в качестве области подкачки.
more Фильтр для подкачки через текст по одному экрану за раз.
mount Прикрепляет файловую систему на данном устройстве к указанному каталогу в дереве файловой системы.
mountpoint Проверяет, является ли каталог точкой монтирования.
namei Показывает символические ссылки в указанных путях.
nsenter Запускает программу с пространствами имен других процессов.
partx Сообщает ядру о наличии и нумерации разделов на диске.
pg Отображает текстовый файл на один экран, полный за раз.
pivot_root Делает данную файловую систему новой корневой файловой системой текущего процесса.
prlimit Получить и установить ограничение на ресурсы процесса.
raw Связывать необработанное символьное устройство Linux с блочным устройством.
readprofile Читает данные профилирования ядра.
rename Переименовывает данные файлы, заменяя данную строку на другую.
renice Изменяет приоритет запущенных процессов.
resizepart Просит ядро Linux изменить размер раздела.
rev Обрабатывает строки заданного файла.
rtcwake Используется для входа в состояние ожидания системы до указанного времени пробуждения.
script Делает машинописную запись терминальной сессии.
scriptreplay Воспроизведение скриптов с использованием информации синхронизации.
setarch Изменения сообщают о архитектуре в новой программной среде и устанавливают флаги личности.
setsid Запускает данную программу на новом сеансе.
setterm Устанавливает атрибуты терминала.
sfdisk Манипулятор таблицы разделов диска.
sulogin Позволяет root входить в систему; он обычно вызывается init, когда система переходит в однопользовательский режим.
swaplabel Позволяет изменить swaparea UUID и метку.
swapoff Отключает устройства и файлы для подкачки и подкачки.
swapon Включает устройства и файлы для подкачки и обмена и перечисляет используемые в настоящее время устройства и файлы.
switch_root Переключает на другую файловую систему в качестве корня дерева монтирования.
tailf Отслеживает рост файла журнала; отображает последние 10 строк файла журнала, затем продолжает отображать любые новые записи в файле журнала по мере их создания.
taskset Извлекает или задает процесс «близость процессора».
ul Фильтр для перевода подчеркиваний в escape-последовательности, указывающий подчеркивание используемого терминала.
umount Отключает файловую систему из дерева файлов системы.
uname26 Символическая ссылка на setarch.
unshare Запускает программу с некоторыми пространствами имен, не разделенными с родительскими.
utmpdump Отображает содержимое данного файла входа в более удобном для пользователя формате.
uuidd Демон, используемый библиотекой UUID для генерации UUID с временным временем в безопасном и гарантированном уникальном режиме.
uuidgen Создает новые UUID. Каждый новый UUID можно разумно считать уникальным среди всех UUID, созданных в локальной и других системах, в прошлом и в будущем.
wall Отображает содержимое файла или по умолчанию его стандартный ввод на терминалах всех зарегистрированных в настоящее время пользователей.
wdctl Показывает статус сторожевого устройства.
whereis Сообщает расположение бинарной, исходной и служебной страниц для данной команды.
wipefs Вытирает подпись файловой системы с устройства.
x86_64 Символическая ссылка на setarch.
zramctl Программа для настройки и управления устройствами zram (сжатый диск).
libblkid Содержит подпрограммы для идентификации устройства и извлечения токенов.
libfdisk Содержит подпрограммы для управления таблицами разделов.
libmount Содержит процедуры для установки и размонтирования блочного устройства.
libsmartcols Содержит подпрограммы для обеспечения вывода экрана в виде таблиц.
libuuid Содержит подпрограммы для генерации уникальных идентификаторов для объектов, которые могут быть доступны за пределами локальной системы.

6.74. Man-DB-2.8.4

Пакет Man-DB содержит программы для поиска и просмотра справочных страниц.
Подготовим пакет Man-DB к компиляции:

./configure --prefix=/usr \
--docdir=/usr/share/doc/man-db-2.8.4 \
--sysconfdir=/etc \
--disable-setuid \
--enable-cache-owner=bin \
--with-browser=/usr/bin/lynx \
--with-vgrind=/usr/bin/vgrind \
--with-grap=/usr/bin/grap \
--with-systemdtmpfilesdir=


Значение параметров конфигурации:
--disable-setuid запрещает задавать программе man setuid пользователю man. --enable-cache-owner=bin задает права доступа общесистемному кешу пользователю, который является владельцем каталога bin. --with-... Эти три аргумента используются для настройки программ по умолчанию. lynx текстовые веб-обозреватель (см. инструкции по установке в книге BLFS), vgrind преобразовывает исходные кода программ в входные данные Groff и grap полезен для набора графов в документах Groff. Программы vgrind и grap обычно нужны для просмотра справочных страниц. Они не входят в состав книг LFS или BLFS, но вы можете установить их самостоятельно после сборки LFS если при желании. Скомпилируем пакет:

make

Для выполнения тестов, выполним команду:

make check

Установим пакет:

make install

Страницы руководств LFS на других языках.
Ниже приведена кодировка, которая допускается при использовании в Man-DB страницах, расположенных в каталоге /usr/share/man/<ll>. Также, Man-DB правильно определит, если страницы руководств были установлены вручную в этот каталог в кодировке utf-8.
Danish(da) ISO-8859-1 Croatian(hr) ISO-8859-2 German(de) ISO-8859-1 Hungarian(hu) ISO-8859-2 English(en) ISO-8859-1 Japanese(ja) EUC-JP Spanish(es) ISO-8859-1 Korean(ko) EUC-KR Estonian(et) ISO-8859-1 Lithuanian(lt) ISO-8859-13 Finnish(fi) ISO-8859-1 Latvian(lv) ISO-8859-13 French(fr) ISO-8859-1 Macedonian(mk) ISO-8859-5 Irish(ga) ISO-8859-1 Polish(pl) ISO-8859-2 Galician(gl) ISO-8859-1 Romanian(ro) ISO-8859-2 Indonesian(id) ISO-8859-1 Russian(ru) KOI8-R Icelandic(is) ISO-8859-1 Slovak(sk) ISO-8859-2 Italian(it) ISO-8859-1 Slovenian(sl) ISO-8859-2 Norwegian Bokmal(nb) ISO-8859-1 Serbian Latin(sr@latin) ISO-8859-2 Dutch(nl) ISO-8859-1 Serbian(sr) ISO-8859-5 Norwegian Nynorsk(nn) ISO-8859-1 Turkish(tr) ISO-8859-9 Norwegian(no) ISO-8859-1 Ukrainian(uk) KOI8-U Portuguese(pt) ISO-8859-1 Vietnamese(vi) TCVN5712-1 Swedish(sv) ISO-8859-1 Simplified Chinese(zh_CN) GBK Belarusian(be) CP1251 Simplified Chinese, Singapore(zh_SG) GBK Bulgarian(bg) CP1251 Traditional Chinese, Hong Kong(zh_HK) BIG5HKSCS Czech(cs) ISO-8859-2 Traditional Chinese(zh_TW) BIG5 Greek(el) ISO-8859-7
Справочные страницы на языках, отсутствующих в списке выше, не поддерживаются.
Содержимое пакета Man-DB.
Установленные каталоги: /usr/lib/man-db, /usr/lib/tmpfiles.d, /usr/libexec/man-db и /usr/share/doc/man-db-2.8.4
Краткое описание установленных программ и библиотек:
accessdb Сбрасывает содержимое базы данных whatis в удобочитаемой форме.
apropos Ищет базу данных whatis и отображает краткие описания системных команд, которые содержат заданную строку.
catman Создает или обновляет предварительно отформатированные страницы руководства.
lexgrog Отображает однострочную сводную информацию о данной странице руководства.
man Форматирует и отображает запрашиваемую страницу руководства.
mandb Создает или обновляет базу данных whatis.
manpath Отображает содержимое $ MANPATH или (если $ MANPATH не установлен) подходящий путь поиска, основанный на настройках man.conf и среды пользователя.
whatis Ищет базу данных whatis и отображает краткие описания системных команд, которые содержат заданное ключевое слово, как отдельное слово.
libman Содержит поддержку времени выполнения для man.
libmandb Содержит поддержку времени выполнения для man.

6.75. Tar-1.30

Этот пакет обеспечивает возможности архивирования и извлечения почти всех пакетов, используемых в LFS.
Подготовим пакет Tar к компиляции:

FORCE_UNSAFE_CONFIGURE=1 \
./configure --prefix=/usr \
--bindir=/bin


Значение параметров конфигурации:
FORCE_UNSAFE_CONFIGURE=1 Аргумент явно указывает чтобы тесты для mknod выполнялись от имени корневого пользователя root. Как правило, опасно выполнять такие тесты от корневого пользователя, но так как тест запускается в системе, которая ещё до конца не построена, такое переопределение аргумента можно считать допустимым.
Скомпилируем пакет:

make

Для выполнения тестов выполним команду:

make check

Один тест на несоответствие ссылки (link mismatch) известно что не пройдет.
Установим пакет:

make install
make -C doc install-html docdir=/usr/share/doc/tar-1.30


Установленные программы: tar Создает, извлекает файлы и перечисляет содержимое архивов, также известный как тарболы.
Каталог установки: /usr/share/doc/tar-1.30

6.76. Texinfo-6.5

Этот пакет - система документирования и язык разметки, позволяющие создавать документы в разных форматах из одного исходного текста.
Исправляем файл, который создает множество сбоев в регрессионных тестах:

sed -i '5481,5485 s/({/(\\{/' tp/Texinfo/Parser.pm

Подготовим пакет Texinfo к компиляции:

./configure --prefix=/usr --disable-static

Значение параметров конфигурации:
--disable-static В этом случае сценарий настройки верхнего уровня будет выдавать предупреждение, что это нераспознанный параметр, но сценарий настройки для XSParagraph распознает его и использует его для отключения установки статического XSParagraph.a в каталоге /usr/lib/texinfo.
Скомпилируем пакет:

make

Для выполнения тестов, выполните команду:

make check

Установим пакет:

make install

При необходимости установим компоненты, входящие в установку TeX:

make TEXMF=/usr/share/texmf install-tex

Значение параметров make:
TEXMF=/usr/share/texmf В значении переменной TEXMF make-файла хранится корневой путь к дереву TeX, в случае дальнейшей установки этого пакета, позднее.
Система документации Info использует простой текстовый файл для хранения списка пунктов меню. Файл находится в каталоге /usr/share/info/dir. Из-за случайных проблем в Make-файлах различных пакетов, он иногда может выйти из синхронизации с информационными страницами, установленными в системе. Если каталог /usr/share/info/dir когда-либо потребуется создать заново, следующие команды выполнят эту задачу:

pushd /usr/share/info
rm -v dir
for f in *
do install-info $f dir 2>/dev/null
done
popd


Содержимое пакета Texinfo.
Установленная библиотека: XSParagraph.so
Установленные каталоги: /usr/share/texinfo и /usr/lib/texinfo
Краткое описание установленных программ:
info Используется для чтения информационных страниц, похожих на man-страницы, но часто гораздо глубже, чем просто объяснять все доступные параметры командной строки. [Например, сравнить man bison и info bison.]
install-info Используется для установки информационных страниц; он обновляет записи в файле индекса информации.
makeinfo Переводит предоставленные исходные тексты Texinfo в информационные страницы, обычный текст или HTML.
pdftexi2dvi Используется для форматирования данного документа Texinfo в формате Portable Document Format (PDF).
pod2texi Преобразует Pod в формат Texinfo.
texi2any Перевести документацию Texinfo в другие форматы.
texi2dvi Используется для форматирования данного Texinfo-документа в файл, не зависящий от устройства, который можно распечатать.
texi2pdf Используется для форматирования данного документа Texinfo в формате Portable Document Format (PDF).
texindex Используется для сортировки индексных файлов Texinfo.

6.77. Vim-8.1

Vim - один из мощнейших текстовых редакторов с полной свободой настройки и автоматизации, возможными благодаря расширениям и надстройкам.
Для ознакомления со списком текстовых редакторов, доступных для установки, например Emacs, Joe или Nano, перейдём в соответствующий раздел и выполним инструкции по установке нужного пакета.
Изменим путь к файлу vimrc на каталог /etc:

echo '#define SYS_VIMRC_FILE "/etc/vimrc"' >> src/feature.h

Подготовим пакет Vim к компиляции:

./configure --prefix=/usr

Скомпилируем пакет:

make

Для выполнения тестов, выполним команду:

LANG=en_US.UTF-8 make -j1 test &> vim-test.log

Набор тестов выводит на экран множество двоичных данных. Это может вызвать проблемы с настройками текущего терминала. Проблема может быть решена путем перенаправления вывода в файл журнала, как показано выше. Успешный тест приведет к словам ALL DONE в файле журнала по окончании процесса тестирования.
Установим пакет:

make install

Для использования команду vi вместо vim, необходимо создать символическую ссылку для бинарного файла и для справочных руководств предоставляемых языков:

ln -sv vim /usr/bin/vi
for L in /usr/share/man/{,*/}man1/vim.1; do
ln -sv vim.1 $(dirname $L)/vi.1

done

По умолчанию, документация к пакету устанавливается в каталог /usr/share/vim. Следующая символическая ссылка позволяет осуществить доступ к документации в каталоге /usr/share/doc/vim-8.1, поскольку это согласуется с расположением документации для других пакетов:

ln -sv ../vim/vim81/doc /usr/share/doc/vim-8.1

Если в дальнейшем планируется установка X Window System (конная система, обеспечивающая стандартные инструменты и протоколы для построения графического интерфейса пользователя. Используется в UNIX-подобных ОС) в системе LFS, то пакет потребуется повторно перекомпилировать, после установки X Window System. Vim поставляется с графическим интерфейсом который зависит от системы X и некоторых дополнительных библиотек. Для более полного ознакомления с процессом установки, изучаем информацию в книге BLFS.
По умолчанию, vim выполняется в vi-несовместимом режиме. Это может быть новым для пользователей, которые использовали другие редакторы ранее. Настройка «nocompatible» добавлена ниже, чтобы подчеркнуть тот факт, что будет использоваться новое поведение. Он также напоминает тем, кто хотел бы перейти в «совместимый» режим, что он должен быть первым параметром в файле конфигурации. Это необходимо, поскольку он изменяет другие параметры и переопределения должны быть указаны только после этого параметра. Создайте файл конфигурации vim по умолчанию, выполнив следующие действия:

cat > /etc/vimrc << "EOF"
" Begin /etc/vimrc
" Ensure defaults are set before customizing settings, not after
source $VIMRUNTIME/defaults.vim
let skip_defaults_vim=1
set nocompatible
set backspace=2
set mouse=
syntax on
if (&term == "xterm") || (&term == "putty")
et background=dark
endif
" End /etc/vimrc
EOF


Установленная nocompatible настройка делает vim более полезным (по умолчанию), чем vi-совместимым способом. Удалите «no», чтобы сохранить прежнее поведение vi. Установка set backspace = 2 позволяет вернуться к разрыву строк, автоиндентам и началу вставки. Синтаксис параметра позволяет выделить синтаксис vim. Установленная настройка mouse = позволяет правильно вставлять текст мышью при работе в chroot или удаленном соединении. Наконец, оператор if с заданной настройкой background = dark корректирует vim предположение о цвете фона некоторых эмуляторов терминала. Это дает подсветку лучшей цветовой схемы для использования на черном фоне этих программ.
Можно получить документацию по другим доступным параметрам:

vim -c ':options'

По умолчанию Vim устанавливает только файлы для английского языка. Чтобы установить файлы орфографии для предпочтительного языка, загрузим *.spl и, возможно, *.sug файлы для необходимого языка и кодировки символов здесь и сохраним их в /usr/share/vim/vim81/spell/.
Для использования этих файлов заклинаний необходима некоторая конфигурация в /etc/vimrc, например:

set spelllang=en,ru
set spell


Для получения дополнительной информации см. соответствующий файл README, расположенный по указанному выше URL-адресу.
Содержимое пакета Vim.
Каталог установки: /usr/share/vim
Краткое описание установленных программ:
ex Запуск vim в режиме ex.
rview Ограниченная версия просмотра; никакие команды оболочки не могут быть запущены, и просмотр не может быть приостановлен.
rvim Ограниченная версия vim; никакие команды оболочки не могут быть запущены, а vim нельзя приостановить.
vi Ссылка на vim.
view Запускает vim в режиме только для чтения.
vim Является ли редактор.
vimdiff Редактирует две или три версии файла с vim и показывает различия.
vimtutor Обучает основным клавишам и командам vim.
xxd Создает шестнадцатеричный дамп данного файла; он также может делать обратное, поэтому его можно использовать для двоичного исправления.

SedShadow

Продаются
книги

Оставить отзыв

Установи и
БУДЕШЬ СЧАСТЛИВ!

Спасибо, Господи, что взял деньгами...

Scrooge
Dollar
Ruble
Ruble
Gold