Версия для печати

Архив документации на OpenNet.ru / Раздел "Документация для Linux" (Многостраничная версия)

Linux From Scratch

Версия 5.0

Джерард Бикманс


Архив: lfs50ru.tar.bz2

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


Посвящение

Эта книга посвящается моей любящей и заботливой жене Беверли Бикманс.

Оглавление
Пролог
Предисловие
Аудитория
Кому эта книга будет интересна
Кому эта книга будет неинтересна
Предпосылки
Организация
Часть I - Вступление
Часть II - Подготовка к сборке
Часть III - Сборка системы LFS
Часть IV - Приложения
I. Часть I - Вступление
1. Вступление
Как мы будем работать
Соглашения, используемые в книге
Версия книги
Список изменений
Ресурсы
Благодарности
2. Важная информация
О $LFS
О SBU
О тестировании
Как просить о помощи
II. Часть II - Подготовка к сборке
3. Подготовка нового раздела
Вступление
Создание нового раздела
Создание файловой системы на новом разделе
Монтирование нового раздела
4. Материалы: пакеты и патчи
Вступление
Все пакеты
Необходимые патчи
5. Построение временной системы
Вступление
Технические моменты
Создание директории $LFS/tools
Добавление пользователя lfs
Настройка окружения
Установка Binutils-2.14 - Шаг 1
Установка GCC-3.3.1 - Шаг 1
Установка заголовков Linux-2.4.22
Установка Glibc-2.3.2
"Интеграция" Glibc
Установка Tcl-8.4.4
Установка Expect-5.39.0
Установка DejaGnu-1.4.3
Установка GCC-3.3.1 - Шаг 2
Установка Binutils-2.14 - Шаг 2
Установка Gawk-3.1.3
Установка Coreutils-5.0
Установка Bzip2-1.0.2
Установка Gzip-1.3.5
Установка Diffutils-2.8.1
Установка Findutils-4.1.20
Установка Make-3.80
Установка Grep-2.5.1
Установка Sed-4.0.7
Установка Gettext-0.12.1
Установка Ncurses-5.3
Установка Patch-2.5.4
Установка Tar-1.13.25
Установка Texinfo-4.6
Установка Bash-2.05b
Установка Util-linux-2.12
Установка Perl-5.8.0
Сжатие
III. Часть III - Сборка системы LFS
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
Настройка компонентов системы
7. Установка скриптов загрузки
Вступление
Как происходит загрузка с помощью этих скриптов?
Настройка скрипта setclock
Нужен ли мне скрипт loadkeys?
Настройка скрипта sysklogd
Настройка скрипта localnet
Создание файла /etc/hosts
Настройка скрипта network
8. Обеспечение возможности загрузки LFS системы
Вступление
Создание файла /etc/fstab
Установка Linux-2.4.22
Обеспечение возможности загрузки LFS системы
9. Конец
Конец
Регистрация
Перезагрузка системы
Что теперь?
IV. Часть IV - Приложения
A. Описание пакетов и зависимости
Вступление
Autoconf
Automake
Bash
Binutils
Bison
Bzip2
Coreutils
DejaGnu
Diffutils
E2fsprogs
Ed
Expect
File
Findutils
Flex
Gawk
GCC
Gettext
Glibc
Grep
Groff
Grub
Gzip
Inetutils
Kbd
Less
LFS-Bootscripts
Lfs-Utils
Libtool
Linux (ядро)
M4
Make
MAKEDEV
Man
Man-pages
Modutils
Ncurses
Net-tools
Patch
Perl
Procinfo
Procps
Psmisc
Sed
Shadow
Sysklogd
Sysvinit
Tar
Tcl
Texinfo
Util-linux
Vim
Zlib
B. Список программ и библиотек

Copyright (c) 1999-2003, Gerard Beekmans

Все права защищены.

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

ЭТО ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПОСТАВЛЯЕТСЯ ВЛАДЕЛЬЦАМИ АВТОРСКИХ ПРАВ И УЧАСТНИКАМИ "КАК ЕСТЬ" И ЛЮБЫЕ ЯВНЫЕ ИЛИ НЕЯВНЫЕ ГАРАНТИИ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ НЕЯВНЫМИ ГАРАНТИЯМИ, КОММЕРЧЕСКОЙ ЦЕННОСТИ И ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ ОТРИЦАЮТСЯ. НИ В КОЕМ СЛУЧАЕ РЕГЕНТЫ ИЛИ УЧАСТНИКИ НЕ ДОЛЖНЫ БЫТЬ ОТВЕТСТВЕННЫМИ ЗА ЛЮБОЙ ПРЯМОЙ, КОСВЕННЫЙ, СЛУЧАЙНЫЙ, СПЕЦИАЛЬНЫЙ, ОБРАЗЦОВЫЙ ИЛИ ПОСЛЕДУЮЩИЙ УЩЕРБЫ (ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ПОСТАВКОЙ ТОВАРОВ ЗАМЕНЫ ИЛИ УСЛУГ; ПОТЕРЮ ДАННЫХ ИЛИ ИХ НЕПРАВИЛЬНУЮ ПЕРЕДАЧУ ИЛИ ПОТЕРИ; ПРИОСТАНОВЛЕНИЕ БИЗНЕСА), И ТЕМ НЕ МЕНЕЕ ВЫЗВАННЫЕ И В ЛЮБОЙ ТЕОРИИ ОТВЕТСТВЕННОСТИ, НЕЗАВИСИМО ОТ КОНТРАКТНОЙ, СТРОГОЙ ОТВЕТСТВЕННОСТИ, ИЛИ ПРАВОНАРУШЕНИИ (ВКЛЮЧАЯ ХАЛАТНОСТЬ ИЛИ ИНЫМ СПОСОБОМ), ВОЗНИКШЕМ ЛЮБЫМ ПУТЕМ ПРИ ИСПОЛЬЗОВАНИИ ЭТОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ, ДАЖЕ ЕСЛИ БЫ БЫЛО СООБЩЕНО О ВОЗМОЖНОСТИ ТАКОГО УЩЕРБА.



Links bookmarks

Links bookmarks

Links

English

Calibration Procedure
Links Homepage
Links Manual

Иesky

Kalibraиnн procedura
Links: domбcн strбnka
Manuбl k Linksu


Shadow

Для получения инструкций по установке смотрите Раздел Установка Shadow-4.0.3 в Главе 6.

Официальный адрес пакета

Shadow (4.0.3):
ftp://ftp.pld.org.pl/software/shadow/

Shadow Newgrp Patch:
http://www.linuxfromscratch.org/patches/lfs/5.0/shadow-4.0.3-newgrp-fix.patch

Содержимое 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

Краткие описания

chage используется для изменения максимального количества дней до обязательной смены пароя.

chfn используется для изменения полного имени пользователя и некоторой другой информации.

chpasswd используется для обновления паролей пользовательских аккаунтов.

chsh используется для изменения шелла пользователя по умолчанию.

dpasswd используется для изменения dial-up паролей для пользовательских шеллов.

expiry проверяет и изменяет правила использования паролей.

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

gpasswd используется для добавления или удаления членов и администраторов групп.

groupadd создает группу с указанным именем.

groupdel удаляет группу с указанным именем.

groupmod используется для изменения имени указанной группы или ее GID.

groups возвращает группы. членом которых является указанный пользователь.

grpck проверяет целосность файлов групп /etc/group и /etc/gshadow.

grpconv создает или обновляет теневой файл групп, используя обычный файл групп.

grpunconv обновляет /etc/group из /etc/gshadow и удаляет последний.

lastlog олтчитывается о входах пользователей или указанного пользователя в систему.

login используется начала новой сессии работы с системой.

logoutd - демон, контролирующий время регистрации и порты.

mkpasswd шифрует указанный пароль указанным алгоритмом.

newgrp используется для изменения текущего GID рабочей сессии.

newusers используется для создания или обновления пользовательских аккаунтов.

passwd используется для изменения пароля пользователя или группы.

pwck проверяет целостность файлов паролей /etc/passwd и /etc/shadow.

pwconv создает или обновляет теневой файл паролей, используя обычный файл паролей.

pwunconv обновляет /etc/passwd из /etc/shadow и удаляет последний.

sg выполняет указанную команду с правами группы с указанным GID.

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

userdel удаляет указанный пользовательский аккаунт.

usermod используется для модификачии указанноко имени пользователя, UID, шелла, группы, домашней директории и т.п.

vigr может использоваться для редактирования файлов /etc/group или /etc/gshadow.

vipw может использоваться для редактирования файлов /etc/passwd или /etc/shadow.

libmisc...

libshadow содержит функции. используемые большинством программ этого пакета.

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

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


Inetutils

Для получения инструкций по установке смотрите Раздел Установка Inetutils-1.4.2 в Главе 6.

Официальный адрес пакета

Inetutils (1.4.2):
http://freshmeat.net/projects/inetutils/

Содержимое Inetutils

Пакет Inetutils содержит сетевые клиенты и серверы.

Устанавливаемые программы: ftp, ping, rcp, rlogin, rsh, talk, telnet и tftp

Краткие описания

ftp - программа для передачи данных в сетях ARPANET.

ping посылает пакеты echo-request и отчитывается о времени прибытия ответа.

rcp обеспечивает удаленной копирование файлов.

rlogin обеспечивает удаленный вход в систему.

rsh запускает удаленный шелл.

talk используется для чата с другим пользователем.

telnet интерфейс для протокола TELNET.

tftp тривиальная программа передачи файлов.

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

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


Gettext

Для получения инструкций по установке смотрите Раздел Установка Gettext-0.12.1 в Главе 6.

Официальный адрес пакета

Gettext (0.12.1): 
ftp://ftp.gnu.org/gnu/gettext/

Содержимое 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]

Краткие описания

autopoint копирует файлы стандартной инфраструктуры gettext в пакет исходников.

config.charset выводит системо-зависимую таблицу кодов символов.

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

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

gettextize копирует стандартные файлы Gettext в указаную корневую директорию пакета для возможности его интернационализации.

hostname возвращает сетевое имя хоста в разных форматах.

msgattrib фильтрует сообщения каталога переводов по их атрибутам и управляет атрибутами.

msgcat объединяет указанные файлы .po.

msgcmp сравнивает два файла .po, определяя наличие строк с одинаковым msgid.

msgcomm ищет одинаковые сообщения содержащиеся в указанных файлах .po.

msgconv преобразует каталог перевода в другую кодировку.

msgen создает каталог перевода на английский.

msgexec применяет команду ко всем переводам в каталоге переводов.

msgfilter применяет фильтр ко всем переводам в каталоге переводов.

msgfmt генерирует двоичный каталог сообщений из каталога переводов.

msggrep извлекает все сообщения из коталога перевода, которые содержат указанный шаблон или пренадлежащие заданным исходным файлам.

msginit создает новый файл .po, инициализирует мета-информацию с переменными из пользовательского окружения.

msgmerge объединяет два перевода в один файл.

msgunfmt декомпилирует каталог двоичных сообщений в текст перевода.

msguniq унифицирует дублирующиеся переводы в каталоге переводов.

ngettext выводит перевод сообщения, чья форма зависит от числа, на родной язык.

xgettext извлекает переводы строк сообщений из указанных исходников для создания шаблона перевода.

libasprintf определяет класс autosprintf, который создает правила для форматирования вывода C в программах на C++ для использования в строках <string> и потоках <iostream>.

libgettextlib - это частная библиотека, содержащая основные правила, используемые различными программаи gettext. Она не предназначена для общего использования.

libgettextpo используется для написания специализарованных программ создающих файлы PO. Эта библиотека используется когда стандартных приложений, входящих в пакет gettext не достаточно (таких как msgcomm, msgcmp, msgattrib и msgen).

libgettextsrc - это частная библиотека, содержащая основные правила, используемые различными программами gettext. Она не предназначена для общего использования.

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

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


Make

Для получения инструкций по установке смотрите Раздел Установка Make-3.80 в Главе 6.

Официальный адрес пакета

Make (3.80): 
ftp://ftp.gnu.org/gnu/make/

Содержимое Make

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

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

Краткое описание

make автоматически определяет. какие части большой программы нуждаются в перекомпиляции и отдает соответствующую команду.

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

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


Ed

Для получения инструкций по установке смотрите Раздел Установка Ed-0.2 в Главе 6.

Официальный адрес пакета

Ed (0.2): 
ftp://ftp.gnu.org/gnu/ed/

Ed Mkstemp Patch:
http://www.linuxfromscratch.org/patches/lfs/5.0/ed-0.2-mkstemp.patch

Содержимое Ed

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

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

Краткие описания

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

red - ограниченый ed -- он может только редактировать файлы в текущей директории и не может выполнять шелл-команды.

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

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


Ncurses

Для получения инструкций по установке смотрите Раздел Установка Ncurses-5.3 в Главе 6.

Официальный адрес пакета

Ncurses (5.3): 
ftp://ftp.gnu.org/gnu/ncurses/

Ncurses Etip Patch:
http://www.linuxfromscratch.org/patches/lfs/5.0/ncurses-5.3-etip-2.patch

Ncurses Vsscanf Patch:
http://www.linuxfromscratch.org/patches/lfs/5.0/ncurses-5.3-vsscanf.patch

Содержимое 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]

Краткие описания

captoinfo конвертирует описание termcap в описание terminfo.

clear очищает экран, если это возможно.

infocmp сравнивает или печатает описания terminfo.

infotocap конвертирует описание terminfo в описание termcap.

reset реинициализирует терминал со значениями по умолчанию.

tack проверяет действия terminfo. Он главным образом используется для тестирования корректировок элементов базы данных terminfo.

tic компилятор описаний записей terminfo. Он преобразует файл terminfo из исходного формата в двоичный, необходимый для работы библиотеки ncurses. Файл terminfo содержит информацию о возможностях соответствующего терминала.

toe выводит список всех доступных типов терминалов по их имени и описанию.

tput делает информаию о терминале доступной шеллу. Он также может использоваться для сброса или инициализации терминала или показа его полного имени.

tset может использоваться для инициализации терминала.

libncurses* содержит функции для отображения текста разными способами на экране терминала. Хорошим примером использования этих функций является меню. отображаемое при настройке параметров ядра командой make menuconfig.

libform* содержит функции работы с формами.

libmenu* содержит функции работы с меню.

libpanel* содержит функции работы с панелями.

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

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


Grep

Для получения инструкций по установке смотрите Раздел Установка Grep-2.5.1 в Главе 6.

Официальный адрес пакета

Grep (2.5.1): 
ftp://ftp.gnu.org/gnu/grep/

Содержимое Grep

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

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

Краткие описания

egrep печатает строки, соответствующие регулярному выражению.

fgrep Печатает строки, соответствующие списку фиксированых строк.

grep печатает строки, соответствующие простому регулярному выражению.

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

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


Bison

Для инструкций по установке смотрите Раздел Установка Bison-1.875 в Главе 6.

Официальный адрес пакета

Bison (1.875): 
ftp://ftp.gnu.org/gnu/bison/

Bison Attribute Patch:
http://www.linuxfromscratch.org/patches/lfs/5.0/bison-1.875-attribute.patch

Содержимое Bison

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

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

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

Краткие описания

bison генерирует, согласно ряду правил, программу для анализа структуры текстовых файлов. Bison заменяет yacc (Yet Another Compiler Compiler).

yacc является оболочкой для bison, специально для программ, использующих yacc вместо bison. Он вызывает bison с параметром -y.

liby.a - библиотека Yacc, содержащая Yacc-совместимые функции yyerror и main. Эта библиотека практически не используется, но она упоминается в стандарте POSIX.

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

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


Kbd

Для получения инструкций по установке смотрите Раздел Установка Kbd-1.08 в Главе 6.

Официальный адрес пакета

Kbd (1.08): 
ftp://ftp.win.tue.nl/pub/linux-local/utils/kbd/

Kbd More-Programs Patch:
http://www.linuxfromscratch.org/patches/lfs/5.0/kbd-1.08-more-programs.patch

Содержимое 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

Краткие описания

chvt изменяет используемый виртуальный терминал.

deallocvt закрывает неиспользуемые виртуальные терминалы.

dumpkeys делает дамп таблицы преобразований клавиатуры.

fgconsole печатает номер активного виртуального терминала.

getkeycodes печатает таблицу перевода скэнкодов в коды клавиш ядра.

getunimap печатает успользуемую сейчас unimap.

kbd_mode возвращает или устанавливает режим клавиатуры.

kbdrate устанавливает время повтора и задержки нажатий клавиш.

loadkeys загружает таблицу преобразований клавиатуры.

loadunimap загружает таблицу перевода unicode-to-font ядра.

mapscrn устаревшая программа, которая используется для загрузки заданной пользователем таблицы преобразований вывода в драйвер консоли. Теперь это делается через setfont.

openvt запускает программу на новом виртуальном терминале (VT).

psf* - набор средств для таблицы соответствия кодов символов Unicode консольным шрифтам.

resizecons изменяет установленные ядром размеры консоли.

setfont изменяет шрифт EGA/VGA на консоли.

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

setleds устанавливает флаги клавиатуры и LED (светодиоды). Многие люди используют включеный по умолчанию NumLock, это обеспечивает команда setleds +num.

setlogcons отсылает сообщения ядра на консоль.

setmetamode определяет метауправление клавиатурой.

setvesablank позволяет испльзовать встроеный аппаратный пустой хранитель экрана (без изображений, просто пустой экран).

showconsolefont показывает текущий EGA/VGA экранный шрифт консоли.

showkey возвращает скэнкоды и коды клавиш, а также ASCII-коды нажтых на клавиатуре клавиш.

unicode_start включает на консоли и клавиатуре режим unicode.

unicode_stop возвращает консоль и клавиатуру из режима unicode.

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

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


Less

Для получения инструкций по установке смотрите Раздел Установка Less-381 в Главе 6.

Официальный адрес пакета

Less (381): 
ftp://ftp.gnu.org/gnu/less/

Содержимое Less

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

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

Краткие описания

less является просмотрщиком файлов. Он отображает содержимое указщанного файла, позволяет его прокручивать для просмотра, находить строки и переходить к отметкам.

lessecho нужен для расширеных метасимволов, таких как * и ?, в именах файлов на системах Unix.

lesskey используется для определения управляющих клавиш less.

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

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


Bzip2

Для инструкций по установке смотрите Раздел Установка Bzip2-1.0.2 в Главе 6.

Официальный адрес пакета

Bzip2 (1.0.2): 
http://sources.redhat.com/bzip2/

Содержимое 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

Краткие описания

bunzip2 распаковывает упакованые с помощью bzip файлы.

bzcat распаковывает на стандартный вывод.

bzcmp запускает cmp для сжатых с помощью bzip файлов.

bzdiff запускает diff для сжатых с помощью bzip файлов.

bzgrep и подобные запускают grep для сжадых с помощью bzip файлов.

bzip2 сжимает файлы, используя Burrows-Wheeler block sorting алгоритм сжатия для текста с кодировкой Хафмана. Степень компрессии обычно получается больше, чем у архиваторов, использующих алгоритмы LZ77/LZ78, например - gzip.

bzip2recover пытается восстановить данные из поврежденных файлов bzip2.

bzless запускает less для сжатых с помощью bzip файлов.

bzmore запускает more для сжатых с помощью bzip файлов.

libbz2* - библиотека с функциями для сжатия данных алгоритмом Burrows-Wheeler.

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

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


Procinfo

Для получения инструкций по установке смотрите Раздел Установка Procinfo-18 в Главе 6.

Официальный адрес пакета

Procinfo (18):
ftp://ftp.cistron.nl/pub/people/svm/

Содержимое Procinfo

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

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

Краткие описания

lsdev выводит список устройств, присутствующих в вашей системе, и используемые ими IRQ и порты ввода-вывода.

procinfo отображает инфоромацию из виртуальной файловой системы proc.

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

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

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


E2fsprogs

Для паолучения инструкций по установке смотрите Раздел Установка E2fsprogs-1.34 в Главе 6.

Официальный адрес пакета

E2fsprogs (1.34):
ftp://download.sourceforge.net/pub/sourceforge/e2fsprogs/
http://download.sourceforge.net/e2fsprogs/

Содержимое 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]

Краткие описания

badblocks ищет на устройстве (обычно разделе диска) плохие блоки.

blkid утилита командной строки для определения и печати атрибутов блок-устройства.

chattr изменяет атрибуты файла в файловой системе ext2.

compile_et - компиятор таблицы ошибок. Он конвертирует таблицу названий кодов ошибок и сообщений в исходный код на C для использования с библиотекой com_err.

debugfs - отладчик файловой системы. Он может использоваться для проверки и изменения состояния файловой системы ext2.

dumpe2fs печатает информацию о super block и группы блоков для файловых систем на указанном устройстве.

e2fsck используется для проверки и исправления ошибок файловых систем ext2 и ext3.

e2image испорльзуется для сохранения критически важных данных файловой системы ext2 в файл.

e2label возвращает или изменяет метку тома на файловой системе ext2 на указанном устройстве.

findfs ищет файловую систему по метке тома или UUID.

fsck используется для проверки и исправления ошибок файловых систем. По умолчанию проверяет файловые системы, перечисленные в /etc/fstab

logsave сохраняет выводж команды в лог-файл.

lsattr выводит список атрибутов файлов на файловой системе ext2.

mk_cmds конвертирует таблицу команд и справочных сообщений в исходники на C для использования с библиотекой libss.

mke2fs используется для создания файловой системы ext2 на указанном устройстве.

mklost+found используется для создания директории lost+found на файловой системе ext2. Он заранее выделяет блоки для этой директории для нужд e2fsck.

resize2fs используется для изменения размеров файловой системы ext2.

tune2fs используется для изменения настраиваемых параметров файловой системы ext2.

uuidgen создает новый универсальный уникальный идентификатор (universally unique identifier - UUID). Этот новый UUID будет уникальным среди всех созданных UUID на локальной или другой системе в прошлом и будущем.

libblkid содержит правила идентификации устройств и получения содержимого.

libcom_err содержит правила вывода стандартных ошибок.

libe2p используется dumpe2fs, chattr и lsattr.

libext2fs содержит правила для работы программ уровня пользователя для манипулирования файловой системы ext2.

libss используется debugfs.

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

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

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


Texinfo

Для получения инструкций по установке смотрите Раздел Установка Texinfo-4.6 в Главе 6.

Официальный адрес пакета

Texinfo (4.6):
ftp://ftp.gnu.org/gnu/texinfo/

Содержимое Texinfo

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

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

Краткие описания

info используется для чтения документов Info. Документы Info похожи на man-страницы. но содержат больше, чем простое описание опций программы. Сравните для примера man tar и info tar.

infokey компилирует файл с исходниками, содержащий персонализацию Info, в двоичный формат.

install-info используется для установки файлов Info. Он обновляет записи в файле индекса Info.

makeinfo преобразует указанный файл документации исходников Texinfo в различные другие форматы: файлы Info, текст или HTML.

texi2dvi используется для форматирования указанного документа Texinfo в оппаратно-независимый файл, который может быть распечатан.

texindex используется для сортировки файла индекса Texinfo.

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

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


Grub

Для получения инструкций по установке смотрите Раздел Установка Grub-0.93 в Главе 6.

Официальный адрес пакета

Grub (0.93):
ftp://alpha.gnu.org/pub/gnu/grub/

Grub Gcc33 Patch:
http://www.linuxfromscratch.org/patches/lfs/5.0/grub-0.93-gcc33-1.patch

Содержимое Grub

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

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

Краткие описания

grub шелл для GRand Unified Bootloader.

grub-install устанавливает GRUB на указанное устройство.

grub-md5-crypt кодирует пароли в формате MD5.

grub-terminfo генерирует команду terminfo из имени terminfo. Это можно использовать если у вас нестандартный терминал.

mbchk проверяет формат мультизагрузочного ядра.

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

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


LFS-Bootscripts

Для получения инструкций по установке смотрите Раздел Установка LFS-Bootscripts-1.12 в Главе 6.

Official Download Location

LFS-Bootscripts (1.12): 
http://downloads.linuxfromscratch.org/

Содержимое LFS-bootscripts

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

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

Краткие описания

Скрипт checkfs проверяет файловые системы перед тем, как система их примонтирует (за исключением журналируемых и сетевых файловых систем).

Скрипт cleanfs удаляет файлы, которые не нужны между перезагрузками, ткаие как файлы в /var/run/ и /var/lock/. Он заново создает файлы /var/run/utmp и удаляет /etc/nologin, /fastboot и /forcefsck.

Скрипт functions содержит общие для многих скриптов функции, такие как error и status.

Скрипт halt выключает систему.

Скрипты ifdown и ifup предназначены для работы сетевых скриптов с сетевыми устройствами.

Скрипт loadkeys загружает определенную вами таблицу раскладки клавиатуры.

Скрипт localnet устанавливает имя системы и локальные устройства loopback.

Скрипт mountfs монтирует все файловые системы, которые не отмечены как noauto или не являются сетевыми.

Скрипт mountproc используется для монтирования файловой системы proc.

Скрипт network поднимает сетевые интерфейсы, такие как сетевые карты, и определяет шлюз по умолчанию.

Скрипт rc является мастером уровней запуска. Он отвечает за выполнение других скриптов в порядке очередности.

Скрипт reboot перезагружает систему.

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

Скрипт setclock сбрасывает часы ядра для локального времени в случае если аппаратные часы не установлены в GMT.

Скрипт swap включает и отключает своп файлы и разделы.

Скрипт sysklogd запускает и останавливает демон логов системы и ядра.

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

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

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


Expect

Для получения инструкций по установке смотрите Раздел Установка Expect-5.39.0 в Главе 5.

Официальный адрес пакета

Expect (5.39.0):
http://expect.nist.gov/src/

Expect Spawn Patch:
http://www.linuxfromscratch.org/patches/lfs/5.0/expect-5.39.0-spawn.patch

Содержимое Expect

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

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

Устанавливаемая библиотека: libexpect5.39.a

Краткое описание

expect "общается" с другими программами через скрипт.

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

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


Perl

Для получения инструкций по установке смотрите Раздел Установка Perl-5.8.0 в Главе 6.

Официальный адрес пакета

Perl (5.8.0):
http://www.perl.com/

Perl Libc Patch:
http://www.linuxfromscratch.org/patches/lfs/5.0/perl-5.8.0-libc-3.patch

Содержимое 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

Устанавливаемые библиотеки: (слишком много названий)

Краткие описания

a2p переводит awk в perl.

c2ph делает дамп структур C, генерируемых "cc -g -S".

dprofpp отображает данные профиля perl.

en2cxs собирает расширение Perl для модулей Encode, из таблиц символов Unicode или фойлов кодировки Tcl.

find2perl транслирует команды find в perl.

h2ph конвертирует файлы заголовков .h для C в файлы заголовков .ph для Perl.

h2xs конвертирует файлы заголовков .h для C в расширения Perl.

libnetcfg может использоваться для настройки libnet.

perl сочетает достоинства C, sed, awk и sh в одном мощном языке.

perlbug используется для генерации отчетов об ошибках в Perl или в поставляемых с ним модулях и их отправки по E-mail.

perlcc генерирует исполняемые файлы из программ Perl.

perldoc выводит часть документации в формате pod, которая расположена в дереве установки perl или в скриптах perl.

perlivp is the Perl Installation Verification Procedure. It can be used to verify that Perl and its libraries have been installed correctly.

piconv - Perl-реализация конвертера кодировок iconv.

pl2pm - средство для конвертирования файлов Perl4 .pl в модули Perl5 .pm.

pod2html конвертирует файлы из формата pod в формат HTML.

pod2latex конвертирует файлы из формата pod в формат LaTeX.

pod2man конвертирует данные pod в форматированый вывод *roff.

pod2text конвертирует данные pod в форматированый текст ASCII.

pod2usage печатает сообщения usage из документов pod в файлах.

podchecker checks the syntax of pod format documentation files.

podselect отобрахает выбранную часть документации pod.

psed - Perl-реализация редактора потоков sed.

pstruct делает дамп C-структур, генерируемых "cc -g -S".

s2p транслирует sed в perl.

splain используется для пропуска полных диагностических сообщений perl.

xsubpp конвертирует Perl XS код в код на языке C.

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

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


Man

Для получения инструкций по установке смотрите Раздел Установка Man-1.5m2 в Главе 6.

Официальный адрес пакета

Man (1.5m2): 
ftp://ftp.win.tue.nl/pub/linux-local/utils/man/

Man 80-Columns Patch:
http://www.linuxfromscratch.org/patches/lfs/5.0/man-1.5m2-80cols.patch

Man Manpath Patch:
http://www.linuxfromscratch.org/patches/lfs/5.0/man-1.5m2-manpath.patch

Man Pager Patch:
http://www.linuxfromscratch.org/patches/lfs/5.0/man-1.5m2-pager.patch

Содержимое Man

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

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

Краткие описания

apropos ищет в базе данных whatis и отображает краткое описание системной команды, которое содержит указанную строку.

makewhatis создает базу данных whatis. Он росматривает все страницы документации man в соответствующих путях и добавляет запись команды и ее краткого описания в базу данных whatis.

man форматирует и отображает запрошеную man-страницы.

man2dvi конвертирует man-страницу в формат dvi.

man2html конвертирует man-страницу в html.

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

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

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


Net-tools

Для получения инструкций по установке смотрите Раздел Установка Net-tools-1.60 в Главе 6.

Официальный адрес пакета

Net-tools (1.60): 
http://www.tazenda.demon.co.uk/phil/net-tools/

Net-tools Mii-Tool-Gcc33 Patch:
http://www.linuxfromscratch.org/patches/lfs/5.0/net-tools-1.60-miitool-gcc33-1.patch

Содержимое Net-tools

Пакет Net-tools содержит набор программ, которые формируют основу поддержки сетей в Linux.

Устанавливаемые программы: arp, dnsdomainname (ссылка на hostname), domainname (ссылка на hostname), hostname, ifconfig, nameif, netstat, nisdomainname (ссылка на hostname), plipconfig, rarp, route, slattach and ypdomainname (ссылка на hostname)

Краткие описания

arp используется для манипулирования ARP-кэшем ядра, обычно для удаления или добавления элемента или для дампа элементов кэша.

dnsdomainname возвращает DNS доменное имя системы.

domainname возвращает набор NIS/YP доменных имен системы.

hostname возвращает набор имен текущей системы.

ifconfig - главная утилита для настройки сетевых интерфейсов.

nameif присваивает имя сетевым интерфейсам на основе MAC адресов.

netstat используется для получения отчета о сетевых соединениях, таблицах маршрутизации (routing tables) и статистики интерфейсов.

nisdomainname - синоним domainname.

plipconfig используется для настройки PLIP параметров устройств, для обеспечения их работоспособности.

rarp используется для работы с RARP таблицей ядра.

route используется для работы с таблицей IP-маршрутизации.

slattach присоединяет сетевой интерфейс к последовательному порту. Это позволяет вам использовать обычные строковые терминалы для  point-to-point соединений с другими компьютерами.

ypdomainname - синоним domainname.

Зависимости установки Net-tools

Net-tools зависит от: Bash, Binutils, Coreutils, GCC, Glibc, Make.


Gawk

Для получения инструкций по установке смотрите Раздал Установка Gawk-3.1.3 в Главе 6.

Официальный адрес пакета

Gawk (3.1.3): 
ftp://ftp.gnu.org/pub/gnu/gawk/

Gawk Libexecdir Patch:
http://www.linuxfromscratch.org/patches/lfs/5.0/gawk-3.1.3-libexecdir.patch

Содержимое Gawk

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

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

Краткие описания

gawk - программа для манипуляций с текстовыми файлами. Он является GNU-реализацией awk.

grcat - дамп базы данных групп /etc/group.

igawk позволяет gawk включать файлы.

pgawk - профильная версия gawk.

pwcat - дамп базы данных паролей /etc/passwd.

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

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


MAKEDEV

Для получения инструкций по установке смотрите Раздел Создание устройств (Makedev-1.7) в Главе 6.

Официальный адрес пакета

MAKEDEV (1.7):
http://downloads.linuxfromscratch.org/

Содержимое MAKEDEV

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

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

Краткое описание

MAKEDEV - скрипт для создания необходимых статических элементов устройств, обычно расположеных в директории /dev.

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

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


Sed

Для получения инструкций по установке смотрите Раздел Установка Sed-4.0.7 в Главе 6.

Официальный адрес пакета

Sed (4.0.7):
ftp://ftp.gnu.org/gnu/sed/

Содержимое Sed

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

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

Краткие описания

sed используется для однопроходной фильтрации и преобразований текстовых файлов.

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

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


Gzip

Для получения инструкций по установке смотрите Раздел Установка Gzip-1.3.5 в Главе 6.

Официальный адрес пакета

Gzip (1.3.5): 
ftp://alpha.gnu.org/gnu/gzip/

Содержимое Gzip

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

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

Краткие описания

gunzip распаковывает сжатые файлы.

gzexe используется для создания самораспаковывающихся исполняемых файлов.

gzip сжимает указанный файл, используя кодирование Lempel-Ziv (LZ77).

zcat распаковывает указанные сжатые с помощью gzip файлы на стандартный вывод.

zcmp запускает cmp для сжатых с помощью gzip файлов.

zdiff запускает diff для сжатых с помощью gzip файлов.

zegrep запускает egrep для сжатых с помощью gzip файлов.

zfgrep запускает fgrep для сжатых с помощью gzip файлов.

zforce добавляет расширение .gz для всех сжатых с помощью gzip файлов из указанных, так что они не будут потом сжаты повторно. Это может быть использовано в случаях, когда файлы были переименованы после скачивания.

zgrep запускает grep для сжатых с помощью gzip файлов.

zless запускает less для сжатых с помощью gzip файлов.

zmore запускает more для сжатых с помощью gzip файлов.

znew пересжимает файлы из вормата compress в формат gzip -- из .Z в .gz.

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

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


Вступление

В этом приложении имеется информация по всем пакетам из этой книги в виде следющих пунктов:

Большая часть информации об этих пакетах (особенно их описания) взята из соответствующих man-страниц по этим пакетам. Мы не стали включать сюда эти man-страницы полностью, только ряд ключевых элементов для сборки и иформацию, необходимую для понимания назначения паета. Для получения более детальной информации по пакетам вам надо посмотреть документацию по ним.

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

Пожалуйста, заметьте что здесь описаны только те пакеты, которые нам необходимо установить. Остальные можно добавить потом.

Также здесь приведены зависимости установки для всех пакетов, устанавливаемых в этой книге. Он содержит программы, необходимые для успешной сборки устанавливаемых пакетов.

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

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


Binutils

Для инструкций по установке смотрите Раздел Установка Binutils-2.14 в Главе 6.

Официалиный адрес пакета

Binutils (2.14): 
ftp://ftp.gnu.org/gnu/binutils/

Содержимое 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]

Краткие описания

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

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

as - ассемблер. Ассемблирует выводл gcc в объектные файлы.

c++filt используется компоновщиком для сортировки символов C++ и Java, для пропуска перезагрузки функций при конфликтах.

gprof отображает график системных вызовов.

ld - компоновщик. Он соединяет несколько объектных и архивных файлов в один, переопределяет их данные и устанавливает символические ссылки.

nm выводит символы, содержащиеся в объектном файле.

objcopy используется для преобразования из одного типа объектного файла в другой.

objdump выводит информацию об объектном файле в соответствии с параметрами, определяющими какую информацию выводить. Выводимая информация, как правило, используется програмистами, работающими со средствами компиляции.

ranlib генерирует список содержимого архива и сохраняет его в архиве. Список содержит все символы, определенные частями архива, которые являются объектными файлами.

readelf выводит информацию о типе бинарника.

size выводит список размеров частей -- и общий размер -- для каждого объектного файла.

strings выводит для каждого файла список печатных символов больше указанной длины (по умолчанию - 4). Для объектных файлов печатаются только строки из инициализационного и загрухаемого разделов. Для других типов файлов выводятся все строки.

strip Удаляет симфолы из объектных файлов.

libiberty содержит правила, используемые различными программами GNU, включая getopt, obstack, strerror, strtol и strtoul.

libbfd - библиотека Binary File Descriptor.

libopcodes - библиотека для работы с опкодами, используется в сборке утилит вроде objdump. Опкоды - "читаемые" версии инструкций процессора.

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

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


Libtool

Для получения инструкций по установке смотрите Раздел Установка Libtool-1.5 в Главе 6.

Официальный адрес пакета

Libtool (1.5): 
ftp://ftp.gnu.org/gnu/libtool/

Содержимое Libtool

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

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

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

Краткие описания

libtool предоставляет общие сервисы сборки библиотек.

libtoolize предоставляет стандартные средства для включения поддержки libtool в пакет.

libltdl скрывает различные сложности библиотек (dlopen).

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

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


Util-linux

Для получения инструкций по установке смотрите Раздел Установка Util-linux-2.12 в Главе 6.

Официальный адрес пакета

Util-linux (2.12):
http://ftp.cwi.nl/aeb/util-linux/

Содержимое 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

Краткие описания

agetty открывает порт tty, запрашивает имя пользователя и запускает программу login.

arch возвращает архитектуру машины.

blockdev позволяет вызвать ioctls блочного устройства из командной строки.

cal отображает простой календарь.

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

chkdupexe ищет дубликаты исполняемых файлов.

col фильтрует перевернутые строки, поступающие со ввода.

colcrt используется для фильтрации вывода nroff для терминалов CRT.

colrm отфильтровывает указанные колонки.

column форматирует указанный файл в несколько колонок.

ctrlaltdel устанавливает функцию для комбинации клавиш Ctrl+Alt+Del для аппаратного или программного сброса.

cytune используется для настройки параметров драйверов последовательного порта для карт Cyclades.

ddate выдает Discordian дату или конвертирует указанную дату по Григорианскому календарю в Discordian дату.

dmesg выводит загрузочные сообщения ядра.

elvtune может использоваться для настройки работы и взаимодействия блочных устройств.

fdformat - низкоуровневое форматирование дискеты.

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

fsck.cramfs проводит проверку целостности файловой системы Cramfs на указанном устройстве.

fsck.minix проводит проверку целостности файловой системы Minix на указанном устройстве.

getopt оанализирует параметры командной строки.

hexdump отображает заданный файл в шестнадцатиричном или другом указанном формате.

hwclock используется для чтения или установки аппаратных часов системы (также называемых RTC- или BIOS-часами).

ipcrm удаляет указанный ресурс IPC.

ipcs отображает статус IPC.

isosize возвращает размер файловой системы iso9660.

kill прерывает заданные процессы.

line копирует строку.

logger добавляет указанное сообщение в системный лог.

look выводит строки, начинающиеся с указанной строки.

losetup используется для установки и управления loop устройств.

mcookie генерирует "магические" ключи для xauth.

mkfs используется длоя создания файловой системы на устройстве (обычно разделе жесткого диска).

mkfs.bfs создает файловую систему SCO bfs.

mkfs.cramfs создает файловую систему cramfs.

mkfs.minix создает файловую систему Minix.

mkswap инициализирует указанной устройство или файл для использования в качестве свопа.

more - фильтр для постраничного вывода текста. Но less намного лучше.

mount присоединяет файловую систему на указанном устройстве к указанной директории в дереве системных файлов.

namei показывает символические ссылки в указанных путях.

pg постранично отобрахает текстовый файл.

pivot_root телает указанную файловую системы корневой для текущих прооцессов.

ramsize может использоваться для установки размера RAM-диска в загрузочной карте.

rdev может использоваться для запроса и установки корневого устройства и других параметров карты загрузки.

readprofile считывает профильную информацию ядра.

rename переименовывает указанные файлы, заменяет указанную строку на другую.

renice используется для изменения проритета выполнения работающего процесса.

rev переворачивает строки в указанном файле.

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

script создает скрипт терминальной сессии.

setfdprm устанавливает пользовательские параметры дискеты.

setsid запускает указанную программу в новой сессии.

setterm используется для установки аттрибутов терминала.

sfdisk мнипулирует таблицами разделов дисков.

swapdev может использоваться для установки своба в карте загрузки.

swapoff отключает устройства или файлы свопа.

swapon подключает устройства или файлы свопа.

tunelp используется для настройки параметров LP устройств.

ul - фильтр для перевода знаков подчеркивания в escape-последовательности подчеркивания для текущего терминала.

umount отключает файловую систему от дерева системных файлов.

vidmode может использоваться для установки видеорежима в карте загрузки.

whereis возвращает местоположение бинарников, исходников или man-страниц для указанной команды.

write посылает сообщение указанному пользователю в том случае, если пользователь не отключил эту возможность.

Зависимости установки Util-linux

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


Modutils

Для получения инструкций по установке смотрите Раздел Установка Modutils-2.4.25 в Главе 6.

Официальный адрес пакета

Modutils (2.4.25): 
ftp://ftp.kernel.org/pub/linux/utils/kernel/modutils/

Содержимое Modutils

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

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

Краткие описания

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

genksyms генерирует символьную информацию о версиях.

insmod устанавливает загружаемый модуль в запущеное ядро.

insmod_ksymoops_clean удаляет сохраненную символьную информацию и модули не используемые в течение двух дней.

kallsyms извлекает все символы ядра для отладки.

kernelversion возвращает старшую версию запущенного ядра.

ksyms показывает экспортированые символя ядра.

lsmod показывает загруженные модули.

modinfo проверяет объектный файл, ассоциированный с модулем ядра, и выводит любую доступную информацию о нем.

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

rmmod выгружает модули из запущенного ядра.

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

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


Automake

Для инструкций по установке смотрите Раздел

Short descriptions

Установка Automake-1.7.6 в Главе 6.

Официальный адрес пакета

Automake (1.7.6): 
ftp://ftp.gnu.org/gnu/automake/

Содержимое 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

Краткие описания

acinstall - скрипт, устанавливающий файлы aclocal-style M4.

aclocal генерирует файлы aclocal.m4 основанные на содержимом файлов configure.in.

automake - средство для автоматической генерации Makefile.in из файлов Makefile.am. Для создания всех файлов Makefile.in для пакета, запустите программу в верхней директории пакета. При сканировании файлов configure.in он автоматчески найдет соответствующие Makefile.am и сгенерирует Makefile.in.

compile оболочка для компиляторов.

config.guess - скрипт, который определяет каноническое имя (триплет) системы - сборка, хост и тип архитектуры.

config.sub - скрипт проверки конфигурации.

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

elisp-comp - байт-компиляция кода Emacs Lisp.

install-sh - скрипт, который устанавливает программу, скрипт или файл данных.

mdate-sh выводит время модификации директории или файла.

missing - скрипт, заменяющий ряд пропущенных программ GNU при инсталяции.

mkinstalldirs создает дерево каталогов.

py-compile компилирует программу Python.

ylwrap оболочка для lex и yacc.

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

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


Lfs-Utils

Для получения инструкций по установке смотрите Раздел Установка Lfs-Utils-0.3 в Главе 6.

Официальный адрес пакета

Lfs-utils (0.3):
http://www.linuxfromscratch.org/~winkie/downloads/lfs-utils/

Содержимое Lfs-Utils

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

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

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

Краткие описания

mktemp создает временные файлы в безопасном месте. Он используется в скриптах.

tempfile создает временные файлы менее безопасно, чем mktemp. Он устанавливается для обратной совместимости.

Скрипт http-get содержит расширение bash называемое "сетевым перенаправлением". Он используется для скочивания с веб-сайтов без использования других программ.

iana-net используется скриптом http-get для простого доступа к настройкам сервисов и протоколов IANA.

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

(Зависимости пока не проверены.)


Linux (ядро)

Для получения инструкций по установке смотрите Раздел Установка Linux-2.4.22 в Главе 8.

Официальный адрес пакета

Linux (2.4.22):
ftp://ftp.kernel.org/pub/linux/kernel/

Содержимое Linux

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

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

Краткие описания

Ядро является мотором вашей системы GNU/Linux. При включении компьютера ядро будет первой загруженой частью операционной системы. Оно определит и инициализирует все аппаратные компоненты вашего компьютера, что сделает их доступными в виде дерева файлов для программ и переключает CPU в мультипроцессорный режим для возможности одновременной работы нескольких программ.

Заголовки ядра определяют интерфейс для сервисов, которые поддерживаются ядром.  Заголовки из системной директории include должны быть всегда теми, с которыми был скомпилирован Glibc, и не в коем случае не должны быть заменены при обновлении ядра.

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

Linux зависит от: Bash, Binutils, Coreutils, Findutils, GCC, Glibc, Grep, Gzip, Make, Modutils, Perl, Sed.


M4

Для получения инструкций по установке смотрите Раздел Установка M4-1.4 в Главе 6.

Официальный адрес пакета

M4 (1.4): 
ftp://ftp.gnu.org/gnu/m4/

Содержимое M4

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

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

Краткое описание

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

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

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


Tar

Для получения инструкций пао установке смотрите Раздел Установка Tar-1.13.25 в Главе 6.

Официальный адрес пакета

Tar (1.13.25):
ftp://alpha.gnu.org/gnu/tar/

Содержимое Tar

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

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

Краткие описания

rmt используется для для удаленного управления приводами магнитных лент через межпроцессорное связное соединение.

tar используется для сохранения в файле архива, известного как tar-файл (тарболл), или извлечения из него файлов.

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

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


Groff

Для получения инструкций по установке смотрите Раздел Установка Groff-1.19 в Главе 6.

Официальный адрес пакета

Groff (1.19): 
ftp://ftp.gnu.org/gnu/groff/

Содержимое 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)

Краткие описания

addftinfo читает файл шрифта troff и добавляет некоторую дополнительную информацию о размерах шрифта, используемую системой groff.

afmtodit создает файл шрифта, используемый groff и grops.

eqn компилирует описания выражений, включенных в файлы troff, в команды, понимаемые troff.

eqn2graph преобразует уравнение EQN в уменьшеное изображение.

grn - препроцессор groff для файлов  gremlin.

grodvi - драйвер для groff, который обеспечивает работу с форматом TeX dvi.

groff - фронт-энд для системы форматирования документов groff. Обычно он запускает программу troff и постпроцесор, соответствующий выбранному устройству.

groffer отображает файлы groff и man-страницы в X-ах и tty.

grog читает файлы и определяет, какие параметры groff (-e, -man, -me, -mm, -ms, -p, -s и -t) необходимы для вывода этих файлов и и возвращает команду groff с этими параметрами.

grolbp - драйвер для принтеров Canon CAPSL (лазерные принтеры серий LBP-4 и LBP-8).

grolj4 - драйвер для groff, который обеспечивает вывод в формате PCL5 для принтеров HP Laserjet 4.

grops переводит вывод GNU troff в Postscript.

grotty переводит вывод GNU troff в формат, понятный для typewriter-like устройств.

gtbl -  GNU реализация tbl.

hpftodit создает файл шрифта для использования с  groff -Tlj4 из файла метрик шрифта, размесеного HP.

indxbib создает инвертированый индекс для библиографической базы данных в указанном файле, для использования с refer, lookbib и lkbib.

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

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

mmroff - простой препроцессор для groff.

neqn форматирует выражения для вывода в ascii.

nroff - скрипт, который эмулирует команду nroff, используемую groff.

pfbtops преобразует шрифт Postscript в формате .pfb в ASCII.

pic компилирует описания изображений, включенных в файлы ввода troff или TeX в команды, понятные для TeX или troff.

pic2graph конвертирует диаграмму PIC в сжатое изображение.

pre-grohtml преобразует вывод GNU troff в html.

post-grohtml преобразует вывод GNU troff в html.

refer копирует содержимое файла на стандартный вывод, за исключением строк между .[ и .], которые интерпритируются как цитаты, и строк между .R1 и .R2, которые интерпритируются как команды обработки цитат.

soelim читает файлы и заменяет строки в форме .so file на содержимое файла file.

tbl компилирует описания таблиц, включенных в файлы ввода troffв команды, понимаемые troff.

tfmtodit создает файл шрифта для использования с groff -Tdvi.

troff совместим с trff для Unix. Обычно должен быть вызван командой groff, которая также запустит препроцессор и постпроцессор в необходимом порядке и с необходимыми параметрами.

zsoelim - GNU реализация soelim.

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

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


Psmisc

Для получения инструкций по установке смотрите Раздел Установка Psmisc-21.3 в Главе 6.

Официальный адрес пакета

Psmisc (21.3):
http://download.sourceforge.net/psmisc/
ftp://download.sourceforge.net/pub/sourceforge/psmisc/

Содержимое Psmisc

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

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

Краткие описания

fuser возвращает PID процессов, которые используют указанные файлы или фаловые системы.

killall убивает процессы по имени. Он посылает сигнал всем процессам, запущенным одной из указанных команд.

pidof возвращет PID указанных программ. (Вместо этой программы используется pidof из Sysvinit.)

pstree отображает дерево запущенных процессов.

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

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


Autoconf

Для инструкций по установке смотрите Раздел Установка Autoconf-2.57 из Главы 6.

Официальный адрес пакета

Autoconf (2.57): 
ftp://ftp.gnu.org/gnu/autoconf/

Содержимое Autoconf

Autoconf содержит shell-скрипты для автоматического конфигурирования исходных кодов.

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

Краткие описания

autoconf является средством для составления shell-скриптов, которые автоматически настраивают исходники пакетов для адаптации к большинству Unix-like систем. Скрипты конфигурации создаются сомостоятельными -- они работают без программы autoconf.

autoheader является средством для создания шаблонов файлов с директивами C #define для настройки использования.

autom4te это оболочка для макропроцессора M4.

autoreconf может вызываться при наличии множества сгенерированых autoconf сонфигурационных скриптов. ПРограмма запускает autoconf и autoheader повторно (в случае надобности) для повторного создания скриптов настройки autoconf и шаблонов заголовков конфигурации в текущем дереве каталогов.

autoscan может помочь при создании файла configure.in для пакета программ. Он проверяет исходники в дереве каталогов, ищет в них возможность возникновения проблем при переносимости и создает файл configure.scan, который служит предварительным configure.in для пакета.

autoupdate модифицирует файл configure.in, обновляя имена вызова макросов autoconf.

ifnames может помочь при написании configure.in для пакета программ. Он печатает идентификаторы, используемые пакетом в условиях препроцессора C. Если пакет уже настроен на определенныю переносимость, эта программа может помочь определить, что надо проверять скрипту configure. Он может заполнить некоторые пропуски в файле configure.in, сгенерированом autoscan.

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

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


Приложение A. Описание пакетов и зависимости

Содержание
Вступление
Autoconf
Automake
Bash
Binutils
Bison
Bzip2
Coreutils
DejaGnu
Diffutils
E2fsprogs
Ed
Expect
File
Findutils
Flex
Gawk
GCC
Gettext
Glibc
Grep
Groff
Grub
Gzip
Inetutils
Kbd
Less
LFS-Bootscripts
Lfs-Utils
Libtool
Linux (ядро)
M4
Make
MAKEDEV
Man
Man-pages
Modutils
Ncurses
Net-tools
Patch
Perl
Procinfo
Procps
Psmisc
Sed
Shadow
Sysklogd
Sysvinit
Tar
Tcl
Texinfo
Util-linux
Vim
Zlib

Zlib

Для получения инструкций по установке смотрите Раздел Установка Zlib-1.1.4 в Главе 6.

Официальный адрес пакета

Zlib (1.1.4):
http://www.gzip.org/zlib/

Zlib Vsnprintf Patch:
http://www.linuxfromscratch.org/patches/lfs/5.0/zlib-1.1.4-vsnprintf.patch

Содержимое Zlib

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

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

Краткое описание

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

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

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


Man-pages

Для получения инструкций по установке смотрите Раздел Установка Man-pages-1.60 в Главе 6.

Официальный адрес пакета

Man-pages (1.60): 
ftp://ftp.kernel.org/pub/linux/docs/manpages/

Содержимое Man-pages

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

Устанавливаемые файлы: различные man-страницы

Краткое описание

Примером поставляемых man-страниц служит описание всех функций C и C++, важных файлов устройств и важных файлов конфигурации.

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

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


Coreutils

ДЛя инструкций по установке смотрите Раздел Установка Coreutils-5.0 в Главе 6.

Официальный адрес пакета

Coreutils (5.0):
ftp://ftp.gnu.org/gnu/coreutils/

Coreutils Hostname Patch:
http://www.linuxfromscratch.org/patches/lfs/5.0/coreutils-5.0-hostname-2.patch

Coreutils Uname Patch:
http://www.linuxfromscratch.org/patches/lfs/5.0/coreutils-5.0-uname.patch

Содержимое 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

Краткие описания

basename возвращает имя файла по указаному полному имени с путями и суффиксами.

cat суммирует содержимое файлов на стандартный вывод.

chgrp изменяет группу-владельца для указанного файла на заданную группу. Группа может быть определена как по имени, так и по числовому ID.

chmod изменяет режим доступа к файлу на указанные. Режим может быть указан в качестве последовательности символов для изменения режима доступа или как восьмеричное число для определения нового режима.

chown изменяет пользователя и/или группу, которые являются владельцем файла на указанную пару user:group.

chroot запускает указанную команду с указанной директорией в качестве корня /. Эта команда может быть интерактивным шеллом. На большинстве систем только пользователь root может это сделать.

cksum печатает контрольную сымму CRC и количество байт в указанном файле.

comm сравнивает два файла и выводит в три колонки одинаковые строки и разные.

cp копирует файлы.

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

cut печетает часть строк, соответствующих заданным параметрам.

date паказывает текущее время в указанном формате или устанавливает системное время.

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

df показывает сколько места доступно (и используется) для всех примонтированых файловых систем или только для системы, содержащий указанные файлы.

dir синоним ls.

dircolors выдает команду для установки переменной окружения LS_COLOR, используемой для изменения цветовой схемы для ls.

dirname удаляет суффикс, не являющийся директорией, из имени файла.

du возвращает место на диске, занимаемое указанной или текущей директориями со всеми вложеными директориями или файлами.

echo показывает заданную строку.

env запускает команду в измененном окружении.

expand заменяет знаки табуляции пробелами.

expr вычисляет выражения.

factor выводит разложение на простые множители всех указанных целых чисел.

false ничего не делает, но неудачно. Он всегда завершается со статусом ошибки.

fmt форматирует абзацы в указанных файлах.

fold переносит строки в заданных фалах.

groups выводит группу, к которой принадлежит пользователь.

head печатает первые десять строк файла (или указанное число строк).

hostid возвращает числовой идентификатор хоста (в шестнадчатиричном формате)

hostname возвращает установленное имя хоста.

id возвращает ID пользователя, ID группы, и группу к которой принадлежит текущий или заданный пользователь.

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

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

kill завершает указанный процесс.

link создает жесткую ссылку на указанное имя или файл.

ln создает жесткую или символическую ссылку на файлы.

logname возвращает идентификационное имя текущего пользователя.

ls выводит содержимое указанной директории. По умолчанию - в алфавитном порядке подкаталоги и файлы.

md5sum возвращает контрольную сумму MD5.

mkdir создает директорию с указанным именем.

mkfifo создает FIFO с заданным именем.

mknod создает элемент устройства с заданным именем. Элемент устройства может быть специальным символьным фалом, блочным файлом или FIFO.

mv перемещает или переименовывает указанные файлы или директории.

nice запускает программу с измененным приоритетом выполнения.

nl возвращает количество строк в указанном файле.

nohup выполняет команду, защищенную от зависаний, с выводом в журнальный файл.

od выводит дамп файла в восьмеричном или ином формате.

paste выводит строки, соответствующие заданным образцам из указанных файлов и разделенные символами табуляции.

pathchk проверяет корректность или портируемость имен файлов.

pinky - упрощенный вариант finger. Возвращает некоторую информацию о указанных пользователях.

pr форматирует файл по страницам и колонкам для печати.

printenv печатает окружение.

printf печатает заданные параметры в указанном формате - очень похож на одноименную функцию C.

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

pwd возвращает имя текущей директории.

readlink возвращает значение символической ссылки.

rm удаляет файлы или директории.

rmdir удаляет директорию, если она пустая.

seq печатает ряд чисел в заданном диапазоне с заданным шагом.

sha1sum возвращает или проверяет контрольную сумму 160-bit SHA1.

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

sleep - пауза на указанное время.

sort сортирует строки заданных файлов.

split разрезает указанный файл на части заданного размера или по номерам строк.

stty устанавливает или печатает установки терминала.

su запускает шелл с правами указанных пользователя и группы.

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

sync переключает буфер файловой системы. Он принудительно записывает измененные блоки на диск и обновляет super block.

tac выводит содержимое указанных файлов в обратном порядке.

tail печатает последние десять строк (или указанное их количество) заданного файла.

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

test сравнивает значения и проверяет типы файлов.

touch изменяет время изменения файла, устанавливает доступ к файлу. Если файл не существует, то он будет создан с нулевой длиной.

tr заменяет, вставляет и удаляет символы со стандартного ввода .

true успешно ничего не делает. Он всегда возвращает результат успешно завершенной операции.

tsort проводит топологическую сортировку. Он выводит полностью отсортированый список с учетом уже произведенной сортировки указанного файла.

tty возвращает имя файла терминала, присоединенного к стандартному вводу.

uname выводит информацию о системе.

unexpand заменяет пробелы символами табуляции.

uniq удаляет все повторяющиеся строки из отсортированного файла.

unlink удаляет указанный файл.

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

users выводит список подключенных к системе пользователей.

vdir синоним ls -l.

wc выводит количество строк, слов и байт в указанном файле и общее количество строк, если указано более одного файла.

who сообщает, кто сейчас подключен.

whoami возвращает имя пользователя, соответствующее текущему ID.

yes выводит циклически 'y' или заданную строку, после чего завершается.

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

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


Procps

Для получения инструкций по установке смотрите Раздел Установка Procps-3.1.11 в Главе 6.

Официальный адрес пакета

Procps (3.1.11):
http://procps.sourceforge.net/

Procps Locale Patch:
http://www.linuxfromscratch.org/patches/lfs/5.0/procps-3.1.11-locale-fix.patch

Содержимое Procps

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

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

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

Краткие описания

free возвращает информацию о свободной и используемой памяти в системе, как физической, так и свопа.

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

pgrep выводит список процессов, отфильтрованый по именам и другим атрибутам.

pkill посылает сигналы процессам по их имени или другим атрибутам.

pmap возвращает карту памяти указанного процесса.

ps выводит список текущих процессов.

skill посылает сигналы процессам, попадающим под критерий.

snice изменяет приоритет выполнения процессов, соответствующих критериям.

sysctl модифицирует параметры ядра во время его работы.

tload отображает график загрузки системы.

top отображает загрузку процессора. Используется для слежения за активностью процессора в реальном времени.

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

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

w показывает сколько пользователей подключено к системе, где и как они подключились.

watch циклически выполняет указанную команду, выводя ее первый полный экран вывода. Это позволяет контролировать вывод все время.

libproc содержит функции, используемые большей частью программ этиого пакета.

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

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


Tcl

Для получения инструкций по установке смотрите Раздел Установка Tcl-8.4.4 в Главе 5.

Официальный адрес пакета

Tcl (8.4.4):
http://download.sourceforge.net/tcl/
ftp://download.sourceforge.net/pub/sourceforge/tcl/

Содержимое Tcl

Пакет Tcl содержит Tool Command Language.

Устанавливаемые программы: tclsh (ссылка на tclsh8.4), tclsh8.4

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

Краткие описания

tclsh8.4 - командный шелл Tcl.

libtcl8.4.so - библиотека Tcl.

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

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


Findutils

Для получения инструкций по установке смотрите Раздел Установка Findutils-4.1.20 в Главе 6.

Официальный адрес пакета

Findutils (4.1.20):
ftp://alpha.gnu.org/gnu/findutils/

Содержимое Findutils

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

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

Краткие описания

bigram раньше использовался для создания поисковых баз данных.

code раньше использовался для создания поисковых баз данных. Предшественник frcode.

find ищет внутри указанного дерева каталогов файлы, соответствующие заданным критериям.

frcode вызывается updatedb для сжатия списка имен файлов. Он использует front-сжатие, уменьшая размер базы данных в 4 - 5 раз.

locate ищет в базе данных имен файлов и выводит имена, содержащие заданную строку или соответствующие указанному шаблону.

updatedb обновляет поисковую базу данных. Он сканирует всю файловую систему (включая другие примонтированые файловые системы, если не указано обратное) и заносит все найденные имена файлов в базу данных.

xargs может использоваться для выполнения команды со списком файлов.

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

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


Sysklogd

Для получения инструкций по установке смотрите Раздел Установка Sysklogd-1.4.1 в Главе 6.

Официальный адрес пакета

Sysklogd (1.4.1):
http://www.infodrom.org/projects/sysklogd/

Содержимое Sysklogd

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

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

Краткие описания

klogd - системный демон для перехвата и протоколирования сообщений ядра.

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

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

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


GCC

Для получения инструкций по установке смотрите Раздел Установка GCC-3.3.1 в Главе 6.

Официальный адрес пакета

GCC (3.3.1): 
ftp://ftp.gnu.org/pub/gnu/gcc/

GCC No-Fixincludes Patch:
http://www.linuxfromscratch.org/patches/lfs/5.0/gcc-3.3.1-no_fixincludes-2.patch

GCC Specs Patch:
http://www.linuxfromscratch.org/patches/lfs/5.0/gcc-3.3.1-specs-2.patch

GCC Suppress-Libiberty Patch:
http://www.linuxfromscratch.org/patches/lfs/5.0/gcc-3.3.1-suppress-libiberty.patch

GCC-2 (2.95.3): 
ftp://ftp.gnu.org/pub/gnu/gcc/

GCC-2 Patch:
http://www.linuxfromscratch.org/patches/lfs/5.0/gcc-2.95.3-2.patch

GCC-2 No-Fixincludes Patch:
http://www.linuxfromscratch.org/patches/lfs/5.0/gcc-2.95.3-no-fixinc.patch

GCC-2 Return-Type Patch:
http://www.linuxfromscratch.org/patches/lfs/5.0/gcc-2.95.3-returntype-fix.patch

Содержимое 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

Краткие описания

cpp является препроцессором C. Он используется компилятором для обработки директив #include и #define в файлах исходных кодов.

g++ - компилятор C++.

gcc - компилятор C. Он используется для преобразования исходных кодов в ассемблерный код.

gccbug - скрипт, помогающий создать хороший отчет об ошибке.

gcov - средство тестирования. Оно используется для анализа программы и поиска участков, которые можно оптимизировать.

libgcc* - поддержка run-time для gcc.

libstdc++ - стандартная библиотека C++. Она содержит многие частоиспользуемые функции.

libsupc++ - поддержка правил языка программирования c++.

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

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


Sysvinit

Для получения инструкций по установке смотрите Раздел Установка Sysvinit-2.85 в Главе 6.

Официальный адрес пакета

Sysvinit (2.85):
ftp://ftp.cistron.nl/pub/people/miquels/sysvinit/

Содержимое Sysvinit

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

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

Краткие описания

halt обычно вызывает shutdown с параметром -h, если текущй уровень запуска не 0, затем он отдает команду ядру на отключение системы. Но сначала записывает в файл /var/log/wtmp что система отключается.

init - материнский процесс для всех остальных. Он считывает команды из /etc/inittab, которые обычно говорят, какие скрипты запускать для текущего уровня запуска и сколько создавать gettys.

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

last показывает, какие пользователи подключены (и отключены) в системе, просматривая файл /var/log/wtmp. Он также может отображать загрузки и отключения системы и изменения уровней запуска.

lastb показывает ошибки входа в систему, отмеченные в /var/log/btmp.

mesgas noted in the last runlevel record i контролирует возможность отправки другими пользователями сообщений на текущий терминал пользователя.

pidof возвращает PID указанных программ.as noted in the last runlevel record i

poweroff передает ядру команду на отключение системы и выключение компьютера. Смотри halt.

reboot передает ядру команду на перезагрузку системы. Смотри halt.

runlevel возвращает предыдущий и текущий уровни запуска, последний уровень запуска записан в /var/run/utmp.

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

sulogin подключает к системе суперпользователя. Обычно используется в скрипте init, когда система загружается в однопользовательском режиме.

telinit посылает init уведомление о необходимости смены уровня запуска.

utmpdump отображает содержимое указанного login-файла в удобочитаемом формате.

wall пишет сообщение всем подключеным пользователям.

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

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


Patch

Для получения инструкций по установке смотрите Раздел Установка Patch-2.5.4 в Главе 6.

Официальный адрес пакета

Patch (2.5.4): 
ftp://ftp.gnu.org/gnu/patch/

Содержимое Patch

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

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

Краткое описание

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

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

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


DejaGnu

Для получения инструкций по установке смотрите Раздел Установка DejaGnu-1.4.3 в Главе 5.

Официальный адрес пакета

DejaGnu (1.4.3):
ftp://ftp.gnu.org/gnu/dejagnu/

Содержимое DejaGnu

Пакет DejaGnu содержит средства для тестирования других программ.

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

Краткое описание

runtest является скриптом-оболочкой для определения правильного шелла и последующего запуска DejaGnu.

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

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


Vim

Для получения инструкций по установке смотрите Раздел Установка Vim-6.2 в Главе 6.

Официальный адрес пакета

Vim (6.2):
ftp://ftp.vim.org/pub/editors/vim/unix/

Содержимое 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

Краткие описания

efm_filter.pl - фильтр для создания файла ошибки, который может быть прочитан vim.

efm_perl.pl реформатирует сообщения об ошибках интерпритатора Perl для использования в режиме quickfix для vim.

ex запускает vim в режиме ex.

less.sh - срипт, запускающий vim с less.vim.

mve.awk обрабатывает ошибки vim.

pltags.pl создает файл тегов кода perl для использования vim.

ref проверяет написание параметров.

rview - урезанная версия view: нет поддержки нелл-команд и не может быть приостановлен view.

rvim - урезанная версия vim: нет подщдержки шелл-команд и не может быть приостановлен vim.

shtags.pl генерирует файл тегов для скриптов perl.

tcltags генерирует файл тегов для кода TCL.

vi запускает vim в режиме vi-совместимости.

view запускает vim в режиме только для чтения.

vim - редактор.

vim132 запускает vim в режиме 132-колоночного терминала.

vim2html.pl конвертирует документацию vim в HTML.

vimdiff редактирует две или три версии файла в vim и показывает различия.

vimm включает модель ввода DEC locator на удаленном терминале.

vimspell.sh - скрипт, который просматривает файл и генерирует синтаксические выражения. подсвечиваемые в.

vimtutor обучает вас основным командам и горячим клавишам vim.

xxd отображает бинарник в шестнадцатиричном фрмате. Он также может работать в обратном направлении, что позволяет использовать его для патча бинарников.

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

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


File

Для получения инструкций по установке смотрите Раздел Установка File-4.04 в Главе 6.

Официальный адрес пакета

File (4.04): 
ftp://ftp.gw.com/mirrors/pub/unix/file/

Альтернативный адрес:
ftp://gaosu.rave.org/pub/linux/lfs/

Содержимое File

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

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

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

Краткое описание

file пытается классифицировать указанный файл. Он делает это посредством ряда тестов: теста файловой системы, теста магических чисел, и языкового теста. От первого теста зависит удачное определение результата.

libmagic содержит правила распознавания магических чисел, используемые программой file.

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

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


Diffutils

Для получения инструкций по установке смотрите Раздел Установка Diffutils-2.8.1 в Главе 6.

Официальный адрес пакета

Diffutils (2.8.1):
ftp://ftp.gnu.org/gnu/diffutils/

Содержимое Diffutils

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

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

Краткие описания

cmp сравнивает два файла и возвращает информацию о различающихся байтах.

diff сравнивает два файла и возвращает информацию о различающихся строках.

diff3 сравнивает три файла построчно.

sdiff совмещает два файла и интерактивно выводит результаты.

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

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


Bash

Для инструкций по установке смотрите Раздел Установка Bash-2.05b в Главе 6.

Официальный адрес пакета

Bash (2.05b): 
ftp://ftp.gnu.org/gnu/bash/

Bash Patch:
http://www.linuxfromscratch.org/patches/lfs/5.0/bash-2.05b-2.patch

Содержимое Bash

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

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

Краткие описания

bash часто используемый интерпритатор команд. Он поддерживает различные расширения и подстановки в получаемой командной строке, что делает его весьма мощным средством.

bashbug - shell-скрипт для помощи пользователю в составлении и отправке сообщения об ошибке, относящейся к bash, в стандартном формате.

sh - ссылка на программу bash. При вызове как sh, bash запускается в режиме эмуляции исторической версии sh, насколько это возможно, для большего соответствия стандартам POSIX.

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

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


Flex

Для получения инструкций по установке смотрите Раздел Установка Flex-2.5.4a в Главе 6.

Официальный адрес пакета

Flex (2.5.4a): 
ftp://ftp.gnu.org/non-gnu/flex/

Содержимое Flex

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

Устанавливаемые программы: flex, flex++ (ссылка на flex) и lex

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

Краткие описания

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

flex++ вызывает версию flex, используемую в сканерах C++.

libfl.a - библиотека flex.

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

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


Glibc

Для получения инструкций по установке смотрите Раздел Установка Glibc-2.3.2 в Главе 6.

Официальный адрес пакета

Glibc (2.3.2): 
ftp://ftp.gnu.org/gnu/glibc/

Glibc-linuxthreads (2.3.2): 
ftp://ftp.gnu.org/gnu/glibc/

Glibc Sscanf Patch:
http://www.linuxfromscratch.org/patches/lfs/5.0/glibc-2.3.2-sscanf-1.patch

Содержимое 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]

Краткие описания

catchsegv может использоваться для слежения за состоянием стека, когда программа завершается из-за ошибки распределения памяти (segmentation fault).

gencat генерирует каталоги сообщений.

getconf выводит параметры системной конфигурации для переменных, зависящих от файловой системы.

getent получает записи из административных баз данных.

glibcbug cсоздает отчет об ошибке и отсылает его по указанномы адресу.

iconv обеспечивает преобразование кодировки.

iconvconfig создает файл конфигурации для модуля iconv.

ldconfig настраивает временные привязки динамического компоновщика.

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

lddlibc4 используется ldd для объектных файлов.

locale - программа на Perl, которая указывает компилятору использовать или нет локали POSIX для встроеных операций.

localedef компилирует спецификации локали.

mtrace...

nscd - имя демона сервиса кеширования, предоставляющий кеш для большинства запросов DNS.

nscd_nischeck проверяет необходимость защищенного или простого запроса к NIS+.

pcprofiledump - делает дамп информации, генерируемой профилем PC.

pt_chown - вспомогательная программа для grantpt. Устанавливает владельца, группу и права доступа дополнительного терминала pseudo.

rpcgen генерирует код C для реализации протокола RPC.

rpcinfo создает RPC вызов на сервер RPC.

sln используется для создания символических ссылок. Программа скомпонована статически, так что она используется для создания символических ссылок на динамические библиотеки если система динамической компоновки по каким-либо причинам нефункциональна.

sprof читает и отображает профильные данные распределяемого объекта.

tzselect спрашивает пользователя о его местонахождении и возвращает описание соответствующей временной зоны.

xtrace трассирует выполнение программы печатая исполняемую в данный момент функцию.

zdump делает дамп временной зоны.

zic - компилятор временных зон.

ld.so - вспомогательная программа для исполняемых файлов распределяемых библиотек.

libBrokenLocale используется программами, такими как Mozilla, для использования поврежденных локалей.

libSegFault обрабатывает ошибки распределения памяти (segmentation fault). Она пытается их перехватить.

libanl - библиотека асинхронных запросов DNS.

libbsd-compat - поддерживает портируемость, необходимую для запуска некоторых BSD программ под Linux.

libc - главная библиотека C -- набор часто используемых функций.

libcrypt - криптографическая библиотека.

libdl - библиотека интерфейса динамического подключения.

libg - библиотека времени выполнения для g++.

libieee - библиотека IEEE для операцией с числами с плавающей запятой.

libm - математическая библиотека.

libmcheck содержит код запуска при загрузке.

libmemusage используется memusage для сбора информации о памяти, используемой программой.

libnsl - библиотека сетевых сервисов.

libnss* - библиотеки Name Service Switch, содержащие функции для работы с именами хостов, пользователей и групп, псевдонимами, сервисами, протоколами и всем чем можно.

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

libpthread - библиотека потоков POSIX.

libresolv содержит функции для создания, отправки и интерпритации пакетов серверов доменных имен (DNS) Internet.

librpcsvc содержит функции, обеспецивающие различные сервисы RPC.

librt содержит функции, обеспечивающие большинство интерфейсов, описанных в POSIX.1b Realtime Extension.

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

libutil содержит код  "стандартных" функций, использующихся во многих утилитах Unix.

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

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


Приложение B. Список программ и библиотек

Это список программ и библиотек, устанавливаемых в этой книге, со ссылками на описание содержащих их пакетов в Приложении A.


Версия книги

Это версия 5.0 книги Linux From Scratch, датированая 5-м ноября 2003 г. Если этой книге больше двух месяцев, то более новая и улучшеная версия, возможно, уже есть на одном из зеркал из списка на http://www.linuxfromscratch.org/.


Список изменений

5.0 - 5 ноября 2003

Release of version 4.1 on April 28th, 2003.


Как мы будем работать

Мы собираемся собрать вашу LFS-систему, используя ранее установленный дистрибутив Linux ( такой как Debian, Mandrake, Red Hat или SuSE). Эта существующая Linux система (основа) будет использована как отправная точка, потому что вам будут необходимы некоторые программы, такие как компилятор, компоновщик (линкер) и командный интерпритатор (шелл) для сборки системы. Обычно все перечисленные средства доступны, если при установке дистрибутива вы отметили пункт "разработка" ("development").

В Главе 3 вы сначала создадите новый раздел Linux native и файловую систему, место для компиляции и установки LFS-системы. Затем в  Главе 4 вы скачаете все необходимые пакеты и патчи для LFS-системы и сохраните их в новой файловой системе.

Глава 5 описывает установку ряда пакетов, которые составят среду разработки (или инструментальные средства) с помощию которых мы соберем систему в Главе 6. Некоторые из этих пакетов являются рекурсивно зависимыми - к примеру, компилятору для компиляции нужен компилятор.

Первым делом в Главе 5 мы соберем инструментальные средства: Binutils и GCC. Программы из этих пакетов будут скомпоновалы статически для того, чтобы обеспечить независимость при их использовании от основной системы. После этого мы соберем Glibc, библиотеку C. Glibc будет скомпилирована с использованием средств, собраных ранее. Затем мы соберем средства снова. На этот раз наши средства будут динамически скомпонованы с использованием только что собранной Glibc. Все остальные пакеты из Главы 5 быдут собраны с использованием новых средств и динамически скомпонованы с использованием новой независимой от основной системы Glibc. Когда мы все сделаем, дальнейший процесс установки LFS не будет более зависеть от основного дистрибутива и запущеного ядра.

Вы можете подумать: "это большая работа, почему нам надо обязательно не зависеть от основного дистрибутива?". Техническое описание ответа на этот вопрос содержится в самом начале Главы 5, включая описание разницы между статически и динамически скомпоноваными программами.

В Главе 6 ваша система LFS быдет собрана. С помощию программы chroot (change root) мы войдем в виртуальную среду и запустим интерпритатор shell с использованием в качестве корневой директории раздел LFS. Это намного проще перезагрузки и указаний для ядра использовать раздел LFS в качестве корневого. Помимо этого, чтобы перезагрузится, а не использовать chroot, надо создать полностью способную к загрузке систему, что мы еще не сделали к этому времени. Но главной причиной при использовании chroot, вы можете использовать основную систему во время сборки LFS. Пока идет компиляция, вы можете просто переключится на другую VC (Virtual Console) или на X-ы (графический сервер) и продолжить нормальное использование компьютера.

В заключение установки мы установим загрузочные скрипты в Главе 7, ядро и загрузчик мы установим в Главе 8, а Глава 9 содерхит некоторые моменты, которые могут вам помочь по окончании прочтения книги. В конце концов вы будете готовы перезагрузить компьютер в вашу новую LFS-систему.

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

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


Глава 1. Вступление

Содержание
Как мы будем работать
Соглашения, используемые в книге
Версия книги
Список изменений
Ресурсы
Благодарности

Соглашения, используемые в книге

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

./configure --prefix=/usr

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

install-info: unknown option `--dir-file=/mnt/lfs/usr/info/dir'

Текст такого формата (моноширный) показывает вывод на экран, как результат выполнения какой-либо команды. Также он используется для указания имени файла, например /etc/ld.so.conf.

Выделение

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

http://www.linuxfromscratch.org/

Текст такого формата используется для ссылок как внутри книги, так и на внешние ресурсы - руководства, сайты, места для скачивания.

cat > $LFS/etc/group << "EOF"

root:x:0:
bin:x:1:
......
EOF

Такой раздел используется, в основном длоя создания файлов конфигурации. Первая команда говорит системе создать файл $LFS/etc/group, наполняя его строчками до EOF. В командной строке эта секция печатается в точности как на экране.


Благодарности

Мы хотим поблагодарить следующих людей и организации за их вклад в развитие проекта Linux From Scratch.

Члены группы проекта

Переводчики

Поддержка зеркал

Материальная поддержка

Члены команды формирования


Ресурсы

ЧАВО

Если в процессе построения вашей системы LFS вы обнаружили ошибку, у вас возникли вопросы, или вы считаете, что в книгу вкралась опечатка, то просмотрите в первую очередь наши ЧАВО (ЧАсто задаваемые ВОпросы) на http://www.linuxfromscratch.org/faq/.

IRC

Множество членов сообщества LFS используют IRC сервер сообщества. Перед тем как использовать этот вид поддержки, проверьте LFS ЧАВО и архивы списков рассылки. Возможно, на ваш вопрос уже есть ответ. Вы сможете найти наш IRC сервер на irc.linuxfromscratch.org, порт 6667. Канал поддержки называется #LFS-support.

Списки рассылки

На linuxfromscratch.org есть несколько списков рассылки, используемых разработчиками проекта LFS. Эти списки включают, помимо прочего, список разработчиков и список поддержки.

За информацией о доступных списках рассылки, подписки на них, просмотра их архивов и т.п. загляните на http://www.linuxfromscratch.org/mail.html.

Сервер новостей

Все списки рассылки с linuxfromscratch.org также доступны в виде NNTP сервера. Все сообщения отправленные в списки рассылки копируются в соответствующуюгруппу новостей.

Сервер новостей доступен по адресу news.linuxfromscratch.org.

Зеркала сайта

Проект LFS имеет ряд зеркал в сети. Список зеркал можно увидеть на http://www.linuxfromscratch.org/.

Контактная информация

Пожалуйста, направляйте все ваши вопросы и комментарии в списки рассылки LFS (см. выше).

Но если вы хотите обратиться лично к Джерарду Бикмансу, то пишите на gerard@linuxfromscratch.org.


О $LFS

Пожалуйста, внимательно прочитайте этот раздел. В этой книге будет часто использоваться переменная LFS. $LFS должно будет всегда заменяться на директорию примонтированого раздела для будущей системы LFS. О том, как создать такой раздел, будет подробно написано в Главе 3. К примеру, пусть раздел LFS будет монтирован на /mnt/lfs.

Когда вас попросят выполнить команду ./configure --prefix=$LFS/tools, вам следует выполнить ./configure --prefix=/mnt/lfs/tools.

Важно всегда использовать ее подобным образом: в командной строке или в создаваемых файлах.

Но можно облегчить задачу, задав переменную окружения LFS. Таким образом $LFS будет автоматически восприниматься системой как /mnt/lfs. Это достигается командой:

export LFS=/mnt/lfs

Теперь, когда вас просят выполнить команду ./configure --prefix=$LFS/tools, вам надо набрать ее как есть. Ваш интерпритатор сам заменит "$LFS" на "/mnt/lfs" когда вы нажмете Enter после ввода команды.


О SBU

Многие люди хотят заранее знать. сколько займет сборка и установка того или иного пакета. Но "Linux from Scratch" собирается на разных системах. и невозможно точно указать этот отрезок времени: самый большой пакет (Glibc) может собраться менее чем за 20 минут на быстрой системе, но может собираться и больше трех дней на медленной. В связи с этим мы решили использовать для указания времени сборки и установки пакета SBU (Static Binutils Unit) - время статической сборки и установки пакета Binutils.

Это используется следующим образом: первым пакетом, который нам надо будет собрать в этой книге, является статически скомпонованый Binutils в Главе 5, и время его компиляции берется за "Static Binutils Unit" или "SBU". Время компиляции всех других пакетов выражается через эту единицу.

К примеру, сборка статически скомпонованой версии GCC занимает 4.4 SBUs. Это значит, что если вашей системе понадобилось 10 минут на сборку статической версии Binutils, то сборка GCC займет 45 минут. Как вы увидите, время сборки большинства пакетов меньше чем у Binutils.

Примите к сведению, что если системный компилятор вашей основной системы базируется на GCC-2, то указанный SBU будет неверным. Это происходит по причине того, что SBU основан на самом первом из скомпилированых пакетов, который собран с помощью старого GCC, а при сборке остальной части системы будет использоваться GCC-3.3.1 который работает на 30% медленнее.

Также SBU нельзя будет использовать на SMP-based машинах. Если вы являетесь счастливым обладателем многопроцессорного компьютера, то эта единица будет неточной.


Глава 2. Важная информация

Содержание
О $LFS
О SBU
О тестировании
Как просить о помощи

Как просить о помощи

Если вы столкнетесь с проблемой при использовании этой книги, и ваша проблема не будет описана в ЧАВО (http://www.linuxfromscratch.org/faq), то множество людей в Internet Relay Chat (IRC) и в списках рассылки будут рады вам помочь. Обзор списков рассылки LFS вы можете найти в Главе 1 - Списки рассылки. Для получения помощи в диагностике и устранении вашей проблемы вам надо будет дать наиболее полную информацию о ней в своем вопросе.

Что необходимо указать

Помимо краткого сообщения об ошибке, не забудьте привести следующую информацию:

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

Проблемы конфигурации

Если что-то пошло не так при выполнении скрипта configure, то посмотрите в файле config.log. Этот файл содержит ошибки, которые не были выведены на экран. Включите информацию из этого файла в просьбу о помощи.

Проблемы при компиляции

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

gcc -DALIASPATH=\"/mnt/lfs/usr/share/locale:.\"
-DLOCALEDIR=\"/mnt/lfs/usr/share/locale\" -DLIBDIR=\"/mnt/lfs/usr/lib\"
-DINCLUDEDIR=\"/mnt/lfs/usr/include\" -DHAVE_CONFIG_H -I. -I.
-g -O2 -c getopt1.c
gcc -g -O2 -static -o make ar.o arscan.o commands.o dir.o expand.o file.o
function.o getopt.o implicit.o job.o main.o misc.o read.o remake.o rule.o
signame.o variable.o vpath.o default.o remote-stub.o version.o opt1.o
-lutil job.o: In function `load_too_high':
/lfs/tmp/make-3.79.1/job.c:1565: undefined reference to `getloadavg'
collect2: ld returned 1 exit status
make[2]: *** [make] Error 1
make[2]: Leaving directory `/lfs/tmp/make-3.79.1'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/lfs/tmp/make-3.79.1'
make: *** [all-recursive-am] Error 2

В этом случае большинство людей включайт в сообщение строку:

make [2]: *** [make] Error 1

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

В Интернете есть отличная статья о том, как надо правильно задавать вопросы, написанная Эриком С. Раймондом. Ее можно найти на http://catb.org/~esr/faqs/smart-questions.html. Прочтите эту статью и примите к сведению при задавании вопросов, тогда ваши шансы получить полный и квалифицированный ответ значительно возрастут.

Проблемы при тестировании

Многие пакеты поддерживают тестирование, и мы, в зависимости от его важности, будем советовать вам запускать их. Иногда пакеты выдают ошибки. Если это случилось у вас, то посмотрите страничку LFS Wiki на http://wiki.linuxfromscratch.org/, возможно, мы уже нашли способ ее решения. Если мы уже знаем о ней, то вам не стоит беспокоится.


О тестировании

Многие из пакетов поддерживают тестирование. Запуск его для только что собранного пакета будет хорошей идеей, так как можно будет проверить корректность компиляции. Тестирование содержит несколько тестов для проверки функциональности пакета. Это в какой-то мере может гарантировать полное отсутствие ошибок (багов) в программе.

Некоторые тестирования более важны. чем другие. К примеру, тестирование пакетов с основными средствами -- GCC, Binutils и Glibc (библиотека C) -- которые играют решающую роль для общей функциональности системы. Но учтите, что тестирование GCC и Glibc может занять весьма продолжительное время, особенно на медленном оборудовании.

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

Примечание: Общей проблемой при запуске тестов для Binutils и GCC является запуск вне pseudo терминала (PTY, для краткоти). Симптомом ее является большое количество неудачных тестов. Это может происходить по многим причинам. Наиболее распространенная - ваша основная система не имеет корректно установленной файловой системы devpts. Мы более подробно опишем это в Главе 5.


Монтирование нового раздела

Теперь, когда мы создали файловую систему, нам надо получить доступ к ее разделу. Для этого нам необходимо примонтировать его и выбрать точку монтирования. В этой книге подразумевается, что файловая система монтирована на /mnt/lfs, но это не обязательно, поступите как вам больше нравится.

Выберите точку монтирования и свяхите ее с переменной окружения LFS, для этого запустите:

export LFS=/mnt/lfs

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

mkdir -p $LFS
mount /dev/xxx $LFS

Замените xxx на имя вашего раздела LFS.

Если вы решили использовать несколько разделов для LFS (одну для /, другую для /usr), примонтируйте их следующим образом:

mkdir -p $LFS
mount /dev/xxx $LFS
mkdir $LFS/usr
mount /dev/yyy $LFS/usr

Само собой, вам надо заменить xxx и yyy на соответствующие имена разделов.

Вам также надо убедится, что новый раздел не примонтировался с ограничениями доступа (такие опции как nosuid, nodev или noatime). Вы можете запустить команду mount без параметров для того, чтобы увидеть с какими опциями примонтировался наш раздел. Если вы увидите nosuid, nodev или noatime, вам надо будет перемонтировать раздел снова.

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


Вступление

В этой главе мы подготовим раздел для нашей новой LFS-системы. Мы создадим раздел, установим файловую систему и примонтируем ее.


Создание файловой системы на новом разделе

Теперь у нас есть пустой раздел и нам надо создать на нем файловую систему. Наиболее используемой системой в Linux является second extended file system (ext2), но современные высококачественные жесткие диски делают более популярными журналируемые файловые системы. Здась мы создадим файловую системы ext2, но инструкции по установке других файловых систем можно найти на http://www.linuxfromscratch.org/blfs/view/stable/postlfs/filesystems.html.

Для создания файловой системы ext2 в разделе LFS необходимо выполнить:

mke2fs /dev/xxx

Замените xxx на имя вашего раздела LFS (что-то типа hda5).

Если вы создали новый своп-раздел, то вам необходимо инициализировать и его запуском:

mkswap /dev/yyy

Замените yyy на имя вашего своп-раздела.


Создание нового раздела

Для сборки новой Linux системы нам будет нужно некоторое место: пустой раздел диска. Если у вас дифицит со свободным местом, то вы можете, в принципе, собрать LFS на том же разделе, где установлен ваш нынешний дистрибутив. . Это не рекомендуется для первой установки LFS, но если у вас мало свободного места на диске и вы очень смелый, то посмотрите справку на http://www.linuxfromscratch.org/hints/downloads/files/lfs_next_to_existing_systems.txt.

Для минимальной системы нам понадобится раздел около 1.2 GB. Это позволит сохранить все исходники и архивы и собрать все пакеты. Но если вы хотите установить LFS в качестве основной Linux системы, то вам, видимо, понадобятся дополнительные программы и надо будет больше места, возможно около 2 или 3 GB.

Для того, чтобы вам всегда хватало памяти RAM, неплохо бы было использовать небольшой раздел диска для свопа (swap space) -- это место будет использоваться ядром для сохранения редко используемых данных из памяти для увеличения объема доступной памяти за счет этого раздела. Своп может быть одним для всех ваших систем: LFS и основной, так что вам не надо создавать второй своп-раздел, если у вас уже есть один.

Программы для оперирования разделами, такие как cfdisk или fdisk, запускаются с именем диска, на котором будет производится изменение. в кочестве параметра -- к примеру, /dev/hda для главного IDE диска. Создайте Linux native и своп разделы в случае надобности. Пожалуйста, изучите мануалы по cfdisk или fdisk, если вы не знаете, как использовать эти программы.

Запомните расположение вашего нового раздела -- что-то наподобие hda5. Эта книга ссылается на этот раздел как на раздел LFS. Если у вас есть своп-раздел, то запоните и его расположение. Оно нам понадобится для файла /etc/fstab.


Глава 3. Подготовка нового раздела

Содержание
Вступление
Создание нового раздела
Создание файловой системы на новом разделе
Монтирование нового раздела

Все пакеты

Скачайте или получите другим способом следующие пакеты:


Autoconf (2.57) - 792 KB:
http://freshmeat.net/projects/autoconf/

Automake (1.7.6) - 545 KB:
http://freshmeat.net/projects/automake/

Bash (2.05b) - 1,910 KB:
http://freshmeat.net/projects/gnubash/

Binutils (2.14) - 10,666 KB:
http://freshmeat.net/projects/binutils/

Bison (1.875) - 796 KB:
http://freshmeat.net/projects/bison/

Bzip2 (1.0.2) - 650 KB:
http://freshmeat.net/projects/bzip2/

Coreutils (5.0) - 3,860 KB:
http://freshmeat.net/projects/coreutils/

DejaGnu (1.4.3) - 1,775 KB:
http://freshmeat.net/projects/dejagnu/

Diffutils (2.8.1) - 762 KB:
http://freshmeat.net/projects/diffutils/

E2fsprogs (1.34) - 3,003 KB:
http://freshmeat.net/projects/e2fsprogs/

Ed (0.2) - 182 KB:
http://freshmeat.net/projects/ed/

Expect (5.39.0) - 508 KB:
http://freshmeat.net/projects/expect/

File (4.04) - 338 KB: (*) See Note Below
http://freshmeat.net/projects/file/

Findutils (4.1.20) - 760 KB:
http://freshmeat.net/projects/findutils/

Flex (2.5.4a) - 372 KB:
ftp://ftp.gnu.org/gnu/non-gnu/flex/

Gawk (3.1.3) - 1,596 KB:
http://freshmeat.net/projects/gnuawk/

GCC (2.95.3) - 9,618 KB:
http://freshmeat.net/projects/gcc/

GCC-core (3.3.1) - 10,969 KB:
http://freshmeat.net/projects/gcc/

GCC-g++ (3.3.1) - 2,017 KB:
http://freshmeat.net/projects/gcc/

GCC-testsuite (3.3.1) - 1,033 KB:
http://freshmeat.net/projects/gcc/

Gettext (0.12.1) - 5,593 KB:
http://freshmeat.net/projects/gettext/

Glibc (2.3.2) - 13,064 KB:
http://freshmeat.net/projects/glibc/

Glibc-linuxthreads (2.3.2) - 211 KB:
http://freshmeat.net/projects/glibc/

Grep (2.5.1) - 545 KB:
http://freshmeat.net/projects/grep/

Groff (1.19) - 2,360 KB:
http://freshmeat.net/projects/groff/

Grub (0.93) - 870 KB:
ftp://alpha.gnu.org/pub/gnu/grub/

Gzip (1.3.5) - 324 KB:
ftp://alpha.gnu.org/gnu/gzip/

Inetutils (1.4.2) - 1,019 KB:
http://freshmeat.net/projects/inetutils/

Kbd (1.08) - 801 KB:
http://freshmeat.net/projects/kbd/

Less (381) - 259 KB:
http://freshmeat.net/projects/less/

LFS-Bootscripts (1.12) - 25 KB:
http://downloads.linuxfromscratch.org/lfs-bootscripts-1.12.tar.bz2

Lfs-Utils (0.3) - 221 KB:
http://www.linuxfromscratch.org/~winkie/downloads/lfs-utils/

Libtool (1.5) - 2,751 KB:
http://freshmeat.net/projects/libtool/

Linux (2.4.22) - 28,837 KB:
http://freshmeat.net/projects/linux/

M4 (1.4) - 310 KB:
http://freshmeat.net/projects/gnum4/

Make (3.80) - 899 KB:
http://freshmeat.net/projects/gnumake

MAKEDEV (1.7) - 8 KB:
http://downloads.linuxfromscratch.org/MAKEDEV-1.7.bz2

Man (1.5m2) - 196 KB:
http://freshmeat.net/projects/man/

Man-pages (1.60) - 627 KB:
http://freshmeat.net/projects/man-pages/

Modutils (2.4.25) - 215 KB:
http://freshmeat.net/projects/modutils/

Ncurses (5.3) - 2,019 KB:
http://freshmeat.net/projects/ncurses/

Net-tools (1.60) - 194 KB:
http://freshmeat.net/projects/net-tools/

Patch (2.5.4) - 182 KB:
http://freshmeat.net/projects/patch/

Perl (5.8.0) - 10,765 KB:
http://freshmeat.net/projects/perl/

Procinfo (18) - 24 KB:
http://freshmeat.net/projects/procinfo/

Procps (3.1.11) - 242 KB:
http://freshmeat.net/projects/procps/

Psmisc (21.3) - 259 KB:
http://freshmeat.net/projects/psmisc/

Sed (4.0.7) - 678 KB:
http://freshmeat.net/projects/sed/

Shadow (4.0.3) - 760 KB:
http://freshmeat.net/projects/shadow/

Sysklogd (1.4.1) - 80 KB:
http://freshmeat.net/projects/sysklogd/

Sysvinit (2.85) - 91 KB:
http://freshmeat.net/projects/sysvinit/

Tar (1.13.25) - 1,281 KB:
ftp://alpha.gnu.org/gnu/tar/

Tcl (8.4.4) - 3,292 KB:
http://freshmeat.net/projects/tcltk/

Texinfo (4.6) - 1,317 KB:
http://freshmeat.net/projects/texinfo/

Util-linux (2.12) - 1,814 KB:
http://freshmeat.net/projects/util-linux/

Vim (6.2) - 3,193 KB:
http://freshmeat.net/projects/vim/

Zlib (1.1.4) - 144 KB:
http://freshmeat.net/projects/zlib/

Общий размер пакетов: 134 MB

Примечание: Файл (4.04) может быть недоступен когда вы это читаете. На главные местах для скачивания удаляют старые версии пакетов. Пожалуйста, посмотрите Приложение A для получения информации об альтернативных адресах.


Вступление

Дальше будет приведен список пакетов которые вам надо будет скачать для сборки простейшей Linux системы. Указанные версии являются версиями, о которых точно известно, что они работают, и эта книга базируется на них. Если вы не являетесь опытным установщиком LFS, мы строго рекомендуем не испытывать новые версии, так как команды сборки для них могут отличаться. Также не рекомендуется использовать последние версии пакетов из-за того, что еще неизвесно какие проблемы может вызвать их установка и как они будут работать.

Все ссылки, по возможности, ссылаются на страницу проекта на http://www.freshmeat.net/. Страницы с Freshmeat дают простой доступ к официальным сайтам для скачивания (сайтам проектов), спискам рассылки, ЧАВО, спискам изменений и др.

Мы не можем гарантировать, что эти адреса для скачивания будут все время доступны. В случае отсутствия доступа по ссылке в этой книге, попробуйте поискать в google. Если это не решит проблемы, вы можете проконсультироваться на странице errata этой книги по адресу http://linuxfromscratch.org/lfs/print/ или, что лучше, попробовать скачать пакеты по ссылкам из списка на http://linuxfromscratch.org/lfs/packages.html.

Вам надо сохранить скачанные пакеты и патчи так, чтобы они были доступны из точки сборки. Вам также будет нужна директория для распаковки исходников и их сборки. В книге мы используем директорию $LFS/sources как место для записи тарболов и патчей и как рабочую директорию. Это позволяет сделать их доступными из раздела LFS на всем протяжении процесса сборки системы.

Таким образом вам надо выполнить (с правами root) следующую команду перед скачиванием:

mkdir $LFS/sources

И сделать эту директорию доступной для записи вашим нормальным пользователем (если вы не собираетеси скачивать из под root'а) командой:

chmod a+wt $LFS/sources

Глава 4. Материалы: Пакеты и патчи

Содержание
Вступление
Все пакеты
Необходимые патчи

Необходимые патчи

Помимо всех пакетов вам будут нужны некоторые патчи. Они корректируют некоторые ошибки в пакетах, которые были обнаружены, или улучшают вункциональность. Вам будут нужны:


Bash Patch - 7 KB:
http://www.linuxfromscratch.org/patches/lfs/5.0/bash-2.05b-2.patch

Bison Attribute Patch - 2 KB:
http://www.linuxfromscratch.org/patches/lfs/5.0/bison-1.875-attribute.patch

Coreutils Hostname Patch - 1 KB:
http://www.linuxfromscratch.org/patches/lfs/5.0/coreutils-5.0-hostname-2.patch

Coreutils Uname Patch - 1 KB:
http://www.linuxfromscratch.org/patches/lfs/5.0/coreutils-5.0-uname.patch

Ed Mkstemp Patch - 1 KB:
http://www.linuxfromscratch.org/patches/lfs/5.0/ed-0.2-mkstemp.patch

Expect Spawn Patch - 6 KB:
http://www.linuxfromscratch.org/patches/lfs/5.0/expect-5.39.0-spawn.patch

Gawk Libexecdir Patch - 1 KB:
http://www.linuxfromscratch.org/patches/lfs/5.0/gawk-3.1.3-libexecdir.patch

GCC No-Fixincludes Patch - 1 KB:
http://www.linuxfromscratch.org/patches/lfs/5.0/gcc-3.3.1-no_fixincludes-2.patch

GCC Specs Patch - 10 KB:
http://www.linuxfromscratch.org/patches/lfs/5.0/gcc-3.3.1-specs-2.patch

GCC Suppress-Libiberty Patch - 1 KB:
http://www.linuxfromscratch.org/patches/lfs/5.0/gcc-3.3.1-suppress-libiberty.patch

GCC-2 Patch - 16 KB:
http://www.linuxfromscratch.org/patches/lfs/5.0/gcc-2.95.3-2.patch

GCC-2 No-Fixincludes Patch - 1 KB:
http://www.linuxfromscratch.org/patches/lfs/5.0/gcc-2.95.3-no-fixinc.patch

GCC-2 Return-Type Patch - 1 KB:
http://www.linuxfromscratch.org/patches/lfs/5.0/gcc-2.95.3-returntype-fix.patch

Glibc Sscanf Patch - 2 KB:
http://www.linuxfromscratch.org/patches/lfs/5.0/glibc-2.3.2-sscanf-1.patch

Grub Gcc33 Patch - 1 KB:
http://www.linuxfromscratch.org/patches/lfs/5.0/grub-0.93-gcc33-1.patch

Kbd More-Programs Patch - 1 KB:
http://www.linuxfromscratch.org/patches/lfs/5.0/kbd-1.08-more-programs.patch

Man 80-Columns Patch - 1 KB:
http://www.linuxfromscratch.org/patches/lfs/5.0/man-1.5m2-80cols.patch

Man Manpath Patch - 1 KB:
http://www.linuxfromscratch.org/patches/lfs/5.0/man-1.5m2-manpath.patch

Man Pager Patch - 1 KB:
http://www.linuxfromscratch.org/patches/lfs/5.0/man-1.5m2-pager.patch

Ncurses Etip Patch - 1 KB:
http://www.linuxfromscratch.org/patches/lfs/5.0/ncurses-5.3-etip-2.patch

Ncurses Vsscanf Patch - 1 KB:
http://www.linuxfromscratch.org/patches/lfs/5.0/ncurses-5.3-vsscanf.patch

Net-tools Mii-Tool-Gcc33 Patch - 2 KB:
http://www.linuxfromscratch.org/patches/lfs/5.0/net-tools-1.60-miitool-gcc33-1.patch

Perl Libc Patch - 1 KB:
http://www.linuxfromscratch.org/patches/lfs/5.0/perl-5.8.0-libc-3.patch

Procps Locale Patch - 1 KB:
http://www.linuxfromscratch.org/patches/lfs/5.0/procps-3.1.11-locale-fix.patch

Shadow Newgrp Patch - 1 KB:
http://www.linuxfromscratch.org/patches/lfs/5.0/shadow-4.0.3-newgrp-fix.patch 

Zlib Vsnprintf Patch - 10 KB:
http://www.linuxfromscratch.org/patches/lfs/5.0/zlib-1.1.4-vsnprintf.patch

Кроме необходимых патчей есть еще дополнительные, которые были созданы сообществом LFS. Большая часть из них устраняет мелкие проблемы или добавляет функциональности не доступной по умолчанию. При желании вы можете их скачать спо ссылкам в базе данных патчей LFS на http://www.linuxfromscratch.org/patches/ и выбрать любые дополнительные патчи для использования.


Установка 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

Установка 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=/tools

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

make 

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

make check

Теперь установим пакет и документацию к нему:

make install

Добавление пользователя lfs

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

useradd -s /bin/bash -m lfs
passwd lfs

Чтобы новый пользователь lfs получил полный доступ к директории $LFS/tools изменим ее владельца:

chown lfs $LFS/tools

Если вы создали отдельную директорию для работы, смените также и ее владельца на lfs:

chown lfs $LFS/sources

Теперь, войдем в систему как пользователь lfs. Это можно сделать через виртуальную консоль, через менеджер экрана или через команду:

su - lfs

Инструкция "-" команды su запустит новый интерпретатор командной строки.


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

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

Описание Ncurses

Пакет Ncurses содержит библиотеки для расширения возможностей текстового интерфейса, включай панели и меню.

Устанавливаемые программы: captoinfo (link to tic), clear, infocmp, infotocap (link to tic), reset (link to tset), tack, tic, toe, tput и tset

Устанавливаемые библиотеки: libcurses.[a,so] (link to 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=/tools --with-shared \
--without-debug --without-ada --enable-overwrite

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

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

make 

Теперь установим пакет и документацию:

make install

Установка 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=/tools \
--disable-perl-regexp --with-included-regex

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

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

make 

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

make check

Теперь установим пакет и документацию к нему:

make install

Сжатие

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

strip --strip-unneeded /tools/{,s}bin/*
strip --strip-debug /tools/lib/*

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

Ни в коем случае  не используйте параметр --strip-unneeded для библиотек -- они будут испорчены и вам придеться собирать их все заново вместе с Glibc.

Для освобождения еще пары мегабайт, вы можете убрать  всю документацию:

rm -rf /tools/{,share/}{doc,info,man}

Вам понадобится около 850 MB свободного места на вашей системе LFS для для сборки и установки Glibc на следующем шаге. Если вы сможете собрать и установить Glibc, то вы сможете собрать и установить все остальное.


Создание директории $LFS/tools

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

Помимо этого нам надо отделить имя этой директории от остальных. Для этого мы используем название "tools", при желаниии вы можете использовать другие названия, например "tools_for_lfs".

Создайте директорию:

mkdir $LFS/tools

Теперь нам надо создать ссылку /tools на новую директорию в основной системе:

ln -s $LFS/tools /

Эта ссылка нам нужна потому, что все средства из этой главы будут собираться с префиксом /tools, и они же нам понадобятся в следующей главе (когда мы с помощью chroot войдем в новый раздел).

Замечание: Изучите эти команды внимательно. Это может показаться странным на первый взгляд. Но команда ln имеет множество различных вариантов синтаксиса, и вы должны изучить man-страницу по ln прежде чем сообщать о том, что вы считаете, что обнаружили ошибку.


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

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

Описание Bzip2

Bzip2 является блочным файловым архиватором (block-sorting file compressor), который сжимает, как правило, лучше традиционного gzip.

Устанавливаемые программы: bunzip2 (link to bzip2), bzcat (link to bzip2), bzcmp, bzdiff, bzegrep, bzfgrep, bzgrep, bzip2, bzip2recover, bzless и bzmore

Устанавливаемые библиотеки: libbz2.a, libbz2.so (link to libbz2.so.1.0), libbz2.so.1.0 (link to libbz2.so.1.0.2) и libbz2.so.1.0.2

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

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

Установка Bzip2

Пакет Bzip2 не содержит скрипта configure. Он компилируется и устанавливается командой:

make PREFIX=/tools install

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

Ожидаемое сремя сборки:           0.2 SBU
Ожидаемое место на диске: 16 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=/tools

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

make 

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

make check

Теперь установим пакет и документацию:

make install

Технические моменты

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

Основной целью Главы 5 является подготовка окружения для входа через chroot для создания полноценной системы в Главе 6. По ходу дела мы соберем, используя основную систему, самодостаточные средства. Это будет сделано для обеспечения минимального риска и максимальной независимости одновременно. Другими словами, мы соберем инструменты для сборки системы.

Важно: Перед дальнейшей работой вы должны знать название вашей платформы, которое также называется target triplet. В некоторых случаях target triplet может быть, к примеру: i686-pc-linux-gnu. Простейшим способом определения вашего target triplet является запуск скрипта config.guess, который содержится во многих пакетах. Распакуйтетарбол с исходниками Binutils, запустите скрипт ./config.guess и запомните вывод.

Вам также необходимо знать имя динамичаского компоновщика для вашей платформы, его также называют динимическим загрузчиком, не спутайте его со стандартным компоновщиком ld из Binutils. Динамический компоновщик является частью Glibc и служит для поиска и загрузки библиотек, в которых нуждается программа, подготовки программы к запуску и ее запуска. Как правило, динамический компоновщик называется ld-linux.so.2. На некоторых не очень распространенных платформах он называется ld.so.1, а на некоторыхand 64-ьитных платформах - по другому. Вы можете определить имя динамического компоновщика для вашей платформы, заглянув в директорию /lib вашей основной системы. Безошибочным способом проверки случайной библиотеки на вашей основной системе является запуск: 'readelf -l <name of binary> | grep interpreter' и просмотр вывода.

Некоторые технические моменты которые позволяют методам сборки из Главы 5 работать:

Binutils устанавливаются первыми потому, что GCC и Glibc выполняют тестирование ассемблера и компоновщика во время запуска ./configure для определения того, какие настройки программного обеспечения выбраны или отключены. Это очень важно при перфой реализации. Неверно сконфигурированые GCC и Glibc могут испортить все сборку средств и дистрибутив будет с ошибками. Благодаря тестированию мы можем опрделить это своевременно.

Binutils устанавливают ассемблер и компоновщик в два места: /tools/bin и /tools/$TARGET_TRIPLET/bin. Точнее, средства в одной из директорий являются шесткими ссылками на другие. Очень важным для компоновщика является порядок поиска библиотек. Точную информацию о нем можно получить от ld указав параметр --verbose. К примеру: 'ld --verbose | grep SEARCH' покажет текущие пути поиска и их порядок. Вы можете увидеть, какие файлы скомпонованы с помощью ld при компиляции программы-пустышки и используя переключатель --verbose. К примеру: 'gcc dummy.c -Wl,--verbose 2>&1 | grep succeeded' какие файлы были открыты удачно в процессе компоновки.

Следующим пакетом мы установим GCC и в процессе работы ./configure вы увидите, например:

checking what assembler to use... /tools/i686-pc-linux-gnu/bin/as
checking what linker to use... /tools/i686-pc-linux-gnu/bin/ld

Это важно по причинам, описаным выше. И это также показывает, что скрипт конфигурации GCC не ищет в директориях $PATH какие средства использовать. Тем не менее, текущий процесс gcc, не использует эти пути поиска. Вы можете определить, какой стандартный комполновщик gcc используется, запуском: 'gcc -print-prog-name=ld'. Детальная информация получается от gcc добавлением параметра -v при компиляции. Например: 'gcc -v dummy.c' покажет полную информацию о препроцессоре, компиляторе и ассемблере, включая пути поиска gcc и другую информацию.

Следующим устанавливаемым пакетом будет Glibc. Наиболее важными зависимостями сборки Glibc являются компилятор, средства для бинарных файлов и заголовки ядра. TКомпилятор не представляет проблемы, Glibc всегда использует gcc из директории $PATH. Бинарные средства и заголовки ядра могут привести к некоторым проблемам. Поэтому мы не рискуем и используем переключатели конфигурации для правильного выбора. После запуска ./configure вы можете проверить содержимое файла config.make в директории glibc-build для получения информации. Вы быдете использовать некотоые интересные параметры, такие как CC="gcc -B/tools/bin/" которые определяют используемые средства, а также флаги -nostdinc и -isystem для контроля за путем поиска для компилятора. Эти параметры показывают важный аспект пакета Glibc: он не обязательно полагается на средства по умолчанию.

После установки Glibc, мы создадим некоторые установки для того, чтобы убедиться что пути для поиска содержат только директории в /tools . Мы установим откорректированный ld, в котором будет жестко указан путь поиска в /tools/lib. Задем мы исправим specs-файл gcc для указания на наш новый динамический компоновщик в /tools/lib. Этот последний шаг жизненно важен для нашего процесса. Как указано выше, путь к динамическому компоновщику будет жестко вшит в каждый исполняемый файл ELF. Вы можете убедиться в этов, запустив 'readelf -l <name of binary> | grep interpreter'. Благодаря исправлению specs-файла gcc, мы убедимся, что все программы из оставшейся части Главы 5 будут использовать новый динамический комполовщик из /tools/lib.

Необходимость использования нового динамического компоновщика также является причиной, по которой мы применяем Specs патч на втором этапе сборки GCC. Опускание этого патча приведет к тому, что программы GCC будут использовать системный динамический компоновщик из директории /lib основной системы, а ето будет означать зависимость от основной системы.

В ходе второго шага сборки Binutils мы будем использовать переключатель --with-lib-path для контроля путя поиска библиотек для ld. С этого момента все наши средства будут самодостаточными. Остальные пакеты из Главы 5 будут собраны с новым Glibc из /tools.

После входа в окружение chroot в Главе 6, мы первым делео установим Glibc по вышеописаным причинам. Теперь Glibc будет установлен в /usr, и мы будем использовать средства по умолчанию для сборки остальных пакетов из Главы 6 для LFS системы.

О статической компоновке

Многие программы выполняют, помимо своей основной задачи, и многие другие операции. Это включает распределение памяти, поиск директорий, четение и запись файлов, манипуляции со строками, использование шаблонов, арифметические операции и многое другое. Вместо того, чтобы включать все это в программу, GNU система поддерживает простые функции в библиотеках. Самой главной из них является для любой Linux системы является Glibc.

Есть два варианта использования библиотечных функций: статически и динамически. Когда программа скомпонована статически, код используемых функций включается в программу и она становится более громоздкой. Когда же программа скомпонована динамически, в программу включаются только ссылка на динамический компоновщик, имя библиотеки и имя функции, в результате мы получаем более маленький исполняемый файл. (Есть еще третий путь - использование программного интерфейса для динамического компоновщика. Смотрите мануал по dlopen для более полной информации.)

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

Если динамическая компоновка настолько лучше, то почему мы ее не используем, а статически компонуем первые два пакета в этой главе? Есть трройственная причина для этого: историческая, образовательная и техническая. Историческая, потому что простейшая версия LFS статически компонует все программы из этой главы. Образовательная, потому что надо знать отличие между статической и динамической компоновкой. Техническая, потому что мы получаем элемент независимости от основной системы, наши программы не должны от нее зависеть, они должны иметь возможность работать самостоятельно. Таким образом, если мы хотим построить LFS систему, нам необходимо отказаться от динамической компоновки первых двух пакетов.


Установка Expect-5.39.0

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

Описание Expect

Пакет Expect содержит программы, обеспечивающую программируемый диалог с другими интерактивными программами.

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

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

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

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

Установка Expect

Для начала применим патч:

patch -Np1 -i ../expect-5.39.0-spawn.patch

Этот патч устранит неисправность в Expect который выдает неверный результат при тестировании GCC.

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

./configure --prefix=/tools --with-tcl=/tools/lib --with-x=no

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

Соберем пакет:

make

Этот пакет поддерживает тестирование для проверки корректности сборки. Тем не менее, тестирование Expect здесь, в Главе Chapter 5, известно своими ошибками из-за влияния основной системы. Таким образом отрицательные результаты тестов не будут здесь сюрпризом и не являются критичными. Если вы захотите запустить тестирование, воспользуйтесь следующей командой:

make test

И установим:

make SCRIPTS="" install

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

Теперь вы можете удалить директории с исходниками Tcl и Expect.


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

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

Описание Perl

Пакет Perl содержит perl, Языка Практичной Обработки и Отчетов (Practical Extraction and Report Language). Perl собрал в себе некоторые лучшие свойства C, sed, awk и sh iв одном мощном языке.

Устанавливаемые программы: 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

Для начала применим патч для библиотеки C:

patch -Np1 -i ../perl-5.8.0-libc-3.patch

И убедимся, что некоторые статические расширения будут собраны:

chmod u+w hints/linux.sh
echo 'static_ext="IO re Fcntl"' >> hints/linux.sh

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

./configure.gnu --prefix=/tools

Скомпилируем только необходимые средства:

make perl utilities

Теперь скопируем эти средства и их библиотеки:

cp perl pod/pod2man /tools/bin
mkdir -p /tools/lib/perl5/5.8.0
cp -R lib/* /tools/lib/perl5/5.8.0

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

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

Описание Gawk

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

Устанавливаемые программы: awk (link to 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

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

./configure --prefix=/tools

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

make

Этот пакет поддерживает тестирование корректности сборуи. Вы можете запустить его командой:

make check

И установим его:

make install

Установка 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=/tools

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

make 

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

make check

Теперь установим пакет и документацию:

make install

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

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

Описание Gzip

Пакет Gzip содержит программы для сжатия и распаковки файлов с использованием кодирования Lempel-Ziv (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=/tools

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

make

И установим его:

make install

"Интеграция" Glibc

Теперь, когда временные библиотеки C были установлены, мы хотим чтобы все оставшиеся в этой главе пакеты компоновались с использованием уже установленных библиотек. Чтобы обеспечить это, мы должны настроить specs файл компилятора.

Для начала установим откорректированый компоновщик запуском следующей команды в директории binutils-build:

make -C ld install

Мы установили откорректированый компоновщик вместо того, который был установлен на первом шаге сборки Binutils. С этого момента все пакеты быдут собраны только с использованием библиотек из /tools/lib.

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

Теперь, когда установлен откорректированый компоновщик, вы можете удалить директории с исходниками и сборкой Binutils.

Следующим нашим действием будет исправление specs-файла GCC для задания расположения нашего компоновщика. Просто выполните следующую команду:

SPECFILE=/tools/lib/gcc-lib/*/*/specs &&
sed -e 's@ /lib/ld-linux.so.2@ /tools/lib/ld-linux.so.2@g' \
$SPECFILE > tempspecfile &&
mv -f tempspecfile $SPECFILE &&
unset SPECFILE

Мы рекомендуем просто скопировать и вставить вышеуказанное вместо того, чтобы просто вводить. Или, при желании, вы можете просто отредактировать specs-файл вручную: замените встречающиеся строки "/lib/ld-linux.so.2" на "/tools/lib/ld-linux.so.2".

Важно: Если вы работаете на платформе, где имя динамического компоновщика отлично от ld-linux.so.2, вы должны заменить ld-linux.so.2 на имя динамического компоновщика вашей платформы в вышеуказанных командах. При необходимости вернитесь к разделу "Технические моменты".

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

rm -f /tools/lib/gcc-lib/*/*/include/{pthread.h,bits/sigthread.h}

 

Внимание

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

echo 'main(){}' > dummy.c
gcc dummy.c
readelf -l a.out | grep ': /tools'

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

[Requesting program interpreter: /tools/lib/ld-linux.so.2]

Если эта надпись вообще не появилась или появилась другая, то чтото сильно не так. Вам надо исследовать и повторить все пройденые шаги, чтобы найти в чем проблема и устранить ее. Точки для возврата после этого места уже не будет. Как правило, что-то не так бывает с вышеописаной правкой specs-фала. Убедитесь, что /tools/lib содержит префикс вашего динамического компоновщика. Само собой, если вы работаете на платформе с названием динамического компоновщика, отличным от ld-linux.so.2, вывод будет несколько иным.

Если все прошло нормально, удалим тестовые файлы:

rm dummy.c a.out

 

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


Вступление

В этой главе мы скомпилируем и установим минимальную систему Linux. Эта система будет использоваться для построения конечной LFS системы в следующей главе.

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

Файлы, компилируемые в этой главе, устанавливаются в директорию $LFS/tools для отделения их от файлов, устанавливаемых в следующей главе. Эти пакеты просто временные, мы не будем засорять ими нашу конечную LFS систему.

Ключевым для понимания работы Linux системы является знание того, какие пакеты используются и для чего они нужны системе. Из этих соображений мы даем краткие содержание и описание пакетов перед инструкциями по их установке. Для кораткого описания програм, входящих в пакет, обратитесь к Приложению A.

Инструкции по сборке подразумевают, что вы используете интерпритатор командной строки bash. Также считается, что вы уже распаковали исходники перешли с помощью команды cd в директорию с ними перед использованием команд.

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

В процессе установки многих пакетов вы увидите сообщения о предупреждениях (warning) на экране. Это нормально и вы можете не обращать на них внимания. Все что они говорят  - внимание, есть неточность, но не ошибка, в коде C или C++. Это из-за того, что меняются стандарты на язык C, а некоторые пакеты написаны в соответствии со старыми стандартами, а это не представляет проблемы для компилятора.

Если не сказано обратное, то вы можете спокойно удалить директории с исходниками и файлами сборки пакетов - в целях экономии дискового пространства.

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

echo $LFS

Вывод должен указывать на точку монтирования раздела LFS, мы используем /mnt/lfs в качестве примера.


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

Ожидаемое время сборки:           0.1 SBU
Ожидаемое место на диске: 8 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.

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

Util-linux не может использовать заголовки и библиотеки из директории /tools. Это исправляется с помощью исправления скрипта конфигурации:

cp configure configure.backup
sed "s@/usr/include@/tools/include@g" configure.backup > configure

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

./configure

Скомпилируем поддержку некоторых шаблонов:

make -C lib

И, поскольку нам нужны только некоторые из утилит из этого пакета, соберем только их:

make -C mount  mount umount
make -C text-utils more

Теперь скопируем эти файлы в директорию временных средств:

cp mount/{,u}mount text-utils/more /tools/bin

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

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

Описание Tar

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

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

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

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

Установка Tar

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

./configure --prefix=/tools

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

make 

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

make check

Теперь установим пакет и документацию:

make install

Глава 5. Построение временной системы

Содержание
Вступление
Технические моменты
Создание директории $LFS/tools
Добавление пользователя lfs
Установка окружения
Установка Binutils-2.14 - Шаг 1
Установка GCC-3.3.1 - Шаг 1
Установка заголовков Linux-2.4.22
Установка Glibc-2.3.2
"Взгляд в" Glibc
Установка Tcl-8.4.4
Установка Expect-5.39.0
Установка DejaGnu-1.4.3
Установка GCC-3.3.1 - Шаг 2
Установка Binutils-2.14 - Шаг 2
Установка Gawk-3.1.3
Установка Coreutils-5.0
Установка Bzip2-1.0.2
Установка Gzip-1.3.5
Установка Diffutils-2.8.1
Установка Findutils-4.1.20
Установка Make-3.80
Установка Grep-2.5.1
Установка Sed-4.0.7
Установка Gettext-0.12.1
Установка Ncurses-5.3
Установка Patch-2.5.4
Установка Tar-1.13.25
Установка Texinfo-4.6
Установка Bash-2.05b
Установка Util-linux-2.12
Установка Perl-5.8.0
Урезание

Установка Tcl-8.4.4

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

Описание Tcl

Пакет Tcl содержит Tool Command Language (Язык Команд Средств).

Устанавливаемые программы: tclsh (link to tclsh8.4), tclsh8.4

Устанавливаемые библиотеки: libtcl8.4.so

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

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

Установка Tcl

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

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

cd unix
./configure --prefix=/tools

Соберем пакет:

make

Этот пакет поддерживает тесты для определения корректности сборки. Тем не менее, тестирование Tcl в этой главе может не завершиться успещно из-за зависимостей от основной системы, которые полностью не понятны. Таким образом, неудачное завершение тестирования здесь не будет сюрпризом и не является критичным. Если вы решили протестировать Tcl, то запустите команду:

TZ=UTC make test

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

Иногда, тестирование пакета не проходит. Вы модете проконсультироваться на LFS Wiki по адресу http://wiki.linuxfromscratch.org/ для проверки того, какие из ошибок нормальны. Это относится ко всем тестированиям в этой книге.

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

make install

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

Создадим необходимую символическую ссылку:

ln -s tclsh8.4 /tools/bin/tclsh

Установка Binutils-2.14 - Шаг 1

Ожидаемое время сборки:           1.0 SBU
Ожидаемое место на диске: 194 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

Важно чтобы Binutils был первым из пакетов, которые мы установим, потому что Glibc и GCC проводят некоторые тесты на доступные компоновщик и ассемблер для определения доступных опций.

Замечание: Хотя Binutils является важным пакетом, мы не собираемся запускать тестирование на этом простом шаге. Во-первых тестирование пока неуместно, а во-вторых, программы из этого этапа будут заново установлены на втором.

Этот пакет известен своим нестабильным поведением при компиляции с измененными опциями оптимизации (включая опции -march и -mcpu). Binutils рекомендуется компилировать с настройками по умолчанию. Следовательно, если вы задали переменные такие как CFLAGS или CXXFLAGS, изменяющие уровень оптимизации по умолчанию, рекомендуется убрать их при сборке пакета binutils. Изменяя оптимизации для binutils, вы действуете на свой страх и риск.

В документации по Binutils рекомендуется собирать Binutils вне директории с исходниками, в отдельной директории для сборки:

mkdir ../binutils-build
cd ../binutils-build

Note: Если вы хотите вычислить переменную SBU, которая используется в этой книге, вам надо засечь время, которое понадобится на сборку этого пакета. Это очень просто сделать чем-то похожим на такую команду: time { ./configure ... && ... && ... && make install; }.

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

../binutils-2.14/configure \
--prefix=/tools --disable-nls

Описание используемых опций:

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

make configure-host
make LDFLAGS="-all-static"

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

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

make install

Теперь подготовим к компоновщик к последующему "встраиванию" в Glibc:

make -C ld clean
make -C ld LDFLAGS="-all-static" LIB_PATH=/tools/lib

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


Внимание

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

 


Установка Binutils-2.14 - Шаг 2

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

Переустановка Binutils

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

mkdir ../binutils-build
cd ../binutils-build

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

../binutils-2.14/configure --prefix=/tools \
--enable-shared --with-lib-path=/tools/lib

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

Перед началом сборки Binutils не забудьте сбросить значения переменных окружения с флагами оптимизации по умолчанию.

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

make 

Замечание: Здесь не обязательно запускать тестирование Binutils, так как это не настолько важно, как в Главе 6.

Протестируем результаты:

make check

К сожалению, это нет простого пути увидеть результаты теста, как в предыдущем пакете GCC. Тем не менее,  если тестирование не прошло, то это сразу будет видно. На выводе будет что-то наподобие:

make[1]: *** [check-binutils] Error 2

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

make install

Теперь подготовим Binutils к переопределению средств в следующей главе:

make -C ld clean
make -C ld LIB_PATH=/usr/lib:/lib

 

Внимание

Не удаляйте сейчас директории с исходниками и сборкой Binutils. Они будут нужны нам в следующей главе в их нынешнем виде.

 


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

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

Описание Coreutils

Пакет Coreutils содержит некоторые простые системные утилиты.

Устанавливаемые программы: 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

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

./configure --prefix=/tools

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

make

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

make RUN_EXPENSIVE_TESTS=yes check

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

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

make install

Настройка окружения

Когда вы залогинитесь как lfs, Введите следующие команды для настройки окружения:

cat > ~/.bash_profile << "EOF"

set +h
umask 022
LFS=/mnt/lfs
LC_ALL=POSIX
PATH=/tools/bin:$PATH
export LFS LC_ALL PATH
unset CC CXX CPP LD_LIBRARY_PATH LD_PRELOAD
EOF

source ~/.bash_profile

Команда set +h отключает функцию запоминания bash. Обычно это используется так: bash использует hash-таблицу для запоминания полного пути к исполняемым файлам для сокращения времени поиска и отсутствия необходимости запоминания путей этих файлов. Но мы собираемся использовать новые средства после установки. При отключении этой функции наши "интерактивные" команды (make, patch, sed, cp и другие) будут использовать наиболее новые из доступных версий программ в процессе сборки.

Установка маски для создания файлов пользователем в 022 позволит убедиться, что вновь созданые файлы и директории будут доступны для записи только владельцу, а для чтения и выполнения любому.

Переменная LFS указывает на точку монтирования, которую вы выбрали для раздела LFS.

Переменная LC_ALL контролирует локализацию некоторых программ, делает вывод их сообщений зависимым от страны. Если ваша система основана на Glibc старее версии 2.2.4, установка LC_ALL в что-то отличное от "POSIX" или "C" может создать проблемы при выходе.входе в среду chroot. Установка LC_ALL в "POSIX" (или "C", что аналогично) мы страхуемся от ошибок при использовании chroot.

Мы добавляем /tools/bin к стандартной переменной PATH для того, чтобы на этапе сборки использовались средства, которые мы уже собрали.

Переменные CC, CXX, CPP, LD_LIBRARY_PATH и LD_PRELOAD несут потенциальную опасность для средств из Главы 5. Мы обнуляем их для того, чтобы было больше шансов собрать все корректно.

Теперь мы можем приступить к сборке временных средств, используемых в следующих главах.


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

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

Описание Linux

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

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

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

Linux зависит от: Bash, Binutils, Coreutils, Findutils, GCC, Glibc, Grep, Gzip, Make, Modutils, Perl, Sed.

Установка заголовков ядра

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

Подготовимся к установке заголовков:

make mrproper

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

Создадим файл include/linux/version.h:

make include/linux/version.h

Создадим платформо-зависимую ссылку include/asm:

make symlinks

Установим платформо-зависимые файлы заголовков:

mkdir /tools/include/asm
cp include/asm/* /tools/include/asm
cp -R include/asm-generic /tools/include

Установим кросс-платформенные файлы заголовков:

cp -R include/linux /tools/include

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

touch /tools/include/linux/autoconf.h

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

Ожидаемое время сборки:           0.2 SBU
Ожидаемое место на диске: 7.6 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=/tools

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

make 

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

make check

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

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=/tools

Флаг препроцессора -D_GNU_SOURCE нужен только на платформах PowerPC. На других платформах вы можете его пропустить.

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

make 

Теперь установим пакет и документацию:

make install

Установка DejaGnu-1.4.3

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

Описание DejaGnu

Пакет DejaGnu содержит основы для тестирования других программ.

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

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

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

Установка DejaGnu

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

./configure --prefix=/tools

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

make install

Установка GCC-3.3.1 - Шаг 1

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

Описание GCC

Пакет GCC pсодержит коллекцию компилятора GNU, включая компиляторы C и C++.

Устанавливаемые программы: c++, cc (link to 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-core, нам пока не нужен компилятор C++.

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

Этот пакет известен своим нестабильным поведением при компиляции с измененными опциями оптимизации (включая опции -march и -mcpu). GCC рекомендуется компилировать с настройками по умолчанию. Следовательно, если вы задали переменные такие как CFLAGS или CXXFLAGS, изменяющие уровень оптимизации по умолчанию, рекомендуется убрать их при сборке пакета GCC. Изменяя оптимизации для GCC, вы действуете на свой страх и риск.

В документации по GCC рекомендуется собирать GCC вне директории с исходниками в отдельной директории для сборки:

mkdir ../gcc-build
cd ../gcc-build

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

../gcc-3.3.1/configure --prefix=/tools \
--with-local-prefix=/tools \
--disable-nls --enable-shared \
--enable-languages=c

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

Продолжим компиляцию пакета:

make BOOT_LDFLAGS="-static" bootstrap

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

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

make install

Под конец мы создадим ссылку /tools/bin/cc. Многие программы и скрипты используют cc вместо gcc для обеспечения переносимости программ на все Unix системы. Не у всех установлен именно компилятор GNU C. Запуск cc позволяет администратору выбирать, какой компилятор C устанавливать в систему, и мы создаем ссылку на него:

ln -sf gcc /tools/bin/cc

Установка 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=/tools

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

make

И установим его:

make install

Установка 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

Установка GCC-3.3.1 - Шаг 2

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

Переустановка GCC

Средства, необходимые для тестирования GCC и Binutils, теперь установлены (Tcl, Expect и DejaGnu). Мы можем вернуться к пересборке GCC и Binutils, соединить их с новым Glibc и правильно их протестировать. Но есть одно замечание, тестирование сильно зависит от правильного функционирования терминалов pseudo (PTY) из основной системы. На данный момент, PTY осуществляется с помощью файловой системы devpts. Вы можете быстро проверить правильность установки системы командой:

expect -c "spawn ls"

Если вы получили ответ:

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

Ваш основной дистрибутив не поддерживает операции PTY. В этом случае здесь не место запуску тестирования для GCC и Binutils и вы можете пропустить его. Вы можете проконсультироваться в LFS Wiki на http://wiki.linuxfromscratch.org/ для более подробной информации о работе с PTY.

Распакуйте все три тарбола GCC (-core, -g++ и -testsuite) в одной рабочей директории. Они распакуются в одну общую поддиректорию gcc-3.3.1/.

Для начала исправим одну проблему и создадим необходимую сборку:

patch -Np1 -i ../gcc-3.3.1-no_fixincludes-2.patch
patch -Np1 -i ../gcc-3.3.1-specs-2.patch

Первый патч отключит скрипт GCC "fixincludes". Мы расскажем об этом вкратце, не вдаваясь в подробности. При нормальных обстоятельствах скрипт GCC fixincludes сканирует вашу систему на файлы заголовков Glibc, нуждающиеся в исправлении, исправляет их и переносит их в директорию включений для GCC. После чего, в Главе 6, после установки нового Glibc, эта директория будет найдена, и в результате GCC найдет заголовки основной системы, и мы не сможем корректно использовать Glibc в системе LFS.

Последний патч изменяет расположение по умолчанию для динамического компоновщика GCC (обычно ld-linux.so.2). Он также удаляет /usr/include из пути для поиска GCC. Пропатчивание spec-файла сейчас позволит убедиться, что наш новый динамический компоновщик будет использоваться собираемым GCC. То есть, наши окончательные (и временные) бинарники будут скомпонованы с новым Glibc.

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

Создайте отдельную директорию для сборки и перейдите в нее:

mkdir ../gcc-build
cd ../gcc-build

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

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

../gcc-3.3.1/configure --prefix=/tools \
--with-local-prefix=/tools \
--enable-clocale=gnu --enable-shared \
--enable-threads=posix --enable-__cxa_atexit \
--enable-languages=c,c++

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

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

make

Здесь нет необходимости использовать цель bootstrap, так как мы компилируем этот GCC с помощью той же самой версии GCC, но установленой ранее.

Замечание: Запуск тестирования здесь не настолько важен, как в Главе 6.

Протестируем результаты:

make -k check

Флаг -k используется для того, чтобы тестирование не прекратилось после первого отрицательного результата, а проводило дальнейшие тесты. Тестирование GCC довольно исчерпывающее, и поэтому мы практически гарантировано получим пару отрицательных резыльтатов тестов. Для просмотра результатов тестирования выполните команду:

../gcc-3.3.1/contrib/test_summary | more

Вы можете сравнить ваши результаты с результатами из списка рассылки для того, чтобы найти аналогичные вашим. К примеру, посмотреть как результаты тестирования GCC-3.3.1 на i686-pc-linux-gnu можно на http://gcc.gnu.org/ml/gcc-testresults/2003-08/msg01612.html.

Проверите, чтобы в результатах были:

* 1 XPASS (unexpected pass) for g++
* 1 FAIL (unexpected failure) for g++
* 2 FAIL for gcc
* 26 XPASS's for libstdc++

Неожиданным прохождением тест для g++ обязан использованию --enable-__cxa_atexit. Но не все платформы поддерживающие  GCC поддерживают также "__cxa_atexit" в своих библиотеках C, поэтому этот тест не всегда может пройти..

26 неожиданных успешных тестов libstdc++ обязаны использованию --enable-clocale=gnu, которая корректирует выбор на Glibc-based системах версий 2.2.5 и выше. Поддержка основных локалей в библиотеке GNU C важнее, в противном случае выбирается "общая" модель (которая может быть преминима в случаях использования Newlibc, Sun-libc или других libc). Тестирование libstdc++ в случае применения "основной" модели для тестов и не всегда может пройти успешно.

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

Наконец установим пакет:

make install

Замечание: В этом месте рекомендуется повторить простой тест, описаный ранееВернитесь к части "Интеграция" Glibc и повторите проверку. Если она не удалась, видимо, вы забыли наложить вышеупомянутый патч GCC Specs.


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

Ожидаемое время сборки:           11.8 SBU
Ожидаемое место на диске: 800 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, вы должны перейти (с помощию команды cd, например) в директорию glibc-2.3.2 и распаковать Glibc-linuxthreads в этой директории, а не там где вы обычно распаковываете все исходники.

Замечание: Мы собираемся запустить тестирование для Glibc в этой главе. Это тестирование тут является менее важным, чем тестирование Glibc в Главе 6.

Этот пакет известен своим нестабильным поведением при компиляции с измененными опциями оптимизации (включая опции -march и -mcpu). Glibc рекомендуется компилировать с настройками по умолчанию. Следовательно, если вы задали переменные такие как CFLAGS или CXXFLAGS, изменяющие уровень оптимизации по умолчанию, рекомендуется убрать их при сборке пакета Glibc. Изменяя оптимизации для glibc, вы действуете на свой страх и риск.

Хотя это и безвредное сообщение, но при установке Glibc жалуется на отсутствие /tools/etc/ld.so.conf. Исправим это с помощью команд:

mkdir /tools/etc
touch /tools/etc/ld.so.conf

Также, Glibc имеет некоторые тонкие проблемы при компиляции с GCC 3.3.1. Применим следующий патч для их исправления:

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=/tools \
--disable-profile --enable-add-ons \
--with-headers=/tools/include \
--with-binutils=/tools/bin \
--without-gd

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

На этом шаге вы можете увидеть следующее предупреждение:

configure: WARNING:
*** These auxiliary programs are missing or incompatible versions: msgfmt
*** some features will be disabled.
*** Check the INSTALL file for required versions.

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

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

make

Запустим тестирование:

make check

Тестирование Glibc сильно зависит от некоторых функций вашей основной системы, в частности ядра. Также, некоторые тесты в этой главе могут взаимодействовать с окружением вашей системы. Само собой, мы не должны получить таких проблем при запуске тестирования в Главе 6. В общем, тестирование Glibc должно пройти удачно. Тем не менее. по причинам, перечисленным ниже, тестирование может закончиться неудачно. Вот список наиболее вероятных причин этого:

В общем, вам не стоит беспокоится, естли вы увидите, что тестирование Glibc не прошло. Glibc в Главе 6 будет последним из устанавливаемых и его тестирование будет более важным. Но имейте в виду. что в Главе 6 некоторые тесты могут также не пройти -- тест math, к примеру. Когда вы получите сообщение о непрохождении теста, запомните его, а затем продолжите тестирование дальше . Это можно сделать, так как скрипт тестирования запоминает пройденые тесты для возможности его продолжения после выхода из-за ошибки. Вы можете использовать эту возможность "запуска-остановки" автоматически с помощью команды make -k check. Но если вы так сделаете, проверьте логи тестирования и посмотрите общее количество и причины проваленых тестов.

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

make install

Разные страны и культуры имеют различные соглашения для коммуникаций. Эти соглашения состоят как из очень простых, таких как форматы даты и времени, так и из более сложных, таких как разговорный язык. "Интернационализация" программ GNU работает с помощью локалей (locales). Так что установим локали для Glibc:

make localedata/install-locales

Альтернативой запуску предыдущей команды является установка только определенных локалей, тех которые вам нужны. Это может быть достигнуто использованием команды localedef. Информацию об использовании этой команды можно получить из файла INSTALL в исходниках glibc-2.3.2. Тем не менее, список локалей может быть существенным для некоторых тестов, в частности, теста libstdc++ из GCC. Следующие команды, используемые вместо вышеописаной install-locales, устаноят минимальный набор локалей для успешного завершения тестирований:

mkdir -p /tools/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

Установка 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.


Установка Inetutils-1.4.2

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

СодержаниеInetutils

Пакет Inetutils содержит ряд сетевых клиентов и серверов.

Устанавливаемые программы: ftp, ping, rcp, rlogin, rsh, talk, telnet и tftp

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

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

Установка Inetutils

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

./configure --prefix=/usr --disable-syslogd \
--libexecdir=/usr/sbin --disable-logger \
--sysconfdir=/etc --localstatedir=/var \
--disable-whois --disable-servers

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

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

make

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

make install

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

mv /usr/bin/ping /bin


Перезапуск команды 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. Тем не менее мы пока не удаляем ее. Она нам еще будет нужна в конце книги.


Установка Gettext-0.12.1

Ожидаемое время сборки:           6.9 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=/usr

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

make

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

make check

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

make install


Установка 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

Настройка компонентов системы

Теперь, когда мы установили все программы, нам надо сделать некоторые настройки.

Настройка клавиатуры

Очень сильно раздражает, когда 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

Создание необходимых ссылок

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

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

Установка 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-based файл патча. Это случается довольно редко, сейчас, в основном, используются diff-based патчи.

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

Установка 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

Установка 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

Установка 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

Установка 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 к компиляции:

./configure

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

make

И установим его:

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

Установка 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

Установка 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

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

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

make install

Установка E2fsprogs-1.34

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

Описание E2fsprogs

E2fsprogs содержит ряд системных утилит для использования их с файловой системой ext2. Они также поддерживают файловую систему ext3 с поддержкой журналирования.

Устанавливаемые программы: badblocks, blkid, chattr, compile_et, debugfs, dumpe2fs, e2fsck, e2image, e2label, findfs, fsck, fsck.ext2, fsck.ext3, logsave, lsattr, mk_cmds, mke2fs, mkfs.ext2, mkfs.ext3, mklost+found, resize2fs, tune2fs и uuidgen.

Устанавливаемые библиотеки: libblkid.[a,so], libcom_err.[a,so], libe2p.[a,so], libext2fs.[a,so], libss.[a,so] и libuuid.[a,so]

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

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

Установка E2fsprogs

Рекомендуется собирать E2fsprogs вне директории с исходниками:

mkdir ../e2fsprogs-build
cd ../e2fsprogs-build

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

../e2fsprogs-1.34/configure --prefix=/usr --with-root-prefix="" \
--enable-elf-shlibs

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

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

make

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

make check

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

make install

Также установим shared-библиотеку:

make install-libs

Установка 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

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


Установка 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.


Установка 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

Установка 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


Установка 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

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

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

make

И установим его:

make install

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

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


Установка 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

Установка 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


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

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

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

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

Размер может немного варьироваться в зависимости от используемых компилятора и библиотеки C. Но размер между программами и библиотеками, собранными с отладочной информацией и без таковой может различаться в 2-5 раз.

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

Для удаления отладочных символов из бинарников (которые должны быть бинарниками форматов a.out или ELF), запустите strip --strip-debug filename. Могут использоваться шаблоны для выбора нескольких файлов (например, strip --strip-debug $LFS/tools/bin/*).

Для вашего удобства, Глава 9 включает одну простую команду для удаления всех отладочных символов изо всех программ и библиотек в вашей системе. Дополнительную информацию по оптимизации можно получить на http://www.linuxfromscratch.org/hints/downloads/files/optimization.txt.


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

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

Описание 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.


Создание директорий

Теперь нам надо создать структуру файловой системы 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 directories, но они не смогут удалять оттуда файлы других пользователей. Последнее достигается установкой "sticky bit" -- старшего бита в битовой маске 1777.

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

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


Установка 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 check

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

make install

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

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

Описание Gzip

Пакет Gzip содержит программы для сжатия и распаковки файлов с использованием Lempel-Ziv кодирования (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

Вступление

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

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

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

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


Установка 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] and libopcodes.[a,so]

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

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

Установка Binutils

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

Установка 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

Установка 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

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

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

make HAVE_SLN=yes 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, GCC, Glibc, Grep, M4, Make, Sed.

Установка Modutils

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

./configure

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

make

И установим его:

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

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


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

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

Описание Linux

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

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

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


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

Заметьте, что bash выводит "I have no name!". Это нормально, поскольку /etc/passwd еще не создан.


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

Для правильного функционирования основных программ файловые системы proc и devpts должны быть доступны из среды chroot. Файловые системы могут монтироваться несколько раз в различных точках, так что то, что они будут смонтированы и на вашей основной системе, не создаст проблем - особенно потому, что они являются виртуальными файловыми системами.

Файловая система proc является pseudo-системой с информацией о процессах, которая используется ядром для представления информации о статусе системы.

Файловая система proc монтируется в /proc запуском команды:

mount proc /proc -t proc

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

warning: can't open /etc/fstab: No such file or directory
not enough memory

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

Файловая система devpts описывается проще, она обеспечивает доступ к терминалам pseudo (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, иначе могут возникнуть определенные проблемы.


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

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

Описание M4

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

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

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

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

Установка M4

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

./configure --prefix=/usr

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

make

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

make check

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

make install

Установка 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

Установка 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

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

Содержание
Вступление
Про отладочные символы
Вход в среду chroot
Изменение владельца
Создание лиректорий
Монтирование файловых систем proc и devpts
Создание необходимых ссылок
Создание файлов passwd и group
Создание устройств (Makedev-1.7)
Установка Linux-2.4.22 headers
Установка 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
Настройка компонентов системы

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


Установка 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=/

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

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

make

And install it:

make install

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

ln -s killall /bin/pidof

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

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

Описание Autoconf

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

Устанавливаемые программы: 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


Установка 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

Установка 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

Изменение владельца

На данный момент, права на директорию /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" до того, как будет создан файл паролей.


Установка 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

Установка 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

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

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

Описание Findutils

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

Устанавливаемые программы: bigram, code, find, frcode, locate, updatedb and 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

Установка 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

Установка 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.


Установка 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

Установка 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

Переустановка средств

Теперь, когда мы установили новую библиотку 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]

Если эта надпись вообще не появилась или появилась другая, то чтото сильно не так. Вам надо исследовать и повторить все пройденые шаги, чтобы найти в чем проблема и устранить ее. Точки для возврата после этого места уже не будет. Как правило, что-то не так бывает с вышеописаной правкой specs-фала. Убедитесь, что /lib содержит префикс вашего динамического компоновщика. Само собой, если вы работаете на платформе с названием динамического компоновщика, отличным от ld-linux.so.2, вывод будет несколько иным.

Если все прошло нормально, удалим тестовые файлы:

rm dummy.c a.out

 


Установка 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, посколькуsoиспользуемый в нашей системе 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

Установка 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

Установка 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

Установка 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

Установка 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=/usr --bindir=/bin

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

make

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

make tests

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

make install

И перезапустим скомпилированую заново программу bash:

exec /bin/bash --login +h

Установка 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

Установка 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 file из директории с 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

Нужен ли мне скрипт loadkeys?

Если вы решили компилировать файл раскладки вашей клавиатуры внутри ядра в конце Главы 6, то вам, строго говоря, нет надобности запуска этого скрипта loadkeys, поскольку ядро само установит нужную раскладку для вас. Вы можете все равно запускать его, если хотите. Это может пригодиться если вы запускаете разные ядра и забыли или не хотите компилировать все ядра со встроеной раскладкой.

Если вы решили, что вам не нужен этот скрипт или просто не хотите его использовать, то удалите ссылку /etc/rc.d/rcsysinit.d/S70loadkeys.


Настройка скрипта setclock

Этот скрипт setclock считывает время с внутренних часов вашего компьютера (также известных как часы BIOS или CMOS) и конвертирует его в локальное время, используя файл /etc/localtime (если внутренние часы установлены в GMT) или не делает этого (если они установлены в местное время). Нет способа автоматического определения того, установленны ли внутренние часы вашего компьютера в GMT или нет, поэтому нам надо будет это настроить самим.

Установите переменную UTC в 0 (нуль) если ваши системные часы не установлены в GMT в нижеописанном файле.

Создадим файл /etc/sysconfig/clock запуском команды:

cat > /etc/sysconfig/clock << "EOF"

# Begin /etc/sysconfig/clock

UTC=1

# End /etc/sysconfig/clock
EOF

Вы можете теперь посмотреть очень хорошие советы по настройке времени в системе LFS на http://www.linuxfromscratch.org/hints/downloads/files/time.txt. Они содержат инвормацию по временным зонам, UTC и переменной окружения TZ.


Настройка скрипта network

Этот раздел нужен только в том случае, если вы собираетесь настраивать сетевую карту.

Если у вас таковая отсутствует, вам не надо создавать файлы конфигурации сетевой карты. В этом случае вам надо удалить все ссылки network изо всех директорий с уровнями запуска (/etc/rc.d/rc*.d)

Настройка гейта по умолчанию

Если вы подключены к локальной сети, то вам надо установить гейт по умолчанию для этой машины. Это делается добавлением соответствующих параметров в файл /etc/sysconfig/network запуском следующей команды:

cat >> /etc/sysconfig/network << "EOF"

GATEWAY=192.168.1.2
GATEWAY_IF=eth0
EOF

Значения GATEWAY и GATEWAY_IF надо заменить на соответствующие настройкам вашей сети. GATEWAY содержит IP-адрес гейта по умолчанию, а GATEWAY_IF содержит вид используемого гейтом интерфейса.

Создание конфигурационных файлов сетевого интерфейса

Какие из интерфейсов будут запущены или остановлены скриптом network описывается в директории /etc/sysconfig/network-devices. Эта директория содержит файлы вида ifconfig.xyz, где xyz является именем сетевого интерфейса (например, eth0 или eth0:1)

Если вы решите переименовать или переместить директорию /etc/sysconfig/network-devices directory, вам надо будет отредактировать соответствующим образом файл /etc/sysconfig/rc и обновить network_devices в соответствии с новыми путями.

Теперь нам надо создать файлы в этой директории. Следующая команда создаст пример файла ifconfig.eth0:

cat > /etc/sysconfig/network-devices/ifconfig.eth0 << "EOF"

ONBOOT=yes
IP=192.168.1.1
NETMASK=255.255.255.0
BROADCAST=192.168.1.255
EOF

Само собой, значения переменных надо будет изменить на правильные для вашей системы. Если переменная ONBOOT установлена в yes, скрипт network поднимет этот интерфейс при загрузке системы. Если же будет установлено что-либо другое, то этот интерфейс будет проигнорирован скриптом.


Вступление

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


Как происходит загрузка с помощью этих скриптов?

Linux использует специальные возможности загрузки, называемые SysVinit. Они основаны на концепции уровней запуска (runlevels). Они могут сильно отличаться на различных системах, и мы не можем сказать что скрипты из <подставите сюда имя любого дистрибутива> будут работать на LFS. У LFS свой подход к этим скриптам, но они также соответствуют стандартам.

SysVinit (с этого момента мы будем называть его init) работает используя схему уровней запуска. Всего есть семь (от 0 до 6) уровней запуска (точнее, есть больше уровней запуска, но они предназначены для специальных целей и обычно не используются. Документация по init содержит более полную информацию по этому вопросу) man page describes those details) и каждуй из них сообщает компьютеру, что ему делать при запуске соответствующего уровня. Уровень запуска по умолчанию - 3. Вот описание разных уровней загрузки и их назначение:

0: выключение компьютера
1: однопользовательский режим
2: многопользовательский режим без поддержки сети
3: многопользовательский режим с поддержкой сети
4: зарезервирован или используется как 3
5: тоже самое, что и 4, он обычно используется для графического входа в систему (например xdm из X'ов xdm или kdm из KDE)
6: перезагрузка компьютера

Для изменения уровня запуска используется команда init <runlevel>, где <runlevel> нужный уровень запуска. Например, для перезагрузки компьютера можно использовать команду init 6. Это и делает команда reboot, а команда halt является аналогом init 0.

Есть ряд директорий в /etc/rc.d, которые выглядят как rc?.d, где ? является уровнем запуска, и rcsysinit.d, которые содержат ряд символических ссылок. Часть из них начинается с K, другие начинаются с S, затем идут две цифры уровня инициализации. K означает остановку (kill) сервиса, а S - запуск (start). Цисло означает порядок, в котором запускаются скрипты, от 00 до 99; чем меньше номер, тем раньше вызывается скрипт. Когда init переключается на другой уровень загрузки, одни сервисы останавливаются, другие запускаются.

Сами скрипты расположены в /etc/rc.d/init.d. Они проделывают всю работу, а ссылки только указывают на них. Ссылки остановки и запуска указывают на один и тот же скрипт в /etc/rc.d/init.d. Это возможно благодаря тому, что скрипты запукаются с различными параметрами, такими как start, stop, restart, reload, status. Когда обрабатывается ссылка K, то соответствующий скрипт вызывается с аргументом stop. Если же обрабатывается ссылка S, то скрипт вызывается с параметром start.

Но есть одно исключение. Ссылки, начинающиеся с S iв директориях rc0.d и rc6.d никогда не выполняются для запуска скрипта с параметром start. Они вызываются только с параметром stop для остановки чего-либо. Это понятно, потому что когда вы собираетесь перезагрузить или отключить систему, вам не надо ничего запускать, а только остановить систему.

Вот описание параметров, которые можно передавать скриптам запуска:

Вы спокойно можеде настраивать и изменять процесс загрузки (после установки вашей системы LFS). Файлы, описываемые здесь, являются только примерами и, возможно, вы сделаете их лучше.


Настройка скрипта localnet

Часть скрипта localnet устанавливает имя системы. Для этого надо настроить файл /etc/sysconfig/network.

Создадим файл /etc/sysconfig/network и укажем имя системы запуском:

echo "HOSTNAME=lfs" > /etc/sysconfig/network

"lfs" надо заменить на желаемое имя компьютера для вызова. Вам не надо здесь вводить FQDN (Fully Qualified Domain Name - полное доменное имя). Эту информацию мы позже укажем в файле /etc/hosts.


Глава 7. Установка скриптов загрузки

Содержание
Вступление
Как происходит загрузка с помощью этих скриптов?
Настройка скрипта setclock
Нужен ли мне скрипт loadkeys?
Настройка скрипта sysklogd
Настройка скрипта localnet
Создание файла /etc/hosts
Настройка скрипта network

Создание файла /etc/hosts

Если вы хотите настроить сетевую карту, вам надо определить IP-адреса, FQDN и возможные псевдонимы в файле /etc/hosts. Его синтакс следующий:

<IP address> myhost.mydomain.org aliases

Вы должны убедиться, что IP-адреса в частной сети соотвестсвуют допустимым. Корректными значениями являются:

       Классы сетей
A 10.0.0.0
B 172.16.0.0 до 172.31.0.0
C 192.168.0.0 до 192.168.255.0

Корректным IP адресом может быть 192.168.1.1. Корректным FQDN для этого IP может быть www.linuxfromscratch.org.

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

Если сетевая карта не будет настраиваться, создайте файл /etc/hosts запуском:

cat > /etc/hosts << "EOF"

# Begin /etc/hosts (no network card version)

127.0.0.1 <value of HOSTNAME>.mydomain.com <value of HOSTNAME> localhost

# End /etc/hosts (no network card version)
EOF

Если вы собираетесь настраивать сетевую карту, то создайте файл /etc/hosts запуском:

cat > /etc/hosts << "EOF"

# Begin /etc/hosts (network card version)

127.0.0.1 localhost.localdomain localhost
192.168.1.1 <value of HOSTNAME>.mydomain.org <value of HOSTNAME>

# End /etc/hosts (network card version)
EOF

Само собой, 192.168.1.1 и <value of HOSTNAME>.mydomain.org надо заменить на ваши варианты (как вам нравится или как установил системный администратор).


оБУФТПКЛБ УЛТЙРФБ sysklogd

уЛТЙРФ sysklogd ЧЩЪЩЧБЕФ РТПЗТБННХ syslogd У РБТБНЕФТПН -m 0. ьФПФ РБТБНЕФТ ПФЛМАЮБЕФ РЕТЙПДЙЮЕУЛХА ПФНЕФЛХ ЧТЕНЕОЙ, ЛПФПТХА syslogd РП ХНПМЮБОЙА РЙЫЕФ Ч МПЗ-ЖБКМ ЛБЦДЩЕ 20 НЙОХФ. еУМЙ ЧЩ ИПФЙФЕ ЙУРПМШЪПЧБФШ ЬФХ НЕФЛХ, ФП ЙУРТБЧШФЕ УППФЧЕФУФЧХАЭЙН ПВТБЪПН УЛТЙРФ sysklogd script. уНПФТЙФЕ man syslogd ДМС ВПМЕЕ РПМОПК ЙОЖПТНБГЙЙ.


Обеспечение возможности загрузки LFS системы

Вы полностью установиль новую систему LFS. Теперь нам надо обеспечить возможность ее загрузки. Следующие инструкции применимы только для компьютеров с архитектурой IA-32, т. е. к большинству PC. Информация о загрузке системы на других архитектурах может отличаться и использовать другие ресурсы.

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

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

dd if=/boot/grub/stage1 of=/dev/fd0 bs=512 count=1
dd if=/boot/grub/stage2 of=/dev/fd0 bs=512 seek=1

Выньте дискету сохраните ее где нибуть в надежном месте. Теперь мы запустим шелл grub:

grub

Grub использует свою структуру имен для дисков и разделов в форме (hdn,m), где n является номером жесткого диска, а m - номером раздела, которые начинаются с нуля. Таким образом, раздел hda1 будет (hd0,0) для Grub, а hdb2 - (hd1,1). В отличие от Linux, Grub не считает CD-ROM приводы за жесткие диски, так что если у вас есть CD на hdb, к примеру, а второй жесткий диск на hdc, то ваш второй жесткий диск будет (hd1).

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

Для начала, скажем Grub, где ему искать файлы stage{1,2} -- вы можете использовать Tab как и в обычном шелле:

root (hd0,3)

 

Предупреждение

Нижеприведенные команды перезапишут ваш текущий загрузчик. Не запускайте эти команды, если вам этого не надо. К примеру, вы можете использовать загрузку в несколько этапов путем манипуляций вашими MBR (Master Boot Record). В этом случае стоит установить Grub в загрузочный сектор раздела LFS, в нашем случае это делается командой: setup (hd0,3).

 

Теперь дадим команду на установку загрузчика в MBR (Master Boot Record) на hda:

setup (hd0)

Если все в порядке, то Grub сообщит о том, что нашел файлы в /boot/grub. В этом случае все:

quit

Теперь нам надо создать файл "меню", для загрузчика Grub:

cat > /boot/grub/menu.lst << "EOF"

# Begin /boot/grub/menu.lst

# By default boot the first menu entry.
default 0

# Allow 30 seconds before booting the default.
timeout 30

# Use prettier colors.
color green/black light-green/black

# The first entry is for LFS.
title LFS 5.0
root (hd0,3)
kernel /boot/lfskernel root=/dev/hda4 ro
EOF

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

cat >> /boot/grub/menu.lst << "EOF"

title Red Hat
root (hd0,2)
kernel /boot/kernel-2.4.20 root=/dev/hda3 ro
initrd /boot/initrd-2.4.20
EOF

Также, если у вас есть Windows, следующая команда добавит пункт для его загрузки:

cat >> /boot/grub/menu.lst << "EOF"

title Windows
rootnoverify (hd0,0)
chainloader +1
EOF

Если info grub не даст вам исчерпывающей информации, то вам стоит посетить страничку Grub по адресу: http://www.gnu.org/software/grub.


Создание файла /etc/fstab

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

cat > /etc/fstab << "EOF"

# Begin /etc/fstab

# filesystem mount-point fs-type options dump fsck-order

/dev/xxx / fff defaults 1 1
/dev/yyy swap swap pri=1 0 0
proc /proc proc defaults 0 0
devpts /dev/pts devpts gid=4,mode=620 0 0
shm /dev/shm tmpfs defaults 0 0

# End /etc/fstab
EOF

Само собой, замените xxx, yyy и fff на значения, соответствующие вашей системе -- к примеру, на hda2, hda5 и reiserfs. За более полной информацией обратитесь к man 5 fstab.

При использовании раздела reiserfs, 1 1 в конце строк надо будет заменить на 0 0, поскольку этой файловой системе не нужны дампы или проверки.

Точка монтирования /dev/shm для tmpfs включена для возможности использования POSIX shared memory. Ваше ядро должно быть собрано с поддержкой этой системы -- более подробно об этом смотрите в следующем разделе. Имейте в виду, что небольшое количество аппаратного обеспечения использует POSIX shared memory. Поэтому вам надо знать, нужна ли вам точка монтирования /dev/shm. Для более подробной информации смотрите Documentation/filesystems/tmpfs.txt в директории с исходниками ядра.

Также вы можете добавлять другие строки в файл fstab. Вот пример строки, использующейся intend для поддержки USB-устройств:

usbfs       /proc/bus/usb  usbfs    defaults    0     0

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


Вступление

В ходе этой главы мы обеспечим возможность загрузки LFS. Эта глава объяснит, как создать новый файл fstab file, собрать новое ядро для системы LFS и установить загрузчик Grub так, чтобы можно было выбрать загрузку LFS.


Установка Linux-2.4.22

Ожидаемое время сборки:           При параметрах по умолчанию: 4.20 SBU
Ожидаемое место на диске: При параметрах по умолчанию: 181 MB

Описание Linux

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

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

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

Linux зависит от: Bash, Binutils, Coreutils, Findutils, GCC, Glibc, Grep, Gzip, Make, Modutils, Perl, Sed.

Установка ядра

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

Подготовимся к компиляции запуском следующей команды:

make mrproper

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

Сконфигурирем ядро с помощью меню:

make menuconfig

make oldconfig может быть более полезно в ряде случаев. Смотрите файл README для более полной информации.

Если вы хотите, то можете пропустить конфигурирование ядра и просто скопировать файл .config из вашей основной системы (если, конечно, она доступна) в распакованую директорию linux-2.4.22. Но мы не рекомендуем делать это. Намного лучше будет просмотреть все меню настроек ядра и создать его конфигурацию с нуля.

Для поддержки POSIX shared memory убедитесь, что параметр "Virtual memory file system support" выбран. Он расположен в меню "File systems" и обычно отмечен по умолчанию.

Проверим зависимости у создадим информационный файл о них:

make CC=/opt/gcc-2.95.3/bin/gcc dep

Скомпилируем образ ядра:

make CC=/opt/gcc-2.95.3/bin/gcc bzImage

Скомпилируем драйверы, доступные в виде модулей:

make CC=/opt/gcc-2.95.3/bin/gcc modules

Если ваш intend использует модули ядра, то вам нужен файл /etc/modules.conf. Информацию относительно модулей и конфигурации ядра в целом можно найти в документации ядра, которая находится в директории linux-2.4.22/Documentation. Man-страница по modules.conf и kernel HOWTO на http://www.tldp.org/HOWTO/Kernel-HOWTO.html также могут вам пригодиться.

Установим модули:

make CC=/opt/gcc-2.95.3/bin/gcc modules_install

Создаим документацию по ядру:

make mandocs

И установим ее:

cp -a Documentation/man /usr/share/man/man9

Компиляция ядра закончена, но ряд файлов есть только в директории исходников ядра. Для завершения установки надо скопировать два файла в директорию /boot.

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

cp arch/i386/boot/bzImage /boot/lfskernel

System.map является файлом карты символов для ядра. Он содержит карту для точек входа всех функций в API ядра. Используйте следующую команду для установки этого файла:

cp System.map /boot

Глава 8. Обеспечение возможности загрузки LFS системы

Содержание
Вступление
Создание файла /etc/fstab
Установка Linux-2.4.22
Обеспечение возможности загрузки LFS системы

Конец

Все закончено! Вы завершили установку вашей системы LFS. Это могло быть весьма продолжительным процессом, но мы надеемся, что он вам понравился, и вы получили массу удовольствия от сборки собственной системы Linux.

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

Внимание: 98% людей, использующих описанный метод, не испытывают проблемм. Но вам стоит создать резервный архив с копией системы LFS перед запуском описанных команд. Есть небольшой шанс, что что-либо пойдет не так и сделает вашу системы неработоспособной (как правило при разрушении модулей ядра и библиотек). Могут появится и другие проблемы при использовании данной команды.

Мы уже говорили, что параметр --strip-debug используется для безопасного удаления отладочной информации в нормальных условиях. Он не удалит из файлов ничего жизненно важного. Также можно использовать параметр --strip-all для обычных программ (но не для библиотек - они будут испорчены), но это не полностью безопасно и вы выиграете немного места. Но если вам важен каждый байт на диске, то вам решать. Пожалуйста, посмотрите man-страницу по strip для информации по другим параметрам. Главное - это не запускать strip для библиотек (кроме --strip-debug).

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

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

Теперь запустите следующую команду:

/tools/bin/find /{,usr/,usr/local/}{bin,sbin,lib} -type f \
-exec /tools/bin/strip --strip-debug '{}' ';'

Вы увидите, что ряд файлов имеет неподдерживаемый формат. Большая часть из них - скрипты, а не бинарники. Так что эти предупреждения можно проигнорировать.

Вы можете создать файл /etc/lfs-release. Наличии этого файла может вам иногда облегчить (и использоваться для определения того, какой версией документации по LFS пользоваться в случае надобности) для определения версии вашей установленной LFS. Создадим этот файл командой:

echo 5.0 > /etc/lfs-release

Регистрация

Вы хотите зарегистрироваться как пользователь LFS по окончании прочтения книги? Посетите http://linuxfromscratch.org/cgi-bin/lfscounter.cgi и зарегистрируйтесь как пользователь LFS, введя ваше имя и первую используемую вами версию LFS.

Теперь перезагрузимся в систему LFS...


Перезагрузка системы

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

umount /proc
umount /dev/pts

Выйдем из среды chroot:

logout

Помимо всего прочего, после установки всех программ нам больше не нужен каталог /tools. Вы можете удалить его. Помимо этого вы можете удалить временные копии Tcl, Expect и DejaGnu, которые использовалисьдля запуска тестов средств, вы сможете перекомпилировать и установить их на вашей системе LFS позже, если захотите снова использовать их.

Также вы можете захотеть переместить содержимое /sources в /usr/src/packages или куда-то еще (или просто удалить их, если они есть у вас на CD) и удалить эту директорию.

Перед перезагрузкой, отмондируем еще и сам раздел LFS:

umount $LFS

Если вы решили создать несколько разделов, вам надо отмонтировать их все перед запуском unmount $LFS, как здесь:

umount $LFS/usr
umount $LFS/home
umount $LFS

И теперь вы можете перезагрузить системы командой наподобие этой:

/sbin/shutdown -r now

Вы также можете настроить Grub на загрузку LFS 5.0 автоматически.

После перезагрузки ваша система LFS готова к использованию и вы можете начать устанавливать дополнительные программы.


Глава 9. Конец

Содержание
Конец
Регистрация
Перезагрузка системы
Что теперь?

Что теперь?

Мы благодарим вас за прочтение книги LFS и надеемся, что вы нашли в ней много полезного для себя и провели время с пользой.

Теперь, когда вы закончили установку вашей системы LFS, вы наверно спросите "Что тепрь?". Для ответа на этот вопрос мы составили список ресурсов, который вам может оказаться полезным.


Организация

Эта книга состоит из следующих двух частей:

Часть I - Вступление

Часть I содержит некоторые важные сведения о процессе инсталляции и некоторую дополнительную информацию о книге (версию, список изменений, благодарности, списки рассылки и т. п.).

Часть II - Подготовка к сборке

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

Часть III - Сборка системы LFS

Часть III руководит сборкой системы LFS: компиляцией и установкой всех пакетов по порядку, созданием загрузочных скриптов и установкой ядра. В результате будет создана простая Linux-система в которую вы сможете установить дополнительные программы тем способом и такие, как захотите.

Часть IV - Приложения

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

(Большая часть первого приложения содержится в Частях II и III книги. Это просто расширение книги, но мы надеемся, что это облегчит чтение книги. Вам не обязательно обращатся к первому приложению в процессе установки. Беготня вперед и назад по страницам будет пустым занятием, особенно если вы читаете печатную версию этой книги)


Пролог

Оглавление
Предисловие
Аудитория
Предпосылки
Организация

Аудитория

Кому эта книга будет интересна

Существует ряд причин, по которым эта книга может представлять интерес. Главная причина - установка Linux системы из исходников. Многие люди спросят: "Зачем мучиться, вручную собирая Linux систему "с нуля", когда можно скачать и установить готовую?". Это хороший вопрос и мы постараемся ответить на него в этой части книги.

Важная причина существования LFS - помочь людям узнать работу ситемы Linux изнутри. Построение LFS-системы помогает показать, что заставляет Linux работать, как работают ее компоненты и как они друг от друга зависят. И наконец, вероятно важнее всего, оно учит как настроить Linux под себя, в соответствии со своими вкусами и потребностями.

Основное преимущество LFS состоит в том, что вы получаете больше контроля над системой, не полагаясь на чью-либо разработку. С LFS вы определяете структуру системы и диктуете ей свои условия, в частности структуру каталогов и загрузочные скрипты. Вы также указываете как, куда и зачем устанавливаются программы.

Другим преимуществом LFS является возможность создать наиболее компактную систему. При установке обычного дистрибутива, вместе с ним, как правило, устанавливается большое количество программ, котрорые вы никогда не будете использовать. Они просто будут занимать место на диске (или, возможно, время центрального процессора). В то же время не составит труда установить систему LFS на 100 Mb диска. Вам кажется, это много? Некоторые пользователи смогли создать весьма компактную LFS систему. Они собрали систему, позволяющую запускать веб-сервер Apache, которая занимала всего 8 Mb на диске. Дальнейшее урезание ее позволит сократить используемое место до 5 Mb. Попробуйте сделать это, используя обычный дистрибутив.

Мы можем сравнить дистрибутив Linux с гамбургером из закусочной - вы не знаете точно, что едите. LFS же даеет вам не гамбургер, а рецепт его приготовления. Внимательно изучив его, можно убрать ненужные ингридиенты и добавить свои по вкусу. Как только вы довольны рецептом, можете смело приступать к приготовлению гамбургера. Вы можете также выбрать способ приготовления: поджарить, сварить, запечь или съесть сырым.

Также LFS можно сравнить с домом. Мы даем вам только его план, а строить его вам. Разумеется, можно изменять план по ходу дела.

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

Есть еще много причин, по которым лучше собрать LFS, настолько много, что их все здесь просто не привести. Эта часть только верхушка айсберга. При установке LFS вы поймете, что все сила - в информации и знаниях.

Кому эта книга будет неинтересна

Здесь перечислены некоторые из причин, по которым вам, возможно, не следует читать эту книгу. Если у вас нет желания собирать Linux с нуля, то, наверное, эта книга не для вас. Нашей целью является построение законченой и готовой к системы основного уровня. Если вы просто хотите узнать, что происходит при загрузке системы, то мы рекомендуем почитать "From Power Up To Bash Prompt" HOWTO. Это руководство описывает процесс построения голой системы, подобной нашей, но ставит перед собой цель создание системы, способной загрузиться до командной оболочки BASH.

При выборе объекта для чтения, ясно определите свою цель. Если вы хотите построить свою Linux систему, изучая ее по ходу дела, то эта книга для вас. Если же ваша цель сугубо познавательная, и вы не планируете создать готовую систему, тогда вам лучше выбрать "From Power Up To Bash Prompt" HOWTO.

"From Power Up To Bash Prompt" HOWTO находится по адресу http://axiom.anu.edu.au/~okeefe/p2b/ или на сайте The Linux Documentation Project - http://www.tldp.org/HOWTO/From-PowerUp-To-Bash-Prompt-HOWTO.html.


Предпосылки

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


Предисловие

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

Эта сумасбродная идея казалась очень сложной или вообще невыполнимой. Но после решения ряда проблем, таких как зависимости или ошибки на этапе компиляции,  моя новая самосборная система оказалась полностью работоспособной. Я назвал свою систему Linux From Scratch или, для краткости, LFS.

Я надеюсь, что вы не зря проведете время, работая над своей собственной LFS!


-- 
Джерард Бикманс
gerard@linuxfromscratch.org


I. Часть I - Вступление


II. Часть II - Подготовка к сборке


III. Часть III - Сборка системы LFS


IV. Часть IV - Приложения