RussianLDP Рейтинг@Mail.ru
WebMoney: 
WMZ Z294115950220 
WMR R409981405661 
WME E134003968233 
YandexMoney: 
41001198119846 
E-gold:
5128052

Описание MAKEDEV

Скрипт MAKEDEV создает статические записи для устройств, которые обычно расположены в каталоге /dev. Детальную информацию об устройствах Вы можете получить в файле Documentation/devices.txt в каталоге с исходными кодами ядра.

Устанавливаемый скрипт: MAKEDEV.

Зависимости установки 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.

Установка заголовков Linux-2.4.22

Ожидаемое время сборки:           0.1 SBU
Ожидаемое место на диске:         186 MB

Описание Linux

Ядро Linux является основой любой Linux-системы. Это то, что делает Linux самой собой. Когда компьютер включается и загружает систему Linux, самым первым загружается ядро. Ядро инициализирует аппаратные компоненты: последовательные и параллельные порты, звуковые карты, сетевые карты, контролеры IDE, контролеры SCSI и много чего еще. Собственно, ядро делает доступным аппаратные элементы системы и позволяет запускаться программам.

Устанавливаемые файлы: ядро и заголовки ядра.

Зависимости установки Linux

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}.

Установка Man-pages-1.60

Ожидаемое время сборки:           0.1 SBU
Ожидаемое место на диске:         15 MB

Описание Man-pages

Пакет Man-pages содержит более 1200 страниц документации. Это детальная информация по функциям C и C++, описание наиболее важных файлов устройств и документация, которая обычно опущена в других пакетах.

Устанавливаемые файлы: страницы документации.

Зависимости установки Man-pages

Man зависит от Bash, Coreutils, Make.

Установка Man-pages

Установите Man-pages запуском:

make install

Установка Glibc-2.3.2

Ожидаемое время сборки:           12.3 SBU
Ожидаемое место на диске:         784 MB

Описание Glibc

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

Glibc зависит от Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Gettext, Grep, Make, Perl, Sed и Texinfo.

Установка Glibc

Система сборки 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

Конфигурирование Glibc

Вам нужно создать файл /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

Установка Binutils-2.14

Ожидаемое время сборки:           1.4 SBU
Ожидаемое место на диске:         167 MB

Описание Binutils

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

Binutils зависит от: Bash, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Perl, Sed, Texinfo.

Установка Binutils

Сейчас необходимо проверить правильность работы терминалов (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

Установка GCC-3.3.1

Ожидаемое время сборки:           11.7 SBU
Ожидаемое место на диске:         294 MB

Описание GCC

Пакет 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

GCC зависит от Bash, Binutils, Coreutils, Diffutils, Findutils, Gawk, Gettext, Glibc, Grep, Make, Perl, Sed и Texinfo.

Установка GCC

Замечание: Тестирование 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.

Установка Coreutils-5.0

Ожидаемое время сборки:           0.9 SBU
Ожидаемое место на диске:         69 MB

Описание Coreutils

Пакет 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

Coreutils зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Perl, Sed.

Установка Coreutils

Нормальное функционирование 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

Установка Zlib-1.1.4

Ожидаемое время сборки:           0.1 SBU
Ожидаемое место на диске:         1.5 MB

Описание Zlib

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

Устанавливаемые библиотеки: libz[a,so].

Зависимости установки Zlib

Zlib зависит от Binutils, Coreutils, GCC, Glibc, Make и Sed.

Установка Zlib

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

Установка Lfs-Utils-0.3

Ожидаемое время сборки:           0.1 SBU
Ожидаемое место на диске:         1.1 MB

Описание Lfs-Utils

Пакет Lfs-Utils содержит разные программы, используемые другими пакетами, но которые не доступны в виде отдельных пакетов либо в составе каких либо из них.

Устанавливаемые программы: mktemp, tempfile, http-get и iana-net.

Устанавливаемые файлы: protocols, services.

Зависимости установки Lfs-Utils

Пока не проверены.

Установка Lfs-Utils

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

make

Теперь установите его:

make install

Теперь скопируйте два файла из архива Lfs-Utils на свое место:

cp etc/{services,protocols} /etc

Файл /etc/services используется для представления номеров сервисов в читабельном виде, а файл /etc/protocols используется для того же, но применительно к протоколам.

Установка Findutils-4.1.20

Ожидаемое время сборки:           0.2 SBU
Ожидаемое место на диске:         7.5 MB

Описание Findutils

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

Устанавливаемые программы: bigram, code, find, frcode, locate, updatedb и xargs.

Зависимости установки Findutils

Findutils зависит от Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make и Sed.

Установка Findutils

Подготовьте 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

Установка Gawk-3.1.3

Ожидаемое время сборки:           0.2 SBU
Ожидаемое место на диске:         17 MB

Описание Gawk

Gawk является свободным вариантом языка awk, который используется для манипуляций с текстовыми данными.

Устанавливаемые программы: awk (ссылка на gawk), gawk, gawk-3.1.3, grcat, igawk, pgawk, pgawk-3.1.3 и pwcat.

Зависимости установки Gawk

Gawk зависит от Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Sed.

Установка Gawk

Сначала примените патч по следующим причинам:

patch -Np1 -i ../gawk-3.1.3-libexecdir.patch

Теперь подготовьте Gawk к компиляции:

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

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

make

Этот пакет поддерживает тестирование корректности сборки. Если Вы хотите использовать эту возможность, запустите команду:

make check

Теперь установите пакет:

make install

Установка Ncurses-5.3

Ожидаемое время сборки:           0.6 SBU
Ожидаемое место на диске:          27 MB

Описание Ncurses

Пакет 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

Ncurses зависит от Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Glibc, Grep, Make и Sed.

Установка Ncurses

Для начала исправьте две проблемы:

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

Установка Vim-6.2

Ожидаемое время сборки:           0.4 SBU
Ожидаемое место на диске:         34 MB

Альтернативы для Vim

Если Вы предпочитаете другие редакторы, такие как Emacs, Joe или Nano, вместо Vim, загляните на http://www.linuxfromscratch.org/blfs/view/stable/postlfs/editors.html для получения инструкций по установке.

Описание Vim

Пакет 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

Vim зависит от Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Ncurses и Sed.

Установка Vim

Измените расположение по умолчанию файлов 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

По умолчанию vim запускается в режиме совместимости с vi. Некоторым это нравится, но Вы получите больше преимуществ при запуске vim в режиме vim (иначе бы я не включил vim в эту книгу, а обошелся бы оригинальным vi). Создайте /root/.vimrc запуском команды:

cat > /root/.vimrc << "EOF"
" Begin /root/.vimrc
set nocompatible
set bs=2
" End /root/.vimrc
EOF

Установка M4-1.4

Ожидаемое время сборки:           0.1 SBU
Ожидаемое место на диске:         3.0 MB

Описание M4

M4 является макропроцессором. Он копирует ввод в вывод, используя макросы. Макросы могут быть как встроеными, так и пользовательскими и могут иметь несколько аргументов. Помимо макропреобразований, m4 имеет встроенные функции для включения именованных файлов, запуска команд Unix, целочисленной арифметики, разносторонних манипуляциями с текстом, рекурсию и др. Программа m4 может использоваться в качестве обработчика для компиляторов или как макропроцессор на Ваше усмотрение.

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

Зависимости установки M4

M4 зависит от Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Perl и Sed.

Установка M4

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

./configure --prefix=/usr

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

make

Этот пакет поддерживает тестирование корректности сборки. Если Вы хотите использовать эту возможность, запустите команду:

make check

Теперь установите пакет:

make install

Установка Bison-1.875

Ожидаемое время сборки:           0.6 SBU
Ожидаемое место на диске:         10.6 MB

Описание Bison

Bison является генератором синтаксических анализаторов, заменой для yacc. Генерирует программу, которая анализирует структуру текстового файла.

Устанавливаемые программы: bison и yacc

Устанавливаемые библиотеки: liby.a

Зависимости установки Bison

Bison зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, M4, Make, Sed.

Установка Bison

Первым делом наложите патч на bison, скачаный с CVS, который исправит проблемы компиляции с некоторыми пакетами:

patch -Np1 -i ../bison-1.875-attribute.patch

Подготовим Bison к компиляции:

./configure --prefix=/usr

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

make

Этот пакет поддерживает тестирование корректности сборки. Если Вы хотите использовать эту возможность, то запустите команду (это займет много времени):

make check

Теперь установите пакет:

make install

Установка Less-381

Ожидаемое время сборки:           0.1 SBU
Ожидаемое место на диске:         3.4 MB

Описание Less

Less является просмотрщиком файлов или текста. Он отображает содержимое файла или потока и позволяет его прокрутку. Less имеет некоторые возможности, которые не включены в просмотрщик more, например, позволяет прокрутку назад.

Устанавливаемые программы: less, lessecho и lesskey.

Зависимости установки Less

Less зависит от Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Ncurses и Sed.

Установка Less

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

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

Описание опций конфигурации:

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

make

Теперь установите его:

make install

Установка Groff-1.19

Ожидаемое время сборки:           0.5 SBU
Ожидаемое место на диске:         43 MB

Описание Groff

Пакет 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

Groff зависит от Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Glibc, Grep, Make и Sed.

Установка Groff

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

Установка Sed-4.0.7

Ожидаемое время сборки:           0.2 SBU
Ожидаемое место на диске:         5.2 MB

Описание Sed

Sed является редактором потоков. Редактор потоков используется для простых трансформаций текста во входном потоке (файл или ввод из командной строки).

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

Зависимости установки Sed

Sed зависит от Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Texinfo.

Установка Sed

Подготовьте 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

Описание параметров конфигурации:

  • --disable-syslogd: Этот параметр запрещет inetutils установку System Log Daemon, который Вы устанавливаете с пакетом Sysklogd.
  • --disable-logger: Этот параметр запрещает inetutils установку программы ведения логов, которая использует скрипты для отправки сообщений System Log Daemon. Я не устанавливаю его потому, что Util-linux установит потом лучшую версию этой программы.
  • --disable-whois: Этот параметр отключает сборку whois-клиента, который является сильно устаревшим. Инструкции по установке лучшей версии клиента whois Вы найдете в книге BLFS.
  • --disable-servers: Этот параметр отключит установку ряда сетевых серверов как части пакета Inetutils. Эти серверы не нужны на простой LFS-системе. Некоторые из них являются небезопасными и могут быть запущены только в доверенной сети. Более полную информацию можно получить на http://www.linuxfromscratch.org/blfs/view/stable/basicnet/inetutils.html. Заметьте, что есть лучшие альтернативы для многих из этих серверов.

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

make

Установите его:

make install

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

mv /usr/bin/ping /bin

Установка Perl-5.8.0

Ожидаемое время сборки:           2.9 SBU
Ожидаемое место на диске:         143 MB

Описание Perl

Пакет 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

Perl зависит от Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Glibc, Grep, Make, Sed.

Устанорвка Perl

Подготовьте 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

Установка Texinfo-4.6

Ожидаемое время сборки:           0.2 SBU
Ожидаемое место на диске:         17 MB

Описание Texinfo

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

Устанавливаемые программы: info, infokey, install-info, makeinfo, texi2dvi и texindex.

Зависимости установки Texinfo

Texinfo зависит от Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Ncurses и Sed.

Установка Texinfo

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

./configure --prefix=/usr

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

make

Этот пакет поддерживает тестирование корректности сборки. Если Вы хотите использовать эту возможность, то запустите:

make check

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

make install

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

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

Описание параметров сборки:

  • TEXMF=/usr/share/texmf: Переменная TEXMF в makefile сохраняет расположения корня дерева TeX, например, если Вы собираетесь потом устанавливать пакет TeX.

Установка Autoconf-2.57

Ожидаемое время сборки:           2.9 SBU
Ожидаемое место на диске:         7.7 MB

Описание Autoconf

Autoconf создает скрипты, которые автоматически конфигурируют исходный код.

Устанавливаемые программы: autoconf, autoheader, autom4te, autoreconf, autoscan, autoupdate и ifnames.

Зависимости установки Autoconf

Autoconf зависит от Bash, Coreutils, Diffutils, Grep, M4, Make, Perl и Sed.

Установка Autoconf

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

./configure --prefix=/usr

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

make

Этот пакет поддерживает тестирование корректности сборки. Если Вы хотите использовать эту возможность, то запустите команду:

make check

Теперь установите пакет:

make install

Установка Automake-1.7.6

Ожидаемое время сборки:           5.3 SBU
Ожидаемое место на диске:         6.8 MB

Описание Automake

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

Automake зависит от Autoconf, Bash, Coreutils, Diffutils, Grep, M4, Make, Perl и Sed.

Установка Automake

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

./configure --prefix=/usr

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

make

Этот пакет поддерживает тестирование корректности сборки. Если Вы хотите использовать эту возможность, запустите команду:

make check

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

make install

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

ln -s automake-1.7 /usr/share/automake

Установка Bash-2.05b

Ожидаемое время сборки:           1.2 SBU
Ожидаемое место на диске:         27 MB

Описание Bash

Bash (Bourne-Again SHell) обычно используется как интерпретатор команд в Unix-системах. Программа bash считывает данные со стандартного ввода (клавиатуры, к примеру). Пользователь вводит что-либо, и программа определяет, что именно пользователь ввел, и что ей с этим делать, например, запустить другую программу.

Устанавливаемые программы: bash, sh (ссылка на bash) и bashbug.

Зависимости установки Bash

Bash зависит от Binutils, Coreutils, Diffutils, Gawk, GCC, Glibc, Grep, Make, Ncurses и Sed.

Установка Bash

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

Установка File-4.04

Ожидаемое время сборки:          0.1 SBU
Ожидаемое место на диске:        6.3 MB

Описание File

File является утилитой для определения типа файла.

Устанавливаемая программа: file.

Устанавливаемая библиотека: libmagic.[a,so].

Зависимости установки File

File зависит от Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Sed и Zlib.

Установка File

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

./configure --prefix=/usr

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

make

Теперь установите его:

make install

Установка Libtool-1.5

Ожидаемое время сборки:           1.5 SBU
Ожидаемое место на диске:         20 MB

Описание Libtool

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

Устанавливаемые программы: libtool и libtoolize.

Устанавливаемые библиотеки: libltdl.[a,so].

Зависимости установки Libtool

Libtool зависит от Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make и Sed.

Установка Libtool

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

./configure --prefix=/usr

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

make

Этот пакет поддерживает тестирование корректности сборки. Если Вы хотите использовать эту возможность, запустите команду:

make check

Теперь установите пакет:

make install

Установка Bzip2-1.0.2

Ожидаемое время сборки:           0.1 SBU
Ожидаемое место на диске:         3.0 MB

Описание Bzip2

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

Bzip2 зависит от Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Make.

Установка Bzip2

Подготовьте 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

Установка Diffutils-2.8.1

Ожидаемое время сборки:           0.1 SBU
Ожидаемое место на диске:         7.5 MB

Описание Diffutils

Программы из этого пакета покажут различия между двумя (или тремя) файлами или каталогами. Как правило, они используются для создания патчей к программам.

Устанавливаемые программы: cmp, diff, diff3 и sdiff.

Зависимости установки Diffutils

Diffutils зависит от Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make и Sed.

Установка Diffutils

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

./configure --prefix=/usr

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

make

Теперь установите его:

make install

Установка Ed-0.2

Ожидаемое время сборки:          0.1 SBU
Ожидаемое место на диске:        3.1 MB

Описание Ed

GNU ed является 8-ми битовым, POSIX-совместимым редактором строк.

Устанавливаемые программы: ed и red (ссылка на ed).

Зависимости установки Ed

Ed зависит от Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make и Sed.

Установка Ed

Замечание: 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

Установка Kbd-1.08

Ожидаемое время сборки:           0.1 SBU
Ожидаемое место на диске:         12 MB

Описание Kbd

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

Kbd зависит от Bash, Binutils, Bison, Coreutils, Diffutils, Flex, GCC, Gettext, Glibc, Grep, Gzip, M4, Make и Sed.

Установка Kbd

По умолчанию некоторые утилиты 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

Описание параметров конфигурации:

  • --with-root-prefix="": Определенные программы (такие, как программа e2fsck) рассматриваются как необходимые программы. Когда, например, раздел /usr не смонтирован, эти программы не будут доступны. Они должны находится в таких каталогах, как /lib и /sbin. Если этот параметр пропущен при конфигурации E2fsprogs, программы разместятся в каталоге /usr, что нам совсем не нужно.
  • --enable-elf-shlibs: Это создаст разделяемую библиотеку для использования некоторыми программами из этого пакета.

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

make

Этот пакет поддерживает тестирование корректности сборки. Если Вы хотите использовать эту возможность, запустите команду:

make check

Установите основную часть пакета:

make install

Также установите разделяемую библиотеку:

make install-libs

Установка Grep-2.5.1

Ожидаемое время сборки:           0.1 SBU
Ожидаемое место на диске:         5.8 MB

Описание Grep

Grep является программой для печати строк, совпадающих с заданным шаблоном.

Устанавливаемые программы: egrep (ссылка на grep), fgrep (ссылка на grep) и grep.

Зависмости установки Grep

Grep зависит от Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Make, Sed, Texinfo.

Установка Grep

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

./configure --prefix=/usr --bindir=/bin --with-included-regex

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

make

Этот пакет поддерживает тестирование корректности сборки. Если Вы хотите использовать эту возможность, запустите команду:

make check

Теперь установите пакет:

make install

Установка Grub-0.93

Ожидаемое время сборки:           0.2 SBU
Ожидаемое место на диске:         10 MB

Описание Grub

Пакет Grub содержит загрузчик.

Устанавливаемые программы: grub, grub-install, grub-md5-crypt, grub-terminfo и mbchk.

Зависимости установки Grub

Grub зависит от Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Ncurses и Sed.

Установка Grub

Этот пакет известен ошибками при сборке с использованием измененных опций оптимизации компиляции (включая параметры -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.

Установка Gzip-1.3.5

Ожидаемое время сборки:           0.1 SBU
Ожидаемое место на диске:         2.6 MB

Описание Gzip

Пакет Gzip содержит программы для сжатия и распаковки файлов с использованием алгоритма сжатия LZ77.

Устанавливаемые программы: gunzip (ссылка на gzip), gzexe, gzip, uncompress (ссылка на gunzip), zcat (ссылка на gzip), zcmp, zdiff, zegrep, zfgrep, zforce, zgrep, zless, zmore и znew.

Зависимости установки Gzip

Gzip зависит от Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Sed.

Установка Gzip

Подготовьте 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

Установка Man-1.5m2

Ожидаемое время сборки:           0.1 SBU
Ожидаемое место на диске:         1.9MB

Описание Man

Man является просмотрщиком man-страниц.

Устанавливаемые программы: apropos, makewhatis, man, man2dvi, man2html и whatis.

Зависимости установки Man

Man зависит от Bash, Binutils, Coreutils, Gawk, GCC, Glibc, Grep, Make и Sed.

Установка Man

Я собираюсь сделать три дополнения к исходникам 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

Описание параметров конфигурации:

  • -default: Скрипт конфикурации будет использовать разумные настройки по умолчанию. К примеру: только английские мануалы, не выводить каталог, man без suid, использование сжатых страниц документации, сжатые cat-страницы, создание cat-страниц, когда существует соответствующий каталог, поддерживать FHS выводом cat-страниц в /var/cache/man, если такой каталог существует.
  • -confdir=/etc: Программа man будет искать файл конфигурации man.conf в каталоге /etc.

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

make

Теперь установите его:

make install

Замечание: Если Вы собираетесь отключить SGR escape-последовательности, Вы можете отредактировать файл man.conf или добавить параметр -c к вызову nroff.

Возможно, Вы захотите также посмотреть страницу BLFS на http://www.linuxfromscratch.org/blfs/view/cvs/postlfs/compressdoc.html, которая описывает использование форматированных и сжатых файлов man-страниц.

Установка Make-3.80

Ожидаемое время сборки:          0.2 SBU
Ожидаемое место на диске:        8.8 MB

Описание Make

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

Устанавливаемая программа: make.

Зависимости установки Make

Make зависит от Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Sed.

Установка Make

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

./configure --prefix=/usr

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

make

Этот пакет поддерживает тестирование корректности сборки. Если Вы хотите использовать эту возможность, запустите команду:

make check

Теперь установите пакет:

make install

Установка Modutils-2.4.25

Ожидаемое время сборки:           0.1 SBU
Ожидаемое место на диске:         2.9 MB

Описание Modutils

Пакет Modutils содержит программы, которые Вы можете использовать для работы с модулями ядра.

Устанавливаемые пргограммы: depmod, genksyms, insmod, insmod_ksymoops_clean, kallsyms (ссылка на insmod), kernelversion, ksyms (ссылка на insmod), lsmod (ссылка на insmod), modinfo, modprobe (ссылка на insmod) и rmmod (ссылка на insmod).

Зависимости установки Modutils

Modutils зависит от Bash, Binutils, Bison, Coreutils, Diffutils, Flex, M4, GCC, Glibc, Grep, Make и Sed.

Установка Modutils

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

./configure

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

make

Теперь установите его:

make install

Установка Patch-2.5.4

Ожидаемое время сборки:           0.1 SBU
Ожидаемое место на диске:         1.9 MB

Описание Patch

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

Устанавливаемая программа: patch.

Зависимости установки Patch

Patch зависит от Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make и Sed.

Установка Patch

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

CPPFLAGS=-D_GNU_SOURCE
./configure --prefix=/usr

Опять же, флаг препроцессора -D_GNU_SOURCE необходим на платформах PowerPC. На других архитектурах его можно опустить.

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

make

Теперь установите его:

make install

Установка Procinfo-18

Ожидаемое время сборки:          0.1 SBU
Ожидаемое место на диске:        0.2 MB

Описание Procinfo

Программа procinfo собирает системные данные, такие как использование памяти и номера IRQ, из каталога /proc и приводит их к удобному виду.

Устанавливаемые программы: lsdev, procinfo и socklist.

Зависимости установки Procinfo

Procinfo зависит от Binutils, GCC, Glibc, Make и Ncurses.

Установка Procinfo

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

make LDLIBS=-lncurses

Описание параметров сборки:

  • LDLIBS=-lncurses: Procinfo будет использовать библиотеку libncurses вместо сильно устаревшей libtermcap.

Теперь установите пакет:

make install

Установка Procps-3.1.11

Ожидаемое время сборки:          0.1 SBU
Ожидаемое время установки:       6.2 MB

Описание Procps

Пакет Procps содержит программы для мониторинга и завершения системных процессов. Procps собирает информацию о процессах из каталога /proc.

Устанавливаемые программы: free, kill, pgrep, pkill, pmap, ps, skill, snice, sysctl, tload, top, uptime, vmstat, w и watch.

Устанавливаемая библиотека: libproc.so.

Зависимости установки Procps

Procps зависит от Bash, Binutils, Coreutils, GCC, Glibc, Make и Ncurses.

Установка Procps

Для начала исправьте проблему с возможным крахом w из-за установок локали:

patch -Np1 -i ../procps-3.1.11-locale-fix.patch

Теперь скомпилируйте Procps:

make

Установите полученный пакет:

make install

Теперь удалите одну ошибочную ссылку на библиотеку:

rm /lib/libproc.so

Установка Psmisc-21.3

Ожидаемое время сборки:           0.1 SBU
Ожидаемое место на диске:         2.2 MB

Описание Psmisc

Пакет Psmisc содержит три программы для работы с каталогом /proc.

Устанавливаемые программы: fuser, killall и pstree.

Зависимости установки Psmisc

Psmisc зависит от Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Ncurses и Sed.

Установка Psmisc

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

./configure --prefix=/usr --exec-prefix=/

Описание параметров конфигурации:

  • --exec-prefix=/: Это необходимо для установки двоичных модулей в /bin вместо /usr/bin. Поскольку программы Psmisc часто используются в загрузочных скриптах, они должны быть доступны даже при недоступной файловой системне /usr.

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

make

Теперь установите пакет:

make install

По умолчанию программа pidof не устанавливается. Обычно, это не является проблемой, поскольку устанавливаемый позже пакет Sysvinit содержит лучший вариант программы pidof. Но если Вы не собираетесь использовать Sysvinit, то Вам стоит завершить установку Psmisc созданием следующей ссылки:

ln -s killall /bin/pidof

Установка Shadow-4.0.3

Ожидаемое время сборки:           0.4 SBU
Ожидаемое место на диске:         11 MB

Описание Shadow

Пакет 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

Shadow зависит от Bash, Binutils, Bison, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make и Sed.

Установка Shadow

Программы 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

Настройка Shadow

Этот пакет содержит утилиты для модификации паролей пользователей, добавления или удаления пользователей и групп и тому подобные. Я не собираюсь объяснять здесь что такое 'затенение паролей' ('password shadowing'). Полное объяснение можно найти в файле doc/HOWTO в распакованном каталоге с исходными текстами Shadow. Здесь я опишу только то, что Вам понадобится, если Вы захотите использовать поддержку Shadow: программы, которые должны проверять пароли (к примеру, xdm, демоны ftp, демоны pop3) должны будут компилироваться с поддержкой shadow-совместимости, что надо для использования работы со скрытыми паролями.

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

/usr/sbin/pwconv

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

/usr/sbin/grpconv

При нормальных обстоятельствах пока нет надобности создавать пароли. Запомните, что если Вы решите вернуться к этой главе для включения затенения паролей, надо будет сбросить пароли всех пользователей командой passwd и пароли всех групп командой gpasswd.

Установка Sysklogd-1.4.1

Ожидаемое время сборки:           0.1 SBU
Ожидаемое место на диске:         0.5 MB

Описание Sysklogd

Пакет Sysklogd содержит программы для записи системных сообщений в протоколы (логи), например, сообщений ядра.

Устанавливаемые программы: klogd и syslogd.

Зависимости установки Sysklogd

Sysklogd зависит от Binutils, Coreutils, GCC, Glibc и Make.

Установка Sysklogd

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

make

Теперь установите его:

make install

Настройка Sysklogd

Создайте новый файл /etc/syslog.conf запуском команды:

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

Установка Sysvinit-2.85

Ожидаемое время сборки:           0.1 SBU
Ожидаемое место на диске:         0.9 MB

Описание Sysvinit

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

Установливаемые программы: halt, init, killall5, last, lastb (ссылка на last), mesg, pidof (ссылка на killall5), poweroff (ссылка на halt), reboot (ссылка на halt), runlevel, shutdown, sulogin, telinit (ссылка на init), utmpdump и wall.

Зависимоти установки Sysvinit

Sysvinit зависит от Binutils, Coreutils, GCC, Glibc и Make.

Установка Sysvinit

Когда изменяется уровень запуска (например, при выключении системы), 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

Настройка Sysvinit

Создайте новый файл /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

Установка Tar-1.13.25

Ожидаемое время сборки:           0.2 SBU
Ожидаемое место на диске:         10 MB

Описание Tar

Tar является архиватором, разработанным для записи и извлечения файлов из архива, извесного как tar-файл.

Устанавливаемые программы: rmt и tar

Зависимости установки Tar

Tar зависит от Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Sed.

Установка Tar

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

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

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

make

Этот пакет поддерживает тестирование корректности сборки. Если Вы хотите использовать эту возможность, запустите команду:

make check

Теперь установите пакет:

make install

Установка Util-linux-2.12

Ожидаемое время сборки:           0.2 SBU
Ожидаемое место на диске:         16 MB

Описание Util-linux

Пакет 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

Util-linux зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Ncurses, Sed, Zlib.

FHS-совместимость

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

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

./configure

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

make HAVE_SLN=yes

Описание параметров компиляции:

  • HAVE_SLN=yes: Это предостережет программу sln (статически скомпонованный ln, уже установленный с Glibc) от повторной сборки.

Теперь установите пакет:

make HAVE_SLN=yes install

Установка GCC-2.95.3

Ожидаемое время сборки:           1.5 SBU
Ожидаемое место на диске:         130 MB

Установка GCC

Этот пакет известен своим нестабильным поведением при компиляции с измененными опциями оптимизации (включая опции -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:

chroot $LFS /usr/bin/env -i HOME=/root TERM=$TERM PS1='\u:\w\$ ' \
       PATH=/bin:/usr/bin:/sbin:/usr/sbin /bin/bash --login

Причиной этого является то, что Вам уже не надо использовать программы из каталога /tools. Тем не менее, Вы пока не удаляете его. Он Вам еще будет нужен в конце книги.

Установка LFS-Bootscripts-1.12

Ожидаемое время сборки:           0.1 SBU
Ожидаемое место на диске:         0.3 MB

Описание LFS-bootscripts

Пакет LFS-Bootscripts содержит shell-скрипты в стиле SysV init. Эти скрипты нужны для выполнения определенных действий на этапе загрузки, таких как проверка файловых систем, загрузка раскладки клавиатуры, установка сети и завершения процессов при выходе.

Устанавливаемые скрипты: checkfs, cleanfs, functions, halt, ifdown, ifup, loadkeys, localnet, mountfs, mountproc, network, rc, reboot, sendsignals, setclock, swap, sysklogd и template.

Зависимости установки LFS-Bootscripts

Bzip2 зависит от Bash, Coreutils.

Установка LFS-Bootscripts

Я собираюсь использовать 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

Установите пароль пользователя root командой:

passwd root

Глава 6. Установка основных системных программ

Содержание
Вступление
Про отладочные символы
Вход в среду chroot
Изменение владельца
Создание каталогов
Монтирование файловых систем proc и devpts
Создание необходимых ссылок
Создание файлов passwd и group
Создание устройств (Makedev-1.7)
Установка заголовков Linux-2.4.22
Установка Man-pages-1.60
Установка Glibc-2.3.2
Переустановка средств
Установка Binutils-2.14
Установка GCC-3.3.1
Установка Coreutils-5.0
Установка Zlib-1.1.4
Установка Lfs-Utils-0.3
Установка Findutils-4.1.20
Установка Gawk-3.1.3
Установка Ncurses-5.3
Установка Vim-6.2
Установка M4-1.4
Установка Bison-1.875
Установка Less-381
Установка Groff-1.19
Установка Sed-4.0.7
Установка Flex-2.5.4a
Установка Gettext-0.12.1
Установка Net-tools-1.60
Установка Inetutils-1.4.2
Установка Perl-5.8.0
Установка Texinfo-4.6
Установка Autoconf-2.57
Установка Automake-1.7.6
Установка Bash-2.05b
Установка File-4.04
Установка Libtool-1.5
Установка Bzip2-1.0.2
Установка Diffutils-2.8.1
Установка Ed-0.2
Установка Kbd-1.08
Установка E2fsprogs-1.34
Установка Grep-2.5.1
Установка Grub-0.93
Установка Gzip-1.3.5
Установка Man-1.5m2
Установка Make-3.80
Установка Modutils-2.4.25
Установка Patch-2.5.4
Установка Procinfo-18
Установка Procps-3.1.11
Установка Psmisc-21.3
Установка Shadow-4.0.3
Установка Sysklogd-1.4.1
Установка Sysvinit-2.85
Установка Tar-1.13.25
Установка Util-linux-2.12
Установка GCC-2.95.3
Перезапуск команды chroot
Установка LFS-Bootscripts-1.12
Настройка компонентов системы

Вступление

В этой главе Вы плавно войдете в фазу сборки и начнете серьезно собирать LFS-систему. Для этого войдите в среду chroot внутри мини-Linux-системы, проделайте некоторые дополнительные работы и начните устанавливать пакеты один за лругим.

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

Если Вы решите использовать оптимизацию компилятора в этой главе, то стоит посмотреть справку по оптимизации на http://www.linuxfromscratch.org/hints/downloads/files/optimization.txt. Оптимизация компилятора может сделать программы быстрее, но могут возникнуть сложности при компиляции и некоторые проблемы при работе этих программ. Если пакет отказывается компилироваться при использовании оптимизации, попробуйте скомпилировать пакет без нее, возможно, проблемы исчезнут. Если пакет компилируется с использованием оптимизации, то есть возможность, что он скомпилируется некорректно, например, могут появиться проблемы между интерактивностью в коде и собранными средствами. В общем, использование оптимизауии при сборке является рискованным. Новичкам в LFS рекомендуется собирать систему без оптимизации. В Ваших силах сделать систему быстрой и стабильной одновременно.

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

Про отладочные символы

Большинство программ и библиотек по умолчанию компилируются с символами отладки (с опцией -g для gcc).

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

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

  • Двоичный код bash с отладочными символами: 1200 KB
  • Двоичный код bash без отладочных символов: 480 KB
  • Файлы Glibc и GCC (/lib и /usr/lib) с отладочными символами: 87 MB
  • Файлы Glibc и GCC без отладочных символов: 16 MB

Размер может немного варьироваться в зависимости от используемых компилятора и библиотеки 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 для установки необходимых пакетов. Перед тем, как войти в 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

Вы создаете дерево каталогов совместимым со стандартом FHS (доступен на http://www.pathname.com/fhs). За исключением каталогов /usr/local/games и /usr/share/games, поскольку они не нужны в минимальной системе. Тем не менее, можно сделать Вашу систему FHS-совместимой. Поскольку структура подкаталогов /usr/local/share не описана в стандарте FHS, то Вы создаете ее так, как Вам надо.

Монтирование файловых систем proc и devpts

Для правильного функционирования основных программ файловые системы 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

Создание файлов passwd и group

Для возможности регистрации в качестве пользователя 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 будет запоминать пути к исполненным двоичным модулям. Поскольку Вы собираетесь использовать вновь скомпилированные пакеты по мере их установки, Вы должны отключить эту функцию в этой главе.

Создание устройств (Makedev-1.7)

Ожидаемое время сборки:           0.1 SBU
Ожидаемое место на диске:         50 KB

Поиск

 

Найди своих коллег!