В этой главе Вы плавно войдете в фазу сборки и начнете серьезно собирать LFS-систему. Для этого войдите в среду chroot внутри мини-Linux-системы, проделайте некоторые дополнительные работы и начните устанавливать пакеты один за лругим.
Установка всех этих пакетов весьма проста, и Вы можете подумать, что достаточно было бы указать общее описание установки для всех пакетов, а конкретезировать только если установка их отличается от стандартной. Несмотря на то, что я согласен с этим утверждением, я решил дать полные инструкции по установке каждого из пакетов просто для того, чтобы минимизировать возможность возникновения ошибок.
Если Вы решите использовать оптимизацию компилятора в этой главе, то стоит посмотреть справку по оптимизации на http://www.linuxfromscratch.org/hints/downloads/files/optimization.txt. Оптимизация компилятора может сделать программы быстрее, но могут возникнуть сложности при компиляции и некоторые проблемы при работе этих программ. Если пакет отказывается компилироваться при использовании оптимизации, попробуйте скомпилировать пакет без нее, возможно, проблемы исчезнут. Если пакет компилируется с использованием оптимизации, то есть возможность, что он скомпилируется некорректно, например, могут появиться проблемы между интерактивностью в коде и собранными средствами. В общем, использование оптимизауии при сборке является рискованным. Новичкам в LFS рекомендуется собирать систему без оптимизации. В Ваших силах сделать систему быстрой и стабильной одновременно.
Список пакетов, которые надо собрать, является строго последовательным, надо убедиться, что в них не будет прописан путь к /tools. По некоторым причинам, не стоит компилировать пакеты параллельно. Параллельная сборка может показаться выгодной иногда (в особенности на многопроцессорных системах), но в результате у программ появится зависимость от средств из /tools, и они не смогут работать, когда Вы удалите этто каталог.
Большинство программ и библиотек по умолчанию компилируются с символами отладки (с опцией -g для gcc).
Когда отлаживается программа или библиотека, которая была собрана с включением отладочной информации, то отладчик может передать Вам не только адреса в памяти, но и имена всех переменных и функций.
Но исключение отладочных символов существенно уменьшает размер программы или библиотеки. Чтобы получить представление о том, сколько места занимает отладочная информация, посмотрите следующее:
Размер может немного варьироваться в зависимости от используемых компилятора и библиотеки C. Но размер между программами и библиотеками, собранными с отладочной информацией и без нее, может различаться в 2-5 раз.
Большинство людей никогда не используют отладчик, и довольно много места на диске освободится при удалении отладочных символов.
Для удаления отладочных символов из исполняемых модулей (которые должны быть в форматах a.out или ELF), запустите strip --strip-debug filename . Могут использоваться шаблоны для выбора нескольких файлов (например, strip --strip-debug $LFS/tools/bin/*).
Для Вашего удобства, глава 9 включает одну простую команду для удаления всех отладочных символов из всех программ и библиотек в системе. Дополнительную информацию по оптимизации можно получить на http://www.linuxfromscratch.org/hints/downloads/files/optimization.txt.
Теперь пришло время войти в среду chroot для установки необходимых пакетов. Перед тем, как войти в chroot, необходимо войти в систему как root потому, что только root может выполнить команду chroot.
Убедитесь, что переменная окружения LFS установлена корректно запуском echo $LFS, и проверьте, что она содержит путь к точке монтирования раздела LFS, к примеру /mnt/lfs.
Из-под привелегий root запустите следующую команду для входа в среду chroot:
chroot $LFS /tools/bin/env -i HOME=/root TERM=$TERM PS1='\u:\w\$ ' \ PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \ /tools/bin/bash --login
Параметр -i, передаваемый команде env, очистит все переменные окружения среды chroot. После этого Вы устанавливаете только переменные HOME, TERM, PS1 и PATH. Конструкция TERM=$TERM означает, что переменная окружения TERM внутри среды chroot примет то же значение, что и вне среды. Эта переменная нужна таким программам как vim и less для правильной работы. Если нужны другие переменные, такие как CFLAGS или CXXFLAGS, то это хорошее место, чтобы задать их.
С этого места уже не надо использовать переменную LFS, потому что каталог, указанный в ней, стал корневым при входе в среду chroot.
Вы указали /tools/bin последней в списке путей PATH. Благодаря этому пакеты из этого каталога не будут использованы, если Вы уже установили окончательную версию соответствующего пакета. Это действует в том случае, когда shell не запоминает расположение исполняемых файлов, именно поэтому Вы отключили эту функцию в предыдущей главе.
Запомните, что все команды до конца этой главы и во всех последующих выполняются из среды chroot. Если Вы покинули эту среду по любой причине (например, после перезагоузки), то должны снова зайти в среду chroot и смонтировать файловые системы proc и devpts (описываются позже) перед продолжением установки.
Заметьте, что bash выводит "I have no name!". Это нормально, поскольку файл /etc/passwd пока еще не создан.
На данный момент, права на каталог /tools принадлежат пользователю lfs, пользователю, который существует только в основной системе. Хотя Вы все равно удалите каталог /tools, когда система будет собрана, Вы можете захотеть не делать этого, Например, для построения другой системы LFS. Но если Вы хотите оставить каталог /tools, то у нее будет владелец с определенным ID но без логина. Это опасно потому, что впоследствии созданный пользовательский логин может получить такой же ID и станет владельцем каталога /tools и всех файлов внутри него, и использовать это в своих целях.
Чтобы избежать этого, Вы можете добавить пользователя lfs в Вашу новую LFS при создании файла /etc/passwd, и подправить его таким образом, чтобы ID этого пользователя и группы были идентичны им же в основной системе. Помимо этого, Вы можете (в этой книге так и делается) связать содержимое каталога /tools с пользователем root запуском команды:
chown -R 0:0 /tools
Команда использует "0:0" вместо "root:root" потому, что chown не может использовать имя "root" до того, как будет создан файл паролей.
Теперь надо создать структуру файловой системы LFS. Создайте дерево каталогов, используя следующие команды:
mkdir -p /{bin,boot,dev/{pts,shm},etc/opt,home,lib,mnt,proc} mkdir -p /{root,sbin,tmp,usr/local,var,opt} for dirname in /usr /usr/local do mkdir $dirname/{bin,etc,include,lib,sbin,share,src} ln -s share/{man,doc,info} $dirname mkdir $dirname/share/{dict,doc,info,locale,man} mkdir $dirname/share/{nls,misc,terminfo,zoneinfo} mkdir $dirname/share/man/man{1,2,3,4,5,6,7,8} done mkdir /var/{lock,log,mail,run,spool} mkdir -p /var/{tmp,opt,cache,lib/misc,local} mkdir /opt/{bin,doc,include,info} mkdir -p /opt/{lib,man/man{1,2,3,4,5,6,7,8}}
По умолчанию, каталоги создаются с правами доступа 755, но это правильно не для всех из них. Вы сделаете два изменения: одно для домашнего каталога пользователя root, а другое для каталога, предназначенного для временных файлов.
chmod 0750 /root chmod 1777 /tmp /var/tmp
Первой командой Вы запрещаете доступ в каталог /root для всех, кроме владельца. То же самое надо будет потом сделать для домашних каталогов остальных пользователей. Второй командой Вы позволяете всем пользователям записывать и читать файлы в и из каталогов /tmp и /var/tmp, но они не смогут удалять оттуда файлы других пользователей. Последнее достигается установкой "sticky bit", старшего бита в битовой маске 1777.
Вы создаете дерево каталогов совместимым со стандартом FHS (доступен на http://www.pathname.com/fhs). За исключением каталогов /usr/local/games и /usr/share/games, поскольку они не нужны в минимальной системе. Тем не менее, можно сделать Вашу систему FHS-совместимой. Поскольку структура подкаталогов /usr/local/share не описана в стандарте FHS, то Вы создаете ее так, как Вам надо.
Для правильного функционирования основных программ файловые системы proc и devpts должны быть доступны из среды chroot. Файловые системы могут монтироваться несколько раз в различных точках, так что то, что они будут смонтированы и на Вашей основной системе, не создаст проблем. Особенно потому, что они являются виртуальными файловыми системами.
Файловая система proc является системой с информацией о процессах, которая используется ядром для представления информации о статусе системы.
Файловая система proc монтируется в /proc запуском команды:
mount proc /proc -t proc
Вы можете получить предупреждение от команды mount следующего вида:
warning: can't open /etc/fstab: No such file or directory not enough memory
Проигнорируйте его, оно выводится только потому, что система еще не полностью установлена и отсутствуют некоторые файлы. Команда mount все равно прошла успешно и это все, о чем Вам следует беспокоится здесь.
Файловая система devpts описывается проще, она обеспечивает доступ к терминалам PTY.
Файловая система devpts монтируется в /dev/pts командой:
mount devpts /dev/pts -t devpts
Если эта команда не прошла, то появится сообщение вида:
filesystem devpts not supported by kernel
Как правило, это означает, что ядро Вашей основной системы было скомпилировано без поддержки файловой системы devpts. Вы можете проверить, какие файловые системы поддерживаются ядром запуском команды cat /proc/filesystems. Если файловая система с названием devfs будет присутствовать в этом списке, то Вы можете пока работать без проблем смонтировав основную файловую систему devfs в корне структуры /dev, которую Вы создадите позднее в разделе "Создание устройств (Makedev)". Если devfs нет в списке, то не беспокойтесь потому, что не обязательно использовать именно такую работу с PTY в среде chroot. Вы исправите это в последующем разделе Makedev.
Запомните, если по любой причине Вы прекратили работу с LFS и решили возобновить позже, важно убедиться, что эти системы будут смонтированы внутри среды chroot, иначе могут возникнуть определенные проблемы.
Некоторые программы имеют встроенные пути к программам, которые пока не установлены. Чтобы обеспечить доступ к этим программам, создайте ссылки на них, которые заменят пока реальные файлы до тех пор, пока их не установите.
ln -s /tools/bin/{bash,cat,pwd,stty} /bin ln -s /tools/bin/perl /usr/bin ln -s /tools/lib/libgcc_s.so.1 /usr/lib ln -s bash /bin/sh
Для возможности регистрации в качестве пользователя root и для распознавания имени "root", необходимо создать соответствующие элементы в файлах /etc/passwd и /etc/group.
Создайте файл /etc/passwd запуском команды:
cat > /etc/passwd << "EOF" root:x:0:0:root:/root:/bin/bash EOF
Пароль пользователя root (символ "x" заменяет его здесь) будет определен позднее.
Создайте файл /etc/group запуском следующей команды:
cat > /etc/group << "EOF" root:x:0: bin:x:1: sys:x:2: kmem:x:3: tty:x:4: tape:x:5: daemon:x:6: floppy:x:7: disk:x:8: lp:x:9: dialout:x:10: audio:x:11: EOF
Созданные группы не являются частью какого-то стандарта, эти группы используются скриптом MAKEDEV в следующей главе. Помимо группы "root", LSB (http://www.linuxbase.org) рекомендует устанавливать GID равный 1 для группы "bin". Все другие имена групп и их GID могут свободно выбираться пользователем, но некоторые пакеты зависят от имени группы, хотя и не зависят от номера GID.
Наконец, Вы перезайдете в chroot. Имя пользователя и имя группы начнут работать правильно после создания файлов /etc/passwd и /etc/group потому, что Вы установили полную Glibc в главе 5. Это должно убрать вывод сообщения "I have no name!".
exec /tools/bin/bash --login +h
Замечание по использованию параметра +h. Это скажет bash не использовать внутренний кэш путей. Без этого bash будет запоминать пути к исполненным двоичным модулям. Поскольку Вы собираетесь использовать вновь скомпилированные пакеты по мере их установки, Вы должны отключить эту функцию в этой главе.
Ожидаемое время сборки: 0.1 SBU Ожидаемое место на диске: 50 KB
Скрипт MAKEDEV создает статические записи для устройств, которые обычно расположены в каталоге /dev. Детальную информацию об устройствах Вы можете получить в файле Documentation/devices.txt в каталоге с исходными кодами ядра.
Устанавливаемый скрипт: MAKEDEV.
Make зависит от Bash, Coreutils.
Заметьте, что распаковка файла MAKEDEV-1.7.bz2 не создаст каталога, и Вам не надо будет переходить в него с помощью cd, так как этот файл содержит только сам скрипт.
Установите скрипт MAKEDEV:
bzcat MAKEDEV-1.7.bz2 > /dev/MAKEDEV chmod 754 /dev/MAKEDEV
Запустите полученный скрипт для создания файлов устройств:
cd /dev ./MAKEDEV -v generic-nopty
Описание аргументов:
Если скрипт не выполниться из-за пропуска какого-либо специального устройства zzz, попробуйте запустить ./MAKEDEV -v zzz. Помимо этого, Вы можете создать устройства через программу mknod. Пожалуйста, загляните на man или info-страницы этой программы для получения более подробной информации.
Помимо этого, если Вы не смонтировали файловую систему devpts в главе "Монтирование файловых систем proc и devpts", сейчас самое время сделать это. Если Ваше ядро поддерживает файловую систему devfs, запустите следующую команду для монтирования devfs:
mount -t devfs devfs /dev
Эта команда смонтирует файловую систему devfs внутри новой статической структуры /dev. Это не создаст проблем, так как если уже были файлы устройств, то они перекрылись новой файловой системой devfs.
Если у Вас что-либо не сработало, то Вам надо запустить скрипт MAKEDEV для создания файлов ptyXX и ttyXX, которые в противном случае Вам не нужны. Убедитесь, что Вы находились в именно в каталоге /dev и запустите ./MAKEDEV -v pty. Последнее создаст более 512 специальных файлов устройств, которые не понадобятся, когда Вы окончательно загрузите законченую систему LFS.
Ожидаемое время сборки: 0.1 SBU Ожидаемое место на диске: 186 MB
Ядро Linux является основой любой Linux-системы. Это то, что делает Linux самой собой. Когда компьютер включается и загружает систему Linux, самым первым загружается ядро. Ядро инициализирует аппаратные компоненты: последовательные и параллельные порты, звуковые карты, сетевые карты, контролеры IDE, контролеры SCSI и много чего еще. Собственно, ядро делает доступным аппаратные элементы системы и позволяет запускаться программам.
Устанавливаемые файлы: ядро и заголовки ядра.
Linux зависит от Bash, Binutils, Coreutils, Findutils, GCC, Glibc, Grep, Gzip, Make, Modutils, Perl и Sed.
На данном этапе Вы не будете компилировать ядро. Вы сделаете это после установки всех пакетов. Однако, в связи с тем, что некоторые пакеты требуют заголовочных файлов ядра, Вы распакуете ядро, настроите его и скопируете заголовки туда, где их будут искать пакеты при компиляции.
Важно отметить. что файлы в каталоге с исходными текстами ядра не являются файлами с владельцем root. Когда Вы распакуете пакет как пользователь root (как это происходит здесь, в среде chroot), конечные файлы будут иметь ID владельца и группы как на компьютере, где создавался пакет. Это обычно не создает проблемы для любых других пакетов потому, что Вы обычно удаляете каталог с исходными текстами после установки. Но каталог с исходными текстами ядра Linux будет еще нужна очень долго, и может получиться, что какой-либо пользователь Вашей системы получит доступ к исходным текстам ядра.
Чтобы исправить это, запустите команду chown -R 0:0 в каталоге linux-2.4.22 чтобы убедиться, что владельцем всех файлов оттуда будет root.
Подготовьте заголовки к установке:
make mrproper
Это гарантирует, что дерево с исходными текстами ядра будет абсолютно чистым. Команда разработчиков ядра рекомендует выполнять эту команду перед каждой компиляцией ядра. Вы не можете быть абсолютно уверены в чистоте дерева даже после распаковки.
Создайте файл include/linux/version.h:
make include/linux/version.h
Создайте платформно-зависимую ссылку include/asm:
make symlinks
Установите платформно-зависимые файлы заголовков:
cp -HR include/asm /usr/include cp -R include/asm-generic /usr/include
Установите кросс-платформенные файлы заголовков:
cp -R include/linux /usr/include
Некоторые из заголовков ядра используют файл заголовков autoconf.h. Поскольку Вы пока не сконфигурировали ядро, надо создать этот файл для того, чтобы компиляция следующих пакетов не закончилась ошибкой. Создайте пустой файл autoconf.h:
touch /usr/include/linux/autoconf.h
Раньше было принято создавать символические ссылки для каталогов /usr/include/{linux,asm} на /usr/src/linux/include/{linux,asm}. Однако, это была плохая идея, как объясняет Линус Торвальдс в списке рассылки ядра Linux (Linux Kernel Mailing List, отрывок):
Тем, кто компилирует новые ядра, настоятельно рекомендую не создавать символических ссылок (кроме той, которую создает само ядро, "linux/include/asm", символическая ссылка, которая используется при внутренней компиляции ядра.) именно так делаю я. В моем каталоге /usr/src/linux есть заголовки старого ядра 2.2.13, несмотря на то, что я не использовал ядро 2.2.13 уже очень давно. Однако именно с этими заголовками компилировался пакет glibc, соответственно именно эти заголовки соответствуют файлам объектов библиотеки. Также именно такое положение вещей являлось рекомендуемым на протяжении последних пяти лет. Я не могу понять, почему вся эта заморочка с символическими ссылками все еще существует, как зомби. Практически во всех дистрибутивах есть эта неработающая символическая ссылка, и люди до сих пор помнят, что исходники ядра Linux должны находится в "/usr/src/linux", несмотря на то, что это уже давно не так.
Наиболее важная часть сообщения Линуса заключается в том, что файлы заголовков должны быть именно теми, с которыми компилировался пакет glibc. Это те заголовки, которые следует использовать в будущем при компиляции других пакетов, так как именно они соответствуют файлам библиотек объектного кода. Копируя заголовки, Вы удостоверяетесь, что они останутся доступными, если позже Вы решите обновить ядро.
Заметьте, что не страшно, если исходные тексты ядра находятся в /usr/src/linux, главное, чтобы у Вас не было ссылок на /usr/include/{linux,asm}.
Ожидаемое время сборки: 0.1 SBU Ожидаемое место на диске: 15 MB
Пакет Man-pages содержит более 1200 страниц документации. Это детальная информация по функциям C и C++, описание наиболее важных файлов устройств и документация, которая обычно опущена в других пакетах.
Устанавливаемые файлы: страницы документации.
Man зависит от Bash, Coreutils, Make.
Установите Man-pages запуском:
make install
Ожидаемое время сборки: 12.3 SBU Ожидаемое место на диске: 784 MB
Glibc является библиотекой C, которая обеспечивает системные вызовы и основные функции, такие как open, malloc, printf и другие. Библиотека C используется всеми динамически скомпонованными программами.
Устанавливаемые программы: catchsegv, gencat, getconf, getent, glibcbug, iconv, iconvconfig, ldconfig, ldd, lddlibc4, locale, localedef, mtrace, nscd, nscd_nischeck, pcprofiledump, pt_chown, rpcgen, rpcinfo, sln, sprof, tzselect, xtrace, zdump и zic.
Устанавливаемые библиотеки: ld.so, libBrokenLocale.[a,so], libSegFault.so, libanl.[a,so], libbsd-compat.a, libc.[a,so], libc_nonshared.a, libcrypt.[a,so], libdl.[a,so], libg.a, libieee.a, libm.[a,so], libmcheck.a, libmemusage.so, libnsl.a, libnss_compat.so, libnss_dns.so, libnss_files.so, libnss_hesiod.so, libnss_nis.so, libnss_nisplus.so, libpcprofile.so, libpthread.[a,so], libresolv.[a,so], librpcsvc.a, librt.[a,so], libthread_db.so и libutil.[a,so].
Glibc зависит от Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Gettext, Grep, Make, Perl, Sed и Texinfo.
Система сборки Glibc является весьма самодостаточной и должна установится корректно, если Ваши компоновщик и spec-файл находятся в /tools. Вы не можете установить spec и компоновщик перед установкой Glibc потому, что тест автоконфинурации Glibc даст фиктивные результаты, а от этого зависит чистота сборки.
Замечание: Тестирование Glibc в этой главе является критичным. Ни в коем случае нельзя его пропускать.
Перед началом сборки Glibc не забудьте снова распаковать архив Glibc-linuxthreads в каталоге glibc-2.3.2 и отключить переменные окружения, отвечающие за параметры оптимизации.
На стадии установки Glibc выдает ошибку при отсутствии файла /etc/ld.so.conf. Исправьте это командой:
touch /etc/ld.so.conf
Примените ранее использовавшийся патч:
patch -Np1 -i ../glibc-2.3.2-sscanf-1.patch
Документация по Glibc рекомендует собирать Glibc вне каталога с исходными текстами в отдельном каталоге для сборки:
mkdir ../glibc-build cd ../glibc-build
Теперь подготовим Glibc к компиляции:
../glibc-2.3.2/configure --prefix=/usr --disable-profile --enable-add-ons \ --libexecdir=/usr/bin --with-headers=/usr/include
Описание параметров конфигурации:
Скомпилируйте пакет:
make
Протестируйте результаты:
make check
Тестирование, описанное в части "Установка Glibc-2.3.2" главы 5, будет очень уместно здесь. Убедитесь перед продолжением установки, что все в порядке.
Теперь установите пакет:
make install
Локали позволят Вашей системе работать на разных языках. Их установка не обеспечивается предыдущей командой, надо сделать это с помощью:
make localedata/install-locales
Альтернативой запуску предыдущей команды будет установка только необходимых локалей. Это обеспечивается запуском команды localedef. Информацию о ней можно получить из файла INSTALL из каталога glibc-2.3.2. Тем не менее, есть ряд локалей, которые необходимы для успешного прохождения некоторых тестов других пакетов. Следующие инструкции установят минимально необходимый набор локалей:
mkdir -p /usr/lib/locale localedef -i de_DE -f ISO-8859-1 de_DE localedef -i de_DE@euro -f ISO-8859-15 de_DE@euro 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 es_MX -f ISO-8859-1 es_MX localedef -i fr_FR -f ISO-8859-1 fr_FR localedef -i fr_FR@euro -f ISO-8859-15 fr_FR@euro localedef -i it_IT -f ISO-8859-1 it_IT localedef -i ja_JP -f EUC-JP ja_JP
Наконец, соберите man-страницы для linuxthreads:
make -C ../glibc-2.3.2/linuxthreads/man
Теперь установите их:
make -C ../glibc-2.3.2/linuxthreads/man install
Вам нужно создать файл /etc/nsswitch.conf потому, что по умолчанию Glibc не создает этот файл, а без него Glibc не работает с сетью. Также это надо для работы с Вашей временной зоной.
Создайте новый файл /etc/nsswitch.conf запуском следующих команд:
cat > /etc/nsswitch.conf << "EOF" # Begin /etc/nsswitch.conf passwd: files group: files shadow: files publickey: files hosts: files dns networks: files protocols: db files services: db files ethers: db files rpc: db files netgroup: db files # End /etc/nsswitch.conf EOF
Для определения Вашей временной зоны, запустите скрипт:
tzselect
Когда ответите на некоторые вопросы о Вашем местонахождении, скрипт выдаст Вашу временную зону. Что-то наподобие EST5EDT или Canada/Eastern. Создайте файл /etc/localtime запуском:
cp --remove-destination /usr/share/zoneinfo/Canada/Eastern /etc/localtime
Описание параметров:
Само собой, надо заменить Canada/Eastern на Вашу временную зону, которую определили с помощью скрипта tzselect.
По умолчанию, динамический загрузчик (/lib/ld-linux.so.2) ищет динамические библиотеки, необходимые для программ, в /lib и /usr/lib. Таким образом, если есть каталоги с библиотеками, отличные от /lib и /usr/lib, надо указать их в файле /etc/ld.so.conf. Два наиболее распространенные каталога с дополнительными библиотеками находятся в /usr/local/lib и в /opt/lib, и Вы добавите их в путь поиска динамического компоновщика.
Создайте новый файл /etc/ld.so.conf запуском команды:
cat > /etc/ld.so.conf << "EOF" # Begin /etc/ld.so.conf /usr/local/lib /opt/lib
# End /etc/ld.so.conf EOF
Теперь, когда Вы установили новую библиотку C, пришло время переустановить все остальные средства. Это надо для того, чтобы вновь скомпилированые программы использовали именно новую библиотеку C. Если говорить проще, то то, что Вы сейчас сделаете, это реверсия того, что Вы делали на этапе интеграции в прошлой главе.
Первым делом отрегулируйте компоновщик. Для этого вернитесь к каталогам с исходными текстами и сборкой из второго шага установки Binutils. Установите отрегулированый компоновщик запуском следующей команды из каталога binutils-build:
make -C ld INSTALL=/tools/bin/install install
Замечание: Если Вы пропустили предупреждение о нежелательности удаления каталогов с исходными текстами и сборкой Binutils из второго шага их установки в главе 5 или по другим причинам удалили их, или у Вас нет доступа к ним, не беспокойтесь, пока еще не все потеряно. Просто проигнорируйте вышеприведенную команду. В результате следующий пакет, Binutils, будет скомпонован с использованием библиотек Glibc из /tools вместо /usr. Это не идеально, но тестирование показывает что в обоих случаях двоичный код Binutils будет идентичным.
С этого момента все компилируемые программы будут собираться только с использованием библиотек из /usr/lib и /lib. Параметр INSTALL=/tools/bin/install необходим потому, что Makefile, созданый на втором шаге, содержит ссылки на /usr/bin/install, который пока что еще не установлен. Некоторые дистрибутивы содержат ссылку ginstall которая имеет первенство в Makefile, и это может создать здесь проблему. Вышеуказанная команда также решает и эту проблему.
Теперь Вы можете удалить оба каталога Binutils.
Теперь необходимо исправить точки в spec-файлах GCC, которые указывают на динамический компоновщик, так, чтобы они указывали на новый компоновщик. Самым простым будет следующее:
SPECFILE=/tools/lib/gcc-lib/*/*/specs && sed -e 's@ /tools/lib/ld-linux.so.2@ /lib/ld-linux.so.2@g' \ $SPECFILE > newspecfile && mv -f newspecfile $SPECFILE && unset SPECFILE
Желательно просто скопировать и вставить эту команду. После этого также неплохо было бы проверить spec-файлы, чтобы убедиться в сделаных изменениях.
Важно: Если Вы работаете на платформах, на которых имя динамического компоновщика отличается от ld-linux.so.2, Вы должны заменить ld-linux.so.2 на имя компоновщика для Вашей платформы в вишеуказанной команде. Вернитесь к части "Технические моменты" в главе 5, если у Вас возникли вопросы.
Внимание! На этом месте необходимо остановиться и убедиться, что основные функции (компиляция и компоновка) новых средств работают корректно. Для этого есть простой тест:
echo 'main(){}' > dummy.c gcc dummy.c readelf -l a.out | grep ': /lib'
Если все в порядке, то не будет ошибок, и на выводе Вы увидите:
[Requesting program interpreter: /lib/ld-linux.so.2]
Если эта надпись вообще не появилась или появилась другая, то что-то сильно не так. Вам надо исследовать и повторить все пройденные шаги, чтобы найти, в чем проблема и устранить ее. Точки для возврата после этого места уже не будет. Как правило, что-то не так бывает с вышеописаной правкой spec-файла. Убедитесь, что /lib содержит префикс динамического компоновщика. Само собой, если Вы работаете на платформе с названием динамического компоновщика, отличным от ld-linux.so.2, вывод будет несколько иным.
Если все прошло нормально, удалите все тестовые файлы:
rm dummy.c a.out
Ожидаемое время сборки: 1.4 SBU Ожидаемое место на диске: 167 MB
Binutils является набором средств разработки, содержащим компоновщик, ассемблер и другие средства для работы с объектными файлами и архивами.
Устанавливаемые программы: addr2line, ar, as, c++filt, gprof, ld, nm, objcopy, objdump, ranlib, readelf, size, strings и strip.
Устанавливаемые библиотеки: libiberty.a, libbfd.[a,so] и libopcodes.[a,so].
Binutils зависит от: Bash, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Perl, Sed, Texinfo.
Сейчас необходимо проверить правильность работы терминалов (PTY) в среде chroot. Мы проверим что все в порядке простым тестом:
expect -c "spawn ls"
Если Вы получили сообщение вида:
The system has no more ptys. Ask your system administrator to create more.
То Ваша среда chroot не может оперировать PTY. В этом случае не стоит запускать тестирование для Binutils и GCC до того, как Вы исправите это. Пожалуйста. вернитесь к частям "Монтирование файловых систем proc и devpts" и "Создание устройств (Makedev-1.7)" и выполните необходимые действия по устранению проблемы.
Замечание: Тестирование Binutils здесь является критичным. Ни в коем случае не пропускайте его!
Этот пакет известен своим нестабильным поведением при компиляции с измененными опциями оптимизации (включая опции -march и -mcpu). Binutils рекомендуется компилировать с настройками по умолчанию. Следовательно, если Вы задали переменные такие, как CFLAGS или CXXFLAGS, изменяющие уровень оптимизации по умолчанию, рекомендуется убрать их при сборке пакета Binutils. Изменяя оптимизации для binutils, Вы действуете на свой страх и риск.
Документация по Binutils рекомендует собирать Binutils вне каталога с исходными текстами в отдельном каталоге, выделенном для сборки:
mkdir ../binutils-build cd ../binutils-build
Теперь подготовьте Binutils к компиляции:
../binutils-2.14/configure --prefix=/usr --enable-shared
Скомпилируйте весь пакет:
make tooldir=/usr
Обычно каталог со средствами (каталог, где располагаются исполняемые файлы) устанавливается в $(exec_prefix)/$(target_alias), куда они и располагаются, например, /usr/i686-pc-linux-gnu. Когда мы собираем средства только для своей системы, мы не нуждаемся в этом, достаточно установить только /usr. Такая установка нужна только в случае использования cross-компиляции (к примеру, компилируем пакет на машине Intel, но нужен код для работы на платформе PowerPC).
Проверьте результаты компиляции:
make check
Тестирование, описанное в части "Установка Binutils-2.14: Шаг 2 " главы 5 является весьма уместным здесь. Убедитесь, что все в порядке перед продолжением установки.
Теперь установите пакет:
make tooldir=/usr install
Установите заголовки libiberty, которые нужны для некоторых пакетов:
cp ../binutils-2.14/include/libiberty.h /usr/include
Ожидаемое время сборки: 11.7 SBU Ожидаемое место на диске: 294 MB
Пакет GCC сдержит коллекцию компиляторов GNU, включая компиляторы C и C++.
Устанавливаемые программы: c++, cc (ссылка на gcc), cc1, cc1plus, collect2, cpp, g++, gcc, gccbug и gcov.
Устанавливаемые библиотеки: libgcc.a, libgcc_eh.a, libgcc_s.so, libstdc++.[a,so] и libsupc++.a.
GCC зависит от Bash, Binutils, Coreutils, Diffutils, Findutils, Gawk, Gettext, Glibc, Grep, Make, Perl, Sed и Texinfo.
Замечание: Тестирование GCC в этой главе является критичным. Ни в коем случае не пропускайте его.
Этот пакет известен своим нестабильным поведением при компиляции с измененными опциями оптимизации (включая опции -march и -mcpu). GCC рекомендуется компилировать с настройками по умолчанию. Следовательно, если Вы задали переменные такие как CFLAGS или CXXFLAGS, изменяющие уровень оптимизации по умолчанию, рекомендуется убрать их при сборке пакета GCC. Изменяя оптимизацию для GCC, Вы действуете на свой страх и риск.
Сейчас Вы собираетесь установить компиляторы языков C и C++, таким образом Вам надо распаковать архивы GCC-core и GCC-g++: они распакуются в один и тот же каталог. Вы можете также распаковать пакет GCC-testsuite. Полный пакет GCC содержит намного больше компиляторов. Инструкции по их установке Вы можете найти на http://www.linuxfromscratch.org/blfs/view/stable/general/gcc.html.
Сначала наложите патчи:
patch -Np1 -i ../gcc-3.3.1-no_fixincludes-2.patch patch -Np1 -i ../gcc-3.3.1-suppress-libiberty.patch
Второй патч отключает установку libiberty из GCC, которые Вы установили вместе с binutils. Будьте внимательны, не применяйте патч GCC specs из главы 5 здесь!
Документация на GCC рекомендует собирать GCC вне каталога с исходными текстами, в отдельном каталоге для сборки:
mkdir ../gcc-build cd ../gcc-build
Теперь подготовьте GCC к компиляции:
../gcc-3.3.1/configure --prefix=/usr --enable-shared --enable-threads=posix \ --enable-__cxa_atexit --enable-clocale=gnu \ --enable-languages=c,c++
Скомпилируйте пакет:
make
Протестируйте результаты, но не останавливайтесь при ошибках (Вы должны просто запомнить их):
make -k check
Тестирование из части "Установка GCC-3.3.1: Шаг 2" главы 5 является весьма желательным здесь. Убедитесь, что все в порядке перед продолжением установки.
Теперь установите пакет:
make install
Некоторые пакеты рассчитывают, что C PreProcessor будет установлен в каталоге /lib. Для удовлетворения нужд этих пакетов, создайте ссылку:
ln -s ../usr/bin/cpp /lib
Многие пакеты используют имя cc для вызова компилятора C. Для этих пакетов тоже создайте ссылку:
ln -s gcc /usr/bin/cc
Замечание: В этом месте рекомендуется повторить тест из части "Переустановка средств". Если тест не прошел, то, скорее всего, Вы применили-таки патч GCC Specs из главы 5.
Ожидаемое время сборки: 0.9 SBU Ожидаемое место на диске: 69 MB
Пакет Coreutils содержит ряд основных утилит для shell.
Устанавливаемые программы: basename, cat, chgrp, chmod, chown, chroot, cksum, comm, cp, csplit, cut, date, dd, df, dir, dircolors, dirname, du, echo, env, expand, expr, factor, false, fmt, fold, groups, head, hostid, hostname, id, install, join, kill, link, ln, logname, ls, md5sum, mkdir, mkfifo, mknod, mv, nice, nl, nohup, od, paste, pathchk, pinky, pr, printenv, printf, ptx, pwd, readlink, rm, rmdir, seq, sha1sum, shred, sleep, sort, split, stat, stty, su, sum, sync, tac, tail, tee, test, touch, tr, true, tsort, tty, uname, unexpand, uniq, unlink, uptime, users, vdir, wc, who, whoami и yes.
Coreutils зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Perl, Sed.
Нормальное функционирование uname иногда нарушается, тогда параметр -p всегда возвращает "unknown". Следующий патч исправляет это для архитектуры Intel:
patch -Np1 -i ../coreutils-5.0-uname.patch
Я не хочу использовать Coreutils для установки программы hostname потому, что более новая версия содержится в Net-tools. Отключим эту установку патчем:
patch -Np1 -i ../coreutils-5.0-hostname-2.patch
Теперь подготовим Coreutils к компиляции:
./configure --prefix=/usr
Скомпилируем пакет:
make
Программа su из Coreutils не была установлена в главе 5 потому, что ей нужны привелегии root. Я собираюсь установить ее, поскольку она нужна для тестирования. Установите ее командой:
make install-root
Этот пакет поддерживает тестирование для определения корректности сборки. Тем не менее, этот специфический тест использует непревилигированных пользователей и группы, которые пока не определены в простой системе. Поэтому создадим фиктивного пользователя и две фиктивных группы для корректной работы тестов. Если Вы не хотите запускать тестирование, то переходите к установке пакета. Следующие команды подготовят систему к тестированию. Создайте фиктивных пользователя и группы:
echo "dummy1:x:1000" >> /etc/group echo "dummy2:x:1001:dummy" >> /etc/group echo "dummy:x:1000:1000:::/bin/bash" >> /etc/passwd
Следующий тест проверит запуск от имени root:
make check-root
Следующий тест проверит запуск от имени фиктивного пользователя:
su dummy -c "make RUN_EXPENSIVE_TESTS=yes check"
Удалите фиктивные группы и пользователя:
sed -i.bak '/dummy/d' /etc/passwd /etc/group
Установите готовый пакет:
make install
Переместите некоторые программы в правильное место:
mv /usr/bin/{basename,cat,chgrp,chmod,chown,cp,dd,df} /bin mv /usr/bin/{dir,dircolors,du,date,echo,false,head} /bin mv /usr/bin/{install,ln,ls,mkdir,mkfifo,mknod,mv,pwd} /bin mv /usr/bin/{rm,rmdir,shred,sync,sleep,stty,su,test} /bin mv /usr/bin/{touch,true,uname,vdir} /bin mv /usr/bin/chroot /usr/sbin
Наконец, создайте необходимые ссылки:
ln -s test /bin/[ ln -s ../../bin/install /usr/bin
Ожидаемое время сборки: 0.1 SBU Ожидаемое место на диске: 1.5 MB
Пакет Zlib содержит библиотеку libz, которая используется некоторыми программами для функций сжатия и распаковки.
Устанавливаемые библиотеки: libz[a,so].
Zlib зависит от Binutils, Coreutils, GCC, Glibc, Make и Sed.
Zlib имеет потенциальную опасность переполнения буфера в функции gzprintf(), которая, для предохранения от использования этой возможности взлома, исправляется наложением следующего патча:
patch -Np1 -i ../zlib-1.1.4-vsnprintf.patch
Теперь подготовьте Zlib к компиляции:
./configure --prefix=/usr --shared
Замечание: Zlib известна некорректной сборкой shared-библиотеки при указанной переменной окружения CFLAGS. Если Вы используете эту переменную, добавите директиву -fPIC на этом этапе и удалите ее по окончании.
Скомпилируйте пакет:
make
Установите shared-библиотеку:
make install
Теперь установите остальные библиотеки:
make clean ./configure --prefix=/usr make
Этот пакет поддерживает тестирование корректности сборки. Если Вы хотите использовать эту возможность, выполните команду:
make test
Теперь установите пакет:
make install
Shared-библиотека Zlib устанавливается в каталог /lib. Таким образо, если Вы хотите загрузиться без каталога /usr, жизненно важные системные программы не получат доступа к библиотеке:
mv /usr/lib/libz.so.* /lib
Ссылка /usr/lib/libz.so указывает на несуществующий файл потому, что Вы только что его переместили. Создайте ссылку на новое расположение этой библиотеки:
ln -sf ../../lib/libz.so.1 /usr/lib/libz.so
Zlib не устанавливает свою man-страницу. Используйте следующую команду для установки этой документации:
cp zlib.3 /usr/share/man/man3
Ожидаемое время сборки: 0.1 SBU Ожидаемое место на диске: 1.1 MB
Пакет Lfs-Utils содержит разные программы, используемые другими пакетами, но которые не доступны в виде отдельных пакетов либо в составе каких либо из них.
Устанавливаемые программы: mktemp, tempfile, http-get и iana-net.
Устанавливаемые файлы: protocols, services.
Пока не проверены.
Скомпилируйте пакет:
make
Теперь установите его:
make install
Теперь скопируйте два файла из архива Lfs-Utils на свое место:
cp etc/{services,protocols} /etc
Файл /etc/services используется для представления номеров сервисов в читабельном виде, а файл /etc/protocols используется для того же, но применительно к протоколам.
Ожидаемое время сборки: 0.2 SBU Ожидаемое место на диске: 7.5 MB
Пакет Findutils содержит программы для поиска файлов, как "на лету" (для рекурсивного поиска в каталогах и вывода только файлов, удовлетворяющих шаблону), так и для поиска по базе данных.
Устанавливаемые программы: bigram, code, find, frcode, locate, updatedb и xargs.
Findutils зависит от Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make и Sed.
Подготовьте Findutils к компиляции:
./configure --prefix=/usr --libexecdir=/usr/bin
По умолчанию, база данных для updatedb расположена в /usr/var. Для размещения ее в /var/lib/misc/locatedb для совместимости с FHS, добавьте опцию --localstatedir=/var/lib/misc к команде configure.
Скомпилируйте пакет:
make
Этот пакет поддерживает тестирование корректности сборки. Если Вы хотите использовать эту возможность, запустите команду:
make check
Теперь установите пакет:
make install
Ожидаемое время сборки: 0.2 SBU Ожидаемое место на диске: 17 MB
Gawk является свободным вариантом языка awk, который используется для манипуляций с текстовыми данными.
Устанавливаемые программы: awk (ссылка на gawk), gawk, gawk-3.1.3, grcat, igawk, pgawk, pgawk-3.1.3 и pwcat.
Gawk зависит от Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Sed.
Сначала примените патч по следующим причинам:
patch -Np1 -i ../gawk-3.1.3-libexecdir.patch
Теперь подготовьте Gawk к компиляции:
./configure --prefix=/usr --libexecdir=/usr/bin
Скомпилируйте пакет:
make
Этот пакет поддерживает тестирование корректности сборки. Если Вы хотите использовать эту возможность, запустите команду:
make check
Теперь установите пакет:
make install
Ожидаемое время сборки: 0.6 SBU Ожидаемое место на диске: 27 MB
Пакет Ncurses содержит библиотеки для тектового и консольного интерфейса, включая панели и меню.
Устанавливаемые программы: captoinfo (ссылка на tic), clear, infocmp, infotocap (ссылка на tic), reset (ссылка на tset), tack, tic, toe, tput и tset.
Устанавливаемые библиотеки: libcurses.[a,so] (ссылка на libncurses.[a,so]), libform.[a,so], libmenu.[a,so], libncurses++.a, libncurses.[a,so] и libpanel.[a,so].
Ncurses зависит от Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Glibc, Grep, Make и Sed.
Для начала исправьте две проблемы:
patch -Np1 -i ../ncurses-5.3-etip-2.patch patch -Np1 -i ../ncurses-5.3-vsscanf.patch
Первый патч откорректирует файл заголовков etip.h, а второй патч устранит проблемы при компиляции конфликтующих заголовков.
Теперь подготовьте Ncurses к компиляции:
./configure --prefix=/usr --with-shared --without-debug
Скомпилируйте пакет:
make
Установите пакет:
make install
Установите права на исполнение библиотекам Ncurses:
chmod 755 /usr/lib/*.5.3
Теперь отметьте библиотеки, которые не должны выполняться:
chmod 644 /usr/lib/libncurses++.a
Переместите библиотеки в каталог /lib, где они должны быть:
mv /usr/lib/libncurses.so.5* /lib
Поскольку библиотеки были перемещены в /lib, некоторые ссылки теперь указывают на несуществующие файлы. Исправьте их:
ln -sf ../../lib/libncurses.so.5 /usr/lib/libncurses.so ln -sf libncurses.so /usr/lib/libcurses.so
Ожидаемое время сборки: 0.4 SBU Ожидаемое место на диске: 34 MB
Если Вы предпочитаете другие редакторы, такие как Emacs, Joe или Nano, вместо Vim, загляните на http://www.linuxfromscratch.org/blfs/view/stable/postlfs/editors.html для получения инструкций по установке.
Пакет Vim содержит конфигурируемый текстовый редактор для эффективного редактирования текста.
Устанавливаемые программы: efm_filter.pl, efm_perl.pl, ex (ссылка на vim), less.sh, mve.awk, pltags.pl, ref, rview (ссылка на vim), rvim (ссылка на vim), shtags.pl, tcltags, vi (ссылка на vim), view (ссылка на vim), vim, vim132, vim2html.pl, vimdiff (ссылка на vim), vimm, vimspell.sh, vimtutor и xxd.
Vim зависит от Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Ncurses и Sed.
Измените расположение по умолчанию файлов vimrc и gvimrc на /etc.
echo '#define SYS_VIMRC_FILE "/etc/vimrc"' >> src/feature.h echo '#define SYS_GVIMRC_FILE "/etc/gvimrc"' >> src/feature.h
Теперь подготовьте Vim к компиляции:
./configure --prefix=/usr
Скомпилируйте пакет:
make
Теперь установите его:
make install
Vim может быть запущен в "старом" режиме vi созданием ссылки, которая создается командой:
ln -s vim /usr/bin/vi
Если Вы собираетесь устанавливать систему X Window на Вашей системе LFS, надо будет перекомпилировать Vim после установки X. Vim содержит хорошую GUI-версию редактора, который использует X и некоторые другие библиотеки при установке. Для более подробной информации прочитайте документацию по Vim.
По умолчанию vim запускается в режиме совместимости с vi. Некоторым это нравится, но Вы получите больше преимуществ при запуске vim в режиме vim (иначе бы я не включил vim в эту книгу, а обошелся бы оригинальным vi). Создайте /root/.vimrc запуском команды:
cat > /root/.vimrc << "EOF" " Begin /root/.vimrc set nocompatible set bs=2 " End /root/.vimrc EOF
Ожидаемое время сборки: 0.1 SBU Ожидаемое место на диске: 3.0 MB
M4 является макропроцессором. Он копирует ввод в вывод, используя макросы. Макросы могут быть как встроеными, так и пользовательскими и могут иметь несколько аргументов. Помимо макропреобразований, m4 имеет встроенные функции для включения именованных файлов, запуска команд Unix, целочисленной арифметики, разносторонних манипуляциями с текстом, рекурсию и др. Программа m4 может использоваться в качестве обработчика для компиляторов или как макропроцессор на Ваше усмотрение.
Устанавливаемые программы: m4.
M4 зависит от Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Perl и Sed.
Подготовьте M4 к компиляции:
./configure --prefix=/usr
Скомпилируйте пакет:
make
Этот пакет поддерживает тестирование корректности сборки. Если Вы хотите использовать эту возможность, запустите команду:
make check
Теперь установите пакет:
make install
Ожидаемое время сборки: 0.6 SBU Ожидаемое место на диске: 10.6 MB
Bison является генератором синтаксических анализаторов, заменой для yacc. Генерирует программу, которая анализирует структуру текстового файла.
Устанавливаемые программы: bison и yacc
Устанавливаемые библиотеки: liby.a
Bison зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, M4, Make, Sed.
Первым делом наложите патч на bison, скачаный с CVS, который исправит проблемы компиляции с некоторыми пакетами:
patch -Np1 -i ../bison-1.875-attribute.patch
Подготовим Bison к компиляции:
./configure --prefix=/usr
Скомпилируем этот пакет:
make
Этот пакет поддерживает тестирование корректности сборки. Если Вы хотите использовать эту возможность, то запустите команду (это займет много времени):
make check
Теперь установите пакет:
make install
Ожидаемое время сборки: 0.1 SBU Ожидаемое место на диске: 3.4 MB
Less является просмотрщиком файлов или текста. Он отображает содержимое файла или потока и позволяет его прокрутку. Less имеет некоторые возможности, которые не включены в просмотрщик more, например, позволяет прокрутку назад.
Устанавливаемые программы: less, lessecho и lesskey.
Less зависит от Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Ncurses и Sed.
Подготовьте Less к компиляции:
./configure --prefix=/usr --bindir=/bin --sysconfdir=/etc
Описание опций конфигурации:
Скомпилируйте пакет:
make
Теперь установите его:
make install
Ожидаемое время сборки: 0.5 SBU Ожидаемое место на диске: 43 MB
Пакет Groff содержит некоторые программы для форматирования текста. Groff транслирует стандартный текст и специальные команды в форматированый вывод, так Вы, например, просматриваете все man-страницы.
Устанавливаемые программы: addftinfo, afmtodit, eqn, eqn2graph, geqn (ссылка на eqn), grn, grodvi, groff, groffer, grog, grolbp, grolj4, grops, grotty, gtbl (ссылка на tbl), hpftodit, indxbib, lkbib, lookbib, mmroff, neqn, nroff, pfbtops, pic, pic2graph, post-grohtml, pre-grohtml, refer, soelim, tbl, tfmtodit, troff и zsoelim (ссылка на soelim).
Groff зависит от Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Glibc, Grep, Make и Sed.
Groff использует переменную окружения PAGE для определения размеров бумаги по умолчанию. При использовании в США, нижеприведенная команда корректна. Но в России Вам, видимо, надо будет поменять PAGE=letter на PAGE=A4.
Подготовьте Groff к компиляции:
PAGE=letter ./configure --prefix=/usr
Скомпилируйте пакет:
make
Теперь установите его:
make install
Некоторые программы документации, например, xman, не работают правильно без следующих ссылок:
ln -s soelim /usr/bin/zsoelim ln -s eqn /usr/bin/geqn ln -s tbl /usr/bin/gtbl
Ожидаемое время сборки: 0.2 SBU Ожидаемое место на диске: 5.2 MB
Sed является редактором потоков. Редактор потоков используется для простых трансформаций текста во входном потоке (файл или ввод из командной строки).
Устанавливаемые программы: sed
Sed зависит от Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Texinfo.
Подготовьте Sed к компиляции:
./configure --prefix=/usr --bindir=/bin
Скомпилируйте весь пакет:
make
Этот пакет поддерживает тестирование корректности сборки. Если Вы хотите использовать эту возможность, запустите команду:
Установите готовый пакет:
make installУстановка Flex-2.5.4a
Ожидаемое время сборки: 0.1 SBU Ожидаемое место на диске: 3.4 MBОписание Flex
Пакет Flex используется для генерации программ, которые могут обрабатывать шаблоны в тексте.
Устанавливаемые программы: flex, flex++ (ссылка на flex) и lex.
Устанавливаемые библиотеки: libfl.a.
Зависимости установки Flex
Flex зависит от Bash, Binutils, Bison, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, M4, Make и Sed.
Установка Flex
Подготовьте Flex к компиляции:
./configure --prefix=/usrСкомпилируйте пакет:
makeЭтот пакет поддерживает тестирование корректности сборки. Если Вы хотите использовать эту возможность, запустите команду:
make bigcheckТеперь установите пакет:
make installНекоторые пакеты ищут библиотеку Lex в /usr/lib. Создайте необходимую им ссылку:
ln -s libfl.a /usr/lib/libl.aНекоторые программы не знают о flex и используют его предыдущий вариант lex. Для поддержки таких программ создайте shell-скрипт lex, который будет вызывать flex в режиме эмуляции Lex:
cat > /usr/bin/lex << "EOF" #!/bin/sh # Begin /usr/bin/lex exec /usr/bin/flex -l "$@" # End /usr/bin/lex EOF chmod 755 /usr/bin/lexУстановка Gettext-0.12.1
Ожидаемое время сборки: 7.2 SBU Ожидаемое место на диске: 55 MBОписание Gettext
Пакет Gettext используется для интернационализации и локализации. Программы могут быть скомпилированы с поддержкой родного языка (Native Language Support, NLS) для получения возможности вывода сообщений на языке пользователя.
Устанавливаемые программы: autopoint, config.charset, config.rpath, gettext, gettextize, hostname, msgattrib, msgcat, msgcmp, msgcomm, msgconv, msgen, msgexec, msgfilter, msgfmt, msggrep, msginit, msgmerge, msgunfmt, msguniq, ngettext, project-id, team-address, trigger, urlget, user-email и xgettext.
Устанавливаемые библиотеки: libasprintf[a,so], libgettextlib[a,so], libgettextpo[a,so] и libgettextsrc[a,so].
Зависимости установки Gettext
Gettext зависит от Bash, Binutils, Bison, Coreutils, Diffutils, Gawk, GCC, Glibc, Grep, Make и Sed.
Установка Gettext
Подготовьте Gettext к компиляции:
./configure --prefix=/toolsСкомпилируйте пакет:
makeЭтот пакет поддерживает тестирование корректности сборки. Тем не менее, тестирование Gettext в этой главе может не пройти успешно из-за зависимостей от основной системы, к примеру, если будет найден компилятор Java. Тестирование Gettext занимает много времени и не является критичным. Поэтому я не рекомендую запускать его здесь. Если же Вы все-таки захотите использовать его, выполните команду:
make checkТеперь установите пакет:
make installУстановка Net-tools-1.60
Ожидаемое время сборки: 0.1 SBU Ождидаемое место на диске: 9.4 MBОписание Net-tools
Пакет Net-tools содержит набор программ для обеспечения основы поддержки сети в Linux.
Устанавливаемые программы: arp, dnsdomainname (ссылка на hostname), domainname (ссылка на hostname), hostname, ifconfig, nameif, netstat, nisdomainname (ссылка на hostname), plipconfig, rarp, route, slattach и ypdomainname (ссылка на hostname).
Зависимости установки Net-tools
Net-tools зависит от Bash, Binutils, Coreutils, GCC, Glibc и Make.
Установка Net-tools
Если Вы не знаете, как ответить на задаваемые командой make config вопросы, то просто соглашайтесь со всем. Этого будет достаточно в большинстве случаев. Вас спросят только о том, какие сетевые протоколы Вы выберете в ядре. Ответы по умолчанию достаточны для нормальной работы программ из этого пакета с наиболее распространенными протоколами: TCP, PPP и рядом других. Вам еще надо будет выбрать поддержку этих протоколов при сборке ядра: то, что Вы здесь сделаете просто позволит программам использовать выбранные протоколы, но только включение в ядро сделает их доступными для системы.
Для начала исправьте синтаксическую ошибку в исходных текстах программы mii-tool:
patch -Np1 -i ../net-tools-1.60-miitool-gcc33-1.patchТеперь подготовьте Net-tools к компиляции:
make configЕсли Вы собираетесь собирать этот пакет с установками по умолчанию, то Вы можете избавится от необходимости отвечать на каждый вопрос запуском вместо make config команды yes "" | make config.
Скомпилируйте пакет:
makeТеперь установите его:
make updateУстановка Inetutils-1.4.2
Ожидаемое время сборки: 0.2 SBU Ожидаемое место на диске: 11 MBСодержание Inetutils
Пакет Inetutils содержит ряд сетевых клиентов и серверов.
Устанавливаемые программы: ftp, ping, rcp, rlogin, rsh, talk, telnet и tftp
Зависимости установки Inetutils
Inetutils зависит от Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Ncurses и Sed.
Установка Inetutils
Подготовим Inetutils к компиляции:
./configure --prefix=/usr --disable-syslogd --libexecdir=/usr/sbin \ --disable-logger --sysconfdir=/etc --localstatedir=/var \ --disable-whois --disable-serversОписание параметров конфигурации:
Скомпилируйте пакет:
make
Установите его:
make install
Переместите программу ping на ее место:
mv /usr/bin/ping /bin
Ожидаемое время сборки: 2.9 SBU Ожидаемое место на диске: 143 MB
Пакет Perl содержит perl (Practical Extraction and Report Language). Perl совмещает в себе некоторые лучшие элементы от C, sed, awk и sh в одном мощном языке.
Устанавливаемые программы: a2p, c2ph, dprofpp, enc2xs, find2perl, h2ph, h2xs, libnetcfg, perl, perl5.8.0 (ссылка на perl), perlbug, perlcc, perldoc, perlivp, piconv, pl2pm, pod2html, pod2latex, pod2man, pod2text, pod2usage, podchecker, podselect, psed (ссылка на s2p), pstruct (ссылка на c2ph), s2p, splain и xsubpp.
Perl зависит от Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Glibc, Grep, Make, Sed.
Подготовьте Perl к компиляции:
./configure.gnu --prefix=/usr
Если Вы хотите контролировать процесс настроек опций сборки Perlt, можете запустить интерактивный скрипт Configure и указывать опции сборки Perl. Если хотите оставить настройки (разумные) Perl, которые определяются автоматически по умолчанию, то просто запустите команду, приведенную выше.
Скомпилируйте пакет:
make
Этот пакет поддерживает тестирование корректности сборки. Если Вы хотите использовать эту возможность, то сначала создайте простой файл /etc/hosts, необходимый для тестов, использующих сетевое имя localhost:
echo "127.0.0.1 localhost $(hostname)" > /etc/hosts
Теперь, если хотите, запустите тест:
make test
Теперь установите пакет:
make install
Ожидаемое время сборки: 0.2 SBU Ожидаемое место на диске: 17 MB
Пакет Texinfo содержит программы, используемые для чтения, записи и преобразования документов Info, которые содержат системную документацию.
Устанавливаемые программы: info, infokey, install-info, makeinfo, texi2dvi и texindex.
Texinfo зависит от Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Ncurses и Sed.
Подготовим Texinfo к компиляции:
./configure --prefix=/usr
Скомпилируем пакет:
make
Этот пакет поддерживает тестирование корректности сборки. Если Вы хотите использовать эту возможность, то запустите:
make check
Установим пакет:
make install
Дополнительно установите компоненты входящие в установку TeX:
make TEXMF=/usr/share/texmf install-tex
Описание параметров сборки:
Ожидаемое время сборки: 2.9 SBU Ожидаемое место на диске: 7.7 MB
Autoconf создает скрипты, которые автоматически конфигурируют исходный код.
Устанавливаемые программы: autoconf, autoheader, autom4te, autoreconf, autoscan, autoupdate и ifnames.
Autoconf зависит от Bash, Coreutils, Diffutils, Grep, M4, Make, Perl и Sed.
Подготовьте Autoconf к компиляции:
./configure --prefix=/usr
Скомпилируйте пакет:
make
Этот пакет поддерживает тестирование корректности сборки. Если Вы хотите использовать эту возможность, то запустите команду:
make check
Теперь установите пакет:
make install
Ожидаемое время сборки: 5.3 SBU Ожидаемое место на диске: 6.8 MB
Automake генерирует файлы Makefile.in, которые впоследствии должен использовать Autoconf.
Устанавливаемые программы: acinstall, aclocal, aclocal-1.7, automake, automake-1.7, compile, config.guess, config.sub, depcomp, elisp-comp, install-sh, mdate-sh, missing, mkinstalldirs, py-compile, ylwrap.
Automake зависит от Autoconf, Bash, Coreutils, Diffutils, Grep, M4, Make, Perl и Sed.
Подготовьте Automake к компиляции:
./configure --prefix=/usr
Скомпилируйте пакет:
make
Этот пакет поддерживает тестирование корректности сборки. Если Вы хотите использовать эту возможность, запустите команду:
make check
Установите пакет:
make install
Теперь создайте необходимые ссылки:
ln -s automake-1.7 /usr/share/automake
Ожидаемое время сборки: 1.2 SBU Ожидаемое место на диске: 27 MB
Bash (Bourne-Again SHell) обычно используется как интерпретатор команд в Unix-системах. Программа bash считывает данные со стандартного ввода (клавиатуры, к примеру). Пользователь вводит что-либо, и программа определяет, что именно пользователь ввел, и что ей с этим делать, например, запустить другую программу.
Устанавливаемые программы: bash, sh (ссылка на bash) и bashbug.
Bash зависит от Binutils, Coreutils, Diffutils, Gawk, GCC, Glibc, Grep, Make, Ncurses и Sed.
Bash содержит несколько известных ошибок. Исправьте их, применив патч:
patch -Np1 -i ../bash-2.05b-2.patch
Теперь подготовьте Bash к компиляции:
./configure --prefix=/tools
Скомпилируйте программу:
make
Этот пакет поддерживает тестирование корректности сборки. Если Вы хотите использовать эту возможность, выполните команду:
make tests
Теперь установите пакет и документацию:
make install
Теперь создайте ссылку для программ, которые используют sh в качестве системной оболочки:
ln -s bash /tools/bin/sh
Ожидаемое время сборки: 0.1 SBU Ожидаемое место на диске: 6.3 MB
File является утилитой для определения типа файла.
Устанавливаемая программа: file.
Устанавливаемая библиотека: libmagic.[a,so].
File зависит от Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Sed и Zlib.
Подготовьте File к компиляции:
./configure --prefix=/usr
Скомпилируйте пакет:
make
Теперь установите его:
make install
Ожидаемое время сборки: 1.5 SBU Ожидаемое место на диске: 20 MB
GNU libtool является общей библиотекой поддержки скриптов. Libtool скрывает сложность использования системных библиотек обеспечивая совместимый, портируемый интерфейс.
Устанавливаемые программы: libtool и libtoolize.
Устанавливаемые библиотеки: libltdl.[a,so].
Libtool зависит от Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make и Sed.
Подготовьте Libtool к компиляции:
./configure --prefix=/usr
Скомпилируйте пакет:
make
Этот пакет поддерживает тестирование корректности сборки. Если Вы хотите использовать эту возможность, запустите команду:
make check
Теперь установите пакет:
make install
Ожидаемое время сборки: 0.1 SBU Ожидаемое место на диске: 3.0 MB
Bzip2 является блочно-сортирующим компрессором файлов, который генерирует архивы с лучшей степенью сжатия, чем традиционный gzip.
Устанавливаемые программы: bunzip2 (ссылка на bzip2), bzcat (ссылка на bzip2), bzcmp, bzdiff, bzegrep, bzfgrep, bzgrep, bzip2, bzip2recover, bzless и bzmore.
Устанавливаемые библиотеки: libbz2.a, libbz2.so (ссылка на libbz2.so.1.0), libbz2.so.1.0 (ссылка на libbz2.so.1.0.2) и libbz2.so.1.0.2.
Bzip2 зависит от Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Make.
Подготовьте Bzip2 к компиляции:
make -f Makefile-libbz2_so make clean
Флаг -f нужен Bzip2 для использования при сборке файла, отличного от Makefile, в Вашем случае это будет Makefile-libbz2_so, который создает динамическую библиотеку libbz2.so и подключает ее к утилитам Bzip2.
Скомпилируйте пакет и установите его:
make make install
Установите библиотеку bzip2 в каталог /bin, затем создайте необходимые ссылки и удалите старые:
cp bzip2-shared /bin/bzip2 cp -a libbz2.so* /lib ln -s ../../lib/libbz2.so.1.0 /usr/lib/libbz2.so rm /usr/bin/{bunzip2,bzcat,bzip2} mv /usr/bin/{bzip2recover,bzless,bzmore} /bin ln -s bzip2 /bin/bunzip2 ln -s bzip2 /bin/bzcat
Ожидаемое время сборки: 0.1 SBU Ожидаемое место на диске: 7.5 MB
Программы из этого пакета покажут различия между двумя (или тремя) файлами или каталогами. Как правило, они используются для создания патчей к программам.
Устанавливаемые программы: cmp, diff, diff3 и sdiff.
Diffutils зависит от Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make и Sed.
Подготовьте Diffutils к компиляции:
./configure --prefix=/usr
Скомпилируйте пакет:
make
Теперь установите его:
make install
Ожидаемое время сборки: 0.1 SBU Ожидаемое место на диске: 3.1 MB
GNU ed является 8-ми битовым, POSIX-совместимым редактором строк.
Устанавливаемые программы: ed и red (ссылка на ed).
Ed зависит от Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make и Sed.
Замечание: Ed не является чем-то, что многие используют. Он устанавливается здесь потому, что он используется программой patch, если Вы применяете ed-файл патча. Это случается довольно редко, сейчас, в основном, используются diff-патчи.
Ed использует функцию mktemp для создания временных файлов в каталоге /tmp, но эта функция содержит уязвимость (смотрите раздел "Временные файлы" на http://en.tldp.org/HOWTO/Secure-Programs-HOWTO/avoid-race.html). Следующий патч позволяет Ed использовать замену mkstemp, что является рекомендованным для создания временных файлов.
Примените этот патч:
patch -Np1 -i ../ed-0.2-mkstemp.patch
Теперь подготовьте Ed к компиляции:
./configure --prefix=/usr
Скомпилируйте весь пакет:
make
Этот пакет поддерживает тестирование корректности сборки. Если Вы хотите использовать эту возможность, запустите команду:
make check
Установите готовый пакет:
make install
Теперь переместите программы в каталог /bin, для возможности использования программы при недоступном разделе /usr:
mv /usr/bin/{ed,red} /bin
Ожидаемое время сборки: 0.1 SBU Ожидаемое место на диске: 12 MB
Kbd содержит файлы раскладки клавиатуры и утилиты для нее.
Устанавливаемые программы: chvt, deallocvt, dumpkeys, fgconsole, getkeycodes, getunimap, kbd_mode, kbdrate, loadkeys, loadunimap, mapscrn, openvt, psfaddtable (ссылка на psfxtable), psfgettable (ссылка на psfxtable), psfstriptable (ссылка на psfxtable), psfxtable, resizecons, setfont, setkeycodes, setleds, setlogcons, setmetamode, setvesablank, showconsolefont, showkey, unicode_start и unicode_stop.
Kbd зависит от Bash, Binutils, Bison, Coreutils, Diffutils, Flex, GCC, Gettext, Glibc, Grep, Gzip, M4, Make и Sed.
По умолчанию некоторые утилиты Kbd (setlogcons, setvesablank и getunimap) не устанавливаются. Для начала выберите установку этих утилит:
patch -Np1 -i ../kbd-1.08-more-programs.patch
Теперь подготовьте Kbd к компиляции:
Скомпилируйте пакет:
makeТеперь установите его:
make installУстановка E2fsprogs-1.34
Ожидаемое время сборки: 0.6 SBU Ожидаемое место на диске: 48.4 MBОписание E2fsprogs
E2fsprogs содержит ряд системных утилит для использования их с файловой системой ext2. Они также поддерживают новую файловую систему ext3 с поддержкой журналирования.
Устанавливаемые программы: badblocks, blkid, chattr, compile_et, debugfs, dumpe2fs, e2fsck, e2image, e2label, findfs, fsck, fsck.ext2, fsck.ext3, logsave, lsattr, mk_cmds, mke2fs, mkfs.ext2, mkfs.ext3, mklost+found, resize2fs, tune2fs и uuidgen.
Устанавливаемые библиотеки: libblkid.[a,so], libcom_err.[a,so], libe2p.[a,so], libext2fs.[a,so], libss.[a,so] и libuuid.[a,so].
Зависимости установки E2fsprogs
E2fsprogs зависит от Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Gettext, Glibc, Grep, Make, Sed, Texinfo.
Установка E2fsprogs
Рекомендуется собирать E2fsprogs вне каталога с исходными текстами:
mkdir ../e2fsprogs-build cd ../e2fsprogs-buildПодготовьте E2fsprogs к компиляции:
../e2fsprogs-1.34/configure --prefix=/usr --with-root-prefix="" \ --enable-elf-shlibsОписание параметров конфигурации:
Скомпилируйте пакет:
make
Этот пакет поддерживает тестирование корректности сборки. Если Вы хотите использовать эту возможность, запустите команду:
make check
Установите основную часть пакета:
make install
Также установите разделяемую библиотеку:
make install-libs
Ожидаемое время сборки: 0.1 SBU Ожидаемое место на диске: 5.8 MB
Grep является программой для печати строк, совпадающих с заданным шаблоном.
Устанавливаемые программы: egrep (ссылка на grep), fgrep (ссылка на grep) и grep.
Grep зависит от Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Make, Sed, Texinfo.
Подготовьте Grep к компиляции:
./configure --prefix=/usr --bindir=/bin --with-included-regex
Скомпилируйте пакет:
make
Этот пакет поддерживает тестирование корректности сборки. Если Вы хотите использовать эту возможность, запустите команду:
make check
Теперь установите пакет:
make install
Ожидаемое время сборки: 0.2 SBU Ожидаемое место на диске: 10 MB
Пакет Grub содержит загрузчик.
Устанавливаемые программы: grub, grub-install, grub-md5-crypt, grub-terminfo и mbchk.
Grub зависит от Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Ncurses и Sed.
Этот пакет известен ошибками при сборке с использованием измененных опций оптимизации компиляции (включая параметры -march и -mcpu). Таким образом, если Вы меняли переменные окружения, отвечающие за оптимизацию сборки, такие как CFLAGS и CXXFLAGS, я рекомендую сбросить их перед началом сборки Grub.
Для начала исправьте проблему с компиляцией при использовании GCC-3.3.1:
patch -Np1 -i ../grub-0.93-gcc33-1.patch
Теперь подготовьте Grub к компиляции:
./configure --prefix=/usr
Скомпилируйте пакет:
make
А теперь установите его:
make install mkdir /boot/grub cp /usr/share/grub/i386-pc/stage{1,2} /boot/grub
Замените i386-pc на каталог, соответствующий Вашему железу.
Каталог i386-pc содержит также ряд файлов *stage1_5 для разных файловых систем. Посмотрите какие из них доступны и скопируйте их в каталог /boot/grub. Обычно следует скопировать файлы e2fs_stage1_5 и/или reiserfs_stage1_5.
Ожидаемое время сборки: 0.1 SBU Ожидаемое место на диске: 2.6 MB
Пакет Gzip содержит программы для сжатия и распаковки файлов с использованием алгоритма сжатия LZ77.
Устанавливаемые программы: gunzip (ссылка на gzip), gzexe, gzip, uncompress (ссылка на gunzip), zcat (ссылка на gzip), zcmp, zdiff, zegrep, zfgrep, zforce, zgrep, zless, zmore и znew.
Gzip зависит от Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Sed.
Подготовьте Gzip к компиляции:
./configure --prefix=/usr
Программа gzexe встраивает в себя путь к исполняемому модулю gzip. Поскольку позднее положение этого файла изменится, следующая команда позволит встроить новый путь:
cp gzexe.in{,.backup} sed 's%"BINDIR"%/bin%' gzexe.in.backup > gzexe.in
Скомпилируйте пакет:
make
Установите готовый пакет:
make install
Теперь переместите программы в каталог /bin и переделайте ссылки на них:
mv /usr/bin/gzip /bin rm /usr/bin/{gunzip,zcat} ln -s gzip /bin/gunzip ln -s gzip /bin/zcat ln -s gunzip /bin/uncompress
Ожидаемое время сборки: 0.1 SBU Ожидаемое место на диске: 1.9MB
Man является просмотрщиком man-страниц.
Устанавливаемые программы: apropos, makewhatis, man, man2dvi, man2html и whatis.
Man зависит от Bash, Binutils, Coreutils, Gawk, GCC, Glibc, Grep, Make и Sed.
Я собираюсь сделать три дополнения к исходникам Man.
Первым патчем Вы раскоментируете строку "MANPATH /usr/man" в файле man.conf для предупреждения излишней многословности результатов при использовании таких программ как whatis:
patch -Np1 -i ../man-1.5m2-manpath.patch
Второй патч добавит параметр -R в переменную PAGER для правильного использования escape-последовательностей:
patch -Np1 -i ../man-1.5m2-pager.patch
Третий и последний патч решит проблему с фоматированием man-страниц, содержащих более 80 символов в строке в связке с существующими релизами groff:
patch -Np1 -i ../man-1.5m2-80cols.patch
Теперь подготовьте Man к компиляции:
./configure -default -confdir=/etc
Описание параметров конфигурации:
Скомпилируйте пакет:
make
Теперь установите его:
make install
Замечание: Если Вы собираетесь отключить SGR escape-последовательности, Вы можете отредактировать файл man.conf или добавить параметр -c к вызову nroff.
Возможно, Вы захотите также посмотреть страницу BLFS на http://www.linuxfromscratch.org/blfs/view/cvs/postlfs/compressdoc.html, которая описывает использование форматированных и сжатых файлов man-страниц.
Ожидаемое время сборки: 0.2 SBU Ожидаемое место на диске: 8.8 MB
Make автоматически определяет, какие части больших программ нуждаются в перекомпиляции, и вызывает команды для их сборки.
Устанавливаемая программа: make.
Make зависит от Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Sed.
Подготовьте Make к компиляции:
./configure --prefix=/usr
Скомпилируйте пакет:
make
Этот пакет поддерживает тестирование корректности сборки. Если Вы хотите использовать эту возможность, запустите команду:
make check
Теперь установите пакет:
make install
Ожидаемое время сборки: 0.1 SBU Ожидаемое место на диске: 2.9 MB
Пакет Modutils содержит программы, которые Вы можете использовать для работы с модулями ядра.
Устанавливаемые пргограммы: depmod, genksyms, insmod, insmod_ksymoops_clean, kallsyms (ссылка на insmod), kernelversion, ksyms (ссылка на insmod), lsmod (ссылка на insmod), modinfo, modprobe (ссылка на insmod) и rmmod (ссылка на insmod).
Modutils зависит от Bash, Binutils, Bison, Coreutils, Diffutils, Flex, M4, GCC, Glibc, Grep, Make и Sed.
Подготовьте Modutils к компиляции:
./configure
Скомпилируйте пакет:
make
Теперь установите его:
make install
Ожидаемое время сборки: 0.1 SBU Ожидаемое место на диске: 1.9 MB
Программа patch модифицирует файл в соответствии с файлом патча. Патч обычно является списком, созданным программой diff, который содержит инструкции по изменению оригинального файла, нуждающегося в модификации.
Устанавливаемая программа: patch.
Patch зависит от Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make и Sed.
Подготовьте Patch к компиляции:
CPPFLAGS=-D_GNU_SOURCE ./configure --prefix=/usr
Опять же, флаг препроцессора -D_GNU_SOURCE необходим на платформах PowerPC. На других архитектурах его можно опустить.
Скомпилируйте пакет:
make
Теперь установите его:
make install
Ожидаемое время сборки: 0.1 SBU Ожидаемое место на диске: 0.2 MB
Программа procinfo собирает системные данные, такие как использование памяти и номера IRQ, из каталога /proc и приводит их к удобному виду.
Устанавливаемые программы: lsdev, procinfo и socklist.
Procinfo зависит от Binutils, GCC, Glibc, Make и Ncurses.
Скомпилируйте Procinfo:
make LDLIBS=-lncurses
Описание параметров сборки:
Теперь установите пакет:
make install
Ожидаемое время сборки: 0.1 SBU Ожидаемое время установки: 6.2 MB
Пакет Procps содержит программы для мониторинга и завершения системных процессов. Procps собирает информацию о процессах из каталога /proc.
Устанавливаемые программы: free, kill, pgrep, pkill, pmap, ps, skill, snice, sysctl, tload, top, uptime, vmstat, w и watch.
Устанавливаемая библиотека: libproc.so.
Procps зависит от Bash, Binutils, Coreutils, GCC, Glibc, Make и Ncurses.
Для начала исправьте проблему с возможным крахом w из-за установок локали:
patch -Np1 -i ../procps-3.1.11-locale-fix.patch
Теперь скомпилируйте Procps:
make
Установите полученный пакет:
make install
Теперь удалите одну ошибочную ссылку на библиотеку:
rm /lib/libproc.so
Ожидаемое время сборки: 0.1 SBU Ожидаемое место на диске: 2.2 MB
Пакет Psmisc содержит три программы для работы с каталогом /proc.
Устанавливаемые программы: fuser, killall и pstree.
Psmisc зависит от Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Ncurses и Sed.
Подготовьте Psmisc к компиляции:
./configure --prefix=/usr --exec-prefix=/
Описание параметров конфигурации:
Скомпилируйте пакет:
make
Теперь установите пакет:
make install
По умолчанию программа pidof не устанавливается. Обычно, это не является проблемой, поскольку устанавливаемый позже пакет Sysvinit содержит лучший вариант программы pidof. Но если Вы не собираетесь использовать Sysvinit, то Вам стоит завершить установку Psmisc созданием следующей ссылки:
ln -s killall /bin/pidof
Ожидаемое время сборки: 0.4 SBU Ожидаемое место на диске: 11 MB
Пакет Shadow создан для усиления безопасности системных паролей.
Устанавливаемые программы: chage, chfn, chpasswd, chsh, dpasswd, expiry, faillog, gpasswd, groupadd, groupdel, groupmod, groups, grpck, grpconv, grpunconv, lastlog, login, logoutd, mkpasswd, newgrp, newusers, passwd, pwck, pwconv, pwunconv, sg (ссылка на newgrp), useradd, userdel, usermod, vigr (ссылка на vipw) и vipw.
Shadow зависит от Bash, Binutils, Bison, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make и Sed.
Программы login, getty и init (и некоторые другие) поддерживают лог-файлы для записи кто, когда и где входил в систему. Эти программы, тем не менее, сами не создают эти лог-файлы, если они еще не существуют. Таким образом, если Вы собираетесь протоколировать эти события, то Вам надо создать эти файлы самостоятельно. Пакету Shadow нужны эти файлы в определенном месте, так что Вы создадите их для удовлетворения зависимостей:
touch /var/run/utmp /var/log/{btmp,lastlog,wtmp} chmod 644 /var/run/utmp /var/log/{btmp,lastlog,wtmp}
Файл /var/run/utmp содержит список пользователей, которые на данный момент работают в системе, файл /var/log/wtmp показывает кто, где подключился к системе и когда. Файл /var/log/lastlog показывает последние входы для каждого пользователя, а /var/log/btmp является списком ошибочных входов.
Shadow встраивает в себя путь к исполняемому модулю passwd, но это плохой метод в случае отсутствия этого файла на момент установки. Если двоичный файл passwd еще не существует перед установкой Shadow, пакет неверно определит путь как /bin/passwd, а установит его в /usr/bin/passwd. Это приведет к ошибке при попытке найти файл /bin/passwd. Для исправления этого, создайте фиктивный файл passwd:
touch /usr/bin/passwd
Текущий релиз Shadow содержит проблему с командой newgrp. Следующий патч (также применяющийся к CVS-версии Shadow) исправит эту проблему:
patch -Np1 -i ../shadow-4.0.3-newgrp-fix.patch
Теперь подготовьте Shadow к компиляции:
./configure --prefix=/usr --libdir=/usr/lib --enable-shared
Скомпилируйте пакет:
make
Теперь установите его:
make install
Shadow использует два файла для настройки параметров аутентификации в системе. Установите эти файлы:
cp etc/{limits,login.access} /etc
Вы собираетесь изменить метод паролирования выбором паролей MD5, которые, теоретически, являются более безопасными, чем метод по умолчанию "crypt" и заодно допускает создание паролей длинее 8-ми символов. Вы также должны изменить старое расположение /var/spool/mail для пользовательских почтовых ящиков на /var/mail. Вы сделаете это проведя следующие изменения конфигурационного файла:
sed -e 's%/var/spool/mail%/var/mail%' \ -e 's%#MD5_CRYPT_ENAB.no%MD5_CRYPT_ENAB yes%' etc/login.defs.linux > \ /etc/login.defs
Замечание: Будьте очень внимательны при вводе указанной команды. Лучше всего скопировать и вставить ее вместо того, чтобы просто набрать.
Согласно man-странице vipw, программа vigr также должна существовать. Поскольку процедура установки не создает эту программу, создайте ссылку вручную:
ln -s vipw /usr/sbin/vigr
Поскольку ссылка /bin/vipw не нужна (и ссылается на несуществующий файл), удалите ее:
rm /bin/vipw
Теперь переместите программу sg в правильное место:
mv /bin/sg /usr/bin
Переместите динамические библиотеки Shadow в более корректное расположение:
mv /usr/lib/lib{shadow,misc}.so.0* /lib
Поскольку некоторые пакеты нуждаются в расположении только что перемещенных библиотек в /usr/lib, создайте следующие ссылки:
ln -sf ../../lib/libshadow.so.0 /usr/lib/libshadow.so ln -sf ../../lib/libmisc.so.0 /usr/lib/libmisc.so
Coreutils уже установил программу groups в /usr/bin. Если хотите, то можете удалить такую же, установленную Shadow:
rm /bin/groups
Этот пакет содержит утилиты для модификации паролей пользователей, добавления или удаления пользователей и групп и тому подобные. Я не собираюсь объяснять здесь что такое 'затенение паролей' ('password shadowing'). Полное объяснение можно найти в файле doc/HOWTO в распакованном каталоге с исходными текстами Shadow. Здесь я опишу только то, что Вам понадобится, если Вы захотите использовать поддержку Shadow: программы, которые должны проверять пароли (к примеру, xdm, демоны ftp, демоны pop3) должны будут компилироваться с поддержкой shadow-совместимости, что надо для использования работы со скрытыми паролями.
Для начала использования скрытых паролей, запустите команду:
/usr/sbin/pwconv
А для использования скрытых паролей для групп, выполните:
/usr/sbin/grpconv
При нормальных обстоятельствах пока нет надобности создавать пароли. Запомните, что если Вы решите вернуться к этой главе для включения затенения паролей, надо будет сбросить пароли всех пользователей командой passwd и пароли всех групп командой gpasswd.
Ожидаемое время сборки: 0.1 SBU Ожидаемое место на диске: 0.5 MB
Пакет Sysklogd содержит программы для записи системных сообщений в протоколы (логи), например, сообщений ядра.
Устанавливаемые программы: klogd и syslogd.
Sysklogd зависит от Binutils, Coreutils, GCC, Glibc и Make.
Скомпилируйте Sysklogd:
make
Теперь установите его:
make install
Создайте новый файл /etc/syslog.conf запуском команды:
cat > /etc/syslog.conf << "EOF" # Begin /etc/syslog.conf auth,authpriv.* -/var/log/auth.log *.*;auth,authpriv.none -/var/log/sys.log daemon.* -/var/log/daemon.log
kern.* -/var/log/kern.log mail.* -/var/log/mail.log user.* -/var/log/user.log *.emerg * # End /etc/syslog.conf EOF
Ожидаемое время сборки: 0.1 SBU Ожидаемое место на диске: 0.9 MB
Пакет Sysvinit содержит пограммы для контроля загрузки, запуска и выключения всех других программ.
Установливаемые программы: halt, init, killall5, last, lastb (ссылка на last), mesg, pidof (ссылка на killall5), poweroff (ссылка на halt), reboot (ссылка на halt), runlevel, shutdown, sulogin, telinit (ссылка на init), utmpdump и wall.
Sysvinit зависит от Binutils, Coreutils, GCC, Glibc и Make.
Когда изменяется уровень запуска (например, при выключении системы), init посылает сигналы TERM и KILL запущенным процессам. Init печатает "Sending processes the TERM signal" на экране. Это предполагает, что init отсылает эти сигналы всем работающим процессам. Чтобы не входить в заблуждение, исправьте это сообщение на "Sending processes started by init the TERM signal".
Исправьте сообщение:
cp src/init.c{,.backup} sed 's/Sending processes/Sending processes started by init/g' \ src/init.c.backup > src/init.c
Скомпилируйте Sysvinit:
make -C src
Теперь установите его:
make -C src install
Создайте новый файл /etc/inittab запуском следующих команд:
cat > /etc/inittab << "EOF" # Begin /etc/inittab id:3:initdefault: si::sysinit:/etc/rc.d/init.d/rc sysinit l0:0:wait:/etc/rc.d/init.d/rc 0 l1:S1:wait:/etc/rc.d/init.d/rc 1 l2:2:wait:/etc/rc.d/init.d/rc 2 l3:3:wait:/etc/rc.d/init.d/rc 3 l4:4:wait:/etc/rc.d/init.d/rc 4 l5:5:wait:/etc/rc.d/init.d/rc 5 l6:6:wait:/etc/rc.d/init.d/rc 6 ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now su:S016:once:/sbin/sulogin 1:2345:respawn:/sbin/agetty tty1 9600 2:2345:respawn:/sbin/agetty tty2 9600 3:2345:respawn:/sbin/agetty tty3 9600 4:2345:respawn:/sbin/agetty tty4 9600 5:2345:respawn:/sbin/agetty tty5 9600 6:2345:respawn:/sbin/agetty tty6 9600 # End /etc/inittab EOF
Ожидаемое время сборки: 0.2 SBU Ожидаемое место на диске: 10 MB
Tar является архиватором, разработанным для записи и извлечения файлов из архива, извесного как tar-файл.
Устанавливаемые программы: rmt и tar
Tar зависит от Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Sed.
Подготовьте Tar к компиляции:
./configure --prefix=/usr --bindir=/bin --libexecdir=/usr/bin
Скомпилируйте готовый пакет:
make
Этот пакет поддерживает тестирование корректности сборки. Если Вы хотите использовать эту возможность, запустите команду:
make check
Теперь установите пакет:
make install
Ожидаемое время сборки: 0.2 SBU Ожидаемое место на диске: 16 MB
Пакет Util-linux содержит ряд различных утилит. Некоторые из этих утилит используются для монтирования, размонтирования, форматирования, разбиения и обслуживания дисков, открытия портов tty и вызова сообщений ядра.
Устанавливаемые программы: agetty, arch, blockdev, cal, cfdisk, chkdupexe, col, colcrt, colrm, column, ctrlaltdel, cytune, ddate, dmesg, elvtune, fdformat, fdisk, fsck.cramfs, fsck.minix, getopt, hexdump, hwclock, ipcrm, ipcs, isosize, kill, line, logger, look, losetup, mcookie, mkfs, mkfs.bfs, mkfs.cramfs, mkfs.minix, mkswap, more, mount, namei, parse.bash, parse.tcsh, pg, pivot_root, ramsize (ссылка на rdev), raw, rdev, readprofile, rename, renice, rev, rootflags (ссылка на rdev), script, setfdprm, setsid, setterm, sfdisk, swapoff (ссылка на swapon), swapon, test.bash, test.tcsh, tunelp, ul, umount, vidmode (ссылка на rdev), whereis и write.
Util-linux зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Ncurses, Sed, Zlib.
FHS рекомендует использовать /var/lib/hwclock, вместо обычного /etc, в качестве расположения для файла adjtime. Для обеспечения программе hwclock FHS-совместимости, запустите следующую команду:
cp hwclock/hwclock.c{,.backup} sed 's%etc/adjtime%var/lib/hwclock/adjtime%' hwclock/hwclock.c.backup \ > hwclock/hwclock.c mkdir -p /var/lib/hwclock
Подготовьте Util-linux к компиляции:
./configure
Скомпилируйте весь пакет:
make HAVE_SLN=yes
Описание параметров компиляции:
Теперь установите пакет:
make HAVE_SLN=yes install
Ожидаемое время сборки: 1.5 SBU Ожидаемое место на диске: 130 MB
Этот пакет известен своим нестабильным поведением при компиляции с измененными опциями оптимизации (включая опции -march и -mcpu). GCC рекомендуется компилировать с настройками по умолчанию. Следовательно, если Вы задали переменные такие как CFLAGS или CXXFLAGS, изменяющие уровень оптимизации по умолчанию, рекомендуется убрать их при сборке пакета GCC.
Это старая версия GCC, которую Вы собираетесь использовать для компиляции ядра в главе 8. Эта версия рекомендуется разработциками ядра для абсолютной стабильности. Поздние версии компилятора GCC не считаются идеальными для тестирования сборки ядра Linux. Можно использовать и более поздние версии, но я рекомендую следовать советам разработчиков и собирать ядро именно этой версией компилятора.
Замечание: Вы не устанавливаете компилятор и библиотеки C++ здесь. Тем не менее, Вы можете захотеть установить их. Информацию о том, как это сделать, можно получить на http://www.linuxfromscratch.org/blfs/view/stable/general/gcc2.html.
Вы будете устанавливать старую версию GCC с нестандартным префиксом /opt, поскольку используемый в Вашей системе пакет GCC уже установлен в каталог /usr.
Примените следующие патчи:
patch -Np1 -i ../gcc-2.95.3-2.patch patch -Np1 -i ../gcc-2.95.3-no-fixinc.patch patch -Np1 -i ../gcc-2.95.3-returntype-fix.patch echo timestamp > gcc/cstamp-h.in
Документация на GCC рекомендует собирать GCC вне каталога с исходными текстами, в отдельном каталоге для сборки:
mkdir ../gcc-2-build cd ../gcc-2-build
Скомпилируйте и установите компилятор:
../gcc-2.95.3/configure --prefix=/opt/gcc-2.95.3 --enable-shared \ --enable-languages=c --enable-threads=posix make bootstrap make install
Теперь Вы должны покинуть среду chroot и снова войти в нее, это делается следующим вариантом команды chroot:
chroot $LFS /usr/bin/env -i HOME=/root TERM=$TERM PS1='\u:\w\$ ' \ PATH=/bin:/usr/bin:/sbin:/usr/sbin /bin/bash --login
Причиной этого является то, что Вам уже не надо использовать программы из каталога /tools. Тем не менее, Вы пока не удаляете его. Он Вам еще будет нужен в конце книги.
Ожидаемое время сборки: 0.1 SBU Ожидаемое место на диске: 0.3 MB
Пакет LFS-Bootscripts содержит shell-скрипты в стиле SysV init. Эти скрипты нужны для выполнения определенных действий на этапе загрузки, таких как проверка файловых систем, загрузка раскладки клавиатуры, установка сети и завершения процессов при выходе.
Устанавливаемые скрипты: checkfs, cleanfs, functions, halt, ifdown, ifup, loadkeys, localnet, mountfs, mountproc, network, rc, reboot, sendsignals, setclock, swap, sysklogd и template.
Bzip2 зависит от Bash, Coreutils.
Я собираюсь использовать init-скрипты в стиле SysV. Я выбрал этот тип потому, что его использование наиболее комфортно и часто встречается. Если Вы собираетесь попробовать что-либо другое, то Marc Heerdink написал советы по init-скриптам в стиле BSD, они находятся на http://www.linuxfromscratch.org/hints/downloads/files/bsd-init.txt. Если же Вы собираетесь попробовать что-либо более радикальное, посмотрите в архиве списка рассылки LFS.
Если Вы решили использовать стиль BSD или другой в скриптах, то следует пропустить следующую главу и перейти к главе 8.
Установите загрузочные скрипты:
cp -a rc.d sysconfig /etc
Измените владельца скриптов на root:
chown -R root:root /etc/rc.d /etc/sysconfig
Теперь, когда Вы установили все программы, надо сделать некоторые настройки.
Очень сильно раздражает, когда Linux использует неверную раскладку клавиатуры. Если у Вас стандартная клавиатура US, Вы можете пропустить этот раздел, поскольку раскладка US используется по умолчанию, и не надо это менять.
Для изменения раскладки по умолчанию, создайте ссылку /usr/share/kbd/keymaps/defkeymap.map.gz запуском команды:
ln -s /путь/к/раскладке /usr/share/kbd/keymaps/defkeymap.map.gz
Само собой, замените /путь/к/раскладке на путь и имя раскладки, соответствующей Вашей клавиатуре. Например, если у Вас немецкая клавиатура, используйте i386/qwerty/nl.map.gz.
Описание настройки раскладки клавиатуры и локали для российских пользователей ОС Linux содержится в документе Cyrilic-HOWTO (или Cyrilic-HOWTO-russian), который спокойно можно скачать из интернета. Но будьте внимательны! В этом документе, к сожалению, описывается использование kbd старой версии. Если Вы не собираетесь использовать перекодировку вводимых символов из koi8-r или из cp1251 в Unicode или Alt, то нечего волноваться. В противном же случае (для нормального отображения символов псевдографики), прочитайте документацию к Вашей версии kbd, иначе ничего не получится.
Другим путем установки параметров клавиатуры является интеграция раскладки в ядро. Это позволит клавиатуре корректно работать даже при загрузке в режиме maintenance (задавая параметр ядру init=/bin/sh), когда загрузочные скрипты не запускаются и не могут установить Вашу раскладку.
Запустите следующую команду для встраивания раскладки в исходные тексты ядра. Вам надо будет повторять эту команду после каждой новой распаковки ядра:
loadkeys -m /usr/share/kbd/keymaps/defkeymap.map.gz > \ /usr/src/linux-2.4.22/drivers/char/defkeymap.c
Установите пароль пользователя root командой:
passwd root