Ссылки:
1 2 3 4 5 6 7 8 |
https://www.linuxfromscratch.org/lfs/downloads/stable/ https://www.linuxfromscratch.org/lfs/downloads/stable-systemd/LFS-BOOK-11.1-NOCHUNKS.html https://www.linuxfromscratch.org/lfs/downloads/stable/LFS-BOOK-11.2-NOCHUNKS.html https://www.linuxfromscratch.org/lfs/download.html https://www.linuxfromscratch.org/faq/ https://habr.com/ru/post/257663/ https://www.linuxfromscratch.org/livecd/download.html https://github.com/automate-lfs/jhalfs |
Скрипт проверки готовности системы для сборки lfs:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
cat > version-check.sh << "EOF" #!/bin/bash # Simple script to list version numbers of critical development tools export LC_ALL=C bash --version | head -n1 | cut -d" " -f2-4 MYSH=$(readlink -f /bin/sh) echo "/bin/sh -> $MYSH" echo $MYSH | grep -q bash || echo "ERROR: /bin/sh does not point to bash" unset MYSH echo -n "Binutils: "; ld --version | head -n1 | cut -d" " -f3- bison --version | head -n1 if [ -h /usr/bin/yacc ]; then echo "/usr/bin/yacc -> `readlink -f /usr/bin/yacc`"; elif [ -x /usr/bin/yacc ]; then echo yacc is `/usr/bin/yacc --version | head -n1` else echo "yacc not found" fi echo -n "Coreutils: "; chown --version | head -n1 | cut -d")" -f2 diff --version | head -n1 find --version | head -n1 gawk --version | head -n1 if [ -h /usr/bin/awk ]; then echo "/usr/bin/awk -> `readlink -f /usr/bin/awk`"; elif [ -x /usr/bin/awk ]; then echo awk is `/usr/bin/awk --version | head -n1` else echo "awk not found" fi gcc --version | head -n1 g++ --version | head -n1 grep --version | head -n1 gzip --version | head -n1 cat /proc/version m4 --version | head -n1 make --version | head -n1 patch --version | head -n1 echo Perl `perl -V:version` python3 --version sed --version | head -n1 tar --version | head -n1 makeinfo --version | head -n1 # texinfo version xz --version | head -n1 echo 'int main(){}' > dummy.c && g++ -o dummy dummy.c if [ -x dummy ] then echo "g++ compilation OK"; else echo "g++ compilation failed"; fi rm -f dummy.c dummy EOF bash version-check.sh |
0. Подготовим linux для установкам LFS:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
!!! https://github.com/archlinux/archinstall 0. Накатил на виртуалку archlinux без графики использовал команду archinstall 1. после установки подключил еще одни диск /dev/vdb отформатировал его (fstab /dev/vdb) создал файловую систему с помощью ext4(mkfs.ext4 /dev/vdb1) добавил этот диск в (/etc/fstab) что бы пока не беспокоится о его подключении после перезагрузки системы проверил с помощью команды (mount -a) mkdir /mnt/lfs 2. установил софт на archlinux pacman -Sy core/openssh vim git wget python gcc 3. временно создал переменную LFS !!! В книге LFS предполагается что вы все делаете за одни раз !!! Поэтому, в случае отключения питания ПК, потребуется некоторые команды выполнять заново. export LFS=/mnt/lfs 4. Создал директории mkdir -v $LFS mkdir -v $LFS/sources mkdir -v $LFS/tools mkdir -v $LFS/usr 5. Создаем еще директории: mkdir -pv $LFS/{etc,var} $LFS/usr/{bin,lib,sbin} 6. Создаем символьные ссылки для библиотеки: for i in bin lib sbin; do ln -sv usr/$i $LFS/$i done 7. Создаем символьные ссылки для библиотеки x64: case $(uname -m) in x86_64) mkdir -pv $LFS/lib64 ;; esac 8. Права chmod -v a+wt $LFS/sources 9. Загружаем файлы lfs Список скачиваемых пакетов wget-list и список контрольных сумм пакетов md5sums: wget https://www.linuxfromscratch.org/lfs/downloads/stable-systemd/wget-list --directory-prefix=$LFS/sources wget https://www.linuxfromscratch.org/lfs/downloads/stable-systemd/md5sums --directory-prefix=$LFS/sources После этого приступаем к закачке исходников всего и вся: wget --input-file=$LFS/sources/wget-list --continue --directory-prefix=$LFS/sources 10. Проверяем скаченное: !!! команды pushd/popd, делают следующие, !!! Команда pushd временно переводит вас в указанный в качестве параметра каталог. !!! Возврат назад происходит командой popd pushd $LFS/sources md5sum -c md5sums popd !!! Если чего-то не окажется, нужно пойти и скачать ручками !!! если все ок можем продолжать |
1.1 Книга:
1 2 |
cd /mnt/lfs/book git clone git://git.linuxfromscratch.org/jhalfs.git jhalfs |
2. подготовим окружение пользователя lfs для сборки:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
!!! если вышли или закрыли консоль не забываем выполнить (export LFS=/mnt/lfs и проверить с помощью echo $LFS) 0. Настройка рабочего окружения !!! Создаем символьную ссыдку !!! Мы обеспечиваем возможность обращения к данному каталогу по пути /tools вне зависимости от текущего расположения корня системы !!! В противном случае сразу после перехода во временную систему нас ждет сбой при первой же компиляции. ln -sv $LFS/tools / 1. Создаем группу lfs groupadd lfs 2. Создаем пользователя lfs useradd -s /bin/bash -g lfs -m -k /dev/null lfs -s /bin/bash — используемая в сеансе пользователя командная оболочка -g lfs — группа, в которую входит пользователь -m — указывает, что необходимо создать домашний каталог пользователя /home/lfs -k /dev/null — пустой каталог шаблонов(создать пустую директорию /home/lfs). По-умолчанию при создании домашнего каталога в него помещаются файлы и папки, размещенные в /etc/skel. 3. Устанавливаем пароль пользователю lfs passwd lfs 4. Сделаем lfs его владельцем каталогов $LFS/sources и $LFS/tools chown -v lfs $LFS/sources chown -v lfs $LFS/tools chown -v lfs $LFS/book chown -v lfs $LFS/usr |
3. Продолжаем работу над рабочим окружением пользователя:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
0. Подключаемся от имени lfs: su - lfs 1. Создаем в домашней директории пользователя файл ~/.bash_profile: !!! Файл ~/.bash_profile определяет индивидуальную пользовательские настройку переменных среды. ------------------------------ cat > ~/.bash_profile << "EOF" exec env -i HOME=$HOME TERM=$TERM PS1='\u:w\$ ' /bin/bash EOF ------------------------------ 2. Создаем в домашней директории пользователя файл ~/.bashrc: !!! Файл ~/.bashrc определяет какие настройки должны быть выполнены при логине в сессию данного пользователя ----------------------------------- cat > ~/.bashrc << "EOF" set +h umask 022 LFS=/mnt/lfs LC_ALL=POSIX LFS_TGT=$(uname -m)-lfs-linux-gnu PATH=/tools/bin:/bin:/usr/bin export LFS LC_ALL LFS_TGT PATH EOF ------------------------------------ set +h — отключает хеширование в bash. Командная оболочка запоминает пути к исполняемым файлам, запущенным ранее, что безусловно ускоряет работу системы. Однако мы будем вызывать разные версии одних и тех программ расположенных по разным путям, поэтому хеширование будет только вредить нам. umask 022 — устанавливает права доступа к новым файлам и каталогам, задаваемые по умолчанию. Значение 022 означает, что файлы будут создаваться с правами 644 (rw- r-- r--) а каталоги — с правами 755 (rwx r-x r-x). Каждый взведенный бит umask означает сброс соответсвующего бита в атрибутах прав LFS=/mnt/lfs — корень собираемой системы LC_ALL=POSIX — определяет локализацию запускаемых программ. POSIX задает стандарт отображения независимый от способа кодировки символов. LFS_TGT — задает описание целевой машины, используемое при построении временных иструментов сборки системы PATH — пути поиска исполняемых файлов export — присваивает указанным переменным заданные выше значения 3. Переключаемся на чистое окружение exec env -i HOME=$HOME TERM=$TERM PS1='\u:W\$ ' /bin/bash создает «чистое» пользовательское окружение (ключ -i указывает игнорировать предыдущие настройки), присваивая значения переменным среды HOME — домашний каталог, присваиваем текущее значение переменной, равное /home/lfs TERM — используемый тип терминала, так же оставляем текущий PS1 — формат приглашения командной строки. В данном случает задается формат вида имя пользователя: текущий рабочий каталог$, где спецсимвол \u — имя пользователя, \W — текущий рабочий каталог. /bin/bash — команда, запускающая новый экземпляр командной оболочки 4. Обновим пользовательское окружение командой source ~/.bash_profile 5. Убеждаемся, что необходимые переменные окружения установлены set |
4. Сборка временного набора инструментов (Temporary System)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
!!! Начиная собирать систему, мы сталкиваемся с классической проблемой «курицы и яйца». !!! Для сборки системы нам необходимы компилятор, линковщик и библиотеки. !!! Но у нас нет ничего из перечисленного, только их исходники. У нас есть компилятор в хост-системе, и собирать необходимое ПО мы начнем именно им. !!! Однако если просто собрать тот же gcc с настройками по-умолчанию он не будет работать в LFS-системе !!! на начальном этапе её построения — он использует динамическую компоновку необходимых для работы библиотек. !!! Весь необходимый для работы код надо будет скомпоновать статически, то есть явным образом включить в исполняемый файл. !!! Таким образом первым делом мы выполним кросс-компиляцию некоторых частей будущей системы, чтобы иметь возможность воспользоваться ими при сборке окончательного её варианта. Переходим в каталог $LFS/sources: cd $LFS/sources !!! Для всех собираемых пакетов порядок сборки содержит следующую последовательность действий (если не оговорено иного!): !!! Распаковываем архив с пакетом !!! tar -pxf <package-archive-file-name> !!! Переходим в распакованный каталог !!! cd <package-dir-name> !!! Выполняем инструкции по сборке (у каждого пакета имеются ньюансы, подробно описанные в документации) !!! Переходим на каталог выше, назад в $LFS/source, и удаляем все созданные при распаковке и сборке директории !!! Время сборки пакетов различно — от практически мгновенной, до двух с половиной часов !!! Так как быстродействие компьютеров различается, в качестве единицы измерения времени сборки выбрана относительная единица, именуемая Standard Build Unit (SBU) !!! Один SBU равен времени сборки пакета binutils, который компилируется самым первым. !!! Рекомендация: не собирайте систему в несколько потоков. !!! Если у вас многоядерный процессор, то ключик -j ускорит работу, но позже это может обернуться непрохождением некоторых важных тестов и нестабильной работой собранного ПО. !!! Сборка в один поток не так уж и продолжительна — гораздо большее время будет затрачено на разгребание нажитых многопоточной сборкой проблем. |
5. Сборка Binutils — первый проход. Измерение SBU
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
!!! Binutils — пакет, содержащий вспомогательные утилиты для сборки ПО. В их число входят ассемблер (as) и компоновщик (ld). !!! Они необходимы glibc и gcc для прохождения некоторых тестов, поэтому данный пакет собирается в первую очередь. 0. распаковали и перешли в каталог tar -pxf binutils-2.38.tar.xz cd binutils-2.38 1. Для сборки этого пакета рекомендуется создать отдельный каталог, создаем его и переходим туда mkdir -v ../binutils-build cd ../binutils-build 2. Теперь надо выполнить конфигурирование пакета, чтобы сгенерировать правильный Makefile. ../binutils-2.38/configure --prefix=/tools --with-sysroot=$LFS --with-lib-path=/tools/lib --target=$LFS_TGT --disable-nls --disable-werror !!! --prefix=/tools — указывает на то, что собранные пакеты будут устанавливаться в директорию /tools, где будет размещаться временная система !!! --with-sysroot=$LFS — корневой каталог системы, относительно которого будет производится поиск библиотек и прочих ресурсов, необходимых для работы программ во временной системе !!! --with-lib-path=/tools/lib — путь поиска библиотек, указываемый для компоновщика ld !!! --target=$LFS_TGT — задаем описание целевой машины !!! --disable-nls — отключает интернационализацию собираемых пакетов. В данный момент она без надобности, а её наличие может вызвать ряд сбоев !!! --disable-werror — отключает остановку компиляции при получении предупреждений от компилятора хост-системы 3. После того как отработает конфигуратор, на выходе мы получим Makefile, предназначенный для сборки и установки пакета. Собираем пакет и измеряем SBU: time { make; } 4. Получили вывод: real 2m17.202s user 1m58.972s sys 0m15.231s 5. Из этого следует: Для моей системы — виртуальная машина на 2 - ядрах (Intel(R) Core(TM) i5-1035G1 CPU @ 1.00GHz), 2Gb RAM, SBU составил 2m17.202s при сборке в один поток. 6. Зачем это SBU? Например запустить финальную сборку gcc вместе с тестами и уйти делать другие дела, ибо занимает это 63 SBU(2+ часа реального времени для машины в тесте) — нет смысла с надеждой пялится в экран. 7. После того как сборка окончена, создаем символические ссылки на каталоги библиотек. !!! Данная операция необходима, если ваша система 64-разрядная, так что нижеприведенная команда сначала проверяет разрядность системы, а уж потом при необходимости создает симлинки. case $(uname -m) in x86_64) mkdir -v /tools/lib && ln -sv lib /tools/lib64 ;; esac 8. Устанавливаем собранное make install 9. Выходим из каталога binutils-build и удаляем больше не нужные каталоги cd .. rm -r binutils-2.38 rm -r binutils-build |
Примечание
1 2 3 4 5 |
!!! https://www.linuxfromscratch.org/lfs/view/stable/partintro/generalinstructions.html#buildinstr В этой главе часто возникают недоразумения. Процедуры такие же, как и в любой другой главе, как объяснялось ранее ( Инструкции по сборке пакетов ). Сначала извлеките tar-архив gcc из исходного каталога, а затем перейдите в созданный каталог. Только после этого следует приступить к приведенным ниже инструкциям. |
10. Сборка GCC — первый проход
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
!!! https://www.linuxfromscratch.org/lfs/view/stable/chapter05/gcc-pass1.html !!! В процессе сборки системы компилятор придется собирать много раз. !!! Первые два прохода необходимы для получения компилятора, способного работать независимо от хост-системы. 0. распакуем и перейдем в каталог gcc tar -xpf gcc-11.2.0.tar.xz cd gcc-11.2.0 1. Для успешной компиляции нам потребуются исходники ещё трех пакетов: GMP, MPFR и MPC. Распакуем их в каталог исходников компилятора и переименуем каталоги так, как на них ссылаются в исходниках gcc tar -pxf ../gmp-6.2.1.tar.xz tar -xpf ../mpfr-4.1.0.tar.xz tar -xpf ../mpc-1.2.1.tar.gz mv -v gmp-6.2.1 gmp mv -v mpfr-4.1.0 mpfr mv -v mpc-1.2.1 mv -v mpc-1.2.1 mpc 2. На хостах x86_64 установите имя каталога по умолчанию для 64-битных библиотек на « lib » : case $(uname -m) in x86_64) sed -e '/m64=/s/lib64/lib/' \ -i.orig gcc/config/i386/t-linux64 ;; esac 3. Документация GCC рекомендует собирать GCC в выделенном каталоге сборки: mkdir -v build cd build 4. Готовим gcc к компиляции ../configure \ --target=$LFS_TGT \ --prefix=$LFS/tools \ --with-glibc-version=2.35 \ --with-sysroot=$LFS \ --with-newlib \ --without-headers \ --enable-initfini-array \ --disable-nls \ --disable-shared \ --disable-multilib \ --disable-decimal-float \ --disable-threads \ --disable-libatomic \ --disable-libgomp \ --disable-libquadmath \ --disable-libssp \ --disable-libvtv \ --disable-libstdcxx \ --enable-languages=c,c++ Значение параметров настройки: --with-glibc-version=2.35 - Эта опция указывает версию glibc, которая будет использоваться на цели. Это не относится к libc хост-дистрибутива, потому что все, скомпилированное с помощью pass1 gcc, будет работать в среде chroot, которая изолирована от libc хост-дистрибутива. --with-newlib - Поскольку работающая библиотека C еще недоступна, это гарантирует, что константаinhibit_libc будет определена при сборке libgcc. Это предотвращает компиляцию любого кода, требующего поддержки libc. --without-headers - При создании полного кросс-компилятора GCC требует стандартных заголовков, совместимых с целевой системой. Для наших целей эти заголовки не понадобятся. Этот переключатель предотвращает их поиск GCC. --enable-initfini-array - Этот переключатель заставляет использовать некоторые внутренние структуры данных, которые необходимы, но не могут быть обнаружены при построении кросс-компилятора. --disable-shared - Этот переключатель заставляет GCC статически связывать свои внутренние библиотеки. Нам это нужно, потому что общие библиотеки требуют glibc, который еще не установлен в целевой системе. --disable-multilib - В x86_64 LFS не поддерживает конфигурацию с несколькими библиотеками. Этот переключатель безвреден для x86. --disable-decimal-float, --disable-threads, --disable-libatomic, --disable-libgomp, --disable-libquadmath, --disable-libssp, --disable-libvtv, --disable-libstdcxx Эти переключатели отключают поддержку расширения десятичных чисел с плавающей запятой, многопоточности, libatomic, libgomp, libquadmath, libssp, libvtv и стандартной библиотеки C++ соответственно. Эти функции не будут компилироваться при сборке кросс-компилятора и не нужны для задачи кросс-компиляции временной libc. --enable-languages=c,c++ - Этот параметр обеспечивает сборку только компиляторов C и C++. Это единственные языки, которые нужны сейчас. Скомпилируйте GCC, выполнив: make Установите пакет: make install Эта сборка GCC установила пару внутренних системных заголовков. Обычно один из них, limits.h, в свою очередь, включает соответствующий системный limits.hзаголовок, в данном случае $LFS/usr/include/limits.h. Однако на момент создания этой сборки GCC $LFS/usr/include/limits.hне существует, поэтому только что установленный внутренний заголовок представляет собой частичный автономный файл и не включает расширенные функции системного заголовка. Этого достаточно для сборки glibc, но полный внутренний заголовок понадобится позже. Создайте полную версию внутреннего заголовка с помощью команды, идентичной тому, что система сборки GCC делает в обычных обстоятельствах: cd .. cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \ `dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/install-tools/include/limits.h Now that our cross-toolchain is complete, finalize the installation of the limits.h header. For doing so, run a utility provided by the GCC developers: $LFS/tools/libexec/gcc/$LFS_TGT/11.2.0/install-tools/mkheaders После успешной сборки можно удалить cd /mnt/lfs/sources rm -rf gcc-11.2.0 |
11. Заголовки API Linux-5.16.9
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
0. Выполняем уже для нас стандартные действия (переходим каталог с исходниками, распаковываем нужный пакет, и переходим в папку) cd /mnt/lfs/sources tar -pxf linux-5.16.9.tar.xz cd linux-5.16.9 1. Убедитесь, что в пакете нет устаревших файлов: make mrproper 2. Теперь извлеките видимые пользователю заголовки ядра из исходного кода. !!! Рекомендуемую цель make « headers_install » использовать нельзя, так как для этого требуется rsync , который может быть недоступен. !!! Заголовки сначала помещаются в ./usr, а затем копируются в нужное место. !!! Команды выполняем последовательно make headers find usr/include -name '.*' -delete rm usr/include/Makefile cp -rv usr/include $LFS/usr |
Установка Glibc-2.35
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
0. Переходим в каталог sources и выполняем стандартные действия cd /mnt/lfs/sources tar -pxf glibc-2.35.tar.xz cd glibc-2.35 1. С помощью крипта создайте символическую ссылку для соответствия LSB. Кроме того, для x86_64 создайте символическую ссылку совместимости, необходимую для правильной работы загрузчика динамической библиотеки: !!! Приведенная выше команда верна. !!! У команды ln есть несколько синтаксических версий, поэтому обязательно проверьте информацию coreutils ln и ln(1)прежде чем сообщать о том, что вы можете принять за ошибку. case $(uname -m) in i?86) ln -sfv ld-linux.so.2 $LFS/lib/ld-lsb.so.3 ;; x86_64) ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64 ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64/ld-lsb-x86-64.so.3 ;; esac 2. Некоторые программы Glibc используют /var/dbкаталог, не совместимый с FHS, для хранения своих данных времени выполнения. Примените следующий патч, чтобы такие программы хранили свои данные времени выполнения в местах, совместимых с FHS: patch -Np1 -i ../glibc-2.35-fhs-1.patch 3. Документация Glibc рекомендует собирать Glibc в выделенном каталоге сборки: mkdir -v build cd build 4. Убедитесь, что утилиты ldconfig и sln установлены в /usr/sbin: echo "rootsbindir=/usr/sbin" > configparms 5. Затем подготовьте Glibc к компиляции: ../configure \ --prefix=/usr \ --host=$LFS_TGT \ --build=$(../scripts/config.guess) \ --enable-kernel=3.2 \ --with-headers=$LFS/usr/include \ libc_cv_slibdir=/usr/lib Значение параметров настройки: --host=$LFS_TGT, --build=$(../scripts/config.guess) Комбинированный эффект этих переключателей заключается в том, что система сборки Glibc настраивается для кросс-компиляции с использованием кросс-линкера и кросс-компилятора в $LFS/tools. --enable-kernel=3.2 Это говорит Glibc скомпилировать библиотеку с поддержкой ядра Linux 3.2 и более поздних версий. Обходные пути для старых ядер не включены. --with-headers=$LFS/usr/include Это говорит Glibc скомпилировать себя с использованием заголовков, недавно установленных в каталог $LFS/usr/include, чтобы он точно знал, какие функции имеет ядро, и мог соответствующим образом оптимизировать себя. libc_cv_slibdir=/usr/lib Это гарантирует, что библиотека будет установлена в /usr/lib вместо стандартного /lib64 на 64-битных машинах. 6. Скомпилируйте пакет: make 7. Установите пакет: !!! Если LFSон не установлен должным образом, и, несмотря на рекомендации, вы собираете как root, следующая команда установит только что собранный glibc в вашу хост-систему, !!! что, скорее всего, сделает его непригодным для использования. Поэтому дважды проверьте, правильно ли настроена среда, прежде чем запускать следующую команду. make DESTDIR=$LFS install 8. Исправьте жестко заданный путь к исполняемому загрузчику в скрипте ldd : sed '/RTLDLIST=/s@/usr@@g' -i $LFS/usr/bin/ldd 9. Осторожно. Важный момент. Нужно проверить работу сборщика. a)На этом этапе необходимо остановиться и убедиться, что основные функции (компиляция и компоновка) новой цепочки инструментов работают должным образом. Чтобы выполнить проверку работоспособности, выполните следующие команды: echo 'int main(){}' > dummy.c $LFS_TGT-gcc dummy.c readelf -l a.out | grep '/ld-linux' б)Если все работает правильно, ошибок быть не должно, а вывод последней команды будет иметь вид: [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2] с)Если все работает, очистите тестовые файлы: rm -v dummy.c a.out 10. Теперь, когда наша кросс-инструментальная цепочка завершена, завершите установку заголовка limit.h. Для этого запустите утилиту, предоставленную разработчиками GCC: $LFS/tools/libexec/gcc/$LFS_TGT/11.2.0/install-tools/mkheaders |
12. Установка Libstdc++ from GCC-11.2.0, Pass 1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
!!! Libstdc++ — это стандартная библиотека C++. Он нужен для компиляции кода C++ (часть GCC написана на C++), !!! но нам пришлось отложить его установку, когда мы собирали gcc-pass1, потому что он зависит от glibc, которого еще не было в целевом каталоге. !!! Примечание !!! Libstdc++ является частью исходников GCC. !!! Сначала вы должны распаковать архив GCC и перейти в gcc-11.2.0 каталог. 0. Выполняем стандартное: tar -pxf gcc-11.2.0.tar.xz cd gcc-11.2.0 mkdir -v build cd build 1. Подготовьте libstdc++ к компиляции: ../libstdc++-v3/configure \ --host=$LFS_TGT \ --build=$(../config.guess) \ --prefix=/usr \ --disable-multilib \ --disable-nls \ --disable-libstdcxx-pch \ --with-gxx-include-dir=/tools/$LFS_TGT/include/c++/11.2.0 Значение параметров настройки: --host=... Указывает, что вместо компилятора в /usr/bin. --disable-libstdcxx-pch Этот переключатель предотвращает установку предварительно скомпилированных включаемых файлов, которые на данном этапе не нужны. --with-gxx-include-dir=/tools/$LFS_TGT/include/c++/11.2.0 Указывает каталог установки для включаемых файлов. Поскольку libstdc++ является стандартной библиотекой C++ для LFS, этот каталог должен соответствовать местоположению, в котором компилятор C++ ( $LFS_TGT-g++ ) будет искать стандартные включаемые файлы C++. В обычной сборке эта информация автоматически передается параметрам конфигурации libstdc++ из каталога верхнего уровня. В нашем случае эта информация должна быть указана явно. Компилятор C++ добавит путь sysroot $LFS(указанный сборкой GCC pass 1) к пути поиска включаемого файла, поэтому он фактически будет искать в $LFS/tools/$LFS_TGT/include/c++/11.2.0. Комбинация DESTDIRпеременной (в приведенной ниже команде make install ) и этого переключателя обеспечивает установку заголовков. 2. Скомпилируйте libstdc++, запустив: make 3. Установите библиотеку: make DESTDIR=$LFS install |
13. Установка М4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
0. Выполняем стандартные действия: cd /mnt/lfs/sources/ tar -pxf m4-1.4.19.tar.xz cd m4-1.4.19 1. Подготовьте M4 к компиляции: ./configure --prefix=/usr \ --host=$LFS_TGT \ --build=$(build-aux/config.guess) 2. Скомпилируйте пакет: make 3. Установите пакет: make DESTDIR=$LFS install |
14. Установка Ncurses-6.3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
!!! https://www.linuxfromscratch.org/lfs/view/stable/chapter06/ncurses.html 0. Выполняем стандартные действия cd /mnt/lfs/sources/ tar -pxf ncurses-6.3.tar.gz cd ncurses-6.3 1. Во- первых, убедитесь, что во время настройки сначала найден gawk(выполнение не должно вернуть ошибку): sed -i s/mawk// configure 2. Затем выполните следующие команды, чтобы собрать программу « tic » на хосте сборки: mkdir build pushd build ../configure make -C include make -C progs tic popd 3. Подготовьте Ncurses к компиляции: ./configure --prefix=/usr \ --host=$LFS_TGT \ --build=$(./config.guess) \ --mandir=/usr/share/man \ --with-manpage-format=normal \ --with-shared \ --without-debug \ --without-ada \ --without-normal \ --disable-stripping \ --enable-widec Значение новых опций конфигурации: --with-manpage-format=normal Это предотвращает установку Ncurses сжатых справочных страниц, что может произойти, если сам дистрибутив хоста имеет сжатые справочные страницы. --without-ada Это гарантирует, что Ncurses не создаст поддержку компилятора Ada, который может присутствовать на хосте, но будет недоступен, как только мы войдем в среду chroot . --disable-stripping Этот переключатель не позволяет системе здания удалять программы с помощью программы удаления с хоста. Использование инструментов хоста в кросс-компилируемой программе может привести к сбою. --enable-widec Этот переключатель вызывает создание библиотек расширенных символов (например, libncursesw.so.6.3) вместо обычных (например, libncurses.so.6.3). Эти широкосимвольные библиотеки можно использовать как в многобайтовых, так и в традиционных 8-битных локалях, в то время как обычные библиотеки правильно работают только в 8-битных локалях. Библиотеки расширенных символов и обычные библиотеки совместимы с исходным кодом, но не совместимы с двоичным кодом. --without-normal Этот переключатель отключает сборку и установку большинства статических библиотек. 4. Скомпилируйте пакет: make 5. Установите пакет: make DESTDIR=$LFS TIC_PATH=$(pwd)/build/progs/tic install echo "INPUT(-lncursesw)" > $LFS/usr/lib/libncurses.so Значение параметров установки: TIC_PATH=$(pwd)/build/progs/tic Нам нужно передать путь только что построенного тика , способного работать на сборочной машине, чтобы база данных терминала могла быть создана без ошибок. echo "ВВОД(-lncursesw)" > $LFS/usr/lib/libncurses.so Библиотека libncurses.soнужна для нескольких пакетов, которые мы скоро создадим. |
15. Установка Bash-5.1.16
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
0. Выполняем стандартные действия cd /mnt/lfs/sources/ tar -pxf bash-5.1.16.tar.gz cd bash-5.1.16 1. Подготовьте Bash к компиляции: ./configure --prefix=/usr \ --build=$(support/config.guess) \ --host=$LFS_TGT \ --without-bash-malloc --without-bash-malloc Этот параметр отключает использование функции распределения памяти ( malloc) Bash, которая, как известно, вызывает ошибки сегментации. Если отключить эту опцию, Bash будет использовать malloc более стабильные функции из Glibc. 2. Скомпилируйте пакет: make 3. Установите пакет: make DESTDIR=$LFS install 4. Сделайте ссылку на программы, которые используют sh для оболочки: mkdir $LFS/bin ln -sv bash $LFS/bin/sh |
16. Установка Coreutils-9.0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
0. Выполняем стандартные действия cd /mnt/lfs/sources/ tar -pxf coreutils-9.0.tar.xz cd coreutils-9.0 1. Готовим ./configure --prefix=/usr \ --host=$LFS_TGT \ --build=$(build-aux/config.guess) \ --enable-install-program=hostname \ --enable-no-install-program=kill,uptime Значение параметров настройки: --enable-install-program=hostname Это позволяет создать и установить двоичный файл имени хоста — по умолчанию он отключен, но требуется для набора тестов Perl. 2. Скомпилируйте пакет: make 3. Установите пакет: make DESTDIR=$LFS install 4. Переместите программы в их окончательные ожидаемые местоположения. Хотя в этой временной среде в этом нет необходимости, мы должны это сделать, потому что некоторые программы жестко кодируют исполняемые местоположения: mv -v $LFS/usr/bin/chroot $LFS/usr/sbin mkdir -pv $LFS/usr/share/man/man8 mv -v $LFS/usr/share/man/man1/chroot.1 $LFS/usr/share/man/man8/chroot.8 sed -i 's/"1"/"8"/' $LFS/usr/share/man/man8/chroot.8 |
17. Установка Diffutils-3.8
1 2 3 4 5 6 7 8 9 10 11 12 13 |
0. Выполняем стандартные действия cd /mnt/lfs/sources/ tar -pxf diffutils-3.8.tar.xz cd diffutils-3.8 1. Готовим Diffutils для компиляции: ./configure --prefix=/usr --host=$LFS_TGT 2. Скомпилируйте пакет: make 3. Установите пакет: make DESTDIR=$LFS install |
18. Установка File-5.41
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
0. Выполняем стандартные действия cd /mnt/lfs/sources/ tar -pxf file-5.41.tar.gz cd file-5.41 1. Приступаем к конфигурированию: !!! Команда file на хосте сборки должна быть той же версии, что и та, которую мы собираем, чтобы создать файл подписи. !!! Запустите следующие команды, чтобы построить его: mkdir build pushd build ../configure --disable-bzlib \ --disable-libseccomp \ --disable-xzlib \ --disable-zlib make popd Значение новой опции конфигурации: --disable-* Сценарий конфигурации пытается использовать некоторые пакеты из основного дистрибутива, если существуют соответствующие файлы библиотеки. Это может привести к сбою компиляции, если файл библиотеки существует, но отсутствуют соответствующие заголовочные файлы. Эти параметры предотвращают использование этих ненужных возможностей хоста. 2. Подготовьте файл для компиляции: ./configure --prefix=/usr --host=$LFS_TGT --build=$(./config.guess) 3. Скомпилируйте пакет: make FILE_COMPILE=$(pwd)/build/src/file 4. Установите пакет: make DESTDIR=$LFS install |
19. Установка Findutils-4.9.0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
!!! Пакет Findutils содержит программы для поиска файлов. Эти программы предназначены для рекурсивного поиска в дереве каталогов, а также для создания, !!! обслуживания и поиска в базе данных (часто быстрее, чем рекурсивный поиск, но ненадежно, если база данных недавно не обновлялась). 0. Выполняем стандартные действия cd /mnt/lfs/sources/ tar -pxf findutils-4.9.0.tar.xz cd findutils-4.9.0 1. Подготовьте Findutils к компиляции: ./configure --prefix=/usr \ --localstatedir=/var/lib/locate \ --host=$LFS_TGT \ --build=$(build-aux/config.guess) 2. Скомпилируйте пакет: make 3. Установите пакет: make DESTDIR=$LFS install |
20. Установка Gawk-5.1.1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
!!! Пакет Gawk содержит программы для работы с текстовыми файлами. 0. Выполняем стандартные действия cd /mnt/lfs/sources/ tar -pxf gawk-5.1.1.tar.xz cd gawk-5.1.1 1. Во-первых, убедитесь, что некоторые ненужные файлы не установлены: sed -i 's/extras//' Makefile.in 2. Подготовьте Gawk к компиляции: ./configure --prefix=/usr \ --host=$LFS_TGT \ --build=$(build-aux/config.guess) 3. Скомпилируйте пакет: make 4. Установите пакет: make DESTDIR=$LFS install |
21. Установка Grep-3.7
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
!!! Пакет Grep содержит программы для поиска по содержимому файлов. 0. Выполняем стандартные действия cd /mnt/lfs/sources/ tar -pxf grep-3.7.tar.xz cd grep-3.7 1. Подготовьте Grep к компиляции: ./configure --prefix=/usr \ --host=$LFS_TGT 2. Скомпилируйте пакет: make 3. Установите пакет: make DESTDIR=$LFS install |
22. Установка Gzip-1.11
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
!!! Пакет Gzip содержит программы для сжатия и распаковки файлов. 0. Выполняем стандартные действия cd /mnt/lfs/sources/ tar -pxf gzip-1.11.tar.xz cd gzip-1.11 1. Подготовим Gzip к компиляции: ./configure --prefix=/usr --host=$LFS_TGT 2. Скомпилируем пакет: make 3. Устанавливаем пакет: make DESTDIR=$LFS install |
23. Установка Make-4.3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
!!! Пакет Make содержит программу для управления генерацией исполняемых файлов и других не исходных файлов пакета из исходных файлов. 0. Выполняем стандартные действия cd /mnt/lfs/sources/ tar -pxf make-4.3.tar.gz cd make-4.3 1. Подготовим Make к компиляции: ./configure --prefix=/usr \ --without-guile \ --host=$LFS_TGT \ --build=$(build-aux/config.guess) Значение новой опции конфигурации: --without-guile Несмотря на то, что мы выполняем кросс-компиляцию, configure пытается использовать хитрость с хоста сборки, если находит его. Это приводит к сбою компиляции, поэтому этот переключатель предотвращает его использование. 2. Скомпилируем пакет: make 3. Установим пакет: make DESTDIR=$LFS install |
24. Установка Patch-2.7.6
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
!!! Пакет Patch содержит программу для изменения или создания файлов путем применения файла « заплаты » , обычно создаваемого программой diff . 0. Выполняем стандартные действия cd /mnt/lfs/sources/ tar -pxf patch-2.7.6.tar.xz cd patch-2.7.6 1. Подготовка к компиляции: ./configure --prefix=/usr \ --host=$LFS_TGT \ --build=$(build-aux/config.guess) 2. Компилируем пакет: make 3. Устанавливаем пакет: make DESTDIR=$LFS install |
25. Установка Sed-4.8
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
!!! https://www.linuxfromscratch.org/lfs/view/stable/chapter06/sed.html 0. Выполняем стандартные действия cd /mnt/lfs/sources/ tar -pxf sed-4.8.tar.xz cd sed-4.8 1. Подготовьте Sed для компиляции: ./configure --prefix=/usr \ --host=$LFS_TGT 2. Скомпилируйте пакет: make 3. Установите пакет: make DESTDIR=$LFS install |
26. Установка Tar-1.34
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
!!! Пакет Tar предоставляет возможность создавать tar-архивы, а также выполнять различные другие операции с архивами. !!! Tar можно использовать в ранее созданных архивах для извлечения файлов, для хранения дополнительных файлов или для обновления или списка файлов, которые уже были сохранены. 0. Выполняем стандартные действия cd /mnt/lfs/sources/ tar -pxf tar-1.34.tar.xz cd tar-1.34 1. Подготовьте Tar для компиляции: ./configure --prefix=/usr \ --host=$LFS_TGT \ --build=$(build-aux/config.guess) 2. Скомпилируйте пакет: make 3. Установите пакет: make DESTDIR=$LFS install |
27. Установка Xz-5.2.5
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
!!! Пакет Xz содержит программы для сжатия и распаковки файлов. Он предоставляет возможности для lzma и более новых форматов сжатия xz. !!! Сжатие текстовых файлов с помощью xz дает лучший процент сжатия, чем с традиционными командами gzip или bzip2 . 0. Выполняем стандартные действия cd /mnt/lfs/sources/ tar -pxf xz-5.2.5.tar.xz cd xz-5.2.5 1. Подготовьте Xz к компиляции: ./configure --prefix=/usr \ --host=$LFS_TGT \ --build=$(build-aux/config.guess) \ --disable-static \ --docdir=/usr/share/doc/xz-5.2.5 2. Скомпилируйте пакет: make 3. Установите пакет: make DESTDIR=$LFS install |
28. Установка Binutils-2.38 — Прохождение 2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
!!! Пакет Binutils содержит компоновщик, ассемблер и другие инструменты для работы с объектными файлами. 0. Выполняем стандартные действия cd /mnt/lfs/sources/ tar -pxf binutils-2.38.tar.xz cd binutils-2.38 1. Binutils поставляет устаревшую копию libtool в архиве. В нем отсутствует поддержка sysroot, поэтому созданные двоичные файлы будут ошибочно связаны с библиотеками из основного дистрибутива. Решение этой проблемы: sed '6009s/$add_dir//' -i ltmain.sh 2. Снова создайте отдельный каталог сборки: mkdir -v build cd build 3. Подготовьте Binutils к компиляции: ../configure \ --prefix=/usr \ --build=$(../config.guess) \ --host=$LFS_TGT \ --disable-nls \ --enable-shared \ --disable-werror \ --enable-64-bit-bfd Значение новых опций конфигурации: --enable-shared Создается libbfdкак общая библиотека. --enable-64-bit-bfd Включает 64-битную поддержку (на хостах с более узкими размерами слов). Может и не понадобится на 64-битных системах, но не навредит. 4. Скомпилируйте пакет: make 5. Установите пакет: make DESTDIR=$LFS install |
29. Установка GCC-11.2.0 — Pass 2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
!!! Пакет GCC содержит коллекцию компиляторов GNU, в которую входят компиляторы C и C++. 0. Выполняем стандартные действия cd /mnt/lfs/sources/ tar -pxf gcc-11.2.0.tar.xz cd gcc-11.2.0 1. Как и в первой сборке GCC, требуются пакеты GMP, MPFR и MPC. Распакуйте архивы и переместите их в каталоги с нужными именами: tar -xf ../mpfr-4.1.0.tar.xz mv -v mpfr-4.1.0 mpfr tar -xf ../gmp-6.2.1.tar.xz mv -v gmp-6.2.1 gmp tar -xf ../mpc-1.2.1.tar.gz mv -v mpc-1.2.1 mpc 2. При сборке на x86_64 измените имя каталога по умолчанию для 64-битных библиотек на « lib » : case $(uname -m) in x86_64) sed -e '/m64=/s/lib64/lib/' -i.orig gcc/config/i386/t-linux64 ;; esac 3. Снова создайте отдельный каталог сборки: mkdir -v build cd build 4. Создайте символическую ссылку, позволяющую собирать libgcc с поддержкой потоков posix: mkdir -pv $LFS_TGT/libgcc ln -s ../../../libgcc/gthr-posix.h $LFS_TGT/libgcc/gthr-default.h 5. Теперь подготовьте GCC к компиляции: ../configure \ --build=$(../config.guess) \ --host=$LFS_TGT \ --prefix=/usr \ CC_FOR_TARGET=$LFS_TGT-gcc \ --with-build-sysroot=$LFS \ --enable-initfini-array \ --disable-nls \ --disable-multilib \ --disable-decimal-float \ --disable-libatomic \ --disable-libgomp \ --disable-libquadmath \ --disable-libssp \ --disable-libvtv \ --disable-libstdcxx \ --enable-languages=c,c++ Значение новых опций конфигурации: -with-build-sysroot=$LFS Обычно использование --hostгарантирует, что для сборки GCC используется кросс-компилятор, и этот компилятор знает, что он должен искать заголовки и библиотеки в файлах $LFS. Но система сборки GCC использует другие инструменты, которые не знают об этом местоположении. Этот переключатель нужен для того, чтобы они находили нужные файлы в $LFS, а не на хосте. --enable-initfini-array Этот параметр автоматически включается при сборке собственного компилятора с помощью собственного компилятора на платформе x86. Но здесь мы собираем с помощью кросс-компилятора, поэтому нам нужно явно установить эту опцию. 6. Скомпилируйте пакет: make 7. Установите пакет: make DESTDIR=$LFS install 8. В качестве последнего штриха создайте символическую ссылку на утилиту. Многие программы и сценарии запускают cc вместо gcc , который используется для того, чтобы программы оставались универсальными и, следовательно, могли использоваться во всех типах систем UNIX, где компилятор GNU C не всегда установлен. Запуск cc оставляет системному администратору свободу решать, какой компилятор C установить: ln -sv gcc $LFS/usr/bin/cc |
30. Смена владельца на каталоги
1 2 3 4 5 6 |
!!! https://www.linuxfromscratch.org/lfs/view/stable/chapter07/changingowner.html chown -R root:root $LFS/{usr,lib,var,etc,bin,sbin,tools} case $(uname -m) in x86_64) chown -R root:root $LFS/lib64 ;; esac |
31. Подготовка к chroot
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
!!!На некоторые действия потребуется права root !!! https://www.linuxfromscratch.org/lfs/view/stable/chapter07/kernfs.html 0. Экспортируем переменную: export LFS=/mnt/lfs 1. Создаем каталоги в которые будут смонтированы файловые системы: mkdir -pv $LFS/{dev,proc,sys,run} 2. Создание начальных узлов устройств !!! Когда ядро загружает систему, ему требуется наличие нескольких узлов устройств, в частности устройств consoleи null. !!! Узлы устройств должны быть созданы на жестком диске, чтобы они были доступны до того, как заполнится ядро /dev), и, кроме того, когда Linux запускается с init=/bin/bash. mknod -m 600 $LFS/dev/console c 5 1 mknod -m 666 $LFS/dev/null c 1 3 3. Установка и заполнение /dev !!! Рекомендуемый метод заполнения /dev каталога устройствами — смонтировать виртуальную файловую систему (такую как tmpfs) !!! в /dev каталоге и разрешить динамическое создание устройств в этой виртуальной файловой системе по мере их обнаружения или доступа к ним. !!! Создание устройства обычно выполняется Udev в процессе загрузки. !!! Поскольку эта новая система еще не имеет Udev и еще не загружена, ее необходимо смонтировать и заполнить /dev вручную. !!! Это достигается путем привязки монтирования хост-системы./devкаталог. !!! Связное монтирование — это особый тип монтирования, который позволяет создать зеркало каталога или точки монтирования в другом месте. mount -v --bind /dev $LFS/dev 4. Монтирование файловых систем виртуального ядра mount -v --bind /dev/pts $LFS/dev/pts mount -vt proc proc $LFS/proc mount -vt sysfs sysfs $LFS/sys mount -vt tmpfs tmpfs $LFS/run !!! В некоторых хост-системах /dev/shm это символическая ссылка на /run/shm. !!! /run tmpfs был смонтирован выше, поэтому в этом случае нужно создать только каталог. if [ -h $LFS/dev/shm ]; then mkdir -pv $LFS/$(readlink $LFS/dev/shm) fi |
32. chroot
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
!!! Теперь, когда все пакеты, необходимые для сборки остальных необходимых инструментов, находятся в системе, пришло время войти в среду chroot, !!! чтобы завершить установку оставшихся временных инструментов. !!! Эта среда будет использоваться также для установки конечной системы. !!! От имени пользователя root выполните следующую команду, чтобы войти в среду: su - root export LFS=/mnt/lfs chown -R root:root $LFS/tools chroot "$LFS" /usr/bin/env -i \ HOME=/root \ TERM="$TERM" \ PS1='(lfs chroot) \u:\w\$ ' \ PATH=/usr/bin:/usr/sbin \ /bin/bash --login !!! Опции: !!! -i, заданная команде env , очистит все переменные среды chroot. После этого снова задаются только переменные HOME, TERM, PS1 и .PATH !!! Конструкция TERM=$TERM установит для TERM переменной внутри chroot то же значение, что и вне chroot. !!! Эта переменная необходима для правильной работы таких программ, как vim и меньше. !!! Если желательны другие переменные, такие как CFLAGS или CXXFLAGS, это хорошее место, чтобы установить их снова. !!! С этого момента больше нет необходимости использовать эту LFS переменную, поскольку вся работа будет ограничена файловой системой LFS. !!! Это связано с тем, что оболочке Bash сообщается, что $LFS теперь это корневой ( /) каталог. !!! Обратите внимание, что /tools/binэто не в PATH. Это означает, что кросс-тулчейн больше не будет использоваться в среде chroot. !!! Обратите внимание, что в командной строке bash "I have no name!" будет указано, Это нормально, поскольку /etc/passwd файл еще не создан. |
34. Создание каталогов для LFS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
!!! после удачного приглашения в систему !!! Пришло время создать полную структуру в файловой системе LFS. !!! Создайте несколько каталогов корневого уровня, которых нет в ограниченном наборе, требуемом в предыдущих главах, с помощью следующей команды: mkdir -pv /{boot,home,mnt,opt,srv} !!! Создайте необходимый набор подкаталогов ниже корневого уровня, выполнив следующие команды: mkdir -pv /etc/{opt,sysconfig} mkdir -pv /lib/firmware mkdir -pv /media/{floppy,cdrom} mkdir -pv /usr/{,local/}{include,src} mkdir -pv /usr/local/{bin,lib,sbin} mkdir -pv /usr/{,local/}share/{color,dict,doc,info,locale,man} mkdir -pv /usr/{,local/}share/{misc,terminfo,zoneinfo} mkdir -pv /usr/{,local/}share/man/man{1..8} mkdir -pv /var/{cache,local,log,mail,opt,spool} mkdir -pv /var/lib/{color,misc,locate} ln -sfv /run /var/run ln -sfv /run/lock /var/lock install -dv -m 0750 /root install -dv -m 1777 /tmp /var/tmp !!! Каталоги по умолчанию создаются с режимом разрешений 755, но это нежелательно для всех каталогов. !!! В приведенных выше командах вносятся два изменения: одно в домашний каталог пользователя root, а другое в каталоги для временных файлов. !!! Первое изменение режима гарантирует, что никто не сможет войти в /root каталог — так же, как обычный пользователь сделал бы со своим домашним каталогом. !!! Второе изменение режима гарантирует, что любой пользователь может записывать в каталоги /tmpи /var/tmp, но не может удалять из них файлы другого пользователя. !!! Последнее запрещено так называемым « липким битом » , старшим битом (1) в битовой маске 1777. !!! Подробнее про структуру каталогов https://refspecs.linuxfoundation.org/fhs.shtml |
35. Создание основных файлов и символических ссылок:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
0. Исторически сложилось так, что Linux поддерживает список смонтированных файловых систем в файле /etc/mtab. Современные ядра поддерживают этот список внутри себя и предоставляют его пользователю через /proc файловую систему. Чтобы удовлетворить утилиты, которые ожидают наличия /etc/mtab, создайте следующую символическую ссылку: ln -sv /proc/self/mounts /etc/mtab 1. Создайте базовый /etc/host sфайл, на который будут ссылаться некоторые наборы тестов, а также один из файлов конфигурации Perl: cat > /etc/hosts << EOF 127.0.0.1 localhost $(hostname) ::1 localhost EOF 2. Чтобы пользователь rootмог войти в систему и чтобы имя « root » было распознано, в файлах /etc/passwdи должны быть соответствующие записи./etc/group !!! Фактический пароль для root будет установлен позже. 2.1 Создайте /etc/passwdфайл, выполнив следующую команду: cat > /etc/passwd << "EOF" root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/dev/null:/usr/bin/false daemon:x:6:6:Daemon User:/dev/null:/usr/bin/false messagebus:x:18:18:D-Bus Message Daemon User:/run/dbus:/usr/bin/false systemd-journal-gateway:x:73:73:systemd Journal Gateway:/:/usr/bin/false systemd-journal-remote:x:74:74:systemd Journal Remote:/:/usr/bin/false systemd-journal-upload:x:75:75:systemd Journal Upload:/:/usr/bin/false systemd-network:x:76:76:systemd Network Management:/:/usr/bin/false systemd-resolve:x:77:77:systemd Resolver:/:/usr/bin/false systemd-timesync:x:78:78:systemd Time Synchronization:/:/usr/bin/false systemd-coredump:x:79:79:systemd Core Dumper:/:/usr/bin/false uuidd:x:80:80:UUID Generation Daemon User:/dev/null:/usr/bin/false systemd-oom:x:81:81:systemd Out Of Memory Daemon:/:/usr/bin/false nobody:x:99:99:Unprivileged User:/dev/null:/usr/bin/false EOF 2.2 Создайте /etc/groupфайл, выполнив следующую команду: cat > /etc/group << "EOF" root:x:0: bin:x:1:daemon sys:x:2: kmem:x:3: tape:x:4: tty:x:5: daemon:x:6: floppy:x:7: disk:x:8: lp:x:9: dialout:x:10: audio:x:11: video:x:12: utmp:x:13: usb:x:14: cdrom:x:15: adm:x:16: messagebus:x:18: systemd-journal:x:23: input:x:24: mail:x:34: kvm:x:61: systemd-journal-gateway:x:73: systemd-journal-remote:x:74: systemd-journal-upload:x:75: systemd-network:x:76: systemd-resolve:x:77: systemd-timesync:x:78: systemd-coredump:x:79: uuidd:x:80: systemd-oom:x:81: wheel:x:97: nogroup:x:99: users:x:999: EOF 3. Для некоторых тестов нам потребуется обычный пользователь, добавляем этого пользователяы. echo "tester:x:101:101::/home/tester:/bin/bash" >> /etc/passwd echo "tester:x:101:" >> /etc/group install -o tester -d /home/tester 4. Чтобы удалить « У меня нет имени! » , запустите новую оболочку. Поскольку файлы /etc/passwdи /etc/groupбыли созданы, разрешение имен пользователей и групп теперь будет работать: exec /usr/bin/bash --login 5. Программы login , agetty и init (и другие) используют ряд файлов журналов для записи информации, такой как кто и когда входил в систему. Однако эти программы не будут записывать файлы журналов, если они еще не существуют. Инициализируйте файлы журнала и предоставьте им соответствующие разрешения: touch /var/log/{btmp,lastlog,faillog,wtmp} chgrp -v utmp /var/log/lastlog chmod -v 664 /var/log/lastlog chmod -v 600 /var/log/btmp !!! Файл /var/log/wtmp записывает все входы и выходы. !!! Файл /var/log/lastlog записывает, когда каждый пользователь в последний раз входил в систему. !!! Файл /var/log/faillog записывает неудачные попытки входа в систему. !!! Файл /var/log/btmp записывает неудачные попытки входа в систему. !!! В файле /run/utmp записываются пользователи, которые в данный момент вошли в систему. !!! Этот файл создается динамически в сценариях загрузки. |
36. LibstdС++ из GCC-11.2.0, проход 2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
!!! Libstdc++ является частью исходников GCC. Сначала вы должны распаковать архив GCC и перейти в gcc-11.2.0 каталог. 0. Создайте ссылку, которая существует при сборке libstdc++ в дереве gcc: ln -s gthr-posix.h libgcc/gthr-default.h 1. Создайте отдельный каталог сборки для libstdc++ и введите его: mkdir -v build cd build 2. Подготовьте libstdc++ к компиляции: ../libstdc++-v3/configure \ CXXFLAGS="-g -O2 -D_GNU_SOURCE" \ --prefix=/usr \ --disable-multilib \ --disable-nls \ --host=$(uname -m)-lfs-linux-gnu \ --disable-libstdcxx-pch Значение параметров настройки: CXXFLAGS="-g -O2 -D_GNU_SOURCE" Эти флаги передаются Makefile верхнего уровня при полной сборке GCC. --host=$(uname -m)-lfs-linux-gnu Мы должны имитировать то, что произошло бы, если бы этот пакет был собран как часть полной сборки компилятора. Этот переключатель будет передан для настройки механизмом сборки GCC. --disable-libstdcxx-pch Этот переключатель предотвращает установку предварительно скомпилированных включаемых файлов, которые на данном этапе не нужны. 3. Скомпилируйте libstdc++, запустив: make 4. Установите библиотеку: make install |
37. Установка Gettext-0.21
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
!!! Пакет Gettext содержит утилиты для интернационализации и локализации. !!! Это позволяет компилировать программы с помощью NLS (поддержка родного языка), что позволяет им выводить сообщения на родном языке пользователя. 0. Подготовьте Gettext для компиляции: ./configure --disable-shared Значение опции конфигурации: --disable-shared В настоящее время нам не нужно устанавливать какую-либо из общих библиотек Gettext, поэтому нет необходимости их создавать. 1. Скомпилируйте пакет: make 2. Установим программы msgfmt, msgmerge и xgettext: cp -v gettext-tools/src/{msgfmt,msgmerge,xgettext} /usr/bin |
38. Установка Bison-3.8.2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
!!! Пакет Bison содержит генератор парсеров. 0. Подготовьте Bison для компиляции: ./configure --prefix=/usr \ --docdir=/usr/share/doc/bison-3.8.2 Значение новой опции конфигурации: --docdir=/usr/share/doc/bison-3.8.2 Это говорит системе сборки установить документацию bison в версионный каталог. 1. Скомпилируйте пакет: make 2. Установите пакет: make install |
39. Установка Perl-5.34.0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
!!! https://www.linuxfromscratch.org/lfs/downloads/stable-systemd/LFS-BOOK-11.1-NOCHUNKS.html#ch-tools-binutils-pass1 0. Подготовьте Perl к компиляции: sh Configure -des \ -Dprefix=/usr \ -Dvendorprefix=/usr \ -Dprivlib=/usr/lib/perl5/5.34/core_perl \ -Darchlib=/usr/lib/perl5/5.34/core_perl \ -Dsitelib=/usr/lib/perl5/5.34/site_perl \ -Dsitearch=/usr/lib/perl5/5.34/site_perl \ -Dvendorlib=/usr/lib/perl5/5.34/vendor_perl \ -Dvendorarch=/usr/lib/perl5/5.34/vendor_perl Значение новых опций Configure: -des Это комбинация трех параметров: -d использует значения по умолчанию для всех элементов; -e обеспечивает выполнение всех задач; -s отключает несущественный вывод. 1. Скомпилируйте пакет: make 2. Установите пакет: make install |
40. Установка Python-3.10.2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
!!! Пакет Python 3 содержит среду разработки Python. !!! Он полезен для объектно-ориентированного программирования, написания сценариев, прототипирования больших программ или разработки целых приложений. !!! Есть два файла пакета, имя которых начинается с « python » . Тот, из которого нужно извлечь Python-3.10.2.tar.xz (обратите внимание на первую букву в верхнем регистре). 0. Подготовьте Python к компиляции: ./configure --prefix=/usr \ --enable-shared \ --without-ensurepip Значение опции конфигурации: --enable-shared Этот переключатель предотвращает установку статических библиотек. --without-ensurepip Этот переключатель отключает установщик пакета Python, который на данном этапе не нужен. 1. Скомпилируйте пакет: make !!! Некоторые модули Python 3 сейчас не могут быть собраны, потому что зависимости еще не установлены. !!! Однако система сборки по-прежнему пытается их собрать, поэтому компиляция некоторых файлов завершится ошибкой, и может показаться, что сообщение компилятора указывает на «фатальную ошибку». !!! Сообщение следует игнорировать. !!! Просто убедитесь, что команда make верхнего уровня не завершилась ошибкой. 2. Установите пакет: make install |
41. Установка Texinfo-6.8
1 2 3 4 5 6 7 8 9 10 11 12 |
0. Во-первых, устраните проблему со сборкой пакета с помощью Glibc-2.34 или более поздней версии: sed -e 's/__attribute_nonnull__/__nonnull/' \ -i gnulib/lib/malloc/dynarray-skeleton.c 1. Подготовьте Texinfo к компиляции: ./configure --prefix=/usr 2. Скомпилируйте пакет: make 3. Установите пакет: make install |
42. Установка Util-linux-2.37.4:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
!!! Пакет Util-linux содержит различные утилиты. 0. FHS рекомендует использовать /var/lib/hwclock каталог вместо обычного /etc каталога в качестве места для adjti meфайла. Создайте этот каталог с помощью: mkdir -pv /var/lib/hwclock Подготовьте Util-linux к компиляции: ./configure ADJTIME_PATH=/var/lib/hwclock/adjtime \ --libdir=/usr/lib \ --docdir=/usr/share/doc/util-linux-2.37.4 \ --disable-chfn-chsh \ --disable-login \ --disable-nologin \ --disable-su \ --disable-setpriv \ --disable-runuser \ --disable-pylibmount \ --disable-static \ --without-python \ runstatedir=/run Значение параметров настройки: ADJTIME_PATH=/var/lib/hwclock/adjtime Это устанавливает расположение файла записи информации об аппаратных часах в соответствии с FHS. Это не обязательно для этого временного инструмента, но предотвращает создание файла в другом месте, который не будет перезаписан или удален при сборке окончательного пакета util-linux. --libdir=/usr/lib Этот переключатель гарантирует, что .soсимволические ссылки будут напрямую указывать на файл общей библиотеки в том же каталоге ( /usr/lib). --disable-* Эти переключатели предотвращают появление предупреждений о сборке компонентов, для которых требуются пакеты, отсутствующие в LFS или еще не установленные. --without-python Этот переключатель отключает использование Python . Это позволяет избежать попыток создания ненужных привязок. runstatedir=/run Этот переключатель правильно устанавливает местоположение сокета, используемого uuiddlibuuid. 1. Скомпилируйте пакет: make 2. Установите пакет: make install |
42. Очистка и сохранение временной системы:
1 2 3 4 5 6 7 8 9 10 11 12 |
0. Во-первых, удалите текущую установленную документацию, чтобы предотвратить их попадание в окончательную систему и сэкономить около 35 МБ: rm -rf /usr/share/{info,man,doc}/* 1. Во-вторых, файлы libtool .la полезны только при компоновке статических библиотек. Они не нужны и потенциально опасны при использовании динамических разделяемых библиотек, особенно при использовании систем сборки, отличных от autotools. Пока еще в chroot, удалите эти файлы сейчас: find /usr/{lib,libexec} -name \*.la -delete 2. Текущий размер системы составляет около 3 ГБ, однако каталог /tools больше не нужен. Он использует около 1 ГБ дискового пространства. Удалите его сейчас: rm -rf /tools |
43. Резервное копирование
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
!!! На данный момент основные программы и библиотеки созданы, и ваша текущая система LFS находится в хорошем состоянии. !!! В случае фатальных сбоев в последующих главах часто оказывается, что удалить все и начать заново (более осторожно) — лучший вариант восстановления. 0. Мы решили сделать резервную копию, покинем среду chroot: exit 1. Перед созданием резервной копии размонтируйте виртуальные файловые системы: umount $LFS/dev/pts umount $LFS/{sys,proc,run,dev} 2. Убедитесь, что у вас есть как минимум 1 ГБ свободного места на диске (исходные tar-архивы будут включены в архив резервной копии) в файловой системе, содержащей каталог, в котором вы создаете архив резервной копии. df -h 3. Выполняем резервирование: export LFS=/mnt/lfs cd $LFS tar -cJpf $HOME/lfs-temp-tools-11.1-systemd.tar.xz . 4. В каталоге /root должен появится архив |
43. Пример восстановления из резервной копии:
1 2 3 4 5 6 7 |
!!! Предупреждение !!! Следующие команды чрезвычайно опасны. !!! Если вы запустите rm -rf ./* от имени пользователя root и не перейдете в каталог $LFS или LFS не установите переменную среды для пользователя root, это разрушит всю вашу хост-систему. !!! ВЫ ПРЕДУПРЕЖДЕНЫ. cd $LFS rm -rf ./* tar -xpf $HOME/lfs-temp-tools-11.1-systemd.tar.xz |
44. Для продолжения работы с LFS нам снова требуется выполнить chroot:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
!!! это шаги 31 и 32 0. Установка и заполнение /dev !!! Рекомендуемый метод заполнения /dev каталога устройствами — смонтировать виртуальную файловую систему (такую как tmpfs) !!! в /dev каталоге и разрешить динамическое создание устройств в этой виртуальной файловой системе по мере их обнаружения или доступа к ним. !!! Создание устройства обычно выполняется Udev в процессе загрузки. !!! Поскольку эта новая система еще не имеет Udev и еще не загружена, ее необходимо смонтировать и заполнить /dev вручную. !!! Это достигается путем привязки монтирования хост-системы./devкаталог. !!! Связное монтирование — это особый тип монтирования, который позволяет создать зеркало каталога или точки монтирования в другом месте. mount -v --bind /dev $LFS/dev 1. Монтирование файловых систем виртуального ядра mount -v --bind /dev/pts $LFS/dev/pts mount -vt proc proc $LFS/proc mount -vt sysfs sysfs $LFS/sys mount -vt tmpfs tmpfs $LFS/run !!! В некоторых хост-системах /dev/shm это символическая ссылка на /run/shm. !!! /run tmpfs был смонтирован выше, поэтому в этом случае нужно создать только каталог. if [ -h $LFS/dev/shm ]; then mkdir -pv $LFS/$(readlink $LFS/dev/shm) fi 2. Выполняем chroot chroot "$LFS" /usr/bin/env -i \ HOME=/root \ TERM="$TERM" \ PS1='(lfs chroot) \u:\w\$ ' \ PATH=/usr/bin:/usr/sbin \ /bin/bash --login |
45. Установим Man-pages-5.13:
1 2 |
!!! Пакет Man-pages содержит более 2200 справочных страниц. make prefix=/usr install |
46. Установка Iana-etc-20220207:
1 2 3 4 5 6 7 8 |
!!! Пакет Iana-Etc предоставляет данные для сетевых служб и протоколов. cp services protocols /etc Краткие описания: /etc/protocols Описывает различные интернет-протоколы DARPA, доступные из подсистемы TCP/IP. /etc/services Обеспечивает сопоставление между понятными текстовыми именами для интернет-сервисов и их базовыми назначенными номерами портов и типами протоколов. |
47. Установка Glibc-2.35
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
!!! Некоторые программы Glibc используют /var/dbкаталог, не совместимый с FHS, для хранения своих данных времени выполнения. 0. Примените следующий патч, чтобы такие программы хранили свои данные времени выполнения в местах, совместимых с FHS: patch -Np1 -i ../glibc-2.35-fhs-1.patch 1. Документация Glibc рекомендует собирать Glibc в выделенном каталоге сборки: mkdir -v build cd build 2. Убедитесь, что утилиты ldconfig и sln будут установлены в /usr/sbin: echo "rootsbindir=/usr/sbin" > configparms 3. Подготовьте Glibc к компиляции: ../configure --prefix=/usr \ --disable-werror \ --enable-kernel=3.2 \ --enable-stack-protector=strong \ --with-headers=/usr/include \ libc_cv_slibdir=/usr/lib Значение параметров настройки: --disable-werror Этот параметр отключает параметр -Werror, передаваемый в GCC. Это необходимо для запуска набора тестов. --enable-kernel=3.2 Эта опция сообщает системе сборки, что этот glibc может использоваться с ядрами версии 3.2. Это означает создание обходных путей на случай, если системный вызов, представленный в более поздней версии, нельзя будет использовать. --enable-stack-protector=strong Этот параметр повышает безопасность системы за счет добавления дополнительного кода для проверки переполнения буфера, например атак, разрушающих стек. --with-headers=/usr/include Эта опция сообщает системе сборки, где найти заголовки API ядра. libc_cv_slibdir=/usr/lib Эта переменная устанавливает правильную библиотеку для всех систем. Мы не хотим, чтобы использовалась lib64. 4. Скомпилируйте пакет: !!! Важный !!! В этом разделе набор тестов для Glibc считается критически важным. Ни в коем случае не пропускайте его. make 5. Вообще несколько тестов не проходят. Ошибки тестирования, перечисленные ниже, обычно можно безопасно игнорировать. make check Вы можете увидеть некоторые неудачные тесты. Набор тестов Glibc в некоторой степени зависит от хост-системы. Несколько отказов из более чем 4200 тестов вообще можно игнорировать. Это список наиболее распространенных проблем последних версий LFS: Известно, что io/tst-lchmod не работает в среде chroot LFS. Известно, что misc/tst-ttyname не работает в среде chroot LFS. Известно , что тест nss/tst-nss-files-hosts-multi завершается неудачно, если в системе нет IP-адресов без замыкания на себя. 6. Хотя это безобидное сообщение, на этапе установки Glibc будет жаловаться на отсутствие /etc/ld.so.conf. Предотвратите это предупреждение с помощью: touch /etc/ld.so.conf 7. Исправьте Makefile, чтобы пропустить ненужную проверку работоспособности, которая не работает в частичной среде LFS: sed '/test-installation/s@$(PERL)@echo not running@' -i ../Makefile 8. Установите пакет: make install 9. Исправьте жестко заданный путь к исполняемому загрузчику в скрипте ldd: sed '/RTLDLIST=/s@/usr@@g' -i /usr/bin/ldd 10. Установите файл конфигурации и каталог времени выполнения для nscd: cp -v ../nscd/nscd.conf /etc/nscd.conf mkdir -pv /var/cache/nscd 11. Установите файлы поддержки systemd для nscd: install -v -Dm644 ../nscd/nscd.tmpfiles /usr/lib/tmpfiles.d/nscd.conf install -v -Dm644 ../nscd/nscd.service /usr/lib/systemd/system/nscd.service 12. Затем установите локали, которые могут заставить систему отвечать на другом языке. mkdir -pv /usr/lib/locale localedef -i POSIX -f UTF-8 C.UTF-8 2> /dev/null || true localedef -i cs_CZ -f UTF-8 cs_CZ.UTF-8 localedef -i de_DE -f ISO-8859-1 de_DE localedef -i de_DE@euro -f ISO-8859-15 de_DE@euro localedef -i de_DE -f UTF-8 de_DE.UTF-8 localedef -i el_GR -f ISO-8859-7 el_GR localedef -i en_GB -f ISO-8859-1 en_GB localedef -i en_GB -f UTF-8 en_GB.UTF-8 localedef -i en_HK -f ISO-8859-1 en_HK localedef -i en_PH -f ISO-8859-1 en_PH localedef -i en_US -f ISO-8859-1 en_US localedef -i en_US -f UTF-8 en_US.UTF-8 localedef -i es_ES -f ISO-8859-15 es_ES@euro localedef -i es_MX -f ISO-8859-1 es_MX localedef -i fa_IR -f UTF-8 fa_IR localedef -i fr_FR -f ISO-8859-1 fr_FR localedef -i fr_FR@euro -f ISO-8859-15 fr_FR@euro localedef -i fr_FR -f UTF-8 fr_FR.UTF-8 localedef -i is_IS -f ISO-8859-1 is_IS localedef -i is_IS -f UTF-8 is_IS.UTF-8 localedef -i it_IT -f ISO-8859-1 it_IT localedef -i it_IT -f ISO-8859-15 it_IT@euro localedef -i it_IT -f UTF-8 it_IT.UTF-8 localedef -i ja_JP -f EUC-JP ja_JP localedef -i ja_JP -f SHIFT_JIS ja_JP.SJIS 2> /dev/null || true localedef -i ja_JP -f UTF-8 ja_JP.UTF-8 localedef -i nl_NL@euro -f ISO-8859-15 nl_NL@euro localedef -i ru_RU -f KOI8-R ru_RU.KOI8-R localedef -i ru_RU -f UTF-8 ru_RU.UTF-8 localedef -i se_NO -f UTF-8 se_NO.UTF-8 localedef -i ta_IN -f UTF-8 ta_IN.UTF-8 localedef -i tr_TR -f UTF-8 tr_TR.UTF-8 localedef -i zh_CN -f GB18030 zh_CN.GB18030 localedef -i zh_HK -f BIG5-HKSCS zh_HK.BIG5-HKSCS localedef -i zh_TW -f UTF-8 zh_TW.UTF-8 13. В качестве альтернативы можно установить glibc-2.35/localedata/SUPPORTEDсразу все локали, перечисленные в файле (включая все перечисленные выше локали и многие другие), с помощью следующей трудоемкой команды: make localedata/install-locales 14. Затем используйте команду localedef для создания и установки локалей, не перечисленных в glibc-2.35/localedata/SUPPORTEDфайле, когда они вам понадобятся. Например, для некоторых тестов далее в этой главе потребуются следующие две локали: localedef -i POSIX -f UTF-8 C.UTF-8 2> /dev/null || true localedef -i ja_JP -f SHIFT_JIS ja_JP.SJIS 2> /dev/null || true |
48. Configuring Glibc adding nsswitch.conf:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
cat > /etc/nsswitch.conf << "EOF" # Begin /etc/nsswitch.conf passwd: files group: files shadow: files hosts: files dns networks: files protocols: files services: files ethers: files rpc: files # End /etc/nsswitch.conf EOF |
49. Configuring Glibc adding time zone data:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
0. Установите и настройте данные часового пояса со следующим: tar -xf ../../tzdata2021e.tar.gz ZONEINFO=/usr/share/zoneinfo mkdir -pv $ZONEINFO/{posix,right} for tz in etcetera southamerica northamerica europe africa antarctica \ asia australasia backward; do zic -L /dev/null -d $ZONEINFO ${tz} zic -L /dev/null -d $ZONEINFO/posix ${tz} zic -L leapseconds -d $ZONEINFO/right ${tz} done cp -v zone.tab zone1970.tab iso3166.tab $ZONEINFO zic -d $ZONEINFO -p America/New_York unset ZONEINFO Значение команд zic: zic -L /dev/null ... Это создает часовые пояса posix без дополнительных секунд. Обычно их помещают в оба zoneinfoи zoneinfo/posix. Необходимо поставить часовые пояса POSIX в zoneinfo, иначе различные тестовые наборы будут сообщать об ошибках. Во встроенной системе, где места мало и вы не собираетесь когда-либо обновлять часовые пояса, вы можете сэкономить 1,9 МБ, не используя posix каталог, но некоторые приложения или наборы тестов могут привести к некоторым сбоям. zic -L leapseconds ... Это создает правильные часовые пояса, включая дополнительные секунды. Во встроенной системе, где места мало и вы не собираетесь когда-либо обновлять часовые пояса или заботиться о правильном времени, вы можете сэкономить 1,9 МБ, исключив right каталог. zic ... -p ... Это создает posixrulesфайл. Мы используем Нью-Йорк, потому что POSIX требует, чтобы правила перехода на летнее время соответствовали правилам США. 1. Один из способов определить местный часовой пояс — запустить следующий скрипт: tzselect 2. Затем создайте /etc/localtimeфайл, запустив: ln -sfv /usr/share/zoneinfo/<xxx> /etc/localtime |
50. Настройка динамического загрузчика
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
!!! По умолчанию динамический загрузчик ( ) выполняет /lib/ld-linux.so.2 поиск динамических библиотек, которые необходимы программам по мере их запуска. !!! Однако, если есть библиотеки в каталогах, отличных от и , их необходимо добавить в файл, чтобы динамический загрузчик мог их найти. !!! Два каталога, которые, как известно, содержат дополнительные библиотеки, это и , поэтому добавьте эти каталоги в путь поиска динамического загрузчика. !!! /lib/usr/lib/lib/usr/lib/etc/ld.so.conf/usr/local/lib/opt/lib 0. Создайте новый файл /etc/ld.so.conf, выполнив следующее: cat > /etc/ld.so.conf << "EOF" # Begin /etc/ld.so.conf /usr/local/lib /opt/lib EOF 1. При желании динамический загрузчик также может искать каталог и включать содержимое найденных там файлов. Обычно файлы в этом каталоге include представляют собой одну строку, указывающую путь к нужной библиотеке. Чтобы добавить эту возможность, выполните следующие команды: cat >> /etc/ld.so.conf << "EOF" # Add an include directory include /etc/ld.so.conf.d/*.conf EOF mkdir -pv /etc/ld.so.conf.d |
Промежуточный этап про сеть
1 2 |
wget http://roy.marples.name/downloads/dhcpcd/dhcpcd-9.4.1.tar.xz --directory-prefix=$LFS/sources wget https://www.linuxfromscratch.org/blfs/downloads/11.1/blfs-bootscripts-20210826.tar.xz --directory-prefix=$LFS/sources/ |
51. Содержимое Glibc
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
Installed programs: gencat, getconf, getent, iconv, iconvconfig, ldconfig, ldd, lddlibc4, ld.so (symlink to ld-linux-x86-64.so.2 or ld-linux.so.2), locale, localedef, makedb, mtrace, nscd, pcprofiledump, pldd, sln, sotruss, sprof, tzselect, xtrace, zdump, and zic Installed libraries: ld-linux-x86-64.so.2, ld-linux.so.2, libBrokenLocale.{a,so}, libanl.{a,so}, libc.{a,so}, libc_nonshared.a, libc_malloc_debug.so, libcrypt.{a,so}, libdl.{a,so.2}, libg.a, libm.{a,so}, libmcheck.a, libmemusage.so, libmvec.{a,so}, libnsl.so.1, libnss_compat.so, libnss_dns.so, libnss_files.so, libnss_hesiod.so, libpcprofile.so, libpthread.{a,so.0}, libresolv.{a,so}, librt.{a,so.1}, libthread_db.so, and libutil.{a,so.1} Installed directories: /usr/include/arpa, /usr/include/bits, /usr/include/gnu, /usr/include/net, /usr/include/netash, /usr/include/netatalk, /usr/include/netax25, /usr/include/neteconet, /usr/include/netinet, /usr/include/netipx, /usr/include/netiucv, /usr/include/netpacket, /usr/include/netrom, /usr/include/netrose, /usr/include/nfs, /usr/include/protocols, /usr/include/rpc, /usr/include/sys, /usr/lib/audit, /usr/lib/gconv, /usr/lib/locale, /usr/libexec/getconf, /usr/share/i18n, /usr/share/zoneinfo, /var/cache/nscd, and /var/lib/nss_db gencat Генерирует каталоги сообщений. getconf Отображает значения конфигурации системы для конкретных переменных файловой системы. getent Получает записи из административной базы данных. iconv Выполняет преобразование набора символов. iconvconfig Создает быстро загружаемые файлы конфигурации модуля iconv. ldconfig Настраивает привязки среды выполнения динамического компоновщика. ldd Отчеты о том, какие общие библиотеки требуются каждой данной программе или общей библиотеке. lddlibc4 Помогает ldd с объектными файлами. Его нет в более новых архитектурах, таких как x86_64. locale Выводит различную информацию о текущей локали. localedef Компилирует спецификации локали. makedb Создает простую базу данных из текстового ввода. mtrace Читает и интерпретирует файл трассировки памяти и отображает сводку в удобочитаемом формате. nscd Демон, обеспечивающий кеширование наиболее распространенных запросов службы имен. pcprofiledump Дамп информации, сгенерированный профилированием ПК. pldd Перечисляет динамические общие объекты, используемые запущенными процессами. sln Статически скомпонованная программа ln. sotruss Отслеживает вызовы процедур общей библиотеки указанной команды. sprof Читает и отображает данные профилирования общих объектов. tzselect Спрашивает пользователя о местоположении системы и сообщает соответствующее описание часового пояса. xtrace Отслеживает выполнение программы, печатая текущую выполняемую функцию. zdump Дампер часовых поясов. zic Компилятор часового пояса. ld-*.so Вспомогательная программа для исполняемых файлов общей библиотеки. libBrokenLocale Используется внутри Glibc как грубый взлом для запуска сломанных программ (например, некоторых приложений Motif). libanl Библиотека асинхронного поиска имен. libc Основная библиотека C. libc_malloc_debug Включает проверку выделения памяти при предварительной загрузке. libcrypt Библиотека криптографии. libdl Пустая библиотека, не содержащая функций. Ранее была библиотека интерфейса динамической компоновки, функции которой теперь находятся в libc. libg Пустая библиотека, не содержащая функций. Раньше была библиотека времени выполнения для g++ libm Математическая библиотека libmvec Библиотека векторных математических вычислений, подключаемая по мере необходимости при libm использовании. libmcheck Включает проверку выделения памяти при подключении к libmemusage Используется memusage для сбора информации об использовании памяти программой. libnsl Библиотека сетевых сервисов устарела. libnss_* Модули Name Service Switch, содержащие функции для разрешения имен хостов, имен пользователей, имен групп, псевдонимов, служб, протоколов и т. д. Загружаются в libc соответствии с конфигурацией в /etc/nsswitch.conf libpcprofile Может быть предварительно загружен в профиль ПК в виде исполняемого файла. libpthread Пустая библиотека, не содержащая функций. Раньше он содержал функции, обеспечивающие большинство интерфейсов, указанных в расширении реального времени POSIX.1b, теперь в libc. libresolv Содержит функции для создания, отправки и интерпретации пакетов на серверы доменных имен в Интернете. librt Содержит функции, предоставляющие большинство интерфейсов, указанных в расширении реального времени POSIX.1b. libthread_db Содержит функции, полезные для создания отладчиков многопоточных программ. libutil Пустая библиотека, не содержащая функций. Ранее содержал код для « стандартных » функций, используемых во многих различных утилитах Unix. Эти функции теперь в libc. |
52. Установка Zlib-1.2.11:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
!!! Установленные библиотеки: libz.so !!! libz - Содержит функции сжатия и распаковки, используемые некоторыми программами. 0. Подготовьте Zlib к компиляции: ./configure --prefix=/usr 1. Скомпилируйте пакет: make 2. Чтобы проверить результаты, введите: make check 3. Установите пакет: make install 4. Удалите бесполезную статическую библиотеку: rm -fv /usr/lib/libz.a |
53. Установка Bzip2-1.0.8:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
0. Примените патч, который установит документацию для этого пакета: patch -Np1 -i ../bzip2-1.0.8-install_docs-1.patch 1. Следующая команда обеспечивает относительную установку символических ссылок: sed -i 's@\(ln -s -f \)$(PREFIX)/bin/@\1@' Makefile 2. Убедитесь, что справочные страницы установлены в правильном месте: sed -i "s@(PREFIX)/man@(PREFIX)/share/man@g" Makefile 3. Подготовьте Bzip2 к компиляции с помощью: make -f Makefile-libbz2_so make clean Значение параметра make: -f Makefile-libbz2_so Это приведет к сборке Bzip2 с использованием другого Makefile файла, в данном случае Makefile-libbz2_soфайла, который создает динамическую libbz2.so библиотеку и связывает с ней утилиты Bzip2. 4. Скомпилируйте и протестируйте пакет: make 5. Скомпилируйте и протестируйте пакет: make PREFIX=/usr install 6. Установите общую библиотеку: cp -av libbz2.so.* /usr/lib ln -sv libbz2.so.1.0.8 /usr/lib/libbz2.so 7. Установите общий двоичный файл bzip2/usr/bin в каталог и замените две копии bzip2 символическими ссылками: cp -v bzip2-shared /usr/bin/bzip2 for i in /usr/bin/{bzcat,bunzip2}; do ln -sfv bzip2 $i done 8. Удалите бесполезную статическую библиотеку: rm -fv /usr/lib/libbz2.a 9. Содержимое bzip bunzip2 Распаковывает bzip-файлы bzcat Распаковывает в стандартный вывод bzcmp Запускает cmp для bzip-файлов bzdiff Запускает diff для bzip-файлов bzegrep Запускает egrep для bzip-файлов bzfgrep Запускает fgrep для bzip-файлов bzgrep Запускает grep для bzip-файлов bzip2 Сжимает файлы, используя алгоритм сжатия текста с блочной сортировкой Берроуза-Уилера с кодированием Хаффмана; степень сжатия лучше, чем у более традиционных компрессоров, использующих алгоритмы Lempel-Ziv, такие как gzip bzip2recover Пытается восстановить данные из поврежденных bzip-файлов. bzless Меньше работает с bzip -файлами bzmore Работает больше на bzip-файлах libbz2 Библиотека, реализующая сжатие данных без потерь с блочной сортировкой с использованием алгоритма Барроуза-Уилера. |
54. Установка Xz-5.2.5:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
0. Подготовьте Xz к компиляции с помощью: ./configure --prefix=/usr \ --disable-static \ --docdir=/usr/share/doc/xz-5.2.5 1. Скомпилируйте пакет: make 2. Чтобы проверить результаты, введите: make check 3. Установите пакет: make install 4. Содержит: lzcat Распаковывает в стандартный вывод lzcmp Запускает cmp на сжатых файлах LZMA lzdiff Запускает diff для сжатых файлов LZMA lzegrep Запускает egrep для сжатых файлов LZMA lzfgrep Запускает fgrep на сжатых LZMA файлах lzgrep Запускает grep для сжатых файлов LZMA lzless Меньше работает со сжатыми файлами LZMA lzma Сжимает или распаковывает файлы в формате LZMA. lzmadec Небольшой и быстрый декодер для сжатых файлов LZMA. lzmainfo Показывает информацию, хранящуюся в сжатом заголовке файла LZMA. lzmore Больше работает со сжатыми файлами 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 Меньше работает со сжатыми файлами XZ xzmore Больше работает со сжатыми файлами XZ liblzma Библиотека, реализующая сжатие данных без потерь с блочной сортировкой с использованием цепного алгоритма Лемпеля-Зива-Маркова. |
55. Установка Zstd-1.5.2:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
!!! Zstandard — это алгоритм сжатия в реальном времени, обеспечивающий высокую степень сжатия. !!! Он предлагает очень широкий диапазон компромиссов между сжатием и скоростью при поддержке очень быстрого декодера. 0. Скомпилируйте пакет: make 1. make check 2. Установите пакет: make prefix=/usr install 3. Удалите статическую библиотеку: rm -v /usr/lib/libzstd.a 4. Содержимое пакета zstd Сжимает или распаковывает файлы в формате ZSTD. zstdgrep Запускает grep для сжатых файлов ZSTD zstdless Меньше работает со сжатыми файлами ZSTD libzstd Библиотека, реализующая сжатие данных без потерь, с использованием алгоритма ZSTD. |
56. File-5.41
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
!!! Пакет File содержит утилиту для определения типа данного файла или файлов. 0. Подготовьте файл для компиляции: ./configure --prefix=/usr 1. Скомпилируйте пакет: make 2. Чтобы проверить результаты, введите: make check 3. Установите пакет: make install 4. Содержимое: file - Пытается классифицировать каждый заданный файл; он делает это, выполняя несколько тестов — тесты файловой системы, тесты магических чисел и языковые тесты. libmagic - Содержит подпрограммы для распознавания магических чисел, используемые файловой программой. |
57. Readline-8.1.2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
0. Переустановка Readline приведет к перемещению старых библиотек в <libraryname>.old. Хотя обычно это не проблема, в некоторых случаях это может вызвать ошибку связывания в ldconfig. Этого можно избежать, выпустив следующие два sed: sed -i '/MV.*old/d' Makefile.in sed -i '/{OLDSUFF}/c:' support/shlib-install 1. Подготовьте Readline к компиляции: ./configure --prefix=/usr \ --disable-static \ --with-curses \ --docdir=/usr/share/doc/readline-8.1.2 Значение опции конфигурации: --with-curses Этот параметр сообщает Readline, что он может найти функции библиотеки termcap в библиотеке curses, а не в отдельной библиотеке termcap. Это позволяет создать правильный readline.pc файл. 2. Скомпилируйте пакет: make SHLIB_LIBS="-lncursesw" Значение опции make: SHLIB_LIBS="-lncursesw" Эта опция заставляет Readline связываться с libncursesw библиотекой. 3. Этот пакет не поставляется с набором тестов. Установите пакет: make SHLIB_LIBS="-lncursesw" install 4. При желании установите документацию: install -v -m644 doc/*.{ps,pdf,html,dvi} /usr/share/doc/readline-8.1.2 5. Содержимое пакета: libhistory Обеспечивает согласованный пользовательский интерфейс для вызова строк истории libreadline Предоставляет набор команд для управления текстом, введенным в интерактивном сеансе программы. |
58. M4-1.4.19
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
0. Подготовьте M4 к компиляции: ./configure --prefix=/usr 1. Скомпилируйте пакет: make 2. Чтобы проверить результаты, введите: make check 3. Установите пакет: make install 4. Содержимое m4: Копирует указанные файлы, расширяя содержащиеся в них макросы. Эти макросы либо встроены, либо определяются пользователем и могут принимать любое количество аргументов. Помимо расширения макросов, m4 имеет встроенные функции для включения именованных файлов, запуска команд Unix, выполнения целочисленной арифметики, манипулирования текстом, рекурсии и т. д. Программа m4 может использоваться либо как интерфейс для компилятора, либо как макрос. процессор сам по себе. |
59. Bc-5.2.2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
0. Подготовьте Bc к компиляции: CC=gcc ./configure --prefix=/usr -G -O3 1. Значение параметров настройки: CC=gcc Этот параметр указывает используемый компилятор. -O3 Укажите используемую оптимизацию. -G Опустите части набора тестов, которые не будут работать без наличия GNU bc. 2. Скомпилируйте пакет: make 3. Чтобы проверить bc, запустите: make test 4. Установите пакет: make install 5. Содержимое пакета: bc Калькулятор командной строки dc Калькулятор командной строки с обратной шлифовкой |
60. Flex-2.6.4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
0. Подготовьте Flex к компиляции: ./configure --prefix=/usr \ --docdir=/usr/share/doc/flex-2.6.4 \ --disable-static 1. Скомпилируйте пакет: make 2. Для проверки результатов (около 0,5 SBU) выполните: make check 3. Установите пакет: make install 4. Несколько программ еще не знают о flex и пытаются запустить его предшественника, lex. Для поддержки этих программ создайте символическую ссылку с именем lex, которая работает flexв режиме эмуляции lex: ln -sv flex /usr/bin/lex 5. Содержимое Flex flex Инструмент для создания программ, распознающих шаблоны в тексте; это позволяет гибко указывать правила поиска закономерностей, устраняя необходимость разработки специализированной программы. flex++ Расширение flex используется для генерации кода и классов C++. Это символическая ссылка на flex lex Символическая ссылка, которая запускает flex в режиме эмуляции lex . libfl flex Библиотека _ |
61. Tcl-8.6.12
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
!!! Пакет Tcl содержит язык команд инструментов, надежный язык сценариев общего назначения. Пакет Expect написан на языке Tcl. 0. Сначала распакуйте документацию, введя следующую команду: tar -xf ../tcl8.6.12-html.tar.gz --strip-components=1 1. Подготовьте Tcl к компиляции: SRCDIR=$(pwd) cd unix ./configure --prefix=/usr \ --mandir=/usr/share/man \ $([ "$(uname -m)" = x86_64 ] && echo --enable-64bit) Значение параметров настройки: $([ "$(uname -m)" = x86_64 ] && echo --enable-64bit) Конструкция $(<shell command>)заменяется выводом команды оболочки. Здесь этот вывод пуст, если работает на 32-битной машине, и пуст, --enable-64bitесли работает на 64-битной машине. 2. Соберите пакет: make sed -e "s|$SRCDIR/unix|/usr/lib|" \ -e "s|$SRCDIR|/usr/include|" \ -i tclConfig.sh sed -e "s|$SRCDIR/unix/pkgs/tdbc1.1.3|/usr/lib/tdbc1.1.3|" \ -e "s|$SRCDIR/pkgs/tdbc1.1.3/generic|/usr/include|" \ -e "s|$SRCDIR/pkgs/tdbc1.1.3/library|/usr/lib/tcl8.6|" \ -e "s|$SRCDIR/pkgs/tdbc1.1.3|/usr/include|" \ -i pkgs/tdbc1.1.3/tdbcConfig.sh sed -e "s|$SRCDIR/unix/pkgs/itcl4.2.2|/usr/lib/itcl4.2.2|" \ -e "s|$SRCDIR/pkgs/itcl4.2.2/generic|/usr/include|" \ -e "s|$SRCDIR/pkgs/itcl4.2.2|/usr/include|" \ -i pkgs/itcl4.2.2/itclConfig.sh unset SRCDIR !!! Различные инструкции « sed » после команды « make » удаляют ссылки на каталог сборки из файлов конфигурации и заменяют их каталогом установки. !!! Это не является обязательным для остальной части LFS, но может понадобиться в случае, если пакет, созданный позже, использует Tcl. 3. Чтобы проверить результаты, введите: make test 4. Установите пакет: make install 5. Сделайте установленную библиотеку доступной для записи, чтобы символы отладки можно было удалить позже: chmod -v u+w /usr/lib/libtcl8.6.so 6. Установите заголовки Tcl. Следующий пакет, Expect, требует их. make install-private-headers 7. Теперь сделайте необходимую символическую ссылку: ln -sfv tclsh8.6 /usr/bin/tclsh 8. Переименуйте справочную страницу, которая конфликтует с справочной страницей Perl: mv /usr/share/man/man3/{Thread,Tcl_Thread}.3 9. Если вы загрузили дополнительную документацию, установите ее, выполнив следующие команды: mkdir -v -p /usr/share/doc/tcl-8.6.12 cp -v -r ../html/* /usr/share/doc/tcl-8.6.12 10. Содержимое: tclsh8.6 Командная оболочка Tcl tclsh Ссылка на tclsh8.6 libtcl8.6.so Tcl-библиотека libtclstub8.6.a Библиотека Tcl Stub |
62. Expect-5.45.4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
0. Подготовьте ожидание к компиляции: ./configure --prefix=/usr \ --with-tcl=/usr/lib \ --enable-shared \ --mandir=/usr/share/man \ --with-tclinclude=/usr/include Значение параметров настройки: --with-tcl=/usr/lib Этот параметр необходим для указания конфигурации, где находится скрипт tclConfig.sh . --with-tclinclude=/usr/include Это явно указывает Expect, где найти внутренние заголовки Tcl. 1. Соберите пакет: make 2. Чтобы проверить результаты, введите: make test 3. Установите пакет: make install ln -svf expect5.45.4/libexpect5.45.4.so /usr/lib 4. Краткие описания expect Общается с другими интерактивными программами по сценарию libexpect-5.45.4.so Содержит функции, которые позволяют использовать Expect как расширение Tcl или использовать его непосредственно из C или C++ (без Tcl). |
63. DejaGNU-1.6.3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
0. Разработчики рекомендуют собирать DejaGNU в специальном каталоге сборки: mkdir -v build cd build 1. Подготовьте DejaGNU к компиляции: ../configure --prefix=/usr makeinfo --html --no-split -o doc/dejagnu.html ../doc/dejagnu.texi makeinfo --plaintext -o doc/dejagnu.txt ../doc/dejagnu.texi 2. Соберите и установите пакет: make install install -v -dm755 /usr/share/doc/dejagnu-1.6.3 install -v -m644 doc/dejagnu.{html,txt} /usr/share/doc/dejagnu-1.6.3 3. Чтобы проверить результаты, введите: make check 4. пакеты: dejagnu Вспомогательная программа запуска команд DejaGNU runtest Сценарий-оболочка, который находит нужную оболочку ожидания , а затем запускает DejaGNU. |
64. Binutils-2.38
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
!!! Пакет Binutils содержит компоновщик, ассемблер и другие инструменты для работы с объектными файлами. !!! Набор тестов для Binutils в этом разделе считается критически важным. Ни в коем случае не пропускайте его. 0. Убедитесь, что PTY правильно работают в среде chroot, выполнив простой тест: expect -c "spawn ls" !!! Эта команда должна вывести следующее: !!! spawn ls !!! Если вместо этого выходные данные содержат приведенное ниже сообщение, значит, среда не настроена для правильной работы PTY. !!! Эту проблему необходимо решить перед запуском тестовых наборов для Binutils и GCC: !!! The system has no more ptys. !!! Ask your system administrator to create more. 1. Компания Upstream выпустила исправление для устранения проблемы при использовании binutils для сборки некоторых пакетов BLFS с включенной оптимизацией времени соединения (LTO). patch -Np1 -i ../binutils-2.38-lto_fix-1.patch 2. Теперь внесите исправление, указанное в восходящем потоке, которое влияет на сборку некоторых пакетов: sed -e '/R_386_TLS_LE /i \ || (TYPE) == R_386_TLS_IE \\' \ -i ./bfd/elfxx-x86.h 3. Документация Binutils рекомендует собирать Binutils в выделенном каталоге сборки: mkdir -v build cd build 4. Подготовьте Binutils к компиляции: ../configure --prefix=/usr \ --enable-gold \ --enable-ld=default \ --enable-plugins \ --enable-shared \ --disable-werror \ --enable-64-bit-bfd \ --with-system-zlib Значение параметров конфигурации: --enable-gold Создайте золотой компоновщик и установите его как ld.gold (наряду с компоновщиком по умолчанию). --enable-ld=default Соберите оригинальный компоновщик bfd и установите его как ld (компоновщик по умолчанию) и как ld.bfd. --enable-plugins Включает поддержку плагинов для компоновщика. --enable-64-bit-bfd Включает 64-битную поддержку (на хостах с более узкими размерами слов). Может и не понадобится на 64-битных системах, но не навредит. --with-system-zlib Используйте установленную библиотеку zlib вместо сборки включенной версии. 5. Скомпилируйте пакет: make tooldir=/usr Значение параметра make: tooldir=/usr Обычно для tooldir (каталога, в котором в конечном итоге будут расположены исполняемые файлы) установлено значение $(exec_prefix)/$(target_alias). Например, машины x86_64 расширят это до /usr/x86_64-pc-linux-gnu. Поскольку это пользовательская система, этот целевой каталог /usrне требуется. $(exec_prefix)/$(target_alias)будет использоваться, если система используется для кросс-компиляции (например, при компиляции пакета на машине Intel, который генерирует код, который может быть выполнен на машинах PowerPC). 6. Проверьте результаты: make -k check 7. Установите пакет: make tooldir=/usr install 8. Удалите бесполезные статические библиотеки: rm -fv /usr/lib/lib{bfd,ctf,ctf-nobfd,opcodes}.a 9. Пакет содержит: addr2line Преобразует адреса программ в имена файлов и номера строк; учитывая адрес и имя исполняемого файла, он использует отладочную информацию в исполняемом файле, чтобы определить, какой исходный файл и номер строки связаны с адресом. ar Создает, изменяет и извлекает из архивов as Ассемблер, который собирает вывод gcc в объектные файлы . c++filt Используется компоновщиком для исправления символов C++ и Java и предотвращения конфликтов перегруженных функций. dwp Утилита упаковки DWARF elfedit Обновляет заголовок ELF файлов ELF. gprof Отображает данные профиля графика вызовов ld Компоновщик, который объединяет несколько файлов объектов и архивов в один файл, перемещая их данные и связывая ссылки на символы. ld.gold Урезанная версия ld, которая поддерживает только формат объектных файлов elf. ld.bfd Жесткая ссылка на ld nm Перечисляет символы, встречающиеся в данном объектном файле. objcopy Преобразует один тип объектного файла в другой objdump Отображает информацию о данном объектном файле с параметрами, управляющими отображением конкретной информации; показанная информация полезна для программистов, которые работают над инструментами компиляции ranlib Генерирует индекс содержимого архива и сохраняет его в архиве; индекс перечисляет все символы, определенные элементами архива, которые являются перемещаемыми объектными файлами. readelf Отображает информацию о двоичных файлах типа ELF size Перечисляет размеры разделов и общий размер для заданных объектных файлов. strings Выводит для каждого заданного файла последовательности печатных символов, которые имеют по крайней мере указанную длину (по умолчанию четыре); для объектных файлов по умолчанию печатаются только строки из разделов инициализации и загрузки, а для других типов файлов сканируется весь файл strip Отбрасывает символы из объектных файлов libbfd Библиотека дескрипторов двоичных файлов libctf Библиотека поддержки отладки Compat ANSI-C Type Format libctf-nobfd Вариант libctf, который не использует функциональность libbfd. libopcodes Библиотека для работы с кодами операций — « удобочитаемыми текстовыми » версиями инструкций для процессора; он используется для создания утилит, таких как objdump |
65. GMP-6.2.1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
!!! Пакет GMP содержит математические библиотеки. У них есть полезные функции для арифметики произвольной точности. 0. Подготовить GMP к компиляции: ./configure --prefix=/usr \ --enable-cxx \ --disable-static \ --docdir=/usr/share/doc/gmp-6.2.1 Значение новых опций конфигурации: --enable-cxx Этот параметр включает поддержку C++. --docdir=/usr/share/doc/gmp-6.2.1 Эта переменная указывает правильное место для документации. 1. Скомпилируйте пакет и сгенерируйте HTML-документацию: make make html 2. Проверьте результаты: make check 2>&1 | tee gmp-check-log 3. Убедитесь, что все 197 тестов в наборе тестов пройдены. Проверьте результаты, введя следующую команду: awk '/# PASS:/{total+=$3} ; END{print total}' gmp-check-log 4. Установите пакет и его документацию: make install make install-html 5. Содержимое пакета libgmp Содержит точные математические функции libgmpxx Содержит точные математические функции C++ |
66. MPFR-4.1.0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
!!! Пакет MPFR содержит функции для вычислений с множественной точностью. 0. Подготовьте MPFR к компиляции: ./configure --prefix=/usr \ --disable-static \ --enable-thread-safe \ --docdir=/usr/share/doc/mpfr-4.1.0 1. Скомпилируйте пакет и сгенерируйте HTML-документацию: make make html 2. Проверьте результаты и убедитесь, что все тесты пройдены: make check 3. Установите пакет и его документацию: make install make install-html 4. Содержание libmpfr Содержит математические функции с множественной точностью |
67. MPC-1.2.1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
!!! Пакет MPC содержит библиотеку для арифметики комплексных чисел с произвольно высокой точностью и правильным округлением результата. !!! libmpc - Содержит сложные математические функции 0. Подготовьте MPC к компиляции: ./configure --prefix=/usr \ --disable-static \ --docdir=/usr/share/doc/mpc-1.2.1 1. Скомпилируйте пакет и сгенерируйте HTML-документацию: make make html 2. Чтобы проверить результаты, введите: make check 3. Установите пакет и его документацию: make install make install-html |
68. Attr-2.5.1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
!!! Пакет attr содержит утилиты для управления расширенными атрибутами объектов файловой системы. !!! attr Расширяет атрибуты объектов файловой системы !!! getfattr Получает расширенные атрибуты объектов файловой системы !!! setfattr Устанавливает расширенные атрибуты объектов файловой системы !!! libattr Содержит библиотечные функции для управления расширенными атрибутами. 0. Подготовьте Attr к компиляции: ./configure --prefix=/usr \ --disable-static \ --sysconfdir=/etc \ --docdir=/usr/share/doc/attr-2.5.1 1. Скомпилируйте пакет: make 2. Тесты необходимо запускать в файловой системе, которая поддерживает расширенные атрибуты, такие как файловые системы ext2, ext3 или ext4. Чтобы проверить результаты, введите: make check 3. Установите пакет: make install |
69. Acl-2.3.1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
!!! Пакет Acl содержит утилиты для администрирования списков контроля доступа, которые используются для определения более детальных дискреционных прав доступа к файлам и каталогам. !!! chacl Изменяет список контроля доступа к файлу или каталогу !!! getfacl Получает списки контроля доступа к файлам !!! setfacl Устанавливает списки контроля доступа к файлам !!! libacl Содержит библиотечные функции для управления списками контроля доступа. 0. Подготовьте Acl к компиляции: ./configure --prefix=/usr \ --disable-static \ --docdir=/usr/share/doc/acl-2.3.1 1. Скомпилируйте пакет: make !!! Тесты Acl необходимо запускать в файловой системе, поддерживающей управление доступом, после сборки Coreutils с библиотеками Acl. !!! При желании вернитесь к этому пакету и запустите make check после того , как Coreutils будет собран позже в этой главе. 2. Установите пакет: make install |
70. Libcap-2.63
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
!!! Пакет Libcap реализует интерфейсы пользовательского пространства для возможностей POSIX 1003.1e, доступных в ядрах Linux. !!! Эти возможности представляют собой разделение всех мощных привилегий root на набор отдельных привилегий. !!! capsh Оболочка-оболочка для изучения и ограничения поддержки возможностей !!! getcap Изучает возможности файла !!! getpcaps Отображает возможности запрошенного процесса(ов) !!! setcap Устанавливает возможности файла !!! libcap Содержит библиотечные функции для управления возможностями POSIX 1003.1e. !!! libpsx Содержит функции для поддержки семантики POSIX для системных вызовов, связанных с библиотекой pthread. 0. Запретить установку статических библиотек: sed -i '/install -m.*STA/d' libcap/Makefile 1. Скомпилируйте пакет: make prefix=/usr lib=lib Значение опции make: lib=lib этот параметр задает каталог библиотеки /usr/libвместо /usr/lib64x86_64. На x86 это никак не влияет. 2. Чтобы проверить результаты, введите: make test 3. Установите пакет: make prefix=/usr lib=lib install |
71. Shadow-4.11.1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
!!! Пакет Shadow содержит программы для безопасной обработки паролей. !!! Если вы хотите принудительно использовать надежные пароли, обратитесь к https://www.linuxfromscratch.org/blfs/view/stable-systemd/postlfs/cracklib.html !!! для установки CrackLib перед сборкой Shadow. Затем добавьте --with-libcrackв команду configure ниже. 0. Отключите установку программы groups и ее справочных страниц, так как Coreutils предоставляет лучшую версию. Кроме того, запретите установку справочных страниц. 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 / /' {} \; !!! Вместо использования метода шифрования по умолчанию используйте более безопасный метод шифрования паролей SHA-512 , который также позволяет использовать пароли длиннее 8 символов. !!! Также необходимо изменить устаревшее /var/spool/mail расположение почтовых ящиков пользователей, которое Shadow использует по умолчанию, !!! на /var/mailтекущее местоположение. И избавьтесь от /bin и /sbinот PATH, поскольку они являются просто символическими ссылками на их аналог в /usr. !!! Если /binи/или по какой-то причине /sbin предпочтительнее оставить PATH, измените PATH после .bashrc сборки LFS. sed -e 's:#ENCRYPT_METHOD DES:ENCRYPT_METHOD SHA512:' \ -e 's:/var/spool/mail:/var/mail:' \ -e '/PATH=/{s@/sbin:@@;s@/bin:@@}' \ -i etc/login.defs !!! Примечание \ Если вы выбрали сборку Shadow с поддержкой Cracklib, выполните следующее: !!! # sed -i 's:DICTPATH.*:DICTPATH\t/lib/cracklib/pw_dict:' etc/login.defs 1. Подготовьте Shadow к компиляции: touch /usr/bin/passwd ./configure --sysconfdir=/etc \ --disable-static \ --with-group-name-max-length=32 Значение опции конфигурации: touch /usr/bin/passwd Файл /usr/bin/passwd должен существовать, потому что его расположение жестко запрограммировано в некоторых программах, и если он не существует, то расположение по умолчанию неверно. --with-group-name-max-length=32 Максимальное имя пользователя составляет 32 символа. Сделайте максимальное имя группы одинаковым. 2. Скомпилируйте пакет: make 3. Установите пакет: make exec_prefix=/usr install make -C man install-man |
72. Настройка Shadow
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
!!! Этот пакет содержит утилиты для добавления, изменения и удаления пользователей и групп; устанавливать и менять свои пароли; и выполнять другие административные задачи. !!! Полное объяснение того, что означает теневое копирование паролейdoc/HOWTO , см. в файле в распакованном дереве исходного кода. !!! Если вы используете поддержку Shadow, имейте в виду, что программы, которые должны проверять пароли (диспетчеры отображения, FTP-программы, демоны pop3 и т. д.), !!! должны быть совместимы с Shadow. !!! То есть им нужно уметь работать с теневыми паролями. 0. Чтобы включить теневые пароли, выполните следующую команду: pwconv 1. Чтобы включить теневые групповые пароли, запустите: grpconv !!! Конфигурация Shadow по умолчанию для утилиты useradd имеет несколько предостережений, требующих пояснений. !!! Во-первых, по умолчанию утилита useradd создает пользователя и группу с тем же именем, что и у пользователя. !!! По умолчанию номера идентификатора пользователя (UID) и идентификатора группы (GID) начинаются с 1000. !!! Это означает, что если вы не передадите параметры в useradd , каждый пользователь будет членом уникальной группы в системе. !!! Если такое поведение нежелательно, вам нужно будет передать один из параметров -gили в useradd или изменить настройку в-NUSERGROUPS_ENAB/etc/login.defs. !!! См. useradd(8)дополнительную информацию. 2. Во-вторых, чтобы изменить параметры по умолчанию, файл /etc/default/useraddнеобходимо создать и настроить в соответствии с вашими конкретными потребностями. mkdir -p /etc/default useradd -D --gid 999 !!! /etc/default/useradd Пояснения к параметрам !!! GROUP=999 !!! Этот параметр задает начало номеров групп, используемых в /etc/group файле. !!! Конкретное значение 999 исходит из указанного --gid выше параметра. !!! Вы можете изменить его на все, что пожелаете. Обратите внимание, что useradd никогда не будет повторно использовать UID или GID. !!! Если используется номер, указанный в этом параметре, будет использоваться следующий доступный номер. !!! Также обратите внимание, что если в вашей системе нет группы с идентификатором, равным этому номеру, !!! при первом использовании useradd без -gпараметра, вы получите сообщение, отображаемое на терминале, !!! которое гласит: useradd: unknown GID 999, хотя учетная запись создана правильно. !!! CREATE_MAIL_SPOOL=yes !!! Этот параметр заставляет useradd создать файл почтового ящика для вновь созданного пользователя. !!! useradd сделает групповое владение этим файлом mailгруппе с разрешениями 0660. !!! Если вы предпочитаете, чтобы эти файлы почтовых ящиков не создавались пользователем , введите следующую команду: !!! sed -i '/MAIL/s/yes/no/' /etc/default/useradd Краткие описания: chage Используется для изменения максимального количества дней между обязательной сменой пароля. chfn Используется для изменения полного имени пользователя и другой информации chgpasswd Используется для обновления групповых паролей в пакетном режиме. chpasswd Используется для обновления паролей пользователей в пакетном режиме. chsh Используется для изменения оболочки входа пользователя по умолчанию. expiry Проверяет и обеспечивает соблюдение текущей политики истечения срока действия пароля faillog Используется для проверки журнала неудачных попыток входа в систему, для установки максимального количества неудачных попыток до блокировки учетной записи или для сброса счетчика неудачных попыток. getsubids Используется для перечисления подчиненных диапазонов идентификаторов для пользователя. gpasswd Используется для добавления и удаления участников и администраторов в группы. groupadd Создает группу с заданным именем groupdel Удаляет группу с указанным именем groupmems Позволяет пользователю управлять своим собственным списком членства в группе, не требуя привилегий суперпользователя. groupmod Используется для изменения имени данной группы или GID grpck Проверяет целостность групповых файлов /etc/groupи /etc/gshadow grpconv Создает или обновляет файл теневой группы из обычного файла группы. grpunconv Обновляет /etc/group , /etc/gshadowа затем удаляет последний lastlog Сообщает о самом последнем входе в систему всех пользователей или данного пользователя login Используется системой, чтобы позволить пользователям войти в систему logoutd Используется ли демон для принудительного применения ограничений на время входа в систему и порты newgidmap Используется для установки сопоставления gid пространства имен пользователя. newgrp Используется для изменения текущего GID во время сеанса входа в систему. newuidmap Используется для установки сопоставления uid пространства имен пользователя. newusers Используется для создания или обновления целой серии учетных записей пользователей. nologin Выводит сообщение о том, что учетная запись недоступна; он предназначен для использования в качестве оболочки по умолчанию для отключенных учетных записей. passwd Используется для изменения пароля для учетной записи пользователя или группы. pwck Проверяет целостность файлов паролей /etc/passwdи /etc/shadow pwconv Создает или обновляет теневой файл паролей из обычного файла паролей. pwunconv Обновляет /etc/passwd , /etc/shadowа затем удаляет последний sg Выполняет заданную команду, в то время как GID пользователя установлен на GID данной группы su Запускает оболочку с замещающими идентификаторами пользователей и групп. useradd Создает нового пользователя с заданным именем или обновляет информацию о новом пользователе по умолчанию. userdel Удаляет указанную учетную запись пользователя usermod Используется для изменения имени пользователя, идентификатора пользователя (UID), оболочки, исходной группы, домашнего каталога и т. д. vigr Редактирует /etc/group или /etc/gshadowфайлы vipw Редактирует /etc/passwd или /etc/shadowфайлы libsubid библиотека для диапазонов идентификаторов подчиненных процессов для пользователей |
73. Установка GCC-11.2.0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 |
0. Сначала устраните проблему, препятствующую libasan.aсборке этого пакета с помощью Glibc-2.34 или более поздней версии: sed -e '/static.*SIGSTKSZ/d' \ -e 's/return kAltStackSize/return SIGSTKSZ * 4/' \ -i libsanitizer/sanitizer_common/sanitizer_posix_libcdep.cpp 1. При сборке на x86_64 измените имя каталога по умолчанию для 64-битных библиотек на « lib »: case $(uname -m) in x86_64) sed -e '/m64=/s/lib64/lib/' \ -i.orig gcc/config/i386/t-linux64 ;; esac 2. Документация GCC рекомендует собирать GCC в выделенном каталоге сборки: mkdir -v build cd build 3. Подготовьте GCC к компиляции: ../configure --prefix=/usr \ LD=ld \ --enable-languages=c,c++ \ --disable-multilib \ --disable-bootstrap \ --with-system-zlib Значение новых параметров конфигурации: LD=ld Этот параметр заставляет скрипт configure использовать ld, установленный программой binutils, созданной ранее в этой главе, а не перекрестную версию, которая в противном случае использовалась бы. --with-system-zlib Этот переключатель сообщает GCC о необходимости ссылки на установленную в системе копию библиотеки zlib, а не на собственную внутреннюю копию. 4. Скомпилируйте пакет: make 5. Известно, что один набор тестов в наборе тестов GCC исчерпывает стек по умолчанию, поэтому увеличьте размер стека перед запуском тестов: ulimit -s 32768 6. Протестируйте результаты как непривилегированный пользователь, но не останавливайтесь на ошибках: chown -Rv tester . su tester -c "PATH=$PATH make -k check" 7. Чтобы получить сводку результатов набора тестов, запустите: ../contrib/test_summary 8. Установите пакет и удалите ненужный каталог: make install rm -rf /usr/lib/gcc/$(gcc -dumpmachine)/11.2.0/include-fixed/bits/ 9. Каталог сборки GCC уже принадлежит, testerи владение установленным каталогом заголовков (и его содержимым) будет неправильным. Измените владельца на rootпользователя и группу: chown -v -R root:root \ /usr/lib/gcc/*linux-gnu/11.2.0/include{,-fixed} 10. Создайте символическую ссылку, требуемую FHS по «историческим» причинам. ln -svr /usr/bin/cpp /usr/lib 11. Добавьте символическую ссылку совместимости, чтобы включить сборку программ с оптимизацией времени компоновки (LTO): ln -sfv ../../libexec/gcc/$(gcc -dumpmachine)/11.2.0/liblto_plugin.so \ /usr/lib/bfd-plugins/ 12. Теперь, когда наша окончательная цепочка инструментов готова, важно еще раз убедиться, что компиляция и компоновка будут работать должным образом. Мы делаем это, выполняя некоторые проверки работоспособности: 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] 13. Теперь убедитесь, что мы настроили использование правильных стартовых файлов: grep -o '/usr/lib.*/crt[1in].*succeeded' dummy.log 14. Вывод последней команды должен быть: /usr/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../lib/crt1.o succeeded /usr/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../lib/crti.o succeeded /usr/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../lib/crtn.o succeeded !!! В зависимости от архитектуры вашего компьютера приведенное выше может немного отличаться. !!! Разница будет заключаться в имени каталога после /usr/lib/gcc. !!! Здесь важно обратить внимание на то, что gcc нашел все три crt*.o файла в /usr/lib каталоге. 15. Убедитесь, что компилятор ищет правильные файлы заголовков: grep -B4 '^ /usr/include' dummy.log 16. Эта команда должна вернуть следующий вывод: #include <...> search starts here: /usr/lib/gcc/x86_64-pc-linux-gnu/11.2.0/include /usr/local/include /usr/lib/gcc/x86_64-pc-linux-gnu/11.2.0/include-fixed /usr/include 17. Затем убедитесь, что новый компоновщик используется с правильными путями поиска: grep 'SEARCH.*/usr/lib' dummy.log |sed 's|; |\n|g' 18. Ссылки на пути, содержащие компоненты с «-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"); 19. Затем убедитесь, что мы используем правильную libc: grep "/lib.*/libc.so.6 " dummy.log !!! Вывод последней команды должен быть: !11 attempt to open /usr/lib/libc.so.6 succeeded 20. Убедитесь, что GCC использует правильный динамический компоновщик: grep found dummy.log !!! Вывод последней команды должен быть (с учетом различий в имени динамического компоновщика, зависящих от платформы): !!! found ld-linux-x86-64.so.2 at /usr/lib/ld-linux-x86-64.so.2 21. Как только все заработает правильно, очистите тестовые файлы: rm -v dummy.c a.out dummy.log 22. Наконец, переместите неуместный файл: mkdir -pv /usr/share/gdb/auto-load/usr/lib mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib 23. Содержимое пакета: c++ Компилятор С++ cc Компилятор C cpp Препроцессор Си; он используется компилятором для расширения операторов #include, #define и подобных в исходных файлах. g++ Компилятор С++ gcc Компилятор C gcc-ar Обертка вокруг ar , добавляющая плагин в командную строку. Эта программа используется только для добавления «оптимизации времени компоновки» и бесполезна с параметрами сборки по умолчанию. gcc-nm Оболочка над nm , добавляющая плагин в командную строку. Эта программа используется только для добавления «оптимизации времени компоновки» и бесполезна с параметрами сборки по умолчанию. gcc-ranlib Обертка вокруг ranlib , добавляющая плагин в командную строку. Эта программа используется только для добавления «оптимизации времени компоновки» и бесполезна с параметрами сборки по умолчанию. gcov Инструмент тестирования покрытия; он используется для анализа программ, чтобы определить, где оптимизация будет иметь наибольший эффект. gcov-dump Автономный инструмент для дампа профилей gcda и gcno gcov-tool Автономный инструмент обработки профиля gcda lto-dump Инструмент для создания дампа объектных файлов, созданных GCC с включенным LTO. libasan Библиотека времени выполнения Address Sanitizer libatomic Встроенная библиотека времени выполнения GCC atomic libcc1 Библиотека предварительной обработки C libgcc Содержит поддержку времени выполнения для gcc libgcov Эта библиотека связана с программой, когда GCC получает указание включить профилирование. libgomp Реализация GNU OpenMP API для многоплатформенного параллельного программирования с общей памятью на C/C++ и Fortran libitm Библиотека транзакционной памяти GNU liblsan Библиотека времени выполнения Leak Sanitizer liblto_plugin Плагин GCC LTO позволяет binutils обрабатывать объектные файлы, созданные GCC с включенным LTO. libquadmath API математической библиотеки GCC Quad Precision libssp Содержит подпрограммы, поддерживающие функциональность защиты стека GCC. libstdc++ Стандартная библиотека С++ libstdc++fs Библиотека файловой системы ISO/IEC TS 18822:2015 libsupc++ Предоставляет вспомогательные процедуры для языка программирования C++. libtsan Библиотека времени выполнения Thread Sanitizer libubsan Библиотека времени выполнения Undefined Behavior Sanitizer |
74. Pkg-config-0.29.2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
0. Подготовьте Pkg-config к компиляции: ./configure --prefix=/usr \ --with-internal-glib \ --disable-host-tool \ --docdir=/usr/share/doc/pkg-config-0.29.2 Значение новых опций конфигурации: --with-internal-glib Это позволит pkg-config использовать свою внутреннюю версию Glib, поскольку внешняя версия недоступна в LFS. --disable-host-tool Эта опция отключает создание нежелательной жесткой ссылки на программу pkg-config. 1. Скомпилируйте пакет: make 2. Чтобы проверить результаты, введите: make check 3. Установите пакет: make install 4. Краткие описания pkg-config Возвращает метаинформацию для указанной библиотеки или пакета |
75. Ncurses-6.3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
0. Подготовьте Ncurses к компиляции: ./configure --prefix=/usr \ --mandir=/usr/share/man \ --with-shared \ --without-debug \ --without-normal \ --enable-pc-files \ --enable-widec \ --with-pkg-config-libdir=/usr/lib/pkgconfig Значение новых опций конфигурации: --enable-widec Этот переключатель вызывает создание библиотек расширенных символов (например, libncursesw.so.6.3) вместо обычных (например, libncurses.so.6.3). Эти широкосимвольные библиотеки можно использовать как в многобайтовых, так и в традиционных 8-битных локалях, в то время как обычные библиотеки правильно работают только в 8-битных локалях. Библиотеки расширенных символов и обычные библиотеки совместимы с исходным кодом, но не совместимы с двоичным кодом. --enable-pc-files Этот переключатель создает и устанавливает файлы .pc для pkg-config. --without-normal Этот переключатель отключает сборку и установку большинства статических библиотек. 1. Скомпилируйте пакет: make 2. Установка и удаление бесполезного мусора make DESTDIR=$PWD/dest install install -vm755 dest/usr/lib/libncursesw.so.6.3 /usr/lib rm -v dest/usr/lib/{libncursesw.so.6.3,libncurses++w.a} cp -av dest/* / 3. Многие приложения по-прежнему ожидают, что компоновщик сможет найти библиотеки 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 4. Наконец, убедитесь, что старые приложения, которые ищут -lcurses во время сборки, по-прежнему доступны для сборки: rm -vf /usr/lib/libcursesw.so echo "INPUT(-lncursesw)" > /usr/lib/libcursesw.so ln -sfv libncurses.so /usr/lib/libcurses.so 5. Установите документацию Ncurses: mkdir -pv /usr/share/doc/ncurses-6.3 cp -v -R doc/* /usr/share/doc/ncurses-6.3 !!! 6. Приведенные выше инструкции не создают библиотеки Ncurses с неширокими символами, поскольку ни один пакет, установленный путем компиляции из исходного кода, не будет связан с ними во время выполнения. Тем не менее, единственные известные приложения только для двоичных файлов, которые связываются с библиотеками 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 7. Краткие описания captoinfo Преобразует описание termcap в описание terminfo clear Очищает экран, если это возможно infocmp Сравнивает или распечатывает описания терминов infotocap Преобразует описание terminfo в описание termcap ncursesw6-config Предоставляет информацию о конфигурации для ncurses reset Повторно инициализирует терминал с его значениями по умолчанию. tabs Очищает и устанавливает позиции табуляции на терминале tic Компилятор описания записей terminfo, который переводит файл terminfo из исходного формата в двоичный формат, необходимый для подпрограмм библиотеки ncurses [Файл terminfo содержит информацию о возможностях определенного терминала.] toe Перечисляет все доступные типы терминалов, давая основное имя и описание для каждого. tput Делает значения возможностей, зависящих от терминала, доступными для оболочки; его также можно использовать для сброса или инициализации терминала или сообщения его длинного имени. tset Может использоваться для инициализации терминалов libcursesw Ссылка на libncursesw libncursesw Содержит функции для отображения текста многими сложными способами на экране терминала; хорошим примером использования этих функций является меню, отображаемое во время make menuconfig ядра. libformw Содержит функции для реализации форм libmenuw Содержит функции для реализации меню libpanelw Содержит функции для реализации панелей |
76. Sed-4.8
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
!!! Фильтрует и преобразует текстовые файлы за один проход 0. Подготовьте Sed для компиляции: ./configure --prefix=/usr 1. Скомпилируйте пакет и сгенерируйте HTML-документацию: make make html 2. Чтобы проверить результаты, введите: chown -Rv tester . su tester -c "PATH=$PATH make check" 3. Установите пакет и его документацию: make install install -d -m755 /usr/share/doc/sed-4.8 install -m644 doc/sed.html /usr/share/doc/sed-4.8 |
77. Psmisc-23.4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
0. Подготовьте Psmisc к компиляции: ./configure --prefix=/usr 1. Скомпилируйте пакет: make 2. тесты !!! Этот пакет не поставляется с набором тестов. 3. Установите пакет: make install 4. Краткие описания fuser Сообщает идентификаторы процессов (PID) процессов, которые используют данные файлы или файловые системы. killall Убивает процессы по имени; он отправляет сигнал всем процессам, выполняющим любую из заданных команд peekfd Просмотр файловых дескрипторов запущенного процесса с учетом его PID prtstat Выводит информацию о процессе pslog Сообщает текущий путь журналов процесса pstree Отображает запущенные процессы в виде дерева pstree.x11 То же , что и pstree , за исключением того, что он ожидает подтверждения перед выходом |
78. Gettext-0.21
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
!!! Пакет Gettext содержит утилиты для интернационализации и локализации. !!! Это позволяет компилировать программы с помощью NLS (поддержка родного языка), что позволяет им выводить сообщения на родном языке пользователя. 0. Подготовьте Gettext для компиляции: ./configure --prefix=/usr \ --disable-static \ --docdir=/usr/share/doc/gettext-0.21 1. Скомпилируйте пакет: make 2. Чтобы проверить результаты (это занимает много времени, около 3 SBU), введите: make check 3. Установите пакет: make install chmod -v 0755 /usr/lib/preloadable_libintl.so 4. Содержимое Gettext autopoint Копирует стандартные файлы инфраструктуры Gettext в исходный пакет. envsubst Заменяет переменные среды в строках формата оболочки gettext Переводит сообщение на естественном языке на язык пользователя, ища перевод в каталоге сообщений. gettext.sh В основном служит библиотекой функций оболочки для gettext. msgattrib Копирует все стандартные файлы Gettext в указанный каталог верхнего уровня пакета, чтобы начать его интернационализацию. msgcat Фильтрует сообщения каталога переводов в соответствии с их атрибутами и манипулирует атрибутами. msgcat Объединяет и объединяет данные .poфайлы msgcmp Сравнивает два .po файла, чтобы убедиться, что оба содержат одинаковый набор строк msgid. msgcomm Находит сообщения, которые являются общими для заданных .poфайлов msgconv Преобразует каталог переводов в другую кодировку символов msgen Создает каталог переводов на английский язык msgexec Применяет команду ко всем переводам каталога переводов msgfilter Применяет фильтр ко всем переводам каталога переводов msgfmt Генерирует двоичный каталог сообщений из каталога переводов. msggrep Извлекает все сообщения из каталога переводов, которые соответствуют заданному шаблону или принадлежат некоторым заданным исходным файлам. msgfmt Создает новый .po файл, инициализируя метаинформацию значениями из среды пользователя. msgmerge Объединяет два необработанных перевода в один файл msgunfmt Декомпилирует двоичный каталог сообщений в необработанный текст перевода msguniq Объединяет дубликаты переводов в каталоге переводов ngettext Отображает перевод текстового сообщения на родной язык, грамматическая форма которого зависит от числа. recode-sr-latin Перекодирует сербский текст с кириллицы на латиницу. xgettext Извлекает переводимые строки сообщений из заданных исходных файлов для создания первого шаблона перевода. libasprintf определяет класс autosprintf , который делает подпрограммы вывода в формате C пригодными для использования в программах на C++ для использования со строками <string> и потоками <iostream> libgettextlib частная библиотека, содержащая общие процедуры, используемые различными программами Gettext; они не предназначены для общего использования libgettextpo Используется для написания специализированных программ, обрабатывающих .poфайлы; эта библиотека используется, когда стандартных приложений, поставляемых с Gettext (таких как msgcomm , msgcmp , msgattrib и msgen ), недостаточно . libgettextsrc Частная библиотека, содержащая общие процедуры, используемые различными программами Gettext; они не предназначены для общего использования libtextstyle Библиотека стилей текста preloadable_libintl Библиотека, предназначенная для использования LD_PRELOAD, которая помогает libintlрегистрировать непереведенные сообщения . |
79. Bison-3.8.2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
!!! Пакет Bison содержит генератор парсеров. 0. Подготовьте Bison для компиляции: ./configure --prefix=/usr --docdir=/usr/share/doc/bison-3.8.2 1. Скомпилируйте пакет: make 2. Для проверки результатов (около 5,5 SBU) выдайте: make check 3. Установите пакет: make install 4. Краткие описания bison Генерирует из набора правил программу для анализа структуры текстовых файлов; Bison является заменой Yacc (Yet Another Compiler Compiler) yacc Оболочка для bison , предназначенная для программ, которые до сих пор вызывают yacc вместо bison ; он вызывает bison с -y опцией liby Библиотека Yacc, содержащая реализации Yacc-совместимых yyerror и main функций; эта библиотека обычно не очень полезна, но POSIX требует ее |
79. Grep-3.7
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
!!! 8.33. !!! https://www.linuxfromscratch.org/lfs/downloads/stable-systemd/LFS-BOOK-11.1-NOCHUNKS.html#ch-tools-binutils-pass1 !!! Пакет Grep содержит программы для поиска по содержимому файлов. !!! egrep Выводит строки, соответствующие расширенному регулярному выражению !!! fgrep Выводит строки, соответствующие списку фиксированных строк !!! grep Выводит строки, соответствующие основному регулярному выражению 0. Подготовьте Grep к компиляции: ./configure --prefix=/usr 1. Скомпилируйте пакет: make 2. Чтобы проверить результаты, введите: make check Установите пакет: make install |
80. (8.34.) Bash-5.1.16
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
!!! Пакет Bash содержит Bourne-Again SHell. !!! bash Широко используемый интерпретатор команд; он выполняет множество типов расширений и замен в заданной командной строке перед ее выполнением, что делает этот интерпретатор мощным инструментом. !!! bashbug Сценарий оболочки, помогающий пользователю составлять и отправлять отчеты об ошибках в стандартном формате, касающиеся bash . !!! sh Cимлинк на программу bash ; при вызове как sh bash пытается максимально точно имитировать поведение при запуске исторических версий sh , при этом также соответствуя стандарту POSIX. 0. Подготовьте Bash к компиляции: ./configure --prefix=/usr \ --docdir=/usr/share/doc/bash-5.1.16 \ --without-bash-malloc \ --with-installed-readline Значение новой опции конфигурации: --with-installed-readline Этот параметр указывает Bash использовать readlineбиблиотеку, которая уже установлена в системе, а не использовать собственную версию для чтения. 1. Скомпилируйте пакет: make 2. Тесты: Перейдите к "3. Установить пакет" , если не запускаете набор тестов. Чтобы подготовить тесты, убедитесь, что tester пользователь может писать в дерево исходников: chown -Rv tester . Набор тестов пакета предназначен для запуска пользователем без полномочий root, которому принадлежит терминал, подключенный к стандартному вводу. Чтобы выполнить требование, создайте новый псевдотерминал с помощью Expect и запустите тесты от имени tester пользователя: su -s /usr/bin/expect tester << EOF set timeout -1 spawn make tests expect eof lassign [wait] _ _ _ value exit $value EOF 3. Установите пакет: make install 4. Запустите только что скомпилированную программу bash (заменив ту, которая выполняется в данный момент): exec /usr/bin/bash --login |
81. (8.35.) Libtool-2.4.6
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
!!! libtool Предоставляет общие услуги по поддержке создания библиотек. !!! libtoolize Предоставляет стандартный способ добавления поддержки libtool в пакет. !!! libltdl Скрывает различные трудности с раскрытием библиотек 0. Подготовьте Libtool к компиляции: ./configure --prefix=/usr 1. Скомпилируйте пакет: make 2. Чтобы проверить результаты, введите: make check !!! Примечание !!! Время тестирования libtool может быть значительно сокращено в системе с несколькими ядрами. Для этого добавьте TESTSUITEFLAGS=-j<N> к строке выше. !!! Например, использование -j4 может сократить время тестирования более чем на 60 процентов. !!! Известно, что пять тестов в среде сборки LFS завершаются неудачно из-за круговой зависимости, но все тесты проходят успешно, если они повторно проверяются после установки automake. 3. Установите пакет: make install 4. Удалите бесполезную статическую библиотеку: rm -fv /usr/lib/libltdl.a |
82. (8.36.1.) GDBM-1.23
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
!!! Пакет GDBM содержит менеджер баз данных GNU. !!! Это библиотека функций базы данных, использующая расширяемое хеширование и работающая аналогично стандартной базе данных UNIX. !!! Библиотека предоставляет примитивы для хранения пар ключ/данные, поиска и извлечения данных по его ключу и удаления ключа вместе с его данными. !!! gdbm_dump Сбрасывает базу данных GDBM в файл !!! gdbm_load Восстанавливает базу данных GDBM из файла дампа. !!! gdbmtool Тестирует и модифицирует базу данных GDBM !!! libgdbm Содержит функции для управления хешированной базой данных. !!! libgdbm_compat Библиотека совместимости, содержащая старые функции DBM. 0. Подготовьте GDBM к компиляции: ./configure --prefix=/usr \ --disable-static \ --enable-libgdbm-compat Значение опции конфигурации: --enable-libgdbm-compat Этот переключатель включает сборку библиотеки совместимости libgdbm. Некоторым пакетам за пределами LFS могут потребоваться более старые подпрограммы DBM, которые он предоставляет. 1. Скомпилируйте пакет: make 2. Чтобы проверить результаты, введите: make check 3. Установите пакет: make install |
83. (8.37.) Gperf-3.1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
!!! gperf Генерирует идеальный хэш из набора ключей 0. Подготовьте Gperf к компиляции: ./configure --prefix=/usr --docdir=/usr/share/doc/gperf-3.1 1. Скомпилируйте пакет: make 2. Известно, что тесты завершаются сбоем при выполнении нескольких одновременных тестов (параметр -j больше 1). Чтобы проверить результаты, введите: make -j1 check 3. Установите пакет: make install |
84. (8.38.) Expat-2.4.6
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
!!! xmlwf Является непроверяющей утилитой для проверки правильности формата XML-документов. !!! libexpat Содержит функции API для разбора XML 0. Подготовьте Expat для компиляции: ./configure --prefix=/usr \ --disable-static \ --docdir=/usr/share/doc/expat-2.4.6 1. Скомпилируйте пакет: make 2. Чтобы проверить результаты, введите: make check 3. Установите пакет: make install 4. При желании установите документацию: install -v -m644 doc/*.{html,css} /usr/share/doc/expat-2.4.6 |
85. (8.39.1) Inetutils-2.2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
!!! Пакет Inetutils содержит программы для базовой работы в сети. !!! dnsdomainname Показать доменное имя DNS системы !!! ftp Является ли программа протокола передачи файлов !!! hostname Сообщает или устанавливает имя хоста !!! ifconfig Управляет сетевыми интерфейсами !!! ping Отправляет пакеты эхо-запросов и сообщает, сколько времени занимают ответы !!! ping6 Версия ping для сетей IPv6 !!! talk Используется для общения с другим пользователем !!! telnet Интерфейс к протоколу TELNET !!! tftp Тривиальная программа для передачи файлов !!! traceroute Отслеживает маршрут, по которому проходят ваши пакеты от узла, над которым вы работаете, к другому узлу в сети, показывая все промежуточные переходы (шлюзы) на этом пути. 0. Подготовьте Inetutils к компиляции: ./configure --prefix=/usr \ --bindir=/usr/bin \ --localstatedir=/var \ --disable-logger \ --disable-whois \ --disable-rcp \ --disable-rexec \ --disable-rlogin \ --disable-rsh \ --disable-servers 1. Значение параметров настройки: --disable-logger Этот параметр запрещает Inetutils устанавливать программу регистрации , которая используется сценариями для передачи сообщений демону системного журнала. Не устанавливайте его, потому что Util-linux устанавливает более новую версию. --disable-whois Этот параметр отключает сборку whois - клиента Inetutils, который устарел. Инструкции для лучшего клиента whois находятся в книге BLFS. --disable-r* Эти параметры отключают создание устаревших программ, которые не следует использовать из-за проблем с безопасностью. Функции, предоставляемые этими программами, могут быть предоставлены пакетом openssh в книге BLFS. --disable-servers Это отключает установку различных сетевых серверов, входящих в состав пакета Inetutils. Эти серверы считаются неподходящими для базовой системы LFS. Некоторые из них небезопасны по своей природе и считаются безопасными только в доверенных сетях. Обратите внимание, что для многих из этих серверов доступны лучшие замены. 2. Скомпилируйте пакет: make 3. Чтобы проверить результаты, введите: make check 4. Установите пакет: make install 5. Переместите программу в нужное место: mv -v /usr/{,s}bin/ifconfig |
86. (8.40.) Less-590
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
!!! Пакет Less содержит средство просмотра текстовых файлов. !!! less просмотрщик файлов или пейджер; он отображает содержимое данного файла, позволяя пользователю прокручивать, находить строки и переходить к меткам !!! lessecho Необходимо расширить метасимволы, такие как * и ? , в именах файлов в системах Unix !!! Используется для указания привязки клавиш для less 0. Подготовить Less к компиляции: ./configure --prefix=/usr --sysconfdir=/etc Значение параметров настройки: --sysconfdir=/etc Эта опция указывает программам, созданным пакетом, искать в /etc файлы конфигурации. 1. Скомпилируйте пакет: make 2. Этот пакет не поставляется с набором тестов. 3. Установите пакет: make install |
87. (8.41.) Perl-5.34.0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
0. Во-первых, примените патч, устраняющий проблему, обнаруженную в последних версиях gdbm: patch -Np1 -i ../perl-5.34.0-upstream_fixes-1.patch 1. Эта версия Perl теперь создает модули Compress::Raw::Zlib и Compress::Raw::BZip2. По умолчанию Perl будет использовать внутреннюю копию исходников для сборки. Введите следующую команду, чтобы Perl использовал библиотеки, установленные в системе: export BUILD_ZLIB=False export BUILD_BZIP2=0 2. Чтобы иметь полный контроль над тем, как настроен Perl, вы можете удалить опции « -des » из следующей команды и вручную выбрать способ сборки этого пакета. В качестве альтернативы используйте команду точно так же, как показано ниже, чтобы использовать значения по умолчанию, которые Perl автоматически определяет: sh Configure -des \ -Dprefix=/usr \ -Dvendorprefix=/usr \ -Dprivlib=/usr/lib/perl5/5.34/core_perl \ -Darchlib=/usr/lib/perl5/5.34/core_perl \ -Dsitelib=/usr/lib/perl5/5.34/site_perl \ -Dsitearch=/usr/lib/perl5/5.34/site_perl \ -Dvendorlib=/usr/lib/perl5/5.34/vendor_perl \ -Dvendorarch=/usr/lib/perl5/5.34/vendor_perl \ -Dman1dir=/usr/share/man/man1 \ -Dman3dir=/usr/share/man/man3 \ -Dpager="/usr/bin/less -isR" \ -Duseshrplib \ -Dusethreads Значение параметров настройки: -Dvendorprefix=/usr Это гарантирует , что Perl знает, как сообщить пакетам, где они должны устанавливать свои модули Perl. -Dpager="/usr/bin/less -isR" Это гарантирует, что lessвместо more. -Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3 Поскольку Groff еще не установлен, Configure считает, что man-страницы для Perl нам не нужны. Выдача этих параметров отменяет это решение. -Duseshrplib Создайте общую библиотеку libperl, необходимую для некоторых модулей Perl. -Dusethreads Создайте Perl с поддержкой потоков. -Dprivlib,-Darchlib,-Dsitelib,... Эти настройки определяют, где Perl ищет установленные модули. Редакторы LFS решили поместить их в структуру каталогов, основанную на версии Perl Major.Minor (5.34), что позволяет обновлять Perl до более новых уровней исправлений (5.34.0) без необходимости повторной переустановки всех модулей. 3. Скомпилируйте пакет: make 4. Для проверки результатов (примерно 11 SBU) выдайте: make test 5. Установите пакет и очистите: make install unset BUILD_ZLIB BUILD_BZIP2 6. В пакет входит: corelist Интерфейс командной строки для Module::CoreList cpan Взаимодействие с комплексной сетью архивов Perl (CPAN) из командной строки enc2xs Создает расширение Perl для модуля Encode либо из сопоставлений символов Unicode, либо из файлов кодирования Tcl. encguess Угадайте тип кодировки одного или нескольких файлов h2ph Преобразует .hзаголовочные файлы C в заголовочные файлы .phPerl h2xs Преобразует .hзаголовочные файлы C в расширения Perl instmodsh Сценарий оболочки для проверки установленных модулей Perl и создания архива из установленного модуля. json_pp Преобразует данные между определенными входными и выходными форматами libnetcfg Может использоваться для настройки libnetмодуля Perl perl Объединяет некоторые из лучших функций C, sed , awk и sh в единый язык швейцарской армии. perl5.34.0 Жесткая ссылка на perl perlbug Используется для создания отчетов об ошибках Perl или модулей, которые поставляются с ним, и отправки их по почте. perldoc Отображает часть документации в формате pod, которая встроена в дерево установки Perl или в сценарий Perl. perlivp Процедура проверки установки Perl; его можно использовать для проверки правильности установки Perl и его библиотек. perlthanks Используется для создания благодарственных сообщений для отправки по почте разработчикам Perl. piconv Perl-версия конвертера кодировки символов iconv pl2pm Грубый инструмент для преобразования файлов Perl4 в модули .plPerl5 ..pm pod2html Преобразует файлы из формата pod в формат HTML. pod2man Преобразует данные модуля в форматированный ввод *roff. pod2html Преобразует данные модуля в форматированный текст ASCII. pod2usage Печатает сообщения об использовании из встроенных документов pod в файлы podchecker Проверяет синтаксис файлов документации формата pod. podselect Отображает выбранные разделы документации модуля prove Инструмент командной строки для запуска тестов с модулем Test::Harness. ptar - tar - подобная программа, написанная на Perl ptardiff Программа Perl, сравнивающая извлеченный архив с нераспакованным. ptargrep Программа Perl, которая применяет сопоставление с образцом к содержимому файлов в tar-архиве. shasum Печатает или проверяет контрольные суммы SHA splain Используется для принудительной диагностики подробного предупреждения в Perl. xsubpp Преобразует код Perl XS в код C zipdetails Отображает сведения о внутренней структуре Zip-файла. |
88. (8.42.) XML::Parser-2.46
1 2 3 4 5 6 7 8 9 10 11 12 13 |
!!! Expat предоставляет интерфейс Perl Expat !!! Модуль XML::Parser представляет собой Perl-интерфейс к XML-парсеру Джеймса Кларка Expat. 0. Подготовьте XML::Parser к компиляции: perl Makefile.PL 1. Скомпилируйте пакет: make 2. Чтобы проверить результаты, введите: make test 3. Установите пакет: make install |
89. (8.43.) Intltool-0.51.0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
!!! ntltool — это инструмент интернационализации, используемый для извлечения переводимых строк из исходных файлов. !!! intltoolize Подготавливает пакет для использования intltool !!! intltool-extract Генерирует файлы заголовков, которые могут быть прочитаны gettext !!! intltool-merge Объединяет переведенные строки в различные типы файлов !!! intltool-prepare Обновляет файлы pot и объединяет их с файлами перевода !!! intltool-update Обновляет файлы шаблонов po и объединяет их с переводами 0. Сначала исправьте предупреждение, вызванное perl-5.22 и более поздними версиями: sed -i 's:\\\${:\\\$\\{:' intltool-update.in !!! Примечание !!! Приведенное выше регулярное выражение выглядит необычно из-за всех обратных косых черт. Что он делает, !!! так это добавляет обратную косую черту перед правой фигурной скобкой в последовательности '\${', что приводит к '\$\{'. 1. Подготовьте Intltool к компиляции: ./configure --prefix=/usr 2. Скомпилируйте пакет: make 3. Чтобы проверить результаты, введите: make check 4. Установите пакет: make install install -v -Dm644 doc/I18N-HOWTO /usr/share/doc/intltool-0.51.0/I18N-HOWTO |
90. (8.44.) Autoconf-2.71
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
!!! Пакет Autoconf содержит программы для создания сценариев оболочки, которые могут автоматически конфигурировать исходный код. 0. Подготовьте Autoconf к компиляции: ./configure --prefix=/usr 1. Скомпилируйте пакет: make 2. Чтобы проверить результаты, введите: make check !!! Примечание !!! Время тестирования autoconf может быть значительно сокращено в системе с несколькими ядрами. !!! Для этого добавьте TESTSUITEFLAGS=-j<N> к строке выше. Например, использование -j4 может сократить время тестирования более чем на 60 процентов. 3. Установите пакет: make install 4. Пакет содержит: autoconf Создает сценарии оболочки, которые автоматически настраивают пакеты исходного кода программного обеспечения для адаптации ко многим видам Unix-подобных систем; создаваемые им сценарии конфигурации независимы — для их запуска не требуется программа autoconf autoheader Инструмент для создания файлов шаблонов операторов C #define для использования в configure 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файлов для программного пакета; она выводит идентификаторы, которые пакет использует в условных выражениях препроцессора C. [Если пакет уже настроен для некоторой переносимости, эта программа может помочь определить, что нужно проверить configure. Он также может заполнять пробелы в configure.in файле, сгенерированном autoscan.] |
91. (8.45.) Automake-1.16.5
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
!!! Пакет Automake содержит программы для создания файлов Makefile для использования с Autoconf. !!! 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 0. Подготовьте Automake к компиляции: ./configure --prefix=/usr --docdir=/usr/share/doc/automake-1.16.5 1. Скомпилируйте пакет: make 2. Тесты. Использование параметра make -j4 ускоряет тесты даже на системах с одним процессором из-за внутренних задержек в отдельных тестах. Чтобы проверить результаты, введите: make -j4 check Известно, что тест t/subobj.sh не прошел. 3. Установите пакет: make install |
92. (8.46.) OpenSSL-3.0.1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
!!! Пакет OpenSSL содержит инструменты управления и библиотеки, относящиеся к криптографии. !!! Они полезны для предоставления криптографических функций другим пакетам, таким как OpenSSH, приложениям электронной почты и веб-браузерам (для доступа к сайтам HTTPS). 0. Подготовьте OpenSSL к компиляции: ./config --prefix=/usr \ --openssldir=/etc/ssl \ --libdir=lib \ shared \ zlib-dynamic 1. Скомпилируйте пакет: make 2 Тесты. Чтобы проверить результаты, введите: make test !!! Известно, что один тест, 30-test_afalg.t, дает сбой в некоторых конфигурациях ядра (в зависимости от несовместимых значений параметров CONFIG_CRYPTO_USER_API*). !!! Если он не пройден, его можно смело игнорировать. 3. Установите пакет: sed -i '/INSTALL_LIBS/s/libcrypto.a libssl.a//' Makefile make MANSUFFIX=ssl install 4. Добавьте версию к имени каталога документации, чтобы она соответствовала другим пакетам: mv -v /usr/share/doc/openssl /usr/share/doc/openssl-3.0.1 5. При желании установите дополнительную документацию: mkdir -p /usr/share/doc/openssl-3.0.1 cp -vfr doc/* /usr/share/doc/openssl-3.0.1 !!! Примечание !!! Вы должны обновлять OpenSSL, когда объявляется новая версия, исправляющая уязвимости. !!! Релизы выпускаются последовательно, с буквой для каждого выпуска после первоначального выпуска (например, 1.1.1, 1.1.1a, 1.1.1b и т. д.). !!! Поскольку LFS устанавливает только общие библиотеки, нет необходимости перекомпилировать пакеты, которые ссылаются на libcrypto.soили libssl.so при обновлении той же серии. !!! Однако любые запущенные программы, связанные с этими библиотеками, необходимо остановить и перезапустить. !!! c_rehash это Perl - скрипт, который сканирует все файлы в каталоге и добавляет символические ссылки к их хеш-значениям. !!! openssl — это инструмент командной строки для использования различных криптографических функций криптографической библиотеки OpenSSL из оболочки. Его можно использовать для различных функций, которые задокументированы в man 1 openssl. !!! libcrypto.so реализует широкий спектр криптографических алгоритмов, используемых в различных интернет-стандартах. Услуги, предоставляемые этой библиотекой, используются реализациями OpenSSL SSL, TLS и S/MIME, а также они использовались для реализации OpenSSH , OpenPGP и других криптографических стандартов. !!! libssl.so реализует протокол безопасности транспортного уровня (TLS v1). Он предоставляет богатый API, документацию по которому можно найти, запустив man 3 ssl . |
93. (8.47.) Kmod-29
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
!!! Пакет Kmod содержит библиотеки и утилиты для загрузки модулей ядра. !!! depmod Создает файл зависимостей на основе символов, которые он находит в существующем наборе модулей; этот файл зависимостей используется modprobe для автоматической загрузки необходимых модулей !!! insmod Устанавливает загружаемый модуль в работающее ядро !!! kmod Загружает и выгружает модули ядра !!! lsmod Список загруженных модулей !!! modinfo Исследует объектный файл, связанный с модулем ядра, и отображает всю информацию, которую он может собрать. !!! modprobe Использует файл зависимостей, созданный depmod , для автоматической загрузки соответствующих модулей. !!! rmmod Выгружает модули из работающего ядра !!! libkmod Эта библиотека используется другими программами для загрузки и выгрузки модулей ядра. 0. Подготовьте Kmod для компиляции: ./configure --prefix=/usr \ --sysconfdir=/etc \ --with-openssl \ --with-xz \ --with-zstd \ --with-zlib Значение параметров настройки: --with-openssl Эта опция позволяет Kmod обрабатывать подписи PKCS7 для модулей ядра. --with-xz, --with-zlib, и--with-zstd Эти параметры позволяют Kmod обрабатывать сжатые модули ядра. 1. Скомпилируйте пакет: make 2. Тесты: Для набора тестов этого пакета требуются необработанные заголовки ядра (а не « продезинфицированные » заголовки ядра, установленные ранее), которые выходят за рамки LFS. 3. Установите пакет и создайте символические ссылки для совместимости с Module-Init-Tools (пакет, который ранее обрабатывал модули ядра Linux): make install for target in depmod insmod modinfo modprobe rmmod; do ln -sfv ../bin/kmod /usr/sbin/$target done ln -sfv kmod /usr/bin/lsmod |
94. (8.48.1) Libelf from Elfutils-0.186
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
!!! Libelf — это библиотека для обработки файлов ELF (Executable and Linkable Format). !!! libelf Содержит функции API для обработки объектных файлов ELF. 0. Подготовьте Libelf к компиляции: ./configure --prefix=/usr \ --disable-debuginfod \ --enable-libdebuginfod=dummy 1. Скомпилируйте пакет: make 2. Тесты: Чтобы проверить результаты, введите: make check 3. Установить только Libelf: make -C libelf install install -vm644 config/libelf.pc /usr/lib/pkgconfig rm /usr/lib/libelf.a |
95. (8.49.) Libffi-3.4.2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
!!! libffi содержит API-функции внешнего интерфейса функций !!! Примечание !!! Подобно GMP, libffi строится с оптимизацией, специфичной для используемого процессора. !!! При сборке для другой системы экспортируйте CFLAGS и CXXFLAGS, чтобы указать общую сборку для вашей архитектуры. !!! Если этого не сделать, все приложения, ссылающиеся на libffi, будут вызывать ошибки недопустимых операций. 0. Подготовьте libffi к компиляции: ./configure --prefix=/usr \ --disable-static \ --with-gcc-arch=native \ --disable-exec-static-tramp Значение опции конфигурации: --with-gcc-arch=native Убедитесь, что GCC оптимизируется для текущей системы. Если это не указано, система угадывается, и сгенерированный код может быть неправильным для некоторых систем. Если сгенерированный код будет скопирован из собственной системы в систему с меньшими возможностями, используйте менее эффективную систему в качестве параметра. Подробнее об альтернативных типах систем см. опции x86 в руководстве по GCC . --disable-exec-static-tramp Отключите статическую поддержку батута. Это новая функция безопасности в libffi, но некоторые пакеты BLFS (особенно GJS и gobject-introspection ) не адаптированы для нее. 1. Скомпилируйте пакет: make 2. Тест. Чтобы проверить результаты, введите: make check 3. Установите пакет: make install |
96. (8.50.) Python-3.10.2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
!!! 2to3 это программа Python , которая читает исходный код Python 2.x и применяет ряд исправлений для преобразования его в действительный код Python 3.x. !!! idle3 — это скрипт-оболочка, который открывает редактор графического интерфейса с поддержкой Python. Для запуска этого скрипта вы должны установить Tk перед Python, чтобы модуль Tkinter Python был собран. !!! pip3 Установщик пакетов для Python. Вы можете использовать pip для установки пакетов из индекса пакетов Python и других индексов. !!! pydoc3 это инструмент документации Python !!! python3 интерпретируемый, интерактивный, объектно-ориентированный язык программирования 0. Подготовьте Python к компиляции: ./configure --prefix=/usr \ --enable-shared \ --with-system-expat \ --with-system-ffi \ --with-ensurepip=yes \ --enable-optimizations Значение параметров настройки: --with-system-expat Этот переключатель включает привязку к системной версии Expat . --with-system-ffi Этот переключатель включает линковку с системной версией libffi . --with-ensurepip=yes Этот переключатель позволяет создавать программы упаковки pip и setuptools . --enable-optimizations Этот переключатель обеспечивает стабильную, но дорогостоящую оптимизацию. 1. Скомпилируйте пакет: make 2. Запускать тесты на этом этапе не рекомендуется. Известно, что тесты зависают на неопределенный срок в частичной среде LFS. При желании тесты можно запустить повторно в конце этой главы или при переустановке Python 3 в BLFS. Чтобы запустить тесты в любом случае, введите команду make test . 3. Установите пакет: make install 4. При желании установите предварительно отформатированную документацию: install -v -dm755 /usr/share/doc/python-3.10.2/html tar --strip-components=1 \ --no-same-owner \ --no-same-permissions \ -C /usr/share/doc/python-3.10.2/html \ -xvf ../python-3.10.2-docs-html.tar.bz2 Значение команд установки документации: --no-same-ownerа также--no-same-permissions Убедитесь, что установленные файлы имеют правильную собственность и разрешения. Без этих опций использование tar установит файлы пакета со значениями вышестоящего создателя. |
97. (8.51.) Ninja-1.10.2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
!!! Ninja — это небольшая система сборки с упором на скорость. 0. Использование приведенной ниже дополнительной процедуры позволяет пользователю ограничить количество параллельных процессов с помощью переменной среды NINJAJOBS. export NINJAJOBS=4 1. При желании добавьте возможность использовать переменную среды NINJAJOBS, запустив: sed -i '/int Guess/a \ int j = 0;\ char* jobs = getenv( "NINJAJOBS" );\ if ( jobs != NULL ) j = atoi( jobs );\ if ( j > 0 ) return j;\ ' src/ninja.cc 2. Создайте ниндзя с помощью: python3 configure.py --bootstrap Смысл варианта сборки: --bootstrap Этот параметр заставляет ниндзя перестраиваться под текущую систему. 3. Чтобы проверить результаты, введите: ./ninja ninja_test ./ninja_test --gtest_filter=-SubprocessTest.SetWithLots 4. Установите пакет: 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 |
98. (8.52.) Meson-0.61.1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
!!! Meson — это система сборки с открытым исходным кодом, которая должна быть чрезвычайно быстрой и максимально удобной для пользователя. 0. Скомпилируйте Meson с помощью следующей команды: python3 setup.py build 1. Тесты. Этот пакет не поставляется с набором тестов. 2. Установите пакет: python3 setup.py install --root=dest cp -rv dest/* / install -vDm644 data/shell-completions/bash/meson /usr/share/bash-completion/completions/meson install -vDm644 data/shell-completions/zsh/_meson /usr/share/zsh/site-functions/_meson Значение параметров установки: --root=dest По умолчанию python3 setup.py install устанавливает различные файлы (например, справочные страницы) в яйца Python. С указанным корневым расположением setup.py устанавливает эти файлы в стандартную иерархию. Затем иерархию можно просто скопировать в стандартное расположение. |
99. (8.53.) Coreutils-9.0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 |
!!! Пакет Coreutils содержит утилиты для отображения и настройки основных характеристик системы. 0. POSIX требует, чтобы программы из Coreutils правильно распознавали границы символов даже в многобайтовых локалях. Следующий патч исправляет это несоответствие и другие ошибки, связанные с интернационализацией. patch -Np1 -i ../coreutils-9.0-i18n-1.patch !!! Примечание !!! В прошлом в этом патче было обнаружено много ошибок. !!! Сообщая о новых ошибках сопровождающим Coreutils, сначала проверьте, воспроизводятся ли они без этого исправления. 1. Теперь исправьте проблему с возвращаемыми значениями chmod: patch -Np1 -i ../coreutils-9.0-chmod_fix-1.patch 2. Теперь подготовьте Coreutils к компиляции: autoreconf -fiv FORCE_UNSAFE_CONFIGURE=1 ./configure \ --prefix=/usr \ --enable-no-install-program=kill,uptime Значение параметров настройки: autoreconf Патч для интернационализации изменил систему сборки пакета, поэтому файлы конфигурации необходимо сгенерировать заново. FORCE_UNSAFE_CONFIGURE=1 Эта переменная среды позволяет создавать пакет от имени rootпользователя. --enable-no-install-program=kill,uptime Цель этого переключателя — запретить Coreutils устанавливать двоичные файлы, которые позже будут установлены другими пакетами. 3. Скомпилируйте пакет: make 4. Тесты. Перейдите к «Установить пакет» , если не запускаете набор тестов. Теперь набор тестов готов к запуску. Сначала запустите тесты, предназначенные для запуска пользователем root: make NON_ROOT_USERNAME=tester check-root Мы собираемся запустить оставшуюся часть тестов от имени testerпользователя. Некоторые тесты требуют, чтобы пользователь был членом более чем одной группы. Чтобы эти тесты не пропустить, добавим временную группу и сделаем пользователя testerее частью: echo "dummy:x:102:tester" >> /etc/group Исправьте некоторые разрешения, чтобы пользователь без полномочий root мог компилировать и запускать тесты: chown -Rv tester . Теперь запустите тесты: su tester -c "PATH=$PATH make RUN_EXPENSIVE_TESTS=yes check" Известно, что тест test-getlogin не работает в среде chroot LFS. Удалить временную группу: sed -i '/dummy/d' /etc/group Установите пакет: 5. Установка пакета make install Переместите программы в места, указанные FHS: 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"/' /usr/share/man/man8/chroot.8 6. Что входит в пакет: [ Реальная команда /usr/bin/[, которая является синонимом тестовой команды . base32 Кодирует и декодирует данные в соответствии со спецификацией base32 (RFC 4648). base64 Кодирует и декодирует данные в соответствии со спецификацией base64 (RFC 4648). b2sum Печатает или проверяет контрольные суммы BLAKE2 (512 бит) basename Удаляет любой путь и данный суффикс из имени файла basenc Кодирует или декодирует данные с использованием различных алгоритмов cat Объединяет файлы в стандартный вывод chcon Изменяет контекст безопасности для файлов и каталогов chgrp Изменяет групповое владение файлами и каталогами chmod Изменяет разрешения каждого файла на заданный режим; режим может быть либо символическим представлением вносимых изменений, либо восьмеричным числом, представляющим новые разрешения. chown Изменяет права пользователя и/или группы на файлы и каталоги. chroot Запускает команду с указанным каталогом в качестве /каталога cksum Выводит контрольную сумму Cyclic Redundancy Check (CRC) и количество байтов для каждого указанного файла. comm Сравнивает два отсортированных файла, выводя в три столбца уникальные и общие строки. ср Копирует файлы 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 Сообщает эффективный идентификатор пользователя, идентификатор группы и членство в группах текущего пользователя или указанного пользователя. install Копирует файлы, задавая их режимы разрешений и, если возможно, их владельца и группу join Соединяет строки с одинаковыми полями соединения из двух отдельных файлов. link Создает жесткую ссылку с заданным именем на файл ln Делает жесткие ссылки или мягкие (символические) ссылки между файлами logname Сообщает имя входа текущего пользователя ls Перечисляет содержимое каждого заданного каталога md5sum Сообщает или проверяет контрольные суммы Message Digest 5 (MD5) mkdir Создает каталоги с заданными именами mkfifo Создает «первым пришел — первым ушел» (FIFO), «именованный канал» на языке UNIX с заданными именами. mknod Создает узлы устройств с заданными именами; узел устройства представляет собой специальный символьный файл, специальный файл блока или FIFO. mktemp Безопасно создает временные файлы; он используется в сценариях mv Перемещает или переименовывает файлы или каталоги nice Запускает программу с измененным приоритетом планирования nl Нумерует строки из заданных файлов nohup Выполняет команду, защищенную от зависаний, с перенаправлением ее вывода в файл журнала. nproc Выводит количество процессорных единиц, доступных для процесса. numfmt Преобразует числа в или из удобочитаемых строк od Создает дамп файлов в восьмеричном и других форматах paste Объединяет данные файлы, последовательно соединяя соответствующие строки рядом друг с другом, разделенные символами табуляции. pathchk Проверяет, являются ли имена файлов допустимыми или переносимыми pinky Легкий клиент для пальцев; он сообщает некоторую информацию о данных пользователях pr Разбивает файлы на страницы и столбцы для печати printenv Печатает среду printf Выводит заданные аргументы в соответствии с заданным форматом, подобно функции C 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 Удаляет указанный файл users Сообщает имена пользователей, которые в данный момент вошли в систему vdir То же, что ls -l wc Сообщает количество строк, слов и байтов для каждого заданного файла, а также общую строку, если задано более одного файла. who Сообщает, кто вошел в систему whoami Сообщает имя пользователя, связанное с текущим эффективным идентификатором пользователя. yes Повторно выводит « y » или заданную строку, пока не будет уничтожен libstdbuf Библиотека, используемая stdbuf |
100. (8.54.) Check-0.15.2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
!!! Check — это фреймворк модульного тестирования для C. !!! checkmk Сценарий Awk для создания модульных тестов C для использования с платформой модульного тестирования Check. !!! libcheck.{a,so} Содержит функции, позволяющие вызывать Check из тестовой программы. 0. Подготовить чек к компиляции: ./configure --prefix=/usr --disable-static 1. Соберите пакет: make 2. Компиляция завершена. Чтобы запустить набор тестов Check, введите следующую команду: make check 3. Установите пакет: make docdir=/usr/share/doc/check-0.15.2 install |
101. (8.55.) Diffutils-3.8
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
cmp Сравнивает два файла и сообщает, различаются ли они и в каких байтах diff Сравнивает два файла или каталога и сообщает, какие строки в файлах отличаются diff3 Сравнивает три файла построчно sdiff Объединяет два файла и интерактивно выводит результаты !!! Пакет Diffutils содержит программы, которые показывают различия между файлами или каталогами. 0. Подготовьте Diffutils для компиляции: ./configure --prefix=/usr 1. Скомпилируйте пакет: make 2. Чтобы проверить результаты, введите: make check 3. Установите пакет: make install |
102. (8.56.) Gawk-5.1.1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
awk ссылка на гавк gawk Программа для работы с текстовыми файлами; это реализация GNU awk gawk-5.1.1 Жесткая ссылка на gawk !!! Пакет Gawk содержит программы для работы с текстовыми файлами. 0. Во-первых, убедитесь, что некоторые ненужные файлы не установлены: sed -i 's/extras//' Makefile.in 1. Подготовьте Gawk к компиляции: ./configure --prefix=/usr 2. Скомпилируйте пакет: make 3. Чтобы проверить результаты, введите: make check 4. Установите пакет: make install 5. При желании установите документацию: mkdir -pv /usr/share/doc/gawk-5.1.1 cp -v doc/{awkforai.txt,*.{eps,pdf,jpg}} /usr/share/doc/gawk-5.1.1 |
103. (8.57.) Findutils-4.9.0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
!!! Пакет Findutils содержит программы для поиска файлов. !!! Эти программы предназначены для рекурсивного поиска в дереве каталогов, а также для создания, !!! обслуживания и поиска в базе данных (часто быстрее, чем рекурсивный поиск, но ненадежно, если база данных недавно не обновлялась). !!! find Ищет в заданных деревьях каталогов файлы, соответствующие указанным критериям. !!! locate Выполняет поиск в базе данных имен файлов и сообщает об именах, которые содержат заданную строку или соответствуют заданному шаблону. !!! updatedb Обновляет базу данных местонахождения ; он сканирует всю файловую систему (включая другие файловые системы, которые в настоящее время смонтированы, если не указано иное) и помещает каждое найденное имя файла в базу данных. !!! xargs Может использоваться для применения данной команды к списку файлов 0. Подготовьте Findutils к компиляции: case $(uname -m) in i?86) TIME_T_32_BIT_OK=yes ./configure --prefix=/usr --localstatedir=/var/lib/locate ;; x86_64) ./configure --prefix=/usr --localstatedir=/var/lib/locate ;; esac Значение параметров настройки: TIME_32_BIT_OK=yes Этот параметр необходим для сборки на 32-битной системе. --localstatedir Этот параметр изменяет расположение базы данных локации на /var/lib/locate, что соответствует требованиям FHS. 1. Скомпилируйте пакет: make 2. Чтобы проверить результаты, введите: chown -Rv tester . su tester -c "PATH=$PATH make check" 3. Установите пакет: make install |
104. (8.58.) Groff-1.22.4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
!!! Пакет Groff содержит программы для обработки и форматирования текста. addftinfo Читает файл шрифта troff и добавляет некоторую дополнительную информацию о метрике шрифта, используемую системой groff . afmtodit Создает файл шрифта для использования с groff и grops. chem Препроцессор Groff для создания диаграмм химической структуры eqn Компилирует описания уравнений, встроенные во входные файлы troff, в команды, понятные troff . eqn2graph Преобразует troff EQN (уравнение) в обрезанное изображение. gdiffmk Отмечает различия между файлами groff/nroff/troff. glilypond Преобразовывает ноты, написанные на языке lilypond, в язык groff. gperl Препроцессор для groff, позволяющий добавлять код Perl в файлы groff. gpinyin Препроцессор для groff, позволяющий добавлять китайско-европейский язык пиньинь в файлы 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 Создает инвертированный индекс для библиографических баз данных с указанным файлом для использования с refer , lookbib и lkbib lkbib Выполняет поиск в библиографических базах данных ссылок, содержащих указанные ключи, и сообщает о любых найденных ссылках. lookbib Печатает подсказку при стандартной ошибке (если стандартный ввод не является терминалом), читает строку, содержащую набор ключевых слов из стандартного ввода, ищет в библиографических базах данных в указанном файле ссылки, содержащие эти ключевые слова, печатает все ссылки, найденные на стандартный вывод и повторяет этот процесс до конца ввода mmroff Простой препроцессор для groff neqn Уравнения форматов для выходных данных американского стандартного кода для обмена информацией (ASCII) nroff Скрипт, эмулирующий команду nroff с помощью groff pdfmom Является оболочкой groff, которая упрощает создание PDF-документов из файлов, отформатированных с помощью макросов mom. pdfoff Создает 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 Копирует содержимое файла в стандартный вывод, за исключением того, что строки между .[ и .] интерпретируются как цитаты, а строки между .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 , которая также запускает препроцессоры и постпроцессоры в соответствующем порядке и с соответствующими !!! Грофф ожидает, что переменная среды PAGEбудет содержать размер бумаги по умолчанию. !!! Подходит для пользователей в США PAGE=letter. !!! В другом месте PAGE=A4 может быть более подходящим. !!! Хотя размер бумаги по умолчанию настраивается во время компиляции, его можно переопределить позже, указав в файле либо « A4 » , либо « letter » ./etc/papersize 0. Подготовьте Groff к компиляции: #PAGE=<paper_size> ./configure --prefix=/usr PAGE=A4 ./configure --prefix=/usr 1. Этот пакет не поддерживает параллельную сборку. Скомпилируйте пакет: make -j1 2. Этот пакет не поставляется с набором тестов. 3. Установите пакет: make install |
105. (8.59.) GRUB-2.06
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
!!! Пакет GRUB содержит унифицированный загрузчик GRand. !!! Примечание !!! Если ваша система поддерживает UEFI и вы хотите загрузить LFS с UEFI, вы можете пропустить этот пакет в LFS и установить GRUB с поддержкой UEFI (и его зависимости), !!! https://www.linuxfromscratch.org/blfs/view/stable-systemd/postlfs/grub-efi.html 0. Подготовьте GRUB к компиляции: ./configure --prefix=/usr \ --sysconfdir=/etc \ --disable-efiemu \ --disable-werror Значение новых опций конфигурации: --disable-werror Это позволяет завершить сборку с предупреждениями, появившимися в более поздних версиях Flex. --disable-efiemu Этот параметр сводит к минимуму то, что создается за счет отключения функции и тестирования программ, не нужных для LFS. 1. Скомпилируйте пакет: make 2. Тесты: Набор тестов для этих пакетов не рекомендуется. Большинство тестов зависят от пакетов, недоступных в ограниченной среде LFS. Чтобы все равно запустить тесты, запустите make check 3. Установите пакет: make install mv -v /etc/bash_completion.d/grub /usr/share/bash-completion/completions 4. Содержимое пакета: grub-bios-setup Вспомогательная программа для grub-install grub-editenv Инструмент для редактирования блока окружения grub-file Проверяет, относится ли FILE к указанному типу. grub-fstest Инструмент для отладки драйвера файловой системы grub-glue-efi Обрабатывает образы EFI ia32 и amd64 и склеивает их в соответствии с форматом 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 Подготавливает сетевой загрузочный каталог GRUB grub-mkpasswd-pbkdf2 Генерирует зашифрованный пароль PBKDF2 для использования в меню загрузки. grub-mkrelpath Делает системный путь относительно его корня grub-mkrescue Создайте загрузочный образ GRUB, подходящий для дискеты или CDROM/DVD. grub-mkstandalone Создает отдельное изображение grub-ofpathname Вспомогательная программа, которая печатает путь к устройству GRUB. grub-probe Информация об устройстве зонда для заданного пути или устройства grub-reboot Устанавливает загрузочную запись по умолчанию для GRUB только для следующей загрузки grub-render-label Рендеринг Apple .disk_label для компьютеров Apple Mac grub-script-check Проверяет скрипт конфигурации GRUB на наличие синтаксических ошибок grub-set-default Устанавливает загрузочную запись по умолчанию для GRUB grub-sparc64-setup Вспомогательная программа для grub-setup grub-syslinux2cfg Преобразование файла конфигурации syslinux в формат grub.cfg |
106. (8.60.) Gzip-1.11
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
!!! Пакет Gzip содержит программы для сжатия и распаковки файлов. 0. Подготовьте Gzip к компиляции: ./configure --prefix=/usr 1. Скомпилируйте пакет: make 2. Чтобы проверить результаты, введите: make check 3. Установите пакет: make install 4. Содержимое пакета: gunzip Распаковывает gzip-файлы gzexe Создает самораспаковывающиеся исполняемые файлы gzip Сжимает данные файлы, используя кодировку Lempel-Ziv (LZ77) uncompress Распаковывает сжатые файлы zcat Распаковывает заданные gzip-файлы в стандартный вывод zcmp Запускает cmp для gzip-файлов zdiff Запускает diff для файлов, сжатых gzip zegrep Запускает egrep для gzip-файлов zfgrep Запускает fgrep для gzip-файлов zforce Принудительно устанавливает .gz расширение для всех заданных файлов, которые являются файлами, сжатыми gzip, чтобы gzip не сжимал их снова; это может быть полезно, когда имена файлов были усечены во время передачи файла zgrep Запускает grep для gzip-файлов zless Меньше работает с файлами, сжатыми gzip zmore Больше работает с файлами, сжатыми gzip znew Повторно сжимает файлы из формата Compress в формат gzip — .Z чтобы .gz |
107. (8.61.) IPRoute2-5.16.0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
!!! Пакет IPRoute2 содержит программы для базовых и расширенных сетей на основе IPV4. 0. Программа arpd , включенная в этот пакет, не будет собрана, так как она зависит от базы данных Berkeley DB, которая не установлена в LFS. !!! Однако каталог для arpd и справочная страница все равно будут установлены. Предотвратите это, выполнив приведенные ниже команды. !!! Если необходим двоичный файл arpd , инструкции по компиляции Berkeley DB можно найти в книге BLFS по адресу https://www.linuxfromscratch.org/blfs/view/stable-systemd/server/db.html . sed -i /ARPD/d Makefile rm -fv man/man8/arpd.8 1. Скомпилируйте пакет: make 2. Этот пакет не имеет рабочего набора тестов. 3. Установите пакет: make SBINDIR=/usr/sbin install 4. При желании установите документацию: mkdir -pv /usr/share/doc/iproute2-5.16.0 cp -v COPYING README* /usr/share/doc/iproute2-5.16.0 5. Содержимое bridge Настраивает сетевые мосты ctstat Утилита состояния подключения genl Общий интерфейс утилиты netlink ifcfg Оболочка сценария оболочки для команды ip [Обратите внимание, что для этого требуются программы arping и rdisk из пакета iputils, который можно найти по адресу http://www.skbuff.net/iputils/ .] ifstat Показывает статистику интерфейса, включая количество переданных и полученных пакетов по интерфейсам. ip Основной исполняемый файл. Он имеет несколько различных функций: ip link<device> позволяет пользователям просматривать состояние устройств и вносить изменения ip addr позволяет пользователям просматривать адреса и их свойства, добавлять новые адреса и удалять старые. ip neighbor позволяет пользователям просматривать привязки соседей и их свойства, добавлять новые записи соседей и удалять старые. ip rule позволяет пользователям просматривать политики маршрутизации и изменять их ip route позволяет пользователям просматривать таблицу маршрутизации и изменять правила таблицы маршрутизации. ip rule позволяет пользователям просматривать IP-туннели и их свойства, а также изменять их. ip maddr позволяет пользователям просматривать многоадресные адреса и их свойства и изменять их. ip mroute позволяет пользователям устанавливать, изменять или удалять многоадресную маршрутизацию. ip monitor позволяет пользователям постоянно отслеживать состояние устройств, адресов и маршрутов lnstat Предоставляет сетевую статистику Linux; это обобщенная и более полнофункциональная замена старой программы rtstat nstat Показывает статистику сети routef Компонент ip route . Это для сброса таблиц маршрутизации routel Компонент ip route . Это для перечисления таблиц маршрутизации 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. |
107. (8.62.) Kbd-2.4.0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
!!! Пакет Kbd содержит файлы таблиц ключей, консольные шрифты и клавиатурные утилиты. 0. Поведение клавиш возврата и удаления неодинаково для всех раскладок в пакете Kbd. Следующий патч устраняет эту проблему для раскладок i386: После исправления клавиша возврата генерирует символ с кодом 127, а клавиша удаления генерирует известную escape-последовательность. patch -Np1 -i ../kbd-2.4.0-backspace-1.patch 1. Удалите избыточную программу resizecons (она требует несуществующей svgalib для предоставления файлов видеорежима — для нормального использования setfont соответствующим образом изменяет размеры консоли) вместе с ее справочной страницей. sed -i '/RESIZECONS_PROGS=/s/yes/no/' configure sed -i 's/resizecons.8 //' docs/man/man8/Makefile.in 2. Подготовьте Kbd для компиляции: ./configure --prefix=/usr --disable-vlock Значение опции конфигурации: --disable-vlock Этот параметр предотвращает сборку утилиты vlock, поскольку для нее требуется библиотека PAM, которая недоступна в среде chroot. 3. Скомпилируйте пакет: make 4. Чтобы проверить результаты, введите: make check 5. Установите пакет: make install !!! Примечание !!! Для некоторых языков (например, белорусского) пакет Kbd не предоставляет полезную раскладку, где стандартная раскладка « by » предполагает кодировку ISO-8859-5, !!! а обычно используется раскладка CP1251. Пользователи таких языков должны загружать рабочие раскладки отдельно. 6. При желании установите документацию: mkdir -pv /usr/share/doc/kbd-2.4.0 cp -R -v docs/doc/* /usr/share/doc/kbd-2.4.0 7. Содержание: chvt Изменяет виртуальный терминал переднего плана deallocvt Освобождает неиспользуемые виртуальные терминалы dumpkeys Сбрасывает таблицы перевода клавиатуры fgconsole Выводит номер активного виртуального терминала getkeycodes Распечатывает таблицу сопоставления сканкода ядра с кодом клавиши kbdinfo Получает информацию о состоянии консоли kbd_mode Сообщает или устанавливает режим клавиатуры kbdrate Устанавливает частоту повторения и задержки клавиатуры loadkeys Загружает таблицы перевода клавиатуры loadunimap Загружает таблицу сопоставления юникода и шрифта ядра. mapscrn Устаревшая программа, которая использовалась для загрузки определяемой пользователем таблицы преобразования символов вывода в драйвер консоли; теперь это делает setfont openvt Запускает программу на новом виртуальном терминале (VT) psfaddtable Добавляет таблицу символов Unicode в консольный шрифт. psfgettable Извлекает встроенную таблицу символов Unicode из консольного шрифта. psfstriptable Удаляет встроенную таблицу символов Unicode из консольного шрифта. psfxtable Обрабатывает таблицы символов Unicode для консольных шрифтов. setfont Изменяет шрифты расширенного графического адаптера (EGA) и видеографического массива (VGA) на консоли. setkeycodes Загружает записи таблицы сопоставления кода сканирования ядра с кодом клавиши; это полезно, если на клавиатуре есть необычные клавиши setleds Устанавливает флаги клавиатуры и светодиоды. setmetamode Определяет обработку мета-клавиш клавиатуры setvtrgb Устанавливает цветовую карту консоли во всех виртуальных терминалах showconsolefont Показывает текущий шрифт экрана консоли EGA/VGA. showkey Сообщает скан-коды, коды клавиш и коды ASCII клавиш, нажатых на клавиатуре. unicode_start Переводит клавиатуру и консоль в режим UNICODE [Не используйте эту программу, если ваш файл раскладки не находится в кодировке ISO-8859-1. Для других кодировок эта утилита выдает неправильные результаты.] unicode_stop Возвращает клавиатуру и консоль из режима UNICODE. |
108. (8.63.) Libpipeline-1.5.5
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
!!! Пакет Libpipeline содержит библиотеку для гибкого и удобного управления конвейерами подпроцессов. !!! libpipeline Эта библиотека используется для безопасного построения конвейеров между подпроцессами. 0. Подготовьте Libpipeline к компиляции: ./configure --prefix=/usr 1. Скомпилируйте пакет: make 2. Чтобы проверить результаты, введите: make check 3. Установите пакет: make install |
109. (8.64.) Make-4.3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
!!! Пакет Make содержит программу для управления генерацией исполняемых файлов и других не исходных файлов пакета из исходных файлов. !!! make Автоматически определяет, какие части пакета необходимо (повторно) скомпилировать, а затем выдает соответствующие команды. 0. Подготовьте Make к компиляции: ./configure --prefix=/usr 1. Скомпилируйте пакет: make 2. Чтобы проверить результаты, введите: make check 3. Установите пакет: make install |
110. (8.65.) Patch-2.7.6
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
!!! Пакет Patch содержит программу для изменения или создания файлов путем применения файла « заплаты » , обычно создаваемого программой diff. !!! Изменяет файлы в соответствии с файлом исправления (файл исправления обычно представляет собой список различий, созданный с помощью программы diff. !!! Применяя эти различия к исходным файлам, patch создает исправленные версии.) 0. Подготовьте патч к компиляции: ./configure --prefix=/usr 1. Скомпилируйте пакет: make 2. Чтобы проверить результаты, введите: make check 3. Установите пакет: make install |
110. (8.66.) Tar-1.34
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
!!! Пакет Tar предоставляет возможность создавать tar-архивы, а также выполнять различные другие операции с архивами. !!! Tar можно использовать в ранее созданных архивах для извлечения файлов, для хранения дополнительных файлов или для обновления или списка файлов, которые уже были сохранены. !!! tar Создает, извлекает файлы и составляет список содержимого архивов, также известных как tarballs. 0. Подготовьте Tar для компиляции: FORCE_UNSAFE_CONFIGURE=1 \ ./configure --prefix=/usr Значение опции конфигурации: FORCE_UNSAFE_CONFIGURE=1 Это заставляет тест для mknod запускаться как root. Обычно считается опасным запускать этот тест от имени rootпользователя, но, поскольку он выполняется в системе, которая была собрана лишь частично, переопределение допустимо. 1. Скомпилируйте пакет: make 2. Тесты: Чтобы проверить результаты, введите: make check Известно, что один тест с возможностями: бинарное сохранение/восстановление завершается неудачей (в LFS отсутствует selinux), но будет пропущен, если ядро хоста не поддерживает расширенные атрибуты в файловой системе, используемой для сборки LFS. 3. Установите пакет: make install make -C doc install-html docdir=/usr/share/doc/tar-1.34 |
111. (8.67.) Texinfo-6.8
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
!!! Пакет Texinfo содержит программы для чтения, записи и преобразования информационных страниц. info Используется для чтения информационных страниц, которые похожи на справочные страницы, но часто гораздо глубже, чем просто объяснение всех доступных параметров командной строки [Например, сравните 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. 0. Подготовьте Texinfo к компиляции: ./configure --prefix=/usr 1. Опять же, исправьте проблему со сборкой пакета с помощью Glibc-2.34 или более поздней версии: sed -e 's/__attribute_nonnull__/__nonnull/' \ -i gnulib/lib/malloc/dynarray-skeleton.c 2. Скомпилируйте пакет: make 3. Чтобы проверить результаты, введите: make check 4. Установите пакет: make install 5. При желании установите компоненты, входящие в установку TeX: make TEXMF=/usr/share/texmf install-tex Значение параметра make: TEXMF=/usr/share/texmf Переменная TEXMFmakefile содержит расположение корня дерева TeX, если, например, пакет TeX будет установлен позже. 6. Система документации Info использует простой текстовый файл для хранения списка пунктов меню. Файл находится по адресу /usr/share/info/dir. К сожалению, из-за случайных проблем в файлах Makefile различных пакетов он иногда может не синхронизироваться с информационными страницами, установленными в системе. Если /usr/share/info/dirфайл когда-либо потребуется воссоздать, следующие необязательные команды выполнят эту задачу: pushd /usr/share/info rm -v dir for f in * do install-info $f dir 2>/dev/null done popd |
112. (8.68.) Vim-8.2.4383
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
!!! Пакет Vim содержит мощный текстовый редактор. !!! Если вы предпочитаете другой редактор, такой как Emacs, Joe или Nano, обратитесь к https://www.linuxfromscratch.org/blfs/view/stable-systemd/postlfs/editors.html за рекомендациями по установке. 0. Во-первых, измените расположение vimrcфайла конфигурации по умолчанию на /etc: echo '#define SYS_VIMRC_FILE "/etc/vimrc"' >> src/feature.h 1/ Подготовьте vim к компиляции: ./configure --prefix=/usr 2. Скомпилируйте пакет: make 3. Чтобы подготовить тесты, убедитесь, что пользователь testerможет писать в исходное дерево: chown -Rv tester . 4. Теперь запустите тесты от имени пользователя tester: su tester -c "LANG=en_US.UTF-8 make -j1 test" &> vim-test.log Набор тестов выводит на экран много двоичных данных. Это может вызвать проблемы с настройками текущего терминала. Этой проблемы можно избежать, перенаправив вывод в файл журнала, как показано выше. Успешный тест приведет к появлению слов «ВСЕ СДЕЛАНО» в файле журнала по завершении. 5. Установите пакет: make install 6. Многие пользователи привыкли использовать vi вместо vim . Чтобы разрешить выполнение vim , когда пользователи обычно вводят vi , создайте символическую ссылку как для двоичного файла, так и для справочной страницы на предоставленных языках: 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 7. По умолчанию документация vim устанавливается в формате /usr/share/vim. Следующая символическая ссылка позволяет получить доступ к документации через /usr/share/doc/vim-8.2.4383, что делает ее согласованной с расположением документации для других пакетов: ln -sv ../vim/vim82/doc /usr/share/doc/vim-8.2.4383 8. Содержимое пакета vim: ex Запускает vim в ex-режиме rview Является ограниченной версией представления ; никакие команды оболочки не могут быть запущены, и просмотр не может быть приостановлен rvim Является ограниченной версией vim ; никакие команды оболочки не могут быть запущены, и vim не может быть приостановлен vi Ссылка на vim view Запускает vim в режиме только для чтения vim Является редактором vimdiff Редактирует две или три версии файла с помощью vim и показывает различия vimtutor Обучает основным клавишам и командам vim xxd Создает шестнадцатеричный дамп данного файла; он также может делать обратное, поэтому его можно использовать для двоичного исправления 9. Configuring 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") set background=dark endif " End /etc/vimrc EOF 10. опции vim -c ':options' 11.Авто исправление текста: set spelllang=en,ru set spell |
114. (8.69.) MarkupSafe-2.0.1
1 2 3 4 5 6 7 8 |
!!! MarkupSafe — это модуль Python, реализующий безопасную строку разметки XML/HTML/XHTML. 0. Скомпилируйте MarkupSafe с помощью следующей команды: python3 setup.py build 1. Этот пакет не поставляется с набором тестов. 2. Установите пакет: python3 setup.py install --optimize=1 |
115. (8.70.) Jinja2-3.0.3
1 2 3 4 |
!!! Jinja2 — это модуль Python, реализующий простой язык шаблонов Python. 0. Установите пакет: python3 setup.py install --optimize=1 |
116. (8.71.) Systemd-250
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
!!! Пакет systemd содержит программы для управления запуском, работой и завершением работы системы. 0. Во-первых, примените патч, чтобы исправить уязвимость безопасности и регрессии с именами хостов и бездействующими единицами: patch -Np1 -i ../systemd-250-upstream_fixes-1.patch 1. Удалите две ненужные группы renderи sgxиз правил udev по умолчанию: sed -i -e 's/GROUP="render"/GROUP="video"/' \ -e 's/GROUP="sgx", //' rules.d/50-udev-default.rules.in 2. Подготовьте systemd к компиляции: mkdir -p build cd build meson --prefix=/usr \ --sysconfdir=/etc \ --localstatedir=/var \ --buildtype=release \ -Dblkid=true \ -Ddefault-dnssec=no \ -Dfirstboot=false \ -Dinstall-tests=false \ -Dldconfig=false \ -Dsysusers=false \ -Db_lto=false \ -Drpmmacrosdir=no \ -Dhomed=false \ -Duserdb=false \ -Dman=false \ -Dmode=release \ -Ddocdir=/usr/share/doc/systemd-250 \ .. Значение опций мезона: --buildtype=release Этот переключатель переопределяет тип сборки по умолчанию ( « отладка » ), который будет создавать неоптимизированные двоичные файлы. -Ddefault-dnssec=no Этот переключатель отключает экспериментальную поддержку DNSSEC. -Dfirstboot=false Этот переключатель предотвращает установку служб systemd, отвечающих за настройку системы в первый раз. Они бесполезны для LFS, потому что все делается вручную. -Dinstall-tests=false Этот переключатель предотвращает установку скомпилированных тестов. -Dldconfig=false Этот переключатель предотвращает установку модуля systemd, который запускает ldconfig при загрузке, что бесполезно для дистрибутивов с исходным кодом, таких как LFS, и увеличивает время загрузки. Удалите его, если описанная функция желательна. -Dsysusers=false Этот переключатель предотвращает установку служб systemd, отвечающих за настройку файлов /etc/groupи . /etc/passwdОба файла были созданы в предыдущей главе. Этот демон бесполезен в системе LFS, поскольку учетные записи пользователей создаются вручную. -Drpmmacrosdir=no Этот переключатель отключает установку макросов RPM для использования с systemd, поскольку LFS не поддерживает RPM. -D{userdb,homed}=false Удалите два демона, у которых есть зависимости, не соответствующие области действия LFS. -Dman=false Предотвратите создание справочных страниц, чтобы избежать дополнительных зависимостей. Позже мы установим предварительно созданные справочные страницы для systemd из архива. -Dmode=release Отключите некоторые функции, которые авторы восходящей ветки считают экспериментальными. 3. Скомпилируйте пакет: ninja 4. Установите пакет: ninja install 5. Установите справочные страницы: tar -xf ../../systemd-man-pages-250.tar.xz --strip-components=1 -C /usr/share/man 6. Удалить бесполезный каталог: rm -rf /usr/lib/pam.d 7. Создайте /etc/machine-idфайл, необходимый для systemd-journald : systemd-machine-id-setup 8. Настройте базовую целевую структуру: systemctl preset-all 9. Содержимое systemd: busctl Используется для самоанализа и мониторинга шины D-Bus. coredumpctl Используется для извлечения дампов памяти из журнала systemd. halt Обычно вызывает завершение работы с -h параметром, за исключением случаев, когда уровень запуска уже равен 0, тогда он сообщает ядру остановить систему; он отмечает в файле /var/log/wtmp, hostnamectl Используется для запроса и изменения имени хоста системы и связанных с ним настроек. init Это первый процесс, который должен быть запущен, когда ядро инициализировало оборудование, которое берет на себя процесс загрузки и запускает все процессы в соответствии с его файлами конфигурации. В этом случае он запускает systemd journalctl Используется для запроса содержимого журнала systemd kernel-install Используется для добавления и удаления образов ядра и initramfs в /boot. В LFS это делается вручную localectl Используется для запроса и изменения языкового стандарта системы и настроек раскладки клавиатуры. loginctl Используется для самоанализа и контроля состояния systemd Login Manager. machinectl Используется для самоанализа и контроля состояния виртуальной машины systemd и диспетчера регистрации контейнеров. networkctl Используется для самоанализа и настройки состояния сетевых ссылок, настроенных systemd-networkd. oomctl Управляет демоном systemd Out Of Memory portablectl Используется для подключения или отключения портативных сервисов от локальной системы. poweroff Указывает ядру остановить систему и выключить компьютер (см. halt ) reboot Указывает ядру перезагрузить систему (см. halt ) resolvconf Регистрирует DNS-сервер и конфигурацию домена с помощью systemd-resolved. resolvectl Отправляет управляющие команды диспетчеру разрешения сетевых имен или разрешает доменные имена, адреса IPv4 и IPv6, записи DNS и службы. runlevel Выводит предыдущий и текущий уровень выполнения, как отмечено в последней записи уровня выполнения в /run/utmp shutdown Выводит систему из строя безопасным и надежным способом, сигнализируя обо всех процессах и уведомляя всех вошедших в систему пользователей. systemctl Используется для самоанализа и контроля состояния системы systemd и диспетчера служб. systemd-analyze Используется для определения производительности запуска системы при текущей загрузке, а также для выявления проблемных модулей systemd. systemd-ask-password Используется для запроса системного пароля или парольной фразы от пользователя с помощью вопросительного сообщения, указанного в командной строке. systemd-cat Используется для соединения выходных данных STDOUT и STDERR процесса с журналом systemd. systemd-cgls Рекурсивно показывает содержимое выбранной иерархии группы управления Linux в виде дерева systemd-cgtop Отображает верхние группы управления в локальной иерархии групп управления Linux, упорядоченные по загрузке процессора, памяти и дискового ввода-вывода. systemd-creds Отображает и обрабатывает учетные данные systemd-delta Используется для идентификации и сравнения файлов конфигурации, /etcкоторые переопределяют аналоги по умолчанию в/usr systemd-detect-virt Определяет, работает ли система в виртуальной среде, и соответствующим образом настраивает udev. systemd-dissect Используется для проверки образов дисков ОС systemd-escape Используется для экранирования строк для включения в имена модулей systemd. systemd-hwdb Используется для управления аппаратной базой данных (hwdb) systemd-id128 Генерирует и печатает строки id128 systemd-inhibit Используется для выполнения программы с включенной блокировкой отключения, перехода в спящий режим или бездействия, что предотвращает выполнение таких действий, как отключение системы, до завершения процесса. systemd-machine-id-setup Используется инструментами системного установщика для инициализации идентификатора машины, сохраненного во /etc/machine-id время установки, со случайно сгенерированным идентификатором. systemd-mount Используется для временного монтирования или автоматического монтирования дисков. systemd-notify Используется сценариями демона для уведомления системы инициализации об изменении состояния. systemd-nspawn Используется для запуска команды или ОС в облегченном контейнере пространства имен. systemd-path Используется для запроса системных и пользовательских путей systemd-repart Используется для увеличения и добавления разделов в таблицу разделов, когда systemd используется в образе ОС (например, в контейнере). systemd-resolve Используется для разрешения доменных имен, адресов IPV4 и IPv6, записей ресурсов DNS и служб. systemd-run Используется для создания и запуска временного модуля .service или .scope и запуска в нем указанной команды. Это полезно для проверки модулей systemd. systemd-socket-activate Используется для прослушивания сокет-устройств и запуска процесса при успешном подключении к сокету. systemd-sysext Активирует образы расширения системы systemd-tmpfiles Создает, удаляет и очищает нестабильные и временные файлы и каталоги на основе формата файла конфигурации и местоположения, указанных в tmpfiles.d каталогах . systemd-umount Размонтирует точки монтирования systemd-tty-ask-password-agent Используется для отображения и/или обработки ожидающих запросов пароля systemd. telinit Сообщает init , на какой уровень запуска перейти timedatectl Используется для запроса и изменения системных часов и их настроек. udevadm Является общим инструментом администрирования udev, который управляет демоном udevd, предоставляет информацию из базы данных оборудования Udev, отслеживает ueevents, ожидает завершения ueevents, тестирует конфигурацию udev и запускает uevents для данного устройства. libsystemd Является основной служебной библиотекой systemd. libudev Является библиотекой для доступа к информации об устройстве Udev. |
117. (8.72.) D-Bus-1.12.20
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
!!! D-Bus — это система шины сообщений, простой способ взаимодействия приложений друг с другом. !!! D-Bus предоставляет как системного демона (для таких событий, как «добавление нового аппаратного устройства» или «изменение очереди печати»), !!! так и демона сеанса входа в систему для каждого пользователя (для общих потребностей IPC среди пользовательских приложений). !!! Кроме того, шина сообщений построена на основе общей схемы передачи сообщений один к одному, !!! которая может использоваться любыми двумя приложениями для прямого взаимодействия (без использования демона шины сообщений). 0. Подготовьте D-Bus к компиляции: ./configure --prefix=/usr \ --sysconfdir=/etc \ --localstatedir=/var \ --disable-static \ --disable-doxygen-docs \ --disable-xml-docs \ --docdir=/usr/share/doc/dbus-1.12.20 \ --with-console-auth-dir=/run/console \ --with-system-pid-file=/run/dbus/pid \ --with-system-socket=/run/dbus/system_bus_socket Значение параметров настройки: --with-console-auth-dir=/run/console Это указывает расположение каталога авторизации ConsoleKit. --with-system-pid-file=/run/dbus/pid а также--with-system-socket=/run/dbus/system_bus_socket Они задают расположение файла PID и сокета системной шины в /run, а не в устаревшем /var/run. 1. Скомпилируйте пакет: make 2. Установите пакет: make install 3. Создайте символическую ссылку, чтобы D-Bus и systemd могли использовать один и тот же machine-id файл: ln -sfv /etc/machine-id /var/lib/dbus 4. Содержимое: dbus-cleanup-sockets используется для удаления оставшихся сокетов в каталоге dbus-daemon Демон шины сообщений D-Bus dbus-launch Запускает dbus-daemon из сценария оболочки dbus-monitor Отслеживает сообщения, проходящие через шину сообщений D-Bus. dbus-run-session Запускает экземпляр сеансовой шины dbus-daemon из сценария оболочки и запускает указанную программу в этом сеансе. dbus-send Отправляет сообщение на шину сообщений D-Bus dbus-test-tool Инструмент, помогающий пакетам тестировать D-Bus dbus-update-activation-environment Обновляет переменные среды, которые будут установлены для сеансовых служб D-Bus . dbus-uuidgen Генерирует универсальный уникальный идентификатор libdbus-1 Содержит функции API, используемые для связи с шиной сообщений D-Bus. |
118. (8.73.) Man-DB-2.10.1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
!!! https://www.linuxfromscratch.org/lfs/downloads/stable-systemd/LFS-BOOK-11.1-NOCHUNKS.html#ch-tools-binutils-pass1 0. Подготовьте Man-DB к компиляции: ./configure --prefix=/usr \ --docdir=/usr/share/doc/man-db-2.10.1 \ --sysconfdir=/etc \ --disable-setuid \ --enable-cache-owner=bin \ --with-browser=/usr/bin/lynx \ --with-vgrind=/usr/bin/vgrind \ --with-grap=/usr/bin/grap Значение параметров настройки: --disable-setuid Это отключает создание программы man с идентификатором user man. --enable-cache-owner=bin Это делает общесистемные файлы кэша принадлежащими пользователю bin. --with-... Эти три параметра используются для установки некоторых программ по умолчанию. lynx — это текстовый веб-браузер (инструкции по установке см. в BLFS), vgrind преобразует исходные тексты программ во входные данные Groff, а grap полезен для набора графиков в документах Groff. vgrind и grap _ программы обычно не нужны для просмотра справочных страниц. Они не являются частью LFS или BLFS, но вы сможете установить их самостоятельно после завершения работы с LFS, если захотите. 1. Скомпилируйте пакет: make 2. Чтобы проверить результаты, введите: make check 3. Установите пакет: make install 4. Пакет содержит: accessdb Создает дамп содержимого базы данных whatis в удобочитаемой форме . apropos Выполняет поиск в базе данных whatis и отображает краткие описания системных команд, содержащих заданную строку. catman Создает или обновляет предварительно отформатированные страницы руководства lexgrog Отображает сводную информацию в одну строку о данной странице руководства man Форматирует и отображает запрошенную страницу руководства man-recode Преобразует справочные страницы в другую кодировку mandb Создает или обновляет базу данных whatis manpath Отображает содержимое $MANPATH или (если $MANPATH не задан) подходящий путь поиска на основе настроек в man.conf и среды пользователя. whatis Ищет в базе данных whatis и отображает краткие описания системных команд, которые содержат заданное ключевое слово в виде отдельного слова. libman Содержит поддержку во время выполнения для человека libmandb Содержит поддержку во время выполнения для человека |
119. (8.74.) Procps-ng-3.3.17
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
!!! Пакет Procps-ng содержит программы для мониторинга процессов. 0. Подготовьте procps-ng для компиляции: ./configure --prefix=/usr \ --docdir=/usr/share/doc/procps-ng-3.3.17 \ --disable-static \ --disable-kill \ --with-systemd Значение опции конфигурации: --disable-kill Этот переключатель отключает сборку команды kill , которая будет установлена пакетом Util-linux. 1. Скомпилируйте пакет: make 2. Чтобы запустить набор тестов, запустите: make check Известно, что пять тестов, связанных с pkill, не прошли из-за проблемы с тестами, которые не были обновлены. 3. Установите пакет: make install 4. Пакет содержит: free Сообщает объем свободной и используемой памяти (как физической, так и памяти подкачки) в системе. pgrep Ищет процессы на основе их имени и других атрибутов pidof Сообщает PID заданных программ pkill Сигналы обрабатываются на основе их имени и других атрибутов pmap Сообщает карту памяти данного процесса ps Список текущих запущенных процессов pwait Ожидает завершения процесса перед выполнением. pwdx Сообщает текущий рабочий каталог процесса slabtop Отображает подробную информацию о кэш-памяти ядра в режиме реального времени. sysctl Изменяет параметры ядра во время выполнения tload Выводит график текущей средней загрузки системы top Отображает список процессов, наиболее интенсивно использующих ЦП; он обеспечивает постоянный просмотр активности процессора в режиме реального времени uptime Сообщает, как долго работает система, сколько пользователей вошли в систему и средние значения загрузки системы. vmstat Сообщает статистику виртуальной памяти, предоставляя информацию о процессах, памяти, подкачке, блочном вводе/выводе (IO), прерываниях и активности ЦП. w Показывает, какие пользователи в настоящее время вошли в систему, где и с какого момента watch Повторно запускает данную команду, отображая первый экран, полный ее вывода; это позволяет пользователю наблюдать за изменением вывода с течением времени libprocps Содержит функции, используемые большинством программ в этом пакете. |
120. (8.75.) Util-linux-2.37.4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
!!! Пакет Util-linux содержит различные утилиты. Среди них утилиты для работы с файловыми системами, консолями, разделами и сообщениями. 0. Подготовьте Util-linux к компиляции: ./configure ADJTIME_PATH=/var/lib/hwclock/adjtime \ --bindir=/usr/bin \ --libdir=/usr/lib \ --sbindir=/usr/sbin \ --docdir=/usr/share/doc/util-linux-2.37.4 \ --disable-chfn-chsh \ --disable-login \ --disable-nologin \ --disable-su \ --disable-setpriv \ --disable-runuser \ --disable-pylibmount \ --disable-static \ --without-python Параметры --disable и --without предотвращают появление предупреждений о сборке компонентов, для которых требуются пакеты, отсутствующие в LFS, или которые несовместимы с программами, установленными другими пакетами. 1. Скомпилируйте пакет: make 2. Установите пакет: make install 3. Пакет содержит: addpart Сообщает ядру Linux о новых разделах agetty Открывает порт tty, запрашивает имя для входа, а затем вызывает программу входа в систему. blkdiscard Отбрасывает сектора на устройстве blkid Утилита командной строки для поиска и печати атрибутов блочного устройства. blkzone Запускает команду зоны на заданном блочном устройстве blockdev Позволяет пользователям вызывать ioctl блочного устройства из командной строки. cal Отображает простой календарь cfdisk Манипулирует таблицей разделов данного устройства chcpu Изменяет состояние процессоров chmem Настраивает память choom Отображает и настраивает счет OOM-killer chrt Манипулирует атрибутами процесса в реальном времени col Отфильтровывает обратные переводы строки colcrt Фильтрует вывод nroff для терминалов, у которых отсутствуют некоторые возможности, такие как зачеркивание и полустрочки. colrm Отфильтровывает заданные столбцы column Форматирует данный файл в несколько столбцов ctrlaltdel Устанавливает функцию комбинации клавиш Ctrl+Alt+Del на аппаратный или программный сброс. delpart Запрашивает ядро Linux удалить раздел dmesg Сбрасывает загрузочные сообщения ядра eject Извлекает съемный носитель fallocate Предварительно выделяет место для файла fdisk Манипулирует таблицей разделов данного устройства fincore Подсчитывает страницы содержимого файла в ядре 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 Удаляет указанный ресурс межпроцессного взаимодействия (IPC). ipcs Предоставляет информацию о состоянии IPC irqtop Отображает информацию счетчика прерываний ядра в top(1)представлении стилей. isosize Сообщает размер файловой системы iso9660 kill Посылает сигналы процессам last Показывает, какие пользователи в последний раз входили (и выходили), выполняя поиск в /var/log/wtmpфайле; он также показывает загрузку системы, завершение работы и изменения уровня выполнения. lastb Показывает неудачные попытки входа в систему /var/log/btmp ldattach Прикрепляет линейную дисциплину к последовательной линии linux32 Символическая ссылка на setarch linux64 Символическая ссылка на setarch logger Заносит данное сообщение в системный журнал look Отображает строки, начинающиеся с заданной строки losetup Настраивает и управляет петлевыми устройствами lsblk Выводит информацию обо всех или выбранных блочных устройствах в древовидном формате. lscpu Выводит информацию об архитектуре ЦП lsipc Выводит информацию о средствах IPC, которые в настоящее время используются в системе. lsirq Отображает информацию счетчика прерываний ядра lslocks Список локальных блокировок системы lslogins Выводит информацию о пользователях, группах и системных учетных записях. lsmem Перечисляет диапазоны доступной памяти с их онлайн-статусом lsns Списки пространств имен 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 Сообщает ядру о наличии и нумерации разделов на диске pivot_root Делает данную файловую систему новой корневой файловой системой текущего процесса prlimit Получить и установить лимиты ресурсов процесса readprofile Читает информацию о профилировании ядра rename Переименовывает данные файлы, заменяя данную строку другой renice Изменяет приоритет запущенных процессов resizepart Запрашивает ядро Linux изменить размер раздела rev Переворачивает строки данного файла rkfill Инструмент для включения и отключения беспроводных устройств rtcwake Используется для перехода системы в спящий режим до указанного времени пробуждения. script Делает машинопись сеанса терминала scriptlive Повторно запустите машинописные тексты сеанса, используя информацию о времени scriptreplay Воспроизведение машинописных текстов с использованием информации о времени setarch Изменяет сообщаемую архитектуру в новой программной среде и устанавливает личные флаги setsid Запускает данную программу в новом сеансе setterm Устанавливает атрибуты терминала sfdisk Манипулятор таблицы разделов диска sulogin Позволяет root авторизоваться; обычно он вызывается init , когда система переходит в однопользовательский режим . swaplabel Позволяет изменить UUID и метку области подкачки swapoff Отключает устройства и файлы для подкачки swapon Включает устройства и файлы для пейджинга и обмена и перечисляет устройства и файлы, используемые в настоящее время. switch_root Переключается на другую файловую систему в качестве корня дерева монтирования taskset Получает или устанавливает привязку процессора к процессу. uclampset Управление атрибутами ограничения использования системы или процесса ul Фильтр для перевода символов подчеркивания в escape-последовательности, указывающие подчеркивание для используемого терминала. umount Отключает файловую систему от дерева файлов системы. uname26 Символическая ссылка на setarch unshare Запускает программу с некоторыми пространствами имен, не разделенными с родительским utmpdump Отображает содержимое данного файла входа в систему в более удобном для пользователя формате. uuidd Демон, используемый библиотекой UUID для создания UUID на основе времени безопасным и гарантированно уникальным способом. uuidgen Создает новые UUID. Каждый новый UUID можно разумно считать уникальным среди всех UUID, созданных в локальной системе и в других системах в прошлом и будущем. uuidparse Утилита для разбора уникальных идентификаторов wall Отображает содержимое файла или, по умолчанию, его стандартный ввод на терминалах всех вошедших в систему пользователей. wdctl Показывает статус аппаратного сторожевого таймера whereis Сообщает расположение двоичного файла, исходного кода и справочной страницы для данной команды. wipefs Стирает подпись файловой системы с устройства x86_64 Символическая ссылка на setarch zramctl Программа для настройки и управления устройствами zram (сжатый RAM-диск). libblkid Содержит подпрограммы для идентификации устройства и извлечения токена. libfdisk Содержит подпрограммы для управления таблицами разделов. libmount Содержит подпрограммы для монтирования и размонтирования блочных устройств. libsmartcols Содержит подпрограммы для облегчения вывода на экран в табличной форме. libuuid Содержит подпрограммы для генерации уникальных идентификаторов для объектов, которые могут быть доступны за пределами локальной системы. |
120. (8.76.) E2fsprogs-1.46.5
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
!!! Пакет e2fsprogs содержит утилиты для работы с ext2 файловой системой. !!! Он также поддерживает файловые системы c журналированием ext3 и ext4 0. Документация e2fsprogs рекомендует собирать пакет в подкаталоге исходного дерева: mkdir -v build cd build 1. Подготовьте e2fsprogs к компиляции: ../configure --prefix=/usr \ --sysconfdir=/etc \ --enable-elf-shlibs \ --disable-libblkid \ --disable-libuuid \ --disable-uuidd \ --disable-fsck Значение параметров настройки: --enable-elf-shlibs Это создает общие библиотеки, которые используют некоторые программы в этом пакете. --disable-* Это предотвращает сборку и установку e2fsprogs libuuidи libblkidбиблиотек, uuiddдемона и оболочки fsck , поскольку util-linux устанавливает более свежие версии. 2. Скомпилируйте пакет: make 3. Для запуска тестов введите: make check Известно, что один тест, u_direct_io, не работает на некоторых системах. 3. Установите пакет: make install 4. Удалите бесполезные статические библиотеки: rm -fv /usr/lib/{libcom_err,libe2p,libext2fs,libss}.a 5. Этот пакет устанавливает сжатый .info файл, но не обновляет общесистемный dir файл. Разархивируйте этот файл, а затем обновите системный dirфайл, используя следующие команды: gunzip -v /usr/share/info/libext2fs.info.gz install-info --dir-file=/usr/share/info/dir /usr/share/info/libext2fs.info 6. При желании создайте и установите дополнительную документацию, выполнив следующие команды: 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 7. Пакет содержит: badblocks Ищет устройство (обычно раздел диска) на наличие поврежденных блоков. chattr Изменяет атрибуты файлов в ext2файловой системе; он также изменяет ext3файловые системы, журналируемую версию ext2файловых систем compile_et Компилятор таблицы ошибок; он преобразует таблицу имен кодов ошибок и сообщений в исходный файл C, подходящий для использования с com_errбиблиотекой . debugfs Отладчик файловой системы; его можно использовать для проверки и изменения состояния ext2файловой системы . dumpe2fs Выводит информацию о суперблоке и группе блоков для файловой системы, присутствующей на данном устройстве. e2freefrag Сообщает информацию о фрагментации свободного пространства e2fsck Используется для проверки и, при необходимости, восстановления ext2файловых систем и ext3файловых систем. e2image Используется для сохранения важных ext2данных файловой системы в файл e2label Отображает или изменяет метку файловой системы в ext2файловой системе, присутствующей на данном устройстве. e2mmpstatus Проверяет состояние MMP файловой системы ext4 e2scrub Проверяет содержимое смонтированной файловой системы ext[234] e2scrub_all Проверяет все смонтированные файловые системы ext[234] на наличие ошибок e2undo Воспроизводит журнал отмены undo_log для файловой системы ext2/ext3/ext4, найденной на устройстве [Это можно использовать для отмены неудачной операции программой e2fsprogs.] e4crypt Утилита шифрования файловой системы Ext4 e4defrag Онлайн-дефрагментатор для файловых систем ext4 filefrag Отчеты о том, насколько сильно может быть фрагментирован конкретный файл fsck.ext2 По умолчанию проверяет ext2файловые системы и является жесткой ссылкой на e2fsck. fsck.ext3 По умолчанию проверяет ext3файловые системы и является жесткой ссылкой на e2fsck. fsck.ext4 По умолчанию проверяет ext4файловые системы и является жесткой ссылкой на e2fsck. logsave Сохраняет вывод команды в файл журнала lsattr Перечисляет атрибуты файлов во второй расширенной файловой системе. mk_cmds Преобразует таблицу имен команд и справочных сообщений в исходный файл C, подходящий для использования с libssбиблиотекой подсистемы . mke2fs Создает ext2или ext3 файловую систему на данном устройстве mkfs.ext2 По умолчанию создает ext2 файловые системы и является жесткой ссылкой на mke2fs. mkfs.ext3 По умолчанию создает ext3 файловые системы и является жесткой ссылкой на mke2fs. mkfs.ext4 По умолчанию создает ext 4файловые системы и является жесткой ссылкой на mke2fs. mklost+found Используется для создания lost+foundкаталога в ext2 файловой системе; он предварительно выделяет дисковые блоки в этот каталог, чтобы облегчить задачу e2fsck resize2fs Может использоваться для увеличения или уменьшения ext2файловой системы . tune2fs Настраивает настраиваемые параметры файловой системы в ext2файловой системе . libcom_err Стандартная процедура отображения ошибок libe2p Используется dumpe2fs , chattr и lsattr libext2fs Содержит подпрограммы, позволяющие программам пользовательского уровня управлять ext2 файловой системой . libss Используется отладчиками |