Copyright ╘ 1999-2003 Gerard Beekmans
Перевод: Виталий Катраев aka Zawullon
При переводе был также использован текст перевода Linux From Scratch
v4.0 Дениса Каледина, Ника Фролова и Алекса Казанкова.
Эта книга посвящается моей любящей и заботливой жене Беверли Бикманс.
Далее | ||
Пролог |
Linux From Scratch: Version 5.0 |
---|
Copyright (c) 1999-2003, Gerard Beekmans
Все права защищены.
Повторное распространение, использование бинарного и исходного кода, с изменениями или без оных, разрешено при условии соблюдения следующих положений:
ЭТО ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПОСТАВЛЯЕТСЯ ВЛАДЕЛЬЦАМИ АВТОРСКИХ ПРАВ И УЧАСТНИКАМИ "КАК ЕСТЬ" И ЛЮБЫЕ ЯВНЫЕ ИЛИ НЕЯВНЫЕ ГАРАНТИИ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ НЕЯВНЫМИ ГАРАНТИЯМИ, КОММЕРЧЕСКОЙ ЦЕННОСТИ И ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ ОТРИЦАЮТСЯ. НИ В КОЕМ СЛУЧАЕ РЕГЕНТЫ ИЛИ УЧАСТНИКИ НЕ ДОЛЖНЫ БЫТЬ ОТВЕТСТВЕННЫМИ ЗА ЛЮБОЙ ПРЯМОЙ, КОСВЕННЫЙ, СЛУЧАЙНЫЙ, СПЕЦИАЛЬНЫЙ, ОБРАЗЦОВЫЙ ИЛИ ПОСЛЕДУЮЩИЙ УЩЕРБЫ (ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ПОСТАВКОЙ ТОВАРОВ ЗАМЕНЫ ИЛИ УСЛУГ; ПОТЕРЮ ДАННЫХ ИЛИ ИХ НЕПРАВИЛЬНУЮ ПЕРЕДАЧУ ИЛИ ПОТЕРИ; ПРИОСТАНОВЛЕНИЕ БИЗНЕСА), И ТЕМ НЕ МЕНЕЕ ВЫЗВАННЫЕ И В ЛЮБОЙ ТЕОРИИ ОТВЕТСТВЕННОСТИ, НЕЗАВИСИМО ОТ КОНТРАКТНОЙ, СТРОГОЙ ОТВЕТСТВЕННОСТИ, ИЛИ ПРАВОНАРУШЕНИИ (ВКЛЮЧАЯ ХАЛАТНОСТЬ ИЛИ ИНЫМ СПОСОБОМ), ВОЗНИКШЕМ ЛЮБЫМ ПУТЕМ ПРИ ИСПОЛЬЗОВАНИИ ЭТОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ, ДАЖЕ ЕСЛИ БЫ БЫЛО СООБЩЕНО О ВОЗМОЖНОСТИ ТАКОГО УЩЕРБА.
Для получения инструкций по установке смотрите Раздел Установка 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 усиливает ьезопасность системных паролей.
Устанавливаемые программы: 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 зависит от: Bash, Binutils, Bison, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Sed.
Для получения инструкций по установке смотрите Раздел Установка Inetutils-1.4.2 в Главе 6.
Inetutils (1.4.2):
http://freshmeat.net/projects/inetutils/
Пакет Inetutils содержит сетевые клиенты и серверы.
Устанавливаемые программы: ftp, ping, rcp, rlogin, rsh, talk, telnet и tftp
ftp - программа для передачи данных в сетях ARPANET.
ping посылает пакеты echo-request и отчитывается о времени прибытия ответа.
rcp обеспечивает удаленной копирование файлов.
rlogin обеспечивает удаленный вход в систему.
rsh запускает удаленный шелл.
talk используется для чата с другим пользователем.
telnet интерфейс для протокола TELNET.
tftp тривиальная программа передачи файлов.
Inetutils зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Ncurses, Sed.
Для получения инструкций по установке смотрите Раздел Установка Gettext-0.12.1 в Главе 6.
Gettext (0.12.1):
ftp://ftp.gnu.org/gnu/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 зависит от: Bash, Binutils, Bison, Coreutils, Diffutils, Gawk, GCC, Glibc, Grep, Make, Sed.
Для получения инструкций по установке смотрите Раздел Установка Make-3.80 в Главе 6.
Make (3.80):
ftp://ftp.gnu.org/gnu/make/
Make автоматически определяет, какие части большой программы ныждаются в перекомпиляции и отдает команду на их компиляцию.
Устанавливаемые программы: make
make автоматически определяет. какие части большой программы нуждаются в перекомпиляции и отдает соответствующую команду.
Make зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Sed.
Для получения инструкций по установке смотрите Раздел Установка 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
GNU ed является 8-ми битовым POSIX-совместимым редактором строк.
Устанавливаемые программы: ed и red (ссылка на ed)
ed является строко-ориентированым текстовым редактором. Он может использоваться для создания, вывода, редактирования и других манипуляций с текстовыми файлами.
red - ограниченый ed -- он может только редактировать файлы в текущей директории и не может выполнять шелл-команды.
Ed зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Sed.
Для получения инструкций по установке смотрите Раздел Установка 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 содержит библиотеки для создания интерфейса работой с символами и терминалами, включая панели и меню.
Устанавливаемые проограммы: 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 зависит от: Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Glibc, Grep, Make, Sed.
Для получения инструкций по установке смотрите Раздел Установка Grep-2.5.1 в Главе 6.
Grep (2.5.1):
ftp://ftp.gnu.org/gnu/grep/
Grep является программой, используемой для печати строк из файла, совпадающих с указанным шаблоном.
Устанавливаемые программы: egrep (ссылка на grep), fgrep (ссылка на grep) и grep
egrep печатает строки, соответствующие регулярному выражению.
fgrep Печатает строки, соответствующие списку фиксированых строк.
grep печатает строки, соответствующие простому регулярному выражению.
Grep зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Make, Sed, Texinfo.
Для инструкций по установке смотрите Раздел Установка 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 является генератором парсеров, заменяющим 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 зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, M4, Make, Sed.
Для получения инструкций по установке смотрите Раздел Установка 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 содержит файлы раскладки и утилиты для клавиатуры.
Устанавливаемые программы: 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 зависит от: Bash, Binutils, Bison, Coreutils, Diffutils, Flex, GCC, Gettext, Glibc, Grep, Gzip, M4, Make, Sed.
Для получения инструкций по установке смотрите Раздел Установка Less-381 в Главе 6.
Less (381):
ftp://ftp.gnu.org/gnu/less/
Less является просмотрщиком файлов или текста. Он выводит содержимое файла или потока и поддерживает прокрутку. Less имеет ряд возможностей, не входящих в просмотрщик more, например, он позволяет прокрутку в обратном направлении.
Устанавливаемые программы: less, lessecho и lesskey
less является просмотрщиком файлов. Он отображает содержимое указщанного файла, позволяет его прокручивать для просмотра, находить строки и переходить к отметкам.
lessecho нужен для расширеных метасимволов, таких как * и ?, в именах файлов на системах Unix.
lesskey используется для определения управляющих клавиш less.
Less зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Ncurses, Sed.
Для инструкций по установке смотрите Раздел Установка Bzip2-1.0.2 в Главе 6.
Bzip2 (1.0.2):
http://sources.redhat.com/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 зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Make.
Для получения инструкций по установке смотрите Раздел Установка Procinfo-18 в Главе 6.
Procinfo (18):
ftp://ftp.cistron.nl/pub/people/svm/
Программа procinfo собирает информацию о системе. такую как использование памяти и номера IRQ, из директории /proc и форматирует эти данные в удобный вид.
Устанавливаемые программы: lsdev, procinfo и socklist
lsdev выводит список устройств, присутствующих в вашей системе, и используемые ими IRQ и порты ввода-вывода.
procinfo отображает инфоромацию из виртуальной файловой системы proc.
socklist выводит список открытых сокетов, показывает их тип, номер порта и другую информацию.
Procinfo зависит от: Binutils, GCC, Glibc, Make, Ncurses.
Для паолучения инструкций по установке смотрите Раздел Установка E2fsprogs-1.34 в Главе 6.
E2fsprogs (1.34):
ftp://download.sourceforge.net/pub/sourceforge/e2fsprogs/
http://download.sourceforge.net/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 зависит от: Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Gettext, Glibc, Grep, Make, Sed, Texinfo.
Для получения инструкций по установке смотрите Раздел Установка Texinfo-4.6 в Главе 6.
Texinfo (4.6):
ftp://ftp.gnu.org/gnu/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 зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Ncurses, Sed.
Для получения инструкций по установке смотрите Раздел Установка 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-install, grub-md5-crypt, grub-terminfo и mbchk
grub шелл для GRand Unified Bootloader.
grub-install устанавливает GRUB на указанное устройство.
grub-md5-crypt кодирует пароли в формате MD5.
grub-terminfo генерирует команду terminfo из имени terminfo. Это можно использовать если у вас нестандартный терминал.
mbchk проверяет формат мультизагрузочного ядра.
Grub зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Ncurses, Sed.
Для получения инструкций по установке смотрите Раздел Установка LFS-Bootscripts-1.12 в Главе 6.
LFS-Bootscripts (1.12):
http://downloads.linuxfromscratch.org/
Пакет 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 является шаблоном, который вы можете использовать для создания собственных загрузочных скриптов для других демонов.
Bzip2 зависит от: Bash, Coreutils.
Для получения инструкций по установке смотрите Раздел Установка 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
Устанавливаемая библиотека: libexpect5.39.a
expect "общается" с другими программами через скрипт.
Expect зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Sed, Tcl.
Для получения инструкций по установке смотрите Раздел Установка 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, 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 зависит от: Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Glibc, Grep, Make, Sed.
Для получения инструкций по установке смотрите Раздел Установка 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-страниц.
Устанавливаемые программы: apropos, makewhatis, man, man2dvi, man2html и whatis
apropos ищет в базе данных whatis и отображает краткое описание системной команды, которое содержит указанную строку.
makewhatis создает базу данных whatis. Он росматривает все страницы документации man в соответствующих путях и добавляет запись команды и ее краткого описания в базу данных whatis.
man форматирует и отображает запрошеную man-страницы.
man2dvi конвертирует man-страницу в формат dvi.
man2html конвертирует man-страницу в html.
whatis ищет в базе данных whatis и отображает краткое описание системной команды, содержащей указанное ключевое слово или несколько слов.
Man зависит от: Bash, Binutils, Coreutils, Gawk, GCC, Glibc, Grep, Make, Sed.
Для получения инструкций по установке смотрите Раздел Установка 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 содержит набор программ, которые формируют основу поддержки сетей в 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 зависит от: Bash, Binutils, Coreutils, GCC, Glibc, Make.
Для получения инструкций по установке смотрите Раздал Установка 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 является реализацией 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 зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Sed.
Для получения инструкций по установке смотрите Раздел Создание устройств (Makedev-1.7) в Главе 6.
MAKEDEV (1.7):
http://downloads.linuxfromscratch.org/
Скрипт MAKEDEV создает статические записи устройств, которые обычно расположены в директории /dev. Подробную информацию о записях устройств можно найти в файле Documentation/devices.txt в директории с исходниками ядра.
Устанавливаемый скрипт: MAKEDEV
MAKEDEV - скрипт для создания необходимых статических элементов устройств, обычно расположеных в директории /dev.
Make зависит от: Bash, Coreutils.
Для получения инструкций по установке смотрите Раздел Установка Sed-4.0.7 в Главе 6.
Sed (4.0.7):
ftp://ftp.gnu.org/gnu/sed/
Sed является редактором потоков. Редактор потоков используется для простых преобразований текста со ввода потока (файла или командной строки).
Устанавливаемые программы: sed
sed используется для однопроходной фильтрации и преобразований текстовых файлов.
Sed зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Texinfo.
Для получения инструкций по установке смотрите Раздел Установка Gzip-1.3.5 в Главе 6.
Gzip (1.3.5):
ftp://alpha.gnu.org/gnu/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 зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Sed.
В этом приложении имеется информация по всем пакетам из этой книги в виде следющих пунктов:
официальный адрес пакета,
содержимое пакета,
что делают программы из пакета,
что необходимо пакету для компиляции.
Большая часть информации об этих пакетах (особенно их описания) взята из соответствующих man-страниц по этим пакетам. Мы не стали включать сюда эти man-страницы полностью, только ряд ключевых элементов для сборки и иформацию, необходимую для понимания назначения паета. Для получения более детальной информации по пакетам вам надо посмотреть документацию по ним.
Определенные пакеты описаны более подробно чем другие потому, что мы знаем оних чуть больше, чем о других. Если вы считаете, что надо добавить что-либо к этим описаниям, без колебаний пишите на email или в списки рассылки. Мы хотим дать наиболее полную информацию по пакетам, но не можем сделать это без вашей помощи.
Пожалуйста, заметьте что здесь описаны только те пакеты, которые нам необходимо установить. Остальные можно добавить потом.
Также здесь приведены зависимости установки для всех пакетов, устанавливаемых в этой книге. Он содержит программы, необходимые для успешной сборки устанавливаемых пакетов.
Это не зависимости дла запуска программ, а только для их сборки.
Эти зависимости могут меняться в зависимости от версий устанавливаемых пакетов. Проверка зависимостей является сложной работой, но она нужна при обновлении пакетов. Но как правило зависимости меняются от младшей версии к старшей. Когда мы устанавливаем более новую версию нам надо проверять зависимости.
Для инструкций по установке смотрите Раздел Установка Binutils-2.14 в Главе 6.
Binutils (2.14):
ftp://ftp.gnu.org/gnu/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 зависит от: Bash, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Perl, Sed, Texinfo.
Для получения инструкций по установке смотрите Раздел Установка Libtool-1.5 в Главе 6.
Libtool (1.5):
ftp://ftp.gnu.org/gnu/libtool/
GNU libtool является общей библиотекой поддержки скриптов. Libtool скрывает сложность использования распределенных библиотек под последовательным, переносимым интерфейсом.
Устанавливаемые программы: libtool и libtoolize
Устанавливаемые библиотеки: libltdl.[a,so].
libtool предоставляет общие сервисы сборки библиотек.
libtoolize предоставляет стандартные средства для включения поддержки libtool в пакет.
libltdl скрывает различные сложности библиотек (dlopen).
Libtool зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Sed.
Для получения инструкций по установке смотрите Раздел Установка Util-linux-2.12 в Главе 6.
Util-linux (2.12):
http://ftp.cwi.nl/aeb/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 зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Ncurses, Sed, Zlib.
Для получения инструкций по установке смотрите Раздел Установка Modutils-2.4.25 в Главе 6.
Modutils (2.4.25):
ftp://ftp.kernel.org/pub/linux/utils/kernel/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 зависит от: Bash, Binutils, Bison, Coreutils, Diffutils, Flex, GCC, Glibc, Grep, M4, Make, Sed.
Для инструкций по установке смотрите Раздел
Установка Automake-1.7.6 в Главе 6.
Automake (1.7.6):
ftp://ftp.gnu.org/gnu/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 зависит от: Autoconf, Bash, Coreutils, Diffutils, Grep, M4, Make, Perl, Sed.
Для получения инструкций по установке смотрите Раздел Установка Lfs-Utils-0.3 в Главе 6.
Lfs-utils (0.3):
http://www.linuxfromscratch.org/~winkie/downloads/lfs-utils/
Пакет Lfs-Utils содержит ряд разносторонних программ. используемых различными пакетами, которые, однако, недоступны в виде отдельных пакетов.
Устанавливаемые программы: mktemp, tempfile, http-get и iana-net
Устанавливаемые файлы: protocols, services
mktemp создает временные файлы в безопасном месте. Он используется в скриптах.
tempfile создает временные файлы менее безопасно, чем mktemp. Он устанавливается для обратной совместимости.
Скрипт http-get содержит расширение bash называемое "сетевым перенаправлением". Он используется для скочивания с веб-сайтов без использования других программ.
iana-net используется скриптом http-get для простого доступа к настройкам сервисов и протоколов IANA.
(Зависимости пока не проверены.)
Для получения инструкций по установке смотрите Раздел Установка Linux-2.4.22 в Главе 8.
Linux (2.4.22):
ftp://ftp.kernel.org/pub/linux/kernel/
Ядро Linux является основой любой системы Linux. Это то, что делает Linux таковым. Когда компьютер включается и загружает систему Linux, самым первым из всех программ Linux загружается ядро. Ядро инициализирует аппаратные компоненты системы: последовательные и параллельные порты, звуковые и сетевые карты, контроллеры IDE и SCSI и многое другое. Если иначе, то ядро делает аппаратные средства доступными, после чего программы могут запускаться.
Устанавливаемые файлы: ядро и заголовки ядра
Ядро является мотором вашей системы GNU/Linux. При включении компьютера ядро будет первой загруженой частью операционной системы. Оно определит и инициализирует все аппаратные компоненты вашего компьютера, что сделает их доступными в виде дерева файлов для программ и переключает CPU в мультипроцессорный режим для возможности одновременной работы нескольких программ.
Заголовки ядра определяют интерфейс для сервисов, которые поддерживаются ядром. Заголовки из системной директории include должны быть всегда теми, с которыми был скомпилирован Glibc, и не в коем случае не должны быть заменены при обновлении ядра.
Linux зависит от: Bash, Binutils, Coreutils, Findutils, GCC, Glibc, Grep, Gzip, Make, Modutils, Perl, Sed.
Для получения инструкций по установке смотрите Раздел Установка M4-1.4 в Главе 6.
M4 является макропроцессором. Он копирует ввод на вывод, выполняя макросы. Макросы могут быть встроеными или определенными пользователем и могут получать любое количество параметром. Помимо простого выполнения макросов, m4 имеет встроеные функции для включения файлов. запуска команд Unix, целочисленных арифметических расчетов, различных манипуляций с текстом, рекурсии и другого. Программа m4 может использоваться в качестве фронт-энда к компиляторам или как макропроцессор по вашим собственным правилам.
Устанавливаемые программы: m4
m4 копирует указанные файлы, выполняя содержащиеся в них макросы. Макросы могут быть встроеными или определенными пользователем и могут получать любое количество параметром. Помимо простого выполнения макросов, m4 имеет встроеные функции для включения файлов. запуска команд Unix, целочисленных арифметических расчетов, различных манипуляций с текстом, рекурсии и другого. Программа m4 может использоваться в качестве фронт-энда к компиляторам или как макропроцессор по вашим собственным правилам.
M4 зависит отon: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Perl, Sed.
Для получения инструкций пао установке смотрите Раздел Установка Tar-1.13.25 в Главе 6.
Tar (1.13.25):
ftp://alpha.gnu.org/gnu/tar/
Tar является архиватором предназначеным для сохранения в файле архива, известного как tar-файл (тарболл), или извлечения из него файлов.
Устанавливаемые программы: rmt и tar
rmt используется для для удаленного управления приводами магнитных лент через межпроцессорное связное соединение.
tar используется для сохранения в файле архива, известного как tar-файл (тарболл), или извлечения из него файлов.
Tar зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Sed.
Для получения инструкций по установке смотрите Раздел Установка Groff-1.19 в Главе 6.
Groff (1.19):
ftp://ftp.gnu.org/gnu/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 зависит от: Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Glibc, Grep, Make, Sed.
Для получения инструкций по установке смотрите Раздел Установка Psmisc-21.3 в Главе 6.
Psmisc (21.3):
http://download.sourceforge.net/psmisc/
ftp://download.sourceforge.net/pub/sourceforge/psmisc/
Пакет Psmisc содержит три программы для работы с директорией /proc.
Устанавливаемые программы: fuser, killall и pstree
fuser возвращает PID процессов, которые используют указанные файлы или фаловые системы.
killall убивает процессы по имени. Он посылает сигнал всем процессам, запущенным одной из указанных команд.
pidof возвращет PID указанных программ. (Вместо этой программы используется pidof из Sysvinit.)
pstree отображает дерево запущенных процессов.
Psmisc зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Ncurses, Sed.
Для инструкций по установке смотрите Раздел Установка Autoconf-2.57 из Главы 6.
Autoconf (2.57):
ftp://ftp.gnu.org/gnu/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 зависит от: Bash, Coreutils, Diffutils, Grep, M4, Make, Perl, Sed.
Для получения инструкций по установке смотрите Раздел Установка 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 содержит библиотеку libz, которая используется некоторыми программами для своих функций сжатия и распаковки.
Устанавливаемые библиотеки: libz[a,so]
libz* содержит функции сжатия и распаковки, используемые некоторыми программами.
Zlib зависит от: Binutils, Coreutils, GCC, Glibc, Make, Sed.
Для получения инструкций по установке смотрите Раздел Установка Man-pages-1.60 в Главе 6.
Man-pages (1.60):
ftp://ftp.kernel.org/pub/linux/docs/manpages/
Пакет Man-pages содержит более 1200 man-страниц. Эта документация подробно описывает функции C и C++, описывает ряд важных файлов устройств и содержит документацию, не включенную по тем или иным прицинам в другие пакеты.
Устанавливаемые файлы: различные man-страницы
Примером поставляемых man-страниц служит описание всех функций C и C++, важных файлов устройств и важных файлов конфигурации.
Man зависит от: Bash, Coreutils, Make.
ДЛя инструкций по установке смотрите Раздел Установка 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 содержит ряд основных утилит для 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 зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Perl, Sed.
Для получения инструкций по установке смотрите Раздел Установка 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 получает информацию о процессах из директории /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 зависит от: Bash, Binutils, Coreutils, GCC, Glibc, Make, Ncurses.
Для получения инструкций по установке смотрите Раздел Установка Tcl-8.4.4 в Главе 5.
Tcl (8.4.4):
http://download.sourceforge.net/tcl/
ftp://download.sourceforge.net/pub/sourceforge/tcl/
Пакет Tcl содержит Tool Command Language.
Устанавливаемые программы: tclsh (ссылка на tclsh8.4), tclsh8.4
Устанавливаемая библиотека: libtcl8.4.so
Tcl зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Sed.
Для получения инструкций по установке смотрите Раздел Установка Findutils-4.1.20 в Главе 6.
Findutils (4.1.20):
ftp://alpha.gnu.org/gnu/findutils/
Пакет Findutils содержит программы для поиска файлов, как "на лету" (выполняя рекурсивный поиск в директориях и возвращая файлы, соответствующие шаблону поиска), так и по базе данных.
Устанавливаемые программы: bigram, code, find, frcode, locate, updatedb и xargs
bigram раньше использовался для создания поисковых баз данных.
code раньше использовался для создания поисковых баз данных. Предшественник frcode.
find ищет внутри указанного дерева каталогов файлы, соответствующие заданным критериям.
frcode вызывается updatedb для сжатия списка имен файлов. Он использует front-сжатие, уменьшая размер базы данных в 4 - 5 раз.
locate ищет в базе данных имен файлов и выводит имена, содержащие заданную строку или соответствующие указанному шаблону.
updatedb обновляет поисковую базу данных. Он сканирует всю файловую систему (включая другие примонтированые файловые системы, если не указано обратное) и заносит все найденные имена файлов в базу данных.
xargs может использоваться для выполнения команды со списком файлов.
Findutils зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Sed.
Для получения инструкций по установке смотрите Раздел Установка Sysklogd-1.4.1 в Главе 6.
Sysklogd (1.4.1):
http://www.infodrom.org/projects/sysklogd/
Пакет Sysklogd содержит программы для записи логов системы, таких как отчеты ядра.
Устанавливаемые программы: klogd и syslogd
klogd - системный демон для перехвата и протоколирования сообщений ядра.
syslogd протоколирует сообщения посланные системными программами для логов. Все сообщения содержат время и имя системы, обычно также имя программы, а остальные сведения зависят от программы.
Sysklogd зависит от: Binutils, Coreutils, GCC, Glibc, Make.
Для получения инструкций по установке смотрите Раздел Установка 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 содержит набор компиляторов 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 зависит от: Bash, Binutils, Coreutils, Diffutils, Findutils, Gawk, Gettext, Glibc, Grep, Make, Perl, Sed, Texinfo.
Для получения инструкций по установке смотрите Раздел Установка Sysvinit-2.85 в Главе 6.
Пакет 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 зависит от: Binutils, Coreutils, GCC, Glibc, Make.
Для получения инструкций по установке смотрите Раздел Установка Patch-2.5.4 в Главе 6.
Patch (2.5.4):
ftp://ftp.gnu.org/gnu/patch/
Программа patch модифицирует файлы в соответствии с файлом патча. Патч-файл обычно является списком, созданным программой diff, который содержит список инструкций по изменению оригинального файла для его модификации.
Устанавливаемая программа: patch
patch модифицирует файлы в соответствии с файлом патча. Патч-файл является списком, созданным программой diff. Применяя эти изменения к оригинальным файлам, patch создает их пропатченую версию. Используя патчи вместо цельных тарболов с исходниками, вы экономите время скачивания новых программ.
Patch зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Sed.
Для получения инструкций по установке смотрите Раздел Установка DejaGnu-1.4.3 в Главе 5.
DejaGnu (1.4.3):
ftp://ftp.gnu.org/gnu/dejagnu/
Пакет DejaGnu содержит средства для тестирования других программ.
Устанавливаемая программа: runtest
runtest является скриптом-оболочкой для определения правильного шелла и последующего запуска DejaGnu.
Dejagnu зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Sed.
Для получения инструкций по установке смотрите Раздел Установка Vim-6.2 в Главе 6.
Пакет 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 зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Ncurses, Sed.
Для получения инструкций по установке смотрите Раздел Установка File-4.04 в Главе 6.
File (4.04):
ftp://ftp.gw.com/mirrors/pub/unix/file/
Альтернативный адрес:
ftp://gaosu.rave.org/pub/linux/lfs/
File является утилитой для определения типа файлов.
Устанавливаемая программа: file
Устанавливаемая библиотека: libmagic.[a,so]
file пытается классифицировать указанный файл. Он делает это посредством ряда тестов: теста файловой системы, теста магических чисел, и языкового теста. От первого теста зависит удачное определение результата.
libmagic содержит правила распознавания магических чисел, используемые программой file.
File зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Sed, Zlib.
Для получения инструкций по установке смотрите Раздел Установка Diffutils-2.8.1 в Главе 6.
Diffutils (2.8.1):
ftp://ftp.gnu.org/gnu/diffutils/
Программы из этого пакета покажут вам различия между двумя файлами или директориями. Они обычно используются для создания патчей к программам.
Устанавливаемые программы: cmp, diff, diff3 и sdiff
cmp сравнивает два файла и возвращает информацию о различающихся байтах.
diff сравнивает два файла и возвращает информацию о различающихся строках.
diff3 сравнивает три файла построчно.
sdiff совмещает два файла и интерактивно выводит результаты.
Diffutils зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Sed.
Для инструкций по установке смотрите Раздел Установка 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 - это Bourne-Again SHell, который часто используется в качестве интерпритатора командной строки в Unix-системах. Программа bash считывает данные со стандартного ввода (клавиатуры). Пользователь вводит что-либо, а программа вычисляет, что именно он ввел и делает что-либо, например, запускает программу.
Устанавливаемые программы: bash, sh (ссылка на bash) и bashbug
bash часто используемый интерпритатор команд. Он поддерживает различные расширения и подстановки в получаемой командной строке, что делает его весьма мощным средством.
bashbug - shell-скрипт для помощи пользователю в составлении и отправке сообщения об ошибке, относящейся к bash, в стандартном формате.
sh - ссылка на программу bash. При вызове как sh, bash запускается в режиме эмуляции исторической версии sh, насколько это возможно, для большего соответствия стандартам POSIX.
Bash зависит от: Binutils, Coreutils, Diffutils, Gawk, GCC, Glibc, Grep, Make, Ncurses, Sed.
Для получения инструкций по установке смотрите Раздел Установка Flex-2.5.4a в Главе 6.
Flex (2.5.4a):
ftp://ftp.gnu.org/non-gnu/flex/
Пакет Flex используется для генерации программ, распознающих шаблоны в тексте.
Устанавливаемые программы: flex, flex++ (ссылка на flex) и lex
Устанавливаемая библиотека: libfl.a
flex является сретством для генерации программ. которые распознают шаблоны в тексте. Шаблоны для распознавания используются многими приложениями. Используя заданные правила поиска, flex создает программу, которая их использует в шаблонах. Причиной для использования flex является простота задания правил по сравнению с написанием собственной программы поиска по шаблону.
flex++ вызывает версию flex, используемую в сканерах C++.
libfl.a - библиотека flex.
Flex зависит от: Bash, Binutils, Bison, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, M4, Make, Sed.
Для получения инструкций по установке смотрите Раздел Установка 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 - это библиотека 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 зависит от: Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Gettext, Grep, Make, Perl, Sed, Texinfo.
Linux From Scratch: Версия 5.0 | ||
---|---|---|
Назад |
|
Это список программ и библиотек, устанавливаемых в этой книге, со ссылками на описание содержащих их пакетов в Приложении A.
a2p : Perl
acinstall : Automake
aclocal : Automake
addftinfo : Groff
addr2line : Binutils
afmtodit : Groff
agetty : Util-linux
apropos : Man
ar : Binutils
arch : Util-linux
arp : Net-tools
as : Binutils
attrs : Perl
autoconf : Autoconf
autoheader : Autoconf
autom4te : Autoconf
automake : Automake
autopoint : Gettext
autoreconf : Autoconf
autoscan : Autoconf
autoupdate : Autoconf
awk : Gawk
badblocks : E2fsprogs
basename : Coreutils
bash : Bash
bashbug : Bash
bigram : Findutils
bison : Bison
blkid : E2fsprogs
blockdev : Util-linux
bunzip2 : Bzip2
bzcat : Bzip2
bzcmp : Bzip2
bzdiff : Bzip2
bzegrep : Bzip2
bzfgrep : Bzip2
bzgrep : Bzip2
bzip2 : Bzip2
bzip2recover : Bzip2
bzless : Bzip2
bzmore : Bzip2
c++ : GCC
c++filt : Binutils
c2ph : Perl
cal : Util-linux
captoinfo : Ncurses
cat : Coreutils
catchsegv : Glibc
cc : GCC
cc1 : GCC
cc1plus : GCC
cfdisk : Util-linux
chage : Shadow
chattr : E2fsprogs
checkfs : LFS-Bootscripts
chfn : Shadow
chgrp : Coreutils
chkdupexe : Util-linux
chmod : Coreutils
chown : Coreutils
chpasswd : Shadow
chroot : Coreutils
chsh : Shadow
chvt : Kbd
cksum : Coreutils
cleanfs : LFS-Bootscripts
clear : Ncurses
cmp : Diffutils
code : Findutils
col : Util-linux
colcrt : Util-linux
collect2 : GCC
colrm : Util-linux
column : Util-linux
comm : Coreutils
compile : Automake
compile_et : E2fsprogs
config.charset : Gettext
config.guess : Automake
config.rpath : Gettext
config.sub : Automake
cp : Coreutils
cpp : GCC
csplit : Coreutils
ctrlaltdel : Util-linux
cut : Coreutils
cytune : Util-linux
date : Coreutils
dd : Coreutils
ddate : Util-linux
deallocvt : Kbd
debugfs : E2fsprogs
depcomp : Automake
depmod : Modutils
df : Coreutils
diff : Diffutils
diff3 : Diffutils
dir : Coreutils
dircolors : Coreutils
dirname : Coreutils
dmesg : Util-linux
dnsdomainname : Net-tools
domainname : Net-tools
dpasswd : Shadow
dprofpp : Perl
du : Coreutils
dumpe2fs : E2fsprogs
dumpkeys : Kbd
e2fsck : E2fsprogs
e2image : E2fsprogs
e2label : E2fsprogs
echo : Coreutils
ed : Ed
efm_filter.pl : Vim
efm_perl.pl : Vim
egrep : Grep
elisp-comp : Automake
elvtune : Util-linux
env : Coreutils
enc2xs : Perl
eqn : Groff
e2n2graph : Groff
ex : Vim
expand : Coreutils
expiry : Shadow
expr : Coreutils
factor : Coreutils
faillog : Shadow
false : Coreutils
fdformat : Util-linux
fdisk : Util-linux
fgconsole : Kbd
fgrep : Grep
file : File
find : Findutils
find2perl : Perl
findfs : E2fsprogs
flex : Flex
flex++ : Flex
fmt : Coreutils
fold : Coreutils
frcode : Findutils
free : Procps
fsck : E2fsprogs
fsck.cramfs : Util-linux
fsck.ext2 : E2fsprogs
fsck.ext3 : E2fsprogs
fsck.minix : Util-linux
ftp : Inetutils
functions : LFS-Bootscripts
fuser : Psmisc
g++ : GCC
gawk : Gawk
gcc : GCC
gccbug : GCC
gcov : GCC
gencat : Glibc
genksyms : Modutils
geqn : Groff
getconf : Glibc
getent : Glibc
getkeycodes : Kbd
getopt : Util-linux
gettext : Gettext
gettextize : Gettext
getunimap : Kbd
glibcbug : Glibc
gpasswd : Shadow
gprof : Binutils
grcat : Gawk
grep : Grep
grn : Groff
grodvi : Groff
groff : Groff
groffer : Groff
grog : Groff
grolbp : Groff
grolj4 : Groff
grops : Groff
grotty : Groff
groupadd : Shadow
groupdel : Shadow
groupmod : Shadow
groups : Shadow
groups : Coreutils
grpck : Shadow
grpconv : Shadow
grpunconv : Shadow
gtbl : Groff
gunzip : Gzip
gzexe : Gzip
gzip : Gzip
h2ph : Perl
h2xs : Perl
halt : LFS-Bootscripts
halt : Sysvinit
head : Coreutils
hexdump : Util-linux
hostid : Coreutils
hostname : Gettext
hostname : Net-tools
hostname : Coreutils
hpftodit : Groff
http-get : Lfs-Utils
hwclock : Util-linux
iana-net : Lfs-Utils
iconv : Glibc
iconvconfig : Glibc
id : Coreutils
ifconfig : Net-tools
ifdown : LFS-Bootscripts
ifnames : Autoconf
ifup : LFS-Bootscripts
igawk : Gawk
indxbib : Groff
info : Texinfo
infocmp : Ncurses
infokey : Texinfo
infotocap : Ncurses
init : Sysvinit
insmod : Modutils
insmod_ksymoops_clean : Modutils
install : Coreutils
install-info : Texinfo
install-sh : Automake
ipcrm : Util-linux
ipcs : Util-linux
isosize : Util-linux
join : Coreutils
kallsyms : Modutils
kbdrate : Kbd
kbd_mode : Kbd
kernelversion : Modutils
kill : Procps
kill : Coreutils
kill : Util-linux
killall : Psmisc
killall5 : Sysvinit
klogd : Sysklogd
ksyms : Modutils
last : Sysvinit
lastb : Sysvinit
lastlog : Shadow
ld : Binutils
ld.so : Glibc
ldconfig : Glibc
ldd : Glibc
lddlibc4 : Glibc
less : Less
less.sh : Vim
lessecho : Less
lesskey : Less
lex : Flex
libanl : Glibc
libasprintf : Gettext
libbfd : Binutils
libblkid : E2fsprogs
libBrokenLocale : Glibc
libbsd-compat : Glibc
libbz2 : Bzip2
libc : Glibc
libcom_err : E2fsprogs
libcrypt : Glibc
libcurses : Ncurses
libc_nonshared : Glibc
libdl : Glibc
libe2p : E2fsprogs
libext2fs : E2fsprogs
libfl : Flex
libform : Ncurses
libg : Glibc
libgcc* : GCC
libgettextlib : Gettext
libgettextpo : Gettext
libgettextsrc : Gettext
libiberty : GCC
libieee : Glibc
libltdl* : Libtool
libm : Glibc
libmagic : File
libmcheck : Glibc
libmemusage : Glibc
libmenu : Ncurses
libmisc : Shadow
libncurses* : Ncurses
libnetcfg : Perl
libnsl : Glibc
libnss* : Glibc
libopcodes : Binutils
libpanel : Ncurses
libpcprofile : Glibc
libperl : Perl
libproc : Procps
libpthread : Glibc
libresolv : Glibc
librpcsvc : Glibc
librt : Glibc
libSegFault : Glibc
libshadow : Shadow
libss : E2fsprogs
libstdc++ : GCC
libsupc++ : GCC
libthread_db : Glibc
libtool : Libtool
libtoolize : Libtool
libutil : Glibc
libuuid : E2fsprogs
liby : Bison
libz : Zlib
line : Util-linux
link : Coreutils
lkbib : Groff
ln : Coreutils
loadkeys : LFS-Bootscripts
loadkeys : Kbd
loadunimap : Kbd
locale : Glibc
localedef : Glibc
localnet : LFS-Bootscripts
locate : Findutils
logger : Util-linux
login : Shadow
logname : Coreutils
logoutd : Shadow
logsave : E2fsprogs
look : Util-linux
lookbib : Groff
losetup : Util-linux
ls : Coreutils
lsattr : E2fsprogs
lsdev : Procinfo
lsmod : Modutils
m4 : M4
make : Make
MAKEDEV : Makedev
makeinfo : Texinfo
makewhatis : Man
man : Man
man2dvi : Man
man2html : Man
mapscrn : Kbd
mcookie : Util-linux
md5sum : Coreutils
mdate-sh : Automake
mesg : Sysvinit
missing : Automake
mkdir : Coreutils
mke2fs : E2fsprogs
mkfifo : Coreutils
mkfs : Util-linux
mkfs.bfs : Util-linux
mkfs.cramfs : Util-linux
mkfs.ext2 : E2fsprogs
mkfs.ext3 : E2fsprogs
mkfs.minix : Util-linux
mkinstalldirs : Automake
mklost+found : E2fsprogs
mknod : Coreutils
mkpasswd : Shadow
mkswap : Util-linux
mktemp : Lfs-Utils
mk_cmds : E2fsprogs
mmroff : Groff
modinfo : Modutils
modprobe : Modutils
more : Util-linux
mount : Util-linux
mountfs : LFS-Bootscripts
mountproc : LFS-Bootscripts
msgattrib : Gettext
msgcat : Gettext
msgcmp : Gettext
msgcomm : Gettext
msgconv : Gettext
msgen : Gettext
msgexec : Gettext
msgfilter : Gettext
msgfmt : Gettext
msggrep : Gettext
msginit : Gettext
msgmerge : Gettext
msgunfmt : Gettext
msguniq : Gettext
mtrace : Glibc
mv : Coreutils
mve.awk : Vim
namei : Util-linux
nameif : Net-tools
neqn : Groff
netstat : Net-tools
network : LFS-Bootscripts
newgrp : Shadow
newusers : Shadow
ngettext : Gettext
nice : Coreutils
nisdomainname : Net-tools
nl : Coreutils
nm : Binutils
nohup : Coreutils
nroff : Groff
nscd : Glibc
nscd_nischeck : Glibc
objcopy : Binutils
objdump : Binutils
od : Coreutils
oldps : Procps
openvt : Kbd
parse.bash : Util-linux
parse.tcsh : Util-linux
passwd : Shadow
paste : Coreutils
patch : Patch
pathchk : Coreutils
pcprofiledump : Glibc
perl : Perl
perlbug : Perl
perlcc : Perl
perldoc : Perl
perlivp : Perl
pfbtops : Groff
pg : Util-linux
pgawk : Gawk
pgrep : Procps
pic : Groff
pic2graph : Groff
piconv : Perl
pidof : Sysvinit
ping : Inetutils
pinky : Coreutils
pivot_root : Util-linux
pkill : Procps
pl2pm : Perl
plipconfig : Net-tools
pltags.pl : Vim
pmap : Procps
pod2html : Perl
pod2latex : Perl
pod2man : Perl
pod2text : Perl
pod2usage : Perl
podchecker : Perl
podselect : Perl
post-grohtml : Groff
poweroff : Sysvinit
pr : Coreutils
pre-grohtml : Groff
printenv : Coreutils
printf : Coreutils
procinfo : Procinfo
project-id : Gettext
ps : Procps
psed : Perl
psfaddtable : Kbd
psfgettable : Kbd
psfstriptable : Kbd
psfxtable : Kbd
pstree : Psmisc
pstruct : Perl
ptx : Coreutils
pt_chown : Glibc
pwcat : Gawk
pwck : Shadow
pwconv : Shadow
pwd : Coreutils
pwunconv : Shadow
py-compile : Automake
ramsize : Util-linux
ranlib : Binutils
rarp : Net-tools
raw : Util-linux
rc : LFS-Bootscripts
rcp : Inetutils
rdev : Util-linux
re : Perl
readelf : Binutils
readlink : Coreutils
readprofile : Util-linux
reboot : LFS-Bootscripts
reboot : Sysvinit
red : Ed
ref : Vim
refer : Groff
rename : Util-linux
renice : Util-linux
reset : Ncurses
resize2fs : E2fsprogs
resizecons : Kbd
rev : Util-linux
rlogin : Inetutils
rm : Coreutils
rmdir : Coreutils
rmmod : Modutils
rmt : Tar
rootflags : Util-linux
route : Net-tools
rpcgen : Glibc
rpcinfo : Glibc
rsh : Inetutils
runlevel : Sysvinit
rview : Vim
rvim : Vim
s2p : Perl
script : Util-linux
sdiff : Diffutils
sed : Sed
sendsignals : LFS-Bootscripts
seq : Coreutils
setclock : LFS-Bootscripts
setfdprm : Util-linux
setfont : Kbd
setkeycodes : Kbd
setleds : Kbd
setlogcons : Kbd
setmetamode : Kbd
setsid : Util-linux
setterm : Util-linux
setvesablank : Kbd
sfdisk : Util-linux
sg : Shadow
sh : Bash
sha1sum : Coreutils
showconsolefont : Kbd
showkey : Kbd
shred : Coreutils
shtags.pl : Vim
shutdown : Sysvinit
size : Binutils
skill : Procps
slattach : Net-tools
sleep : Coreutils
sln : Glibc
snice : Procps
socklist : Procinfo
soelim : Groff
sort : Coreutils
splain : Perl
split : Coreutils
sprof : Glibc
stat : Coreutils
strings : Binutils
strip : Binutils
stty : Coreutils
su : Coreutils
sulogin : Sysvinit
sum : Coreutils
swap : LFS-Bootscripts
swapoff : Util-linux
swapon : Util-linux
sync : Coreutils
sysctl : Procps
sysklogd : LFS-Bootscripts
syslogd : Sysklogd
tac : Coreutils
tack : Ncurses
tail : Coreutils
talk : Inetutils
tar : Tar
tbl : Groff
tcltags : Vim
team-address : Gettext
tee : Coreutils
telinit : Sysvinit
telnet : Inetutils
tempfile : Lfs-Utils
template : LFS-Bootscripts
test : Coreutils
test.bash : Util-linux
test.tcsh : Util-linux
texi2dvi : Texinfo
texindex : Texinfo
tfmtodit : Groff
tftp : Inetutils
tic : Ncurses
tload : Procps
toe : Ncurses
top : Procps
touch : Coreutils
tput : Ncurses
tr : Coreutils
trigger : Gettext
troff : Groff
true : Coreutils
tset : Ncurses
tsort : Coreutils
tty : Coreutils
tune2fs : E2fsprogs
tunelp : Util-linux
tzselect : Glibc
ul : Util-linux
umount : Util-linux
uname : Coreutils
uncompress : Gzip
unexpand : Coreutils
unicode_start : Kbd
unicode_stop : Kbd
uniq : Coreutils
unlink : Coreutils
updatedb : Findutils
uptime : Coreutils
uptime : Procps
urlget : Gettext
user-email : Gettext
useradd : Shadow
userdel : Shadow
usermod : Shadow
users : Coreutils
utmpdump : Sysvinit
uuidgen : E2fsprogs
vdir : Coreutils
vi : Vim
vidmode : Util-linux
view : Vim
vigr : Shadow
vim : Vim
vim132 : Vim
vim2html.pl : Vim
vimdiff : Vim
vimm : Vim
vimspell.sh : Vim
vimtutor : Vim
vipw : Shadow
vmstat : Procps
w : Procps
wall : Sysvinit
watch : Procps
wc : Coreutils
whatis : Man
whereis : Util-linux
who : Coreutils
whoami : Coreutils
write : Util-linux
xargs : Findutils
xgettext : Gettext
xsubpp : Perl
xtrace : Glibc
xxd : Vim
yacc : Bison
yes : Coreutils
ylwrap : Automake
ypdomainname : Net-tools
zcat : Gzip
zcmp : Gzip
zdiff : Gzip
zdump : Glibc
zegrep : Gzip
zfgrep : Gzip
zforce : Gzip
zgrep : Gzip
zic : Glibc
zless : Gzip
zmore : Gzip
znew : Gzip
zsoelim : Groff
Это версия 5.0 книги Linux From Scratch, датированая 5-м ноября 2003 г. Если этой книге больше двух месяцев, то более новая и улучшеная версия, возможно, уже есть на одном из зеркал из списка на http://www.linuxfromscratch.org/.
5.0 - 5 ноября 2003
Обновлены до:
automake-1.7.6
bash-2.05b
binutils-2.14
e2fsprogs-1.34
file-4.04
findutils-4.1.20
gawk-3.1.3
gcc-3.3.1
gettext-0.12.1
glibc-2.3.2
glibc-2.3.2-sscanf-1.patch
grep-2.5.1
groff-1.19
gzip-1.3.5
less-381
lfs-bootscripts-1.12
libtool-1.5
linux-2.4.22
man-1.5m2
man-1.5m2-80cols.patch
man-1.5m2-manpath.patch
man-1.5m2-pager.patch
man-pages-1.60
modutils-2.4.25
procps-3.1.11
procps-3.1.11.patch
psmisc-21.3
sed-4.0.7
sysvinit-2.85
tar-1.13.25
texinfo-4.6
util-linux-2.12
vim-6.2
Добавлены:
bash-2.05b-2.patch
bison-1.875-attribute.patch
coreutils-5.0
coreutils-5.0-uname.patch
coreutils-5.0-hostname-2.patch
dejagnu-1.4.3
expect-5.39.0
expect-5.39.0.patch
gawk-3.1.3.patch
gcc-2.95.3
gcc-2.95.3-2.patch
gcc-2.95.3-no-fixinc.patch
gcc-2.95.3-returntype-fix.patch
gcc-3.3.1-no_fixincludes-2.patch
gcc-3.3.1-specs-2.patch
gcc-3.3.1-suppress-libiberty.patch
grub-0.93
grub-0.93-gcc33-1.patch
inetutils-1.4.2
lfs-utils-0.3
ncurses-5.3-etip-2.patch
ncurses-5.3-vsscanf.patch
perl-5.8.0-libc-3.patch
shadow-4.0.3-newgroup-fix.patch
tcl-8.4.4
zlib-1.1.4-vsnprintf.patch
Удалены:
bin86-0.16.3
fileutils-4.1
fileutils-4.1.patch
findutils-4.1-segfault.patch
findutils-4.1.patch
glibc-2.3.1-libnss.patch
glibc-2.3.1-root-perl.patch
gzip-1.2.4b.patch
lilo-22.2
netkit-base-0.17
sh-utils-2.0
sh-utils-2.0.patch
sh-utils-2.0-hostname.patch
tar-1.13.patch
textutils-2.1
vim-6.1.patch
November 2nd, 2003 [alex]: Appendix A - Commented out all the "last checked against" lines.
October 28th, 2003 [greg]: Strengthened the seds in "Locking in Glibc" and "Re-adjusting the toolchain" sections.
October 26th, 2003 [greg]: Chapter 6 - Glibc: Added command to create /etc/ld.so.conf to match Chapter 5 Glibc. Closes bug 700.
October 24th, 2003 [alex]: Appendix A - Changed the dependencies to the concise format, based on Tushar's post .
October 23rd, 2003 [gerard] Chapter 9 - The End: Changed the /etc/lfs filename to /etc/lfs-release to be more consistent with other distributions out there.
October 23rd, 2003 [alex]: Changed most of the "Chapter" references to proper "xref" cross references .
October 22nd, 2003 [alex]: Chapter 6 - Gawk and Shadow: Adjusted the text. And added some markup elsewhere.
October 22nd, 2003 [alex]: Chapter 6 - Entering the chroot environment: Dropped the set +h command, as it is pointless there: it's redone several sections later.
October 15th, 2003 [greg]: Chapter 9: Reworked final strip command. Relocated paragraphs about directory removal from Chapter 6.
October 14th, 2003 [greg]: Chapter 8 - Making the LFS system bootable: Expanded Grub details and added a warning.
October 14th, 2003 [alex]: Appendix A - Updated the contents of Perl and Procps.
October 14th, 2003 [alex]: Chapter 4 and 5 - Added a suggestion to use $LFS/sources as the working and storage place.
October 13th, 2003 [greg]: Chapter 9 - Rebooting the system: Reworked umount commands.
October 11th, 2003 [alex]: Adapted the required disk space values and SBUs, as posted by Bruce Dubbs.
October 11th, 2003 [alex]: Chapter 5 - Toolchain technical notes: Added and changed some markup.
October 9th, 2003 [gerard]: Upgraded to lfs-bootscripts-1.12.
October 9th, 2003 [greg]: Performed internal markup reworking to fix an extraneous whitespace problem in "tidy generated" web site pages. Essentially replace all occurrences of <para><screen> with <screen> (and the matching closing tags).
October 9th, 2003 [alex]: Chapter 6 - Basic Networking: Moved one half to the Lfs-Utils section, the other half to Perl.
October 8th, 2003 [alex]: Chapter 8 - Making bootable: Adapted the style of the screens, and reworded some paragraphs.
October 8th, 2003 [alex]: Removed a series of unused entities.
October 7th, 2003 [jeremy]: Added notes to the linking tests in chapter 5 and 6 stating that blank output is a bad thing.
October 7th, 2003 [alex]: Changed the patch entities to contain the full filename instead of just the version number.
October 7th, 2003 [jeremy]: Chapter 1 - Added a note regarding #LFS-support on IRC.
October 7th, 2003 [greg]: Preface: Add note about the Essential Pre-Reading Hint. Closes Bug 585.
October 6th, 2003 [alex]: Changed the style of the Contents subsections in Chapters 5 and 6 and Appendix A.
October 6th, 2003 [greg]: Simplified seds in "Locking in Glibc" and "Re-adjusting the toolchain" sections. Rearranged "How things are going to be done" section.
October 5th, 2003 [greg]: Chapter 5: Added new section "Toolchain technical notes". Integrated and scaled back the old "Why we use static linking" section. Closes Bug 658.
October 4th, 2003 [alex]: Minor rewordings and additions of markup here and there.
October 4th, 2003 [greg]: Chapter 5 - Binutils Pass 1: Added extra LDFLAGS to ensure static rebuild of ld.
October 2nd, 2003 [greg]: Chapter 6: Reinstated INSTALL=/tools/bin/install for linker adjustment command due to issues on hosts where a ginstall symlink exists. This renders the "install" symlinks redundant, so removed those too.
October 2nd, 2003 [greg]: Chapter 6 - Shadow: Enabled MD5 passwords. Closes Bug 600.
September 27th, 2003 [greg]: Chapter 5 - Expect: Tweaked install so that redundant scripts are not installed. Chapter 6 - Creating essential symlinks: Removed redundant links. Chapter 6 - man: Removed PATH, closes Bug 574.
September 27th, 2003 [greg]: Added Tcl, Expect and DejaGnu items to Appendix A. Closes Bug 661.
September 26th, 2003 [jeremy]: Added new workaround for the devpts problems.
September 24th, 2003 [greg]: Various changes across the board addressing Bug 675.
September 24th, 2003 [alex]: Appendix A - Changed the style of the short descriptions, and the content of most of them too.
September 22nd, 2003 [greg]: Chapter 8 - Creating the /etc/fstab file: Made mounting devpts the default.
September 22nd, 2003 [jeremy]: Added Net-tools patch to fix mii-tool compilation.
September 22nd, 2003 [jwrober]: Chapter 5 - Updated the Why Static page to more accurately represent the difference between statically and dynamically linked binaries. Thanks to Ian Molton for pointing this out. Fixes Bug 602.
September 22nd, 2003 [jeremy]: Removed the make command from DejaGnu, since it performs nothing.
September 22nd, 2003 [jeremy]: Removed the -k from Tcl's make check, since it's not expected to have failures anymore
September 22nd, 2003 [jeremy]: Changed the reference to the man hint to a pointer to BLFS.
September 22nd, 2003 [jeremy]: Added a note to remember to mount devpts if you exit and re-enter chroot.
September 22nd, 2003 [jeremy]: Removed make check from Patch and Diffutils, since these tests perform no actions.
September 22nd, 2003 [greg]: Chapter 5 - Setting up the environment: Added unset CC CXX CPP LD_LIBRARY_PATH LD_PRELOAD to .bash_profile to stop accidental build breakage.
September 20th, 2003 [greg]: Chapter 5 - GCC Pass 2: Updated to gcc-3.3.1-specs-2.patch. Ncurses: added --enable-overwrite and description.
September 19th, 2003 [jeremy]: Corrected bash tags for proper use of the +h flag to bash.
September 19th, 2003 [jwrober]: Various updates to the acknowledgments page.
September 18th, 2003 [jeremy]: Chapter 5 - GCC Pass 2: Added some extra comments regarding the 3 tarballs to unpack.
September 17th, 2003 [greg]: Chapter 6 - GCC-2.95.3: Added rationale notes.
September 17th, 2003 [jwrober]: Updated the acknowledgments page to match the website.
September 17th, 2003 [jeremy]: Upgraded File to 4.04.
September 17th, 2003 [jeremy]: Chapter 6 - Changed 2 of the occurrences of exec bash --login to include the +h directive.
September 17th, 2003 [greg]: Chapters 5 and 6 - Locking in Glibc and Re-adjusting the toolchain: Do "make -C ld install" instead of "make -C ld install-data-local" to install a whole new linker instead of just the new ldscripts.
September 17th, 2003 [alex]: Normalized the spelling of 'Tcl' and 'DejaGnu', following their own documentation.
September 17th, 2003 [alex]: Properly alphabetized the dependencies.
September 16th, 2003 [alex]: Finally updated the dependencies for the new Coreutils.
September 16th, 2003 [greg]: Chapters 5 and 6 - Locking in Glibc and Re-adjusting the toolchain: Added sanity checks.
September 16th, 2003 [greg]: Chapters 5 and 6 - Binutils, GCC, and Glibc: Added notes on the test suites.
September 15th, 2003 [alex]: Corrected several typos and some inconsistencies.
September 14th, 2003 [greg]: Chapter 6 - Revised chroot command: Removed no longer needed set +h.
September 14th, 2003 [alex]: Fixed some typos, and added some markup. Dropped the removal of program files from the Stripping section in Chapter 5.
September 14th, 2003 [greg]: Chapter 6 - Create essential symlinks: Add symlink /usr/lib/libgcc_s.so.1 to allow GCC abi_check to run. Future NPTL needs this as well.
September 13th, 2003 [jwrober]: Added PLFS hint text to the page in Chapter 6 for creating passwd and group: bug 596.
September 13th, 2003 [jwrober]: Updated the "How things are going to be done" page to include more of the PLFS hint's text.
September 13th, 2003 [jwrober]: Preface - Merged whoread and whonotread into a single audience page.
September 13th, 2003 [greg]: Chapter 2 - Added new section about the test suites.
September 12th, 2003 [jeremy]: Chapter 5 - Ncurses: Added description for the --without-ada configure switch.
September 12th, 2003 [jeremy]: Chapter 5 - Gawk: Added the test suite
September 12th, 2003 [jeremy]: Chapter 5 - Grep: Added descriptions of configure switches courtesy of Anderson Lizardo
September 12th, 2003 [gerard]: Removed /usr/lib/locale directory creation - it's created during Chapter 6 - Glibc where it's more relevant.
September 11th, 2003 [jwrober]: Chapter 5 - Fixed GCC Pass 2 specs patch text to be more vague, but in actuality more accurate - provided by Anderson Lizardo.
September 11th, 2003 [jwrober]: Chapter 5 - Grammar fix in Tcl install directions provided by Anderson Lizardo.
September 11th, 2003 [jwrober]: Chapter 5 - Small textual change in the locking in Glibc page for /lib/ld.so.1 provided by Anderson Lizardo.
September 11th, 2003 [jeremy]: Added bootloader setup to Chapter 8, after the addition of Grub to the book.
September 11th, 2003 [gerard]: Removed Bin86 and LILO and replaced it with Grub.
September 11th, 2003 [jeremy]: Dropped non-toolchain tests to optional actions. Added a note to use the Wiki for failed tests.
September 11th, 2003 [jeremy]: Added Bison patch, backported from CVS, to fix pwlib compilation problems
September 11th, 2003 [jeremy]: Added Greg's patch to GCC to suppress the installation of libiberty, and changed Binutils to allow its libiberty to stay.
September 11th, 2003 [jeremy]: Added caution tags around the reminder to not delete the Binutils source and build directories in Chapter 5.
September 11th, 2003 [jeremy]: Added new perl-libc-3 patch from Anderson Lizardo
September 9th, 2003 [jwrober]: Fixed the Findutils package download link on the packages page closing bug 578.
September 9th, 2003 [jeremy]: Chapter 6 - GCC 2.95.3: Removed compilation of C++, added Zack's return-type patch.
September 9th, 2003 [jeremy]: Chapter 6 - Coreutils: Added coreutils-5.0-hostname-2.patch, which suppresses the build of the hostname binary, and also suppresses its check.
September 9th, 2003 [jeremy]: Added some notes regarding failed tests to Glibc and DejaGnu.
September 9th, 2003 [jeremy]: Glibc - Added commands to both Chapter 5 and 6 to include minimum locales necessary for checks.
September 9th, 2003 [jeremy]: Chapter 6 - Removed Zlib's munging of CFLAGS in favor of a note to add -fPIC.
September 8th, 2003 [matt]: Chapter 5 - Fixed the rm command that deletes unneeded documentation from /tools/share.
September 6th, 2003 [matt]: Chapter 6 - Removed a reference to "the static" directory in the intro.
September 6th, 2003 [jeremy]: Chapter 4 - Updated download locations for some packages.
September 5th, 2003 [jeremy]: Chapter 5 - GCC Pass 2: Corrected the make check error explanation
September 5th, 2003 [jeremy]: Chapter 6 - Makedev: Changed the default device creation to generic-nopty, because we now use devpts by default.
September 5th, 2003 [jeremy]: Chapter 6 - GCC: Corrected wording to reflect the removal of the /usr/lib/cpp symlink.
September 5th, 2003 [jeremy]: Corrected perl libc patch to -2, changing the old /stage1 structure to /tools
September 5th, 2003 [matt]: Chapter 6 - Updated GCC specs patch and upgraded to man-1.5m2
September 4th, 2003 [jeremy]: Chapter 6 - Creating Directories: Eliminated the creation of /usr/tmp - Closes bug 176.
September 4th, 2003 [jeremy]: Chapter 6 - Mounting Proc: Added mounting the devpts filesystem into chroot here. Closes bug 533.
September 4th, 2003 [jeremy]: Chapter 6 - Mounting Proc: Added a warning at the end regarding checking that proc is still mounted if you stop and restart the lfs process.
September 4th, 2003 [jeremy]: Chapter 6 - Gzip: Altered text to better explain the reason behind the sed command used in the gzip installation. Closes bug 551.
September 4th, 2003 [jeremy]: Chapter 4 - Downloading patches: Added a note regarding Tushar's patches project, and a link to the patches home page.
September 3rd, 2003 [matt]: Fixed issue with Util-linux not utilizing headers and libraries installed in /stage1.
September 3rd, 2003 [matt]: Removed "rm /bin/pwd" instruction from Chapter 6 kernel-headers installation as the link is still required by Glibc's installation.
September 2nd, 2003 [alex]: Adjusted all the SBUs from the values posted by Jeremy.
September 2nd, 2003 [alex]: Finally got around to renaming /stage1 to /tools.
September 2nd, 2003 [alex]: Merged several of the main book structure files.
September 2nd, 2003 [alex]: Alphabetized download lists, added note to Tcl instructions.
September 2nd, 2003 [alex]: Reworded Organization, $LFS and SBUs sections.
September 1, 2003 [jeremy] - Chapter 6 - Groff - Added note about choice of A4 or letter for the PAGE variable.
September 1, 2003 [jeremy] - Added in shadow newgrp patch from Greg Schafer
August 31, 2003 [jeremy] - Chapter 6 - Inetutils - added the --disable-whois and --disable-servers flags
August 31, 2003 [jeremy] - Added in Greg's new instructions for GCC 3.3.1 with respect to the fixincludes process. Also added extra verbiage to the Locking in Glibc and GCC Pass 2 pages on the fixincludes process.
August 31st, 2003 [alex]: Reworded some paragraphs, added missing markup, and rearranged the changelog.
August 31st, 2003 [alex]: Wrapped the 'Last checked' lines in parentheses. Several other small retouches.
August 30, 2003 [jeremy] - Updated fix-includes patch to GCC 3.3.1
August 29, 2003 [jeremy] - Glibc - updated instructions with the sscanf patch from patches.
August 29, 2003 [jeremy] - Updated GCC to version 3.3.1, including fixes based on Zack's mini-hint for GCC 3.3, and patches from his docs.
August 29th, 2003 [alex]: Removed obsolete Netkit-base, Fileutils, Sh-utils, and Textutils files.
August 29th, 2003 [alex]: Added some missing markup, changed a few /static's to /stage1's.
August 29th, 2003 [alex]: Chapter 06 - Added all the missing text lines before the make checks, and reworded other lines.
August 28, 2003 [matt] - Updated packages to linux-2.4.22, man-pages-1.60, expect-5.39.0, findutils-4.1.20 and tcl-8.4.4
August 28, 2003 [jeremy] - New bash-2.05b-2.patch file to include the 7 patches from ftp.gnu.org
August 28th, 2003 [alex]: Chapter 06 - Re-adjusting toolchain: Added a forgotten backslash.
August 28th, 2003 [alex]: Fixed a few typos and added some missing markup.
August 28th, 2003 [alex]: Chapter 06 - Binutils and GCC: Integrated text from the pure-lfs hint.
August 27, 2003 [jeremy] - Chapter 06 - Inetutils: Added --sysconfdir=/etc --localstatedir=/var and moved the ping binary from /usr/bin to /bin
August 27th, 2003 [alex]: Chapter 06 - Glibc: Integrated text from the pure-lfs hint.
August 26, 2003 [jeremy] - Chapter 07 - Creating /etc/hosts: Changed www.mydomain.org to <value of HOSTNAME>.mydomain.org
August 26th, 2003 [alex]: Chapter 06 & 08 - Moved the installation of the kernel manpages from chapter 6 to 8.
August 26, 2003 [jeremy] - Chapter 04 - Mounting the LFS partition: Added text regarding mounting with too restrictive permissions.
August 26, 2003 [jeremy] - Chapter 06 - Creating Directories: Added the creation of the /dev/shm directory.
August 26, 2003 [jeremy] - Chapter 08 - Creating fstab: Added the mount of tmpfs filesystem to /dev/shm.
August 26, 2003 [jeremy] - Chapter 08 - Kernel Installation: Added a reminder to compile tmpfs support into the kernel.
August 25th, 2003 [alex]: Chapter 06 - Rewrote the installation text of Shadow and Util-Linux while correcting some typos.
August 25th, 2003 [alex]: Chapter 05 & 06 - Made the "Locking in" and "Re-adjusting" look similar.
August 24th, 2003 [alex]: Chapter 04 - Merged the many little files into one file. Gave packages and patches a separate page.
August 17th, 2003 [alex]: Chapter 05 - From Bash to Perl: put text in between commands. Added a section on stripping unneeded symbols to decrease the size of the tools.
August 16th, 2003 [alex]: Chapter 05 - From Make to Texinfo: put text in between commands.
August 11th, 2003 [alex]: Chapter 05 - From Binutils Pass 1 to Findutils: several small textual adjustments. For the second passes not giving the contents and dependencies.
August 11th, 2003 [alex]: Chapter 04 - Listed separate core, g++, and test suite tarballs for GCC.
August 11th, 2003 [alex]: Chapter 04 - Suppressed the mention of a wget script.
August 9th, 2003 [alex]: Chapter 05 - Binutils Pass 2 and GCC Pass 2: integrated some text from the pure-lfs hint.
August 8th, 2003 [alex]: Chapter 05 - Tcl, Expect, and DejaGnu: added some text.
August 6th, 2003 [gerard]: Applied Alex Groenewoud's patch that adds Appendix B, providing a list of all installed programs and libraries plus references to the installation pages.
July 30th, 2003 [gerard]: Chapter 06 - Vim: Changed the way the global vimrc and gvimrc locations are defined.
July 30th, 2003 [gerard]: Chapter 05 - Binutils Pass 2: removed the lib patch, it's no longer needed with the binutils-2.14 upgrade.
July 30th, 2003 [gerard]: Chapter 05 Binutils Pass 1: Added make configure-host.
July 30th, 2003 [gerard]: Upgraded to binutils-2.14, linux-2.4.21, expect-5.38.4, gawk-3.1.3, texinfo-4.6, util-linux-2.12, man-pages-1.58, lfs-utils-0.3, vim-6.2, gettext-0.12.1, automake-1.7.6, file-4.03, e2fsprogs-1.34, procps-3.1.11, psmisc-21.3
June 3rd, 2003 [gerard]: Chapter 06 - Gawk: removed the removal of /bin/awk. This symlink isn't created anymore.
May 21st, 2003 [gerard]: Chapter 06 - GCC-2.95.3: Added /opt/gcc-2.95.3/lib to the /etc/ld.so.conf file so the libraries can be found during run-time.
May 21st, 2003 [gerard]: Chapter 05 - Gzip: Simplified commands.
May 21st, 2003 [gerard]: Chapter 05 - Bzip2: Simplified commands.
May 21st, 2003 [gerard]: Chapter 06 - Shadow: Added the grpconv command to complement the enabling of all shadowed passwords.
May 21st, 2003 [winkie]: Chapter 06 - Creating Files: All those ln commands can be made into a few long ln commands.
May 21st, 2003 [winkie]: Chapter 05 - Installing Glibc: Create an ld.so.conf file before building Glibc, to prevent an (harmless) error.
May 21st, 2003 [winkie]: Chapter 06 - Installing Glibc: Don't bother doing the 'exec /stage1/bin/bash' stuff, it doesn't do anything now that we use PLFS.
May 21st, 2003 [winkie]: Chapter 05 & 06 - Installing Coreutils: Only test the non-root stuff in Chapter 05, but test everything in Chapter 06.
May 21st, 2003 [winkie]: Chapter 05 - Installing Expect: Don't bother passing anything more than --prefix=/stage1. None of it is needed.
May 16th, 2003 [gerard]: Chapter 06: Net-tools: Changed make install to make update.
May 15th, 2003 [timothy]: Chapter 05: Installing Patch: Added CPPFLAGS=-D_GNU_SOURCE before ./configure to fix patch build on PPC.
May 13th, 2003 [gerard]: Chapter 06: When we exec /path/to/bash --login, also run set +h to keep the hashing option turned off. Fixes bug #531
May 13th, 2003 [gerard]: Chapter 06 - Basic Network: Changed the single quotes to double quotes in the echo command. Without it, $(hostname) won't expand which defeats the sole purpose of this command - to make Perl's hostname check work.
May 13th, 2003 [winkie]: Removed all occurrences &&. Updated bug syntax. Added "make check/test" where necessary in Chapter 6.
May 13th, 2003 [winkie]: Chapter 06: Applied "Changing ownership" patch to polish the text. Closes bug #511.
May 13th, 2003 [winkie]: Chapter 06: Applied "Configuring system components" patch to polish the text. Closes bug #510.
May 13th, 2003 [gerard]: Chapter 06: Removed Tcl, Expect and DejaGnu. Nothing uses this once past GCC in chapter 6. The versions in /stage1/bin do the job just fine.
May 13th, 2003 [winkie]: Chapter 06 - Installing Shadow: Touching the /usr/bin/passwd file before installation. Not doing so results in Shadow thinking passwd will be in /bin/passwd.
May 13th, 2003 [winkie]: Chapter 06 - Installing Procps: Remove the /lib/libproc.so symlink. No package outside of Procps itself uses this library, and none should.
May 13th, 2003 [winkie]: Chapter 06 - Installing Net-tools: Run "make config" before doing make. Fixes bugs #462 and #497.
May 13th, 2003 [gerard]: Chapter 06 - Ncurses: Added the vsscanf patch.
May 12th, 2003 [gerard]: Chapter 05 - Gzip: Removed make check. It doesn't do anything.
May 12th, 2003 [winkie]: Chapter 05 - Installing Texinfo: Don't install the texmf data. It's not used by anything.
May 12th, 2003 [winkie]: Chapter 05 & 06 - Installing Ncurses: In Chapter 6, symlink creation has been updated to include libcurses.*, and libncurses++.a has its properties changed to 644. Chapter 5 doesn't need any libcurses.* so those are removed.
May 12th, 2003 [gerard]: Chapter 06 - Basic Network: Added $(hostname) to /etc/hosts, without it Perl's hostname test doesn't pass.
May 12th, 2003 [gerard]: Chapter 06 - Installing GCC: Don't try to remove /usr/include/libiberty.h. It isn't installed in the first place.
May 12th, 2003 [winkie]: Upgraded to findutils-4.1.7, gzip-1.3.5, and tar-1.13.25.
May 12th, 2003 [winkie]: Chapter 05 - Installing Perl: Added extra commands to build certain modules into Perl. This is to accommodate the Coreutils "make check". Partially fixes bug #528.
May 12th, 2003 [winkie]: Chapter 05 - Installing Gzip: Nothing in Chapter 6 checks for or uses the uncompress command, therefore we shouldn't create it.
May 12th, 2003 [winkie]: Chapter 05 - Installing Bzip2: Running "make" implies "make check", therefore there is no reason whatsoever for us to run it manually.
May 12th, 2003 [winkie]: Chapter 05 - Installing Lfs-Utils: Removed. The only package that checks for mktemp before it is installed is GCC, and that's only for gccbug.
May 11th, 2003 [gerard]: Chapter 06 - GCC-2.95.3: Added --enable-threads=posix as well to complete the C++ addition.
May 11th, 2003 [gerard]: Chapter 06 - GCC-2.95.3: Added --enable-languages=c,c++ to fix that GCC's version bug with regards to -Wreturn-type. Fixes bug #525
May 11th, 2003 [gerard]: Chapter 05 - Bash: Removed the --without-bash-malloc configure option.
May 11th, 2003 [gerard]: Updated to gcc-3.2.3-specs-4.patch.
May 11th, 2003 [winkie]: Chapter 06 - Setting up Basic Networking: Added section. Create a basic /etc/hosts files, and create /etc/services and /etc/protocols from IANA. Fixes bugs #359 & #515.
May 11th, 2003 [winkie]: Upgrading to lfs-utils-0.2.2. This adds two files needed for proper networking configuration.
May 11th, 2003 [winkie]: Removed Netkit-base 0.17. Added Inetutils 1.4.2. Fixes bug #490.
May 11th, 2003 [winkie]: Added lfs-utils-0.2.1. Fixes bug #493.
May 11th, 2003 [winkie]: Chapter 06 - Installing Ncurses: Fix up the symlinks so that they follow suit of other library symlinks. No more weirdness here.
May 11th, 2003 [winkie]: Chapter 06 - Installing Procps: Removed XSCPT="" cruft and its corresponding paragraph. This stuff isn't needed anymore.
May 11th, 2003 [winkie]: Chapter 06 - Installing Ncurses: Pass --without-debug to the configure script. It seems to have gotten lost at some point.
May 11th, 2003 [timothy]: Chapter 5 & 6 - Installing Bzip2, Installing Zlib: Modified build commands per bug #524.
May 11th, 2003 [winkie]: Chapter 06 - Installing Glibc: Install the linuxthreads man pages, too. This got lost somewhere.
May 11th, 2003 [winkie]: Chapter 06 - Installing Grep: Added --with-included-regex to prevent Grep from using Glibc's somewhat bugged regex.
May 11th, 2003 [winkie]: Chapter 06 - Installing Coreutils: Fix some functionality of the uname command with a patch.
May 11th, 2003 [winkie]: Chapter 06 - Installing Net-tools: Just do regular old "make install" instead of "make update". The latter works fine now.
May 11th, 2003 [winkie]: Chapter 06 - Installing GCC: After installation, remove /usr/include/libiberty.h. It is not used outside of the GCC build tree.
May 11th, 2003 [winkie]: Upgraded to Bash 2.05b and added its patch.
May 11th, 2003 [winkie]: Chapter 06 - Installing Zlib: Apply a patch to fix the buffer overflow in gzprintf().
May 11th, 2003 [winkie]: Chapter 06 - Configuring system components: Moved the creation of the btmp, wtmp, lastlog and utmp to just before Shadow, so that they are detected at their proper locations.
May 10th, 2003 [winkie]: Chapter 06 - Installing Automake: Run "make" before installing. This is needed now with the newer releases of Automake.
May 10th, 2003 [winkie]: Chapter 06 - Installing Vim: Removed the patch. It hasn't been required since GCC 3.2.1.
May 10th, 2003 [winkie]: Chapter 06 - Creating the mtab file: Removed. Mounting /proc has the side effect of creating /etc/mtab for us.
May 10th, 2003 [winkie]: Chapter 06 - Installing Make: Removed modification of /usr/bin/make file. It is no longer mistakenly installed with strange ownership or permissions.
May 10th, 2003 [winkie]: Chapter 06 - Installing Glibc: Made /etc/localtime a file instead of a symlink. The symlink method breaks on systems where /usr is a separate partition.
May 10th, 2003 [winkie]: Chapter 06 - Installing E2fsprogs: Removed install-info commands for e2fsprogs. The "make install" target handles this for us.
May 10th, 2003 [gerard]: Removed all CFLAGS and LDFLAGS variables where they are not essential (so, not including static binutils, GCC and compiling Zlib with -fPIC).
May 10th, 2003 [gerard]: Chapter 05 - Binutils (pass1, pass2), locking in Glibc and adjusting toolchain: Changed tooldir to /stage1 (likewise we use tooldir=/usr in Chapter 6).
May 10th, 2003 [gerard]: Chapter 05 - Kernel headers: Removed the usage of cp -H because there are distributions out there that do not know about the -H option.
May 10th, 2003 [gerard]: New gcc-3.2.3-specs-3.patch.
May 10th, 2003 [gerard]: Chapter 06 - Adjusting toolchain: Made it more architecture-independent.
May 10th, 2003 [gerard]: Chapter 05 - Locking in Glibc: Made it more architecture-independent.
May 7th, 2003 [gerard]: Removed GCC No Debug patches. No longer assume gcc-core and gcc-g++ packages are downloaded, so added appropriate --enable-languages options.
May 7th, 2003 [gerard]: Removed Chapter 6 - Glibc-Pass2. It's not needed anymore with the pure-lfs integration.
May 7th, 2003 [gerard]: Downgraded to flex-2.5.4a again. Newer versions just don't work properly.
May 5th, 2003 [gerard]: Removed zlib installation from chapter 5 (its inclusion was a mistake).
May 5th, 2003 [gerard]: Various bug fixes that were introduced during the pure-lfs integration.
May 2nd, 2003 [gerard]: Upgraded to: automake-1.7.4, e2fsprogs-1.33, file-4.02, flex-2.5.31, gawk-3.1.2, gcc-3.2.3, glibc-2.3.2, grep-2.5.1, groff-1.19, less-381, libtool-1.5, man-1.5l, man-pages-1.56, modutils-2.4.25, procps-3.1.8, sed-4.0.7, sysvinit-2.85, texinfo-4.5, util-linux-2.11z
May 2nd, 2003 [gerard]: Removed fileutils-4.1, sh-utils-2.0, textutils-2.1 (all replaced with coreutils-5.0).
May 2nd, 2003 [gerard]: Added binutils-2.13.2-libc.patch, coreutils-5.0, dejagnu-1.4.3, expect-5.38, gawk-3.1.2, gcc-2.95.3, tcl-8.4.2
May 2nd, 2003 [gerard] - Integrated new installation method from the Pure LFS hint written by Greg Schafer and Ryan Oliver.
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 и последующими главами.
Для облегчения понимания книги, ознакомьтесь с некоторыми соглашениями, которые будут в ней использованы:
./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" |
Такой раздел используется, в основном длоя создания файлов конфигурации. Первая команда говорит системе создать файл $LFS/etc/group, наполняя его строчками до EOF. В командной строке эта секция печатается в точности как на экране.
Мы хотим поблагодарить следующих людей и организации за их вклад в развитие проекта Linux From Scratch.
Gerard Beekmans <gerard@linuxfromscratch.org> -- Инициатор Linux-From-Scratch, организатор проекта LFS.
Matthew Burgess <matthew@linuxfromscratch.org> -- Поддержка LFS General Package, редактор книги LFS Book.
Craig Colton <meerkats@bellsouth.net> -- Логотипы LFS, ALFS, BLFS и Hints Project.
Jeroen Coumans <jeroen@linuxfromscratch.org> -- Разработка сайта, поддержка ЧАВО.
Bruce Dubbs <bdubbs@linuxfromscratch.org> -- Лидер LFS Quality Assurance Team, редактор книги BLFS.
Alex Groenewoud <alex@linuxfromscratch.org> -- Редактор книги LFS.
Mark Hymers <markh@linuxfromscratch.org> -- Поддержка CVS, создатель книги BLFS, редактор книги LFS.
James Iwanek <iwanek@linuxfromscratch.org> -- член System Administration Team.
Nicholas Leippe <nicholas@linuxfromscratch.org> -- Поддержка Wiki.
Anderson Lizardo <lizardo@linuxfromscratch.org> -- Создание и поддержка движка сайта.
Bill Maltby <bill@linuxfromscratch.org> -- Организатор LFS Project.
Scot Mc Pherson <scot@linuxfromscratch.org> -- поддержка LFS NNTP.
Ryan Oliver <ryan@linuxfromscratch.org> -- Лидер Testing Team, соавтор PLFS.
James Robertson <jwrober@linuxfromscratch.org> -- Поддержка Bugzilla, разработчик Wiki, редактор книги LFS.
Greg Schafer <greg@linuxfromscratch.org> -- Поддержка инструментальных средств, редактор книги LFS, соавтор PLFS.
Tushar Teredesai <tushar@linuxfromscratch.org> -- Редактор книги BLFS, поддержка Hints и Patches Projects.
Jeremy Utley <jeremy@linuxfromscratch.org> -- Редактор книги LFS, поддержка Bugzilla.
Множество людей из списков рассылки LFS и BLFS с их поддержкой, отчетами об ошибках и за их усердие в установке пакетов.
Manuel Canales Esparcia <macana@lfs-es.org> -- Spanish LFS translation project.
Johan Lenglet <johan@linuxfromscratch.org> -- French LFS translation project.
Anderson Lizardo <lizardo@linuxfromscratch.org> -- Portuguese LFS translation project.
Jason Andrade <jason@dstc.edu.au> -- au.linuxfromscratch.org mirror.
William Astle <lost@l-w.net> -- ca.linuxfromscratch.org mirror.
Baque <baque@cict.fr> -- lfs.cict.fr mirror.
Stephan Brendel <stevie@stevie20.de> -- lfs.netservice-neuss.de mirror.
Ian Chilton <ian@ichilton.co.uk> -- us.linuxfromscratch.org, linuxfromscratch.co.uk mirrors.
Fredrik Danerklint <fredan-lfs@fredan.org> -- se.linuxfromscratch.org mirror.
David D.W. Downey <pgpkeys@aeternamtech.com> -- lfs.learnbyexample.com mirror.
Eduardo B. Fonseca <ebf@aedsolucoes.com.br> -- br.linuxfromscratch.org mirror.
Hagen Herrschaft <hrx@hrxnet.de> -- de.linuxfromscratch.org mirror.
Tim Jackson <tim@idge.net> -- linuxfromscratch.idge.net mirror.
Barna Koczka <barna@siker.hu> -- hu.linuxfromscratch.org mirror.
Roel Neefs -- linuxfromscratch.rave.org mirror.
Simon Nicoll <sime@dot-sime.com> -- uk.linuxfromscratch.org mirror.
Ervin S. Odisho <ervin@activalink.net> -- lfs.activalink.net mirror.
Guido Passet <guido@primerelay.net> -- nl.linuxfromscratch.org mirror.
Mikhail Pastukhov <miha@xuy.biz> -- lfs.130th.net mirror.
Jeremy Polen <jpolen@rackspace.com> -- us2.linuxfromscratch.org mirror.
UK Mirror Service -- linuxfromscratch.mirror.co.uk mirror.
Thomas Skyt <thomas@sofagang.dk> -- dk.linuxfromscratch.org mirror.
Antonin Sprinzl <Antonin.Sprinzl@tuwien.ac.at> -- at.linuxfromscratch.org mirror.
Dag Stenstad <dag@stenstad.net> за обеспечение no.linuxfromscratch.org и Ian Chilton за его работу.
Parisian sysadmins <archive@doc.cs.univ-paris8.fr> -- www2.fr.linuxfromscratch.org mirror.
Jesse Tie-Ten-Quee <highos@linuxfromscratch.org> за обеспечение и работу сервера linuxfromscratch.org.
Alexander Velin <velin@zadnik.org> -- bg.linuxfromscratch.org mirror.
Martin Voss <Martin.Voss@ada.de> -- lfs.linux-matrix.net mirror.
Pui Yong <pyng@spam.averse.net> -- sg.linuxfromscratch.org mirror.
Dean Benson <dean@vipersoft.co.uk> за финансовую поддержку.
DREAMWVR.COM за их спонсорскую поддержку и пожертвования для LFS и сопутствующих проектов.
Hagen Herrschaft <hrx@hrxnet.de> за пожертвование 2.2 GHz P4 системы, ныне работает под именем lorien.
O'Reilly за пожертвование книг по SQL и PHP.
VA Software котоая через Linux.com пожертвовала рабочую станцию VA Linux 420 (former StartX SP2).
Mark Stone за пожертвование shadowfax, первого сервера linuxfromscratch.org, 750 MHz P3 с 512 MB RAM и двумя 9 GB SCSI дисками. После перемещения сервер переименовали в belgarath.
Jesse Tie-Ten-Quee <highos@linuxfromscratch.org> за пожертвование Yamaha CDRW 8824E CD-writer.
Множество людей из списков рассылки LFS за их поддержку, отчеты и критику.
Timothy Bauscher <timothy@linuxfromscratch.org> -- редактор книги LFS, поддержка Hints Project.
Robert Briggs за оригинальное пожертвование в виде доменов linuxfromscratch.org и linuxfromscratch.com.
Ian Chilton <ian@ichilton.co.uk> за поддержку Hints project.
Marc Heerdink <gimli@linuxfromscratch.org> -- редактор книги LFS.
Seth W. Klein <sklein@linuxfromscratch.org> -- создатель LFS FAQ.
Garrett LeSage <garrett@linuxart.com> -- создатель оригиналиных баннеров LFS.
Simon Perreault <nomis80@videotron.ca> -- поддержка Hints Project.
Geert Poels <Geert.Poels@skynet.be> -- создатель оригинальных баннеров BLFS, основаных на баннерах LFS от Garrett LeSage.
Frank Skettino <bkenoah@oswd.org> за идею дизайна старого сайта -- http://www.oswd.org/.
Jesse Tie-Ten-Quee <highos@linuxfromscratch.org> за его ответы в IRC и за его безграничное терпение.
Если в процессе построения вашей системы LFS вы обнаружили ошибку, у вас возникли вопросы, или вы считаете, что в книгу вкралась опечатка, то просмотрите в первую очередь наши ЧАВО (ЧАсто задаваемые ВОпросы) на http://www.linuxfromscratch.org/faq/.
Множество членов сообщества 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. О том, как создать такой раздел, будет подробно написано в Главе 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 после ввода команды.
Многие люди хотят заранее знать. сколько займет сборка и установка того или иного пакета. Но "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 машинах. Если вы являетесь счастливым обладателем многопроцессорного компьютера, то эта единица будет неточной.
Если вы столкнетесь с проблемой при использовании этой книги, и ваша проблема не будет описана в ЧАВО (http://www.linuxfromscratch.org/faq), то множество людей в Internet Relay Chat (IRC) и в списках рассылки будут рады вам помочь. Обзор списков рассылки LFS вы можете найти в Главе 1 - Списки рассылки. Для получения помощи в диагностике и устранении вашей проблемы вам надо будет дать наиболее полную информацию о ней в своем вопросе.
Помимо краткого сообщения об ошибке, не забудьте привести следующую информацию:
версия используемой книги (для этой - 5.0),
основной дистрибутив его версию,
пакет или раздел, с которыми у вас возникли проблемы,
сообщение об ошибке или симптомы проблемы,
отклонялись ли вы от шагов, описаных в книге.
(Имейте в виду, что если вы скажете, что отклонялись от действий, описаных в книге, то это не значит, что вам не помогут. Все таки LFS - это выбор. Просто это поможет решить вашу проблему.)
Если что-то пошло не так при выполнении скрипта configure, то посмотрите в файле config.log. Этот файл содержит ошибки, которые не были выведены на экран. Включите информацию из этого файла в просьбу о помощи.
Для того чтобы помочь нам найти причину проблемы, важен как вывод на экране, так и содержание некоторых файлов. Вывод на экране скрипта ./configure и команды make содержат много полезной информации. Не стоит слепо включать в свое сообщение весь вывод, но и не следует включать слишком мало информации. Ниже приведен вывод на экран команды make:
gcc -DALIASPATH=\"/mnt/lfs/usr/share/locale:.\" |
В этом случае большинство людей включайт в сообщение строку:
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 |
Замените xxx на имя вашего раздела LFS.
Если вы решили использовать несколько разделов для LFS (одну для /, другую для /usr), примонтируйте их следующим образом:
mkdir -p $LFS |
Само собой, вам надо заменить 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.
Скачайте или получите другим способом следующие пакеты:
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 |
Помимо всех пакетов вам будут нужны некоторые патчи. Они корректируют некоторые ошибки в пакетах, которые были обнаружены, или улучшают вункциональность. Вам будут нужны:
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/ и выбрать любые дополнительные патчи для использования.
Ожидаемое время сборки: 7.2 SBU |
Пакет 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 зависит от: Bash, Binutils, Bison, Coreutils, Diffutils, Gawk, GCC, Glibc, Grep, Make, Sed.
Подготовим Gettext к компиляции:
./configure --prefix=/tools |
Скомпилируем пакет:
make |
Этот пакет поддерживает тестирование корректности сборки. Тем не менее, тестирование Gettext в этой главе может не пройти успешно из-за зависимостей от основной системы - к примеру, если будет найден компилятор Java. Тестирование Gettext занимает много времени и не является критичным. Поэтому мы не рекомендум запускать его здесь. Если же вы все-таки захотите использовать его, выполните команду:
make check |
И установим пакет:
make install |
Ожидаемое время сборки: 0.2 SBU |
Make автоматически определяет, какие части большой программы должны быть перекомпилированы и вызывает команды для их перекомпиляции.
Устанавливаемые программы: make
Make зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Sed.
Подготовим Make к компиляции:
./configure --prefix=/tools |
Скомпилируем программу:
make |
Этот пакет поддерживает тестирование корректности сборки. Если вы хотите запустить его, то выполните следующую команду:
make check |
Теперь установим пакет и документацию к нему:
make install |
Если вы зарегистрировались в ситеме как root, малейшая ошибка может иметь фатальные последствия для вашей системы. Поэтому мы рекомендуем собирать пакеты из этой главы под непривилегированым пользователем. Вы, конечно, можете использовать имя вашего текущего пользователя, но более простым шагом будет созданее нового пользователя lfs и использовать его в процессе установки. Под правами root, исполните следующие команды для добавления нового пользователя:
useradd -s /bin/bash -m lfs |
Чтобы новый пользователь lfs получил полный доступ к директории $LFS/tools изменим ее владельца:
chown lfs $LFS/tools |
Если вы создали отдельную директорию для работы, смените также и ее владельца на lfs:
chown lfs $LFS/sources |
Теперь, войдем в систему как пользователь lfs. Это можно сделать через виртуальную консоль, через менеджер экрана или через команду:
su - lfs |
Инструкция "-" команды su запустит новый интерпретатор командной строки.
Ожидаемое время сборки: 0.7 SBU |
Пакет 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 зависит от: Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Glibc, Grep, Make, Sed.
Сначала сделаем следующее:
patch -Np1 -i ../ncurses-5.3-etip-2.patch |
Первый патч скорректирует файл заголовков etip.h, а второй - исправит некоторые предупреждения компилятора при присутствии конкурирующих библиотек.
Теперь подготовим Ncurses к компиляции:
./configure --prefix=/tools --with-shared \ |
Описание параметров конфигурации:
--without-ada: Это заставит Ncurses не собираться с использованием Ada, если он установлен в основной системе. Эта нам нужно потому, что при работе в среде chroot, Ada не будет доступен.
--enable-overwrite: Это скажет Ncurses устанавливать заголовки в /tools/include, а не в /tools/include/ncurses, нам надо убедиться, что другие пакеты смогут эти заголовки найти.
Скомпилируем программы и библиотеки:
make |
Теперь установим пакет и документацию:
make install |
Ожидаемое время сборки: 0.1 SBU |
Grep является пролграммой, используемой для печати строк из файла, которые совпадают с заданым шаблоном.
Устанавливаемые программы: egrep (ссылка на grep), fgrep (ссылка на grep) и grep
Grep зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Make, Sed, Texinfo.
Подготовим Grep к компиляции:
./configure --prefix=/tools \ |
Описание параметров конфигурации:
--disable-perl-regexp: Это позволит убедиться, что grep не будет скомпонован с использованием библиотеки PCRE, которая может присутствовать в основной системе, но не будет доступна из среды chroot.
--with-included-regex: Это позволит убедиться, что Grep использыет внутренние регулярные выражения. В противном случае, он будет использовать код из Glibc, который может содержать ошибки.
Скомпилируем программу:
make |
Этот пакет поддерживает тестирование корректности сборки. Если вы хотите его использовать, выполните команду:
make check |
Теперь установим пакет и документацию к нему:
make install |
Описываемый здесь шаг не является обязательным. Если ваш раздел LFS очень мал, вы хотите просто попробовать или у вас есть другие причины, то вы можете выполнить инструкции этого раздела. Исполняемые файлы и библиотеки собираются с использованием ненужных символов отладки - это около 130 MB. Вы можете удалить эти символы командами:
strip --strip-unneeded /tools/{,s}bin/* |
Первая команда пропустит около двадцати файлов, сообщив что они неподдерживаемого формата. Большая часть из них скрипты, я не бинарники.
Ни в коем случае не используйте параметр --strip-unneeded для библиотек -- они будут испорчены и вам придеться собирать их все заново вместе с Glibc.
Для освобождения еще пары мегабайт, вы можете убрать всю документацию:
rm -rf /tools/{,share/}{doc,info,man} |
Вам понадобится около 850 MB свободного места на вашей системе LFS для для сборки и установки Glibc на следующем шаге. Если вы сможете собрать и установить Glibc, то вы сможете собрать и установить все остальное.
Все программы компилируемые в этой главе устанавливаются в директорию
$LFS/tools для обеспечения отсутствия
проблемм с программами, собираемыми в следующей главе. Программы,
компилируемые здесь, являются только временными средствами, и нам надо
получить возможность легко избавится от них в дальнейшем.
Помимо этого нам надо отделить имя этой директории от остальных. Для
этого мы используем название "tools", при желаниии вы можете
использовать другие названия, например "tools_for_lfs".
Создайте директорию:
mkdir $LFS/tools |
Теперь нам надо создать ссылку /tools на новую директорию в основной системе:
ln -s $LFS/tools / |
Эта ссылка нам нужна потому, что все средства из этой главы будут собираться с префиксом /tools, и они же нам понадобятся в следующей главе (когда мы с помощью chroot войдем в новый раздел).
Замечание: Изучите эти команды внимательно. Это может показаться странным на первый взгляд. Но команда ln имеет множество различных вариантов синтаксиса, и вы должны изучить man-страницу по ln прежде чем сообщать о том, что вы считаете, что обнаружили ошибку.
Ожидаемое время сборки: 0.1 SBU |
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 зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Make.
Пакет Bzip2 не содержит скрипта configure. Он компилируется и устанавливается командой:
make PREFIX=/tools install |
Ожидаемое сремя сборки: 0.2 SBU |
Пакет Texinfo содержит программы, используемые для чтения, записи и конвертирования документов Info, которые содержат системную документацию.
Устанавливаемые программы: info, infokey, install-info, makeinfo, texi2dvi и texindex
Texinfo зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Ncurses, Sed.
Подготовим 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 работать:
Принципиальное сходство перекрестной компиляции, посредством чего установленные средства работают с одним префиксом и таким образом используют маленькое "волшебство" GNU.
Осторожная манипуляция путями поиска библиотек стандартным компоновщиком для того, чтобы убедиться, что программы были скомпонованы с использованием выбранных нами библиотек.
Осторожная манипуляция specs- файлом gcc для передачи компилятору информации об используемом динамическом компоновщике.
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 систему, нам необходимо отказаться от динамической компоновки первых двух пакетов.
Ожидаемое время установки: 0.1 SBU |
Пакет Expect содержит программы, обеспечивающую программируемый диалог с другими интерактивными программами.
Устанавливаемые программы: expect
Устанавливаемые библиотеки: libexpect5.39.a
Expect зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Sed, Tcl.
Для начала применим патч:
patch -Np1 -i ../expect-5.39.0-spawn.patch |
Этот патч устранит неисправность в Expect который выдает неверный результат при тестировании GCC.
Теперь подготовим Expect к компиляции:
./configure --prefix=/tools --with-tcl=/tools/lib --with-x=no |
Описание опций конфигурации:
--with-tcl=/tools/lib: Это позволит убедиться, что скрипт конфигурации найдет Tcl в нашей временной директории для средств. Мы не хотим, чтобы использовался Tcl из основной системы.
--with-x=no: Это скажет скрипту конфигурации не искать Tk (компонент Tcl GUI) или библиотеки X Window System, поскольку он найдет их на основной системе.
Соберем пакет:
make |
Этот пакет поддерживает тестирование для проверки корректности сборки. Тем не менее, тестирование Expect здесь, в Главе Chapter 5, известно своими ошибками из-за влияния основной системы. Таким образом отрицательные результаты тестов не будут здесь сюрпризом и не являются критичными. Если вы захотите запустить тестирование, воспользуйтесь следующей командой:
make test |
И установим:
make SCRIPTS="" install |
Описание параметров сборки:
SCRIPTS="": Этот параметр запускает установку без вспомогательных скриптов, которые не нужны.
Теперь вы можете удалить директории с исходниками Tcl и Expect.
Ожидаемое время сборки: 0.8 SBU |
Пакет 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 зависит от: Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Glibc, Grep, Make, Sed.
Для начала применим патч для библиотеки C:
patch -Np1 -i ../perl-5.8.0-libc-3.patch |
И убедимся, что некоторые статические расширения будут собраны:
chmod u+w hints/linux.sh |
Теперь подготовим Perl к компиляции:
./configure.gnu --prefix=/tools |
Скомпилируем только необходимые средства:
make perl utilities |
Теперь скопируем эти средства и их библиотеки:
cp perl pod/pod2man /tools/bin |
Ожидаеморе время сборки: 0.2 SBU |
Gawk является реализацией awk, который используется для манипуляций с текстовыми файлами.
Устанавливаемые программы: awk (link to gawk), gawk, gawk-3.1.3, grcat, igawk, pgawk, pgawk-3.1.3 и pwcat
Gawk зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Sed.
Подготовим Gawk к компиляции:
./configure --prefix=/tools |
Откомпилируем пакет:
make |
Этот пакет поддерживает тестирование корректности сборуи. Вы можете запустить его командой:
make check |
И установим его:
make install |
Ожидаемое время сборки: 0.2 SBU |
Sed является редактором потоков. Редактор потоков используется для выполнения простых преобразований текста на входном потоке (файл или стандартный ввод).
Устанавливаемые программы: sed
Sed зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Texinfo.
Подготовим Sed к компиляции:
./configure --prefix=/tools |
Скомпилируем программу:
make |
Этот пакет поддерживает тестирование корректности сборки. Если вы хотите использовать его, то выполните команду:
make check |
Теперь установим пакет и документацию:
make install |
Ожидаемое время сборки: 0.1 SBU |
Пакет Gzip содержит программы для сжатия и распаковки файлов с использованием кодирования Lempel-Ziv (LZ77).
Устанавливаемые программы: gunzip (ссылка на gzip), gzexe, gzip, uncompress (ссылка на gunzip), zcat (ссылка на gzip), zcmp, zdiff, zegrep, zfgrep, zforce, zgrep, zless, zmore и znew
Gzip зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Sed.
Подготовим Gzip к установке:
./configure --prefix=/tools |
Скомпилируем пакет:
make |
И установим его:
make install |
Теперь, когда временные библиотеки C были установлены, мы хотим чтобы все оставшиеся в этой главе пакеты компоновались с использованием уже установленных библиотек. Чтобы обеспечить это, мы должны настроить specs файл компилятора.
Для начала установим откорректированый компоновщик запуском следующей команды в директории binutils-build:
make -C ld install |
Мы установили откорректированый компоновщик вместо того, который был установлен на первом шаге сборки Binutils. С этого момента все пакеты быдут собраны только с использованием библиотек из /tools/lib.
Замечание: Если вы пропустили предупреждение о том, что не надо было удалять директории с исходниками и сборкой Binutils из первого шага или у вас нет доступа к ним, не беспокойтесь, не все потеряно. Просто проигнорируйте вышеприведенную команду. В результате появится небольшой шанс, что программы будут скомпонованы с использованием библиотек основной системы. Это не очень хорошо, но тем не менее не является такой уж большой проблемой. Ситуация будет исправлена позже на втором шаге установки Binutils.
Теперь, когда установлен откорректированый компоновщик, вы можете удалить директории с исходниками и сборкой Binutils.
Следующим нашим действием будет исправление specs-файла GCC для задания расположения нашего компоновщика. Просто выполните следующую команду:
SPECFILE=/tools/lib/gcc-lib/*/*/specs && |
Мы рекомендуем просто скопировать и вставить вышеуказанное вместо того, чтобы просто вводить. Или, при желании, вы можете просто отредактировать 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} |
Теперь мы закончили установку самодостаточных средств, и они будут использованы для сборки оставшихся временных средств.
В этой главе мы скомпилируем и установим минимальную систему Linux. Эта система будет использоваться для построения конечной LFS системы в следующей главе.
Сборка этой минимальной системы будет проходить в два этапа: сначала мы соберем независящие от основной системы средства (компилятор, ассемблер, компоновщик и библиотеки), а потом используем их для сборки других средств.
Файлы, компилируемые в этой главе, устанавливаются в директорию $LFS/tools для отделения их от файлов, устанавливаемых в следующей главе. Эти пакеты просто временные, мы не будем засорять ими нашу конечную LFS систему.
Ключевым для понимания работы Linux системы является знание того, какие пакеты используются и для чего они нужны системе. Из этих соображений мы даем краткие содержание и описание пакетов перед инструкциями по их установке. Для кораткого описания програм, входящих в пакет, обратитесь к Приложению A.
Инструкции по сборке подразумевают, что вы используете интерпритатор командной строки bash. Также считается, что вы уже распаковали исходники перешли с помощью команды cd в директорию с ними перед использованием команд.
Некоторые пакеты необходимо пропатчить перед компиляцией, но только когда это необходимо для решения тех или иных проблем. Часто патчи нужно применять в обеих главах (этой и следующей), но некоторые необходимы только в одной из глав. Поэтому не беспокойтесь, если не найдете инструкций по нгаложению некоторых скачаных патчей в этой главе.
В процессе установки многих пакетов вы увидите сообщения о предупреждениях (warning) на экране. Это нормально и вы можете не обращать на них внимания. Все что они говорят - внимание, есть неточность, но не ошибка, в коде C или C++. Это из-за того, что меняются стандарты на язык C, а некоторые пакеты написаны в соответствии со старыми стандартами, а это не представляет проблемы для компилятора.
Если не сказано обратное, то вы можете спокойно удалить директории с исходниками и файлами сборки пакетов - в целях экономии дискового пространства.
Перед тем как продолжить, убедитесь, что переменная окружения LFS задана корректно выполнением команды:
echo $LFS |
Вывод должен указывать на точку монтирования раздела LFS, мы используем /mnt/lfs в качестве примера.
Linux From ScraConstructing a temporary systemtch: Версия 5.0 | ||
---|---|---|
Назад | Глава 5. Построение временной системы |
Далее |
Ожидаемое время сборки: 0.1 SBU |
Пакет Util-linux содержит ряд разнообразных утилит. Некоторые из них используются весьма часто для монтирования, размонтирования, форматирования и управления драйверами дисков, открытия портов tty и вывода сообщений ядра.
Устанавливаемые программы: agetty, arch, blockdev, cal, cfdisk, chkdupexe, col, colcrt, colrm, column, ctrlaltdel, cytune, ddate, dmesg, elvtune, fdformat, fdisk, fsck.cramfs, fsck.minix, getopt, hexdump, hwclock, ipcrm, ipcs, isosize, kill, line, logger, look, losetup, mcookie, mkfs, mkfs.bfs, mkfs.cramfs, mkfs.minix, mkswap, more, mount, namei, parse.bash, parse.tcsh, pg, pivot_root, ramsize (ссылка на rdev), raw, rdev, readprofile, rename, renice, rev, rootflags (ссылка на rdev), script, setfdprm, setsid, setterm, sfdisk, swapoff (ссылка на swapon), swapon, test.bash, test.tcsh, tunelp, ul, umount, vidmode (ссылка на rdev), whereis и write
Util-linux зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Ncurses, Sed, Zlib.
Util-linux не может использовать заголовки и библиотеки из директории /tools. Это исправляется с помощью исправления скрипта конфигурации:
cp configure configure.backup |
Подготовим Util-linux к компиляции:
./configure |
Скомпилируем поддержку некоторых шаблонов:
make -C lib |
И, поскольку нам нужны только некоторые из утилит из этого пакета, соберем только их:
make -C mount mount umount |
Теперь скопируем эти файлы в директорию временных средств:
cp mount/{,u}mount text-utils/more /tools/bin |
Ожидаемое время сборки: 0.2 SBU |
Tar является архиватором разработаным для сохранения и распаковки файлов в и из архивов, извесных как файлы tar (тарболы, tarballs).
Устанавливаемые программы: rmt и tar
Tar зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Sed.
Подготовим Tar к комрпиляции:
./configure --prefix=/tools |
Скомпилируем программы:
make |
Этот пакет поддерживает тестирование корректности сборки. Если вы хотите его использовать. то выполните команду:
make check |
Теперь установим пакет и документацию:
make install |
Ожидаемое время сборки: 0.9 SBU |
Пакет Tcl содержит Tool Command Language (Язык Команд Средств).
Устанавливаемые программы: tclsh (link to tclsh8.4), tclsh8.4
Устанавливаемые библиотеки: libtcl8.4.so
Tcl зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Sed.
Этот и следующие два устанавливаемых пакета нужны для работы тестирования GCC и Binutils. Установка этих трех пакетов нужна только для этого, и если вы не хотите тестировать устанавливаемые средства, то можно пропустить эти установки, но мы рекомендуем проверять работоспособность собираемых средств.
Подготовим Tcl к компиляции:
cd unix |
Соберем пакет:
make |
Этот пакет поддерживает тесты для определения корректности сборки. Тем не менее, тестирование Tcl в этой главе может не завершиться успещно из-за зависимостей от основной системы, которые полностью не понятны. Таким образом, неудачное завершение тестирования здесь не будет сюрпризом и не является критичным. Если вы решили протестировать Tcl, то запустите команду:
TZ=UTC make test |
Описание параметров сборки:
TZ=UTC: Это установит временную зону в Coordinated Universal Time (UTC) также известное как время по Гринвичу - Greenwich Mean Time (GMT), но только на время работы тестирования. Это позволит убедиться, что тестирование часов пройдет успешно. Больше информации о переменной окружения TZ можно получить в Главе 7.
Иногда, тестирование пакета не проходит. Вы модете проконсультироваться на LFS Wiki по адресу http://wiki.linuxfromscratch.org/ для проверки того, какие из ошибок нормальны. Это относится ко всем тестированиям в этой книге.
Установим пакет:
make install |
Важно: Не удаляйте директорию с исходниками tcl8.4.4 сейчас, так как следующие пакеты будут нуждаться во внутренних заголовках из этой директории.
Создадим необходимую символическую ссылку:
ln -s tclsh8.4 /tools/bin/tclsh |
Ожидаемое время сборки: 1.0 SBU |
Binutils является колекцией средств разработки программ, содержащих компоновщик, ассемблер и другие средства для работы с объектными файлами и архивами.
Устанавливаемые программы: addr2line, ar, as, c++filt, gprof, ld, nm, objcopy, objdump, ranlib, readelf, size, strings и strip
Устанавливаемые библиотеки: libiberty.a, libbfd.[a,so] и libopcodes.[a,so]
Binutils зависит от: Bash, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Perl, Sed, Texinfo.
Важно чтобы Binutils был первым из пакетов, которые мы установим, потому что Glibc и GCC проводят некоторые тесты на доступные компоновщик и ассемблер для определения доступных опций.
Замечание: Хотя Binutils является важным пакетом, мы не собираемся запускать тестирование на этом простом шаге. Во-первых тестирование пока неуместно, а во-вторых, программы из этого этапа будут заново установлены на втором.
Этот пакет известен своим нестабильным поведением при компиляции с измененными опциями оптимизации (включая опции -march и -mcpu). Binutils рекомендуется компилировать с настройками по умолчанию. Следовательно, если вы задали переменные такие как CFLAGS или CXXFLAGS, изменяющие уровень оптимизации по умолчанию, рекомендуется убрать их при сборке пакета binutils. Изменяя оптимизации для binutils, вы действуете на свой страх и риск.
В документации по Binutils рекомендуется собирать Binutils вне директории с исходниками, в отдельной директории для сборки:
mkdir ../binutils-build |
Note: Если вы хотите вычислить переменную SBU, которая используется в этой книге, вам надо засечь время, которое понадобится на сборку этого пакета. Это очень просто сделать чем-то похожим на такую команду: time { ./configure ... && ... && ... && make install; }.
Теперь подготовим Binutils к компиляции:
../binutils-2.14/configure \ |
Описание используемых опций:
--prefix=/tools: Это скажет скрипту конфигурации, что программы Binutils следует устанавливать в директорию /tools.
--disable-nls: Это отключит интернационализацию (сокращенно - i18n). Во-первых нам это пока не надо. а во-вторых nls может вызвать определенные проблемы при статической компиляции.
Вернемся к компиляции пакета:
make configure-host |
Описание параметров сборки:
configure-host: Это правильно настроит все субдиректории. Статичаская сборка без этого будет невозможна. Мы используем эту опцию для беспроблемной работы.
LDFLAGS="-all-static": Это скажет компоновщику, что все программы Binutils будут скомпонованы статически. Точнее, строго говоря, "-all-static" отсылаемое программе libtool, которая отсылает "-static" компоновщику.
И установим пакет:
make install |
Теперь подготовим к компоновщик к последующему "встраиванию" в Glibc:
make -C ld clean |
Описание параметров сборки:
-C ld clean: Это говорит программе сборки удалить все скомпилированые файлы, но только в субдиректории ld.
-C ld LDFLAGS="-all-static" LIB_PATH=/tools/lib: Этот параметр пересоберет все в субдиректории ld. Указание переменной файла сборки LIB_PATH заменит установленное значение по умолчанию и установит на расположение наших временных средств. Содержимое этой переменной указывает путь по умолчанию для поиска библиотек компоновщиком. Вы увидите, как это будет использовано далее в главе.
Внимание |
Не удаляйте сейчас директории для сборки и исходников Binutils. Вам они еще будут нужны в этой главе далее в их теперешнем состоянии. |
Ожидаемое время сборки: 1.5 SBU |
Снова создадим отдельную директорию для сборки:
mkdir ../binutils-build |
Теперь подготовим Binutils к компиляции:
../binutils-2.14/configure --prefix=/tools \ |
Описание опций конфигурации:
--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 |
Внимание |
Не удаляйте сейчас директории с исходниками и сборкой Binutils. Они будут нужны нам в следующей главе в их нынешнем виде. |
Ожидаемое время сборки: 0.9 SBU |
Пакет 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 зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Perl, Sed.
Подготовим Coreutils к компиляции:
./configure --prefix=/tools |
Скомпилируем пакет:
make |
Этот пакет поддерживает тестирование корректности сборки. Вы можете запустить егол командой:
make RUN_EXPENSIVE_TESTS=yes check |
Описание параметров make:
RUN_EXPENSIVE_TESTS=yes: Это заставит запустить некоторые доаполнительные тесты, которые требуют достаточно много времени на некоторых платформах. Тем не менее, это не проблема для Linux.
И установим пакет:
make install |
Когда вы залогинитесь как lfs, Введите следующие команды для настройки окружения:
cat > ~/.bash_profile << "EOF" |
Команда 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. Мы обнуляем их для того, чтобы было больше шансов собрать все корректно.
Теперь мы можем приступить к сборке временных средств, используемых в следующих главах.
Ожидаемое время сборки: 0.1 SBU |
Ядро Linux - это основа любой Linux системы. Это то, что делает Linux собой. Когда компьютер включается и загружает систему Linux, самым первым загружается ядро. Ядро инициализирует аппаратные компоненты: последовательные и параллельные порты, звуковые карты, сетевые карты, контролеры IDE, контролеры SCSI и много чего еще. Собственно, ядро делает доступным аппаратные элементы cbcntvs и позволяет запускаться программам.
Устанавливаемые файлы: ядро и заголовки ядра
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 -R include/linux /tools/include |
Некоторые из заголовков ядра используют файл заголовков autoconf.h. Поскольку мы пока не сконфигурировали ядро, нам надо создать этот файл для того, чтобы компиляция следующих пакетов не закончилась ошибкой. Создадим пустой файл autoconf.h:
touch /tools/include/linux/autoconf.h |
Ожидаемое время сборки: 0.2 SBU |
Пакет Findutils содержит программы для поиска файлов, в том числе "на лету" (путем рекурсивного поиска от директории и показывая только файлы удовлетворяющие параметрам поиска) или поиск через бызу данных.
Устанавливаемые программы: bigram, code, find, frcode, locate, updatedb и xargs
Findutils зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Sed.
Подготовим Findutils к компиляции:
./configure --prefix=/tools |
Скомпилируем пакет:
make |
Этот пакет поддерживает тестирование корректности сборки. Если вы хотите запустить его, то выполните следующую команду:
make check |
И установим пакет:
make install |
Ожидаемое время сборки: 0.1 SBU |
Программа patch модифицирует файлы в соответствии с файлдом патча. Файл с патчем - это, как правило, список, сгенерированый программой diff, который содержит инструкции к тому, какие из оригинальных файлов ныждаются в можификации.
Устанавливаемые программы: patch
Patch зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Sed.
Подготовим Patch к компиляции:
CPPFLAGS=-D_GNU_SOURCE ./configure --prefix=/tools |
Флаг препроцессора -D_GNU_SOURCE нужен только на платформах PowerPC. На других платформах вы можете его пропустить.
Скомпилируем программу:
make |
Теперь установим пакет и документацию:
make install |
Ожидаемое время сборки: 0.1 SBU |
Пакет DejaGnu содержит основы для тестирования других программ.
Устанавливаемые программы: runtest
Dejagnu зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Sed.
Подготовим DejaGnu к компиляции:
./configure --prefix=/tools |
Соберем и установим пакет:
make install |
Ожидаемое время сборки: 4.4 SBU |
Пакет 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 зависит от: Bash, Binutils, Coreutils, Diffutils, Findutils, Gawk, Gettext, Glibc, Grep, Make, Perl, Sed, Texinfo.
Распакуйте только тарбол GCC-core, нам пока не нужен компилятор C++.
Замечание: Несмотря на то, что GCC является очень важным пакетом средств, мы не запускаем сейчас тестирование. Во-первых, тестирование сейчас не нужно, а во-вторых, программы из этого шага будут переписаны на следующем.
Этот пакет известен своим нестабильным поведением при компиляции с измененными опциями оптимизации (включая опции -march и -mcpu). GCC рекомендуется компилировать с настройками по умолчанию. Следовательно, если вы задали переменные такие как CFLAGS или CXXFLAGS, изменяющие уровень оптимизации по умолчанию, рекомендуется убрать их при сборке пакета GCC. Изменяя оптимизации для GCC, вы действуете на свой страх и риск.
В документации по GCC рекомендуется собирать GCC вне директории с исходниками в отдельной директории для сборки:
mkdir ../gcc-build |
Подготовим GCC к компиляции:
../gcc-3.3.1/configure --prefix=/tools \ |
Описание опций конфигурации:
--with-local-prefix=/tools: Назначение этого переключателя исключить /usr/local/include из пути поиска включений gcc. Ето не очень существенно, но мы собираемся минимизировать зависимомть от основной системы, и мы считаем, что это нужно сделать.
--enable-shared: Этот переключатель может показаться интуитивно понятным поначалу. Но его использование допускает сборку libgcc_s.so.1 и libgcc_eh.a, а также делает libgcc_eh.a доступным для скрипта конфигурации Glibc (следующего компилируемого пакета), выдавая правильный результат. Заметьте, что бинарники gcc компонуются статически, если это задано значением -static для BOOT_LDFLAGS далее.
--enable-languages=c: Эта опция позволяет буть увереным, что будет собран только компилятор C. "Она нужна только в том слущае, если вы скачали и распаковали полный тарбол.
Продолжим компиляцию пакета:
make BOOT_LDFLAGS="-static" bootstrap |
Описание параметров сборки:
BOOT_LDFLAGS="-static": Это скажет GCC компоновать эти программы статически.
bootstrap: Этот параметр заставляет не просто компилироваться GCC, а компилироваться несколько раз. Программы, скомпилированые сначала используются для компиляции программ еще раз, а те, в свою очередь, используются при компиляции в третий раз. Идентичность второй и третьей компиляции позволяет убедиться в корректности сборки.
И установим пакет:
make install |
Под конец мы создадим ссылку /tools/bin/cc. Многие программы и скрипты используют cc вместо gcc для обеспечения переносимости программ на все Unix системы. Не у всех установлен именно компилятор GNU C. Запуск cc позволяет администратору выбирать, какой компилятор C устанавливать в систему, и мы создаем ссылку на него:
ln -sf gcc /tools/bin/cc |
Ожидаемое время сборки: 0.1 SBU |
Программы из этиого пакета могут показать вам различия между двумя файлами или директориями. Они обычно используются для создания различных патчей.
Устанавливаемые программы: cmp, diff, diff3 и sdiff
Diffutils зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Sed.
Подготовим Diffutils к компиляции:
./configure --prefix=/tools |
Скомпилируем пакет:
make |
И установим его:
make install |
Ожидаемое время сборки: 1.2 SBU |
Bash - это Bourne-Again SHell, который обычно используется как интерпритатор команд на Unix системах. Программа bash считывает данные со стандартного ввода (клавиатура). Пользователь вводит что-либо, и программа определяет, что именно пользователь ввел и что с этим делать, например, запустить другую программу.
Устанавливаемые программы: bash, sh (ссылка на bash) и bashbug
Bash зависит от: Binutils, Coreutils, Diffutils, Gawk, GCC, Glibc, Grep, Make, Ncurses, Sed.
Bash содержит несколько известных ошибок. Исправим их, применив патч:
patch -Np1 -i ../bash-2.05b-2.patch |
Теперь подготовим Bash к компиляции:
./configure --prefix=/tools |
Скомпилируем программу:
make |
Этот пакет поддерживает тестирование корректности сборки. Если вы хотите использовать эту возможность, то выполните команду:
make tests |
Теперь установим пакет и документацию:
make install |
И создадим ссылку для программ, которые используют sh в качестве шелла:
ln -s bash /tools/bin/sh |
Ожидаемое время сборки: 11.0 SBU |
Средства, необходимые для тестирования 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 |
Первый патч отключит скрипт 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 |
Перед началом сборки GCC не забудьте дезактивировать все переменные окружения, в которых были изменены флаги оптимизации.
Теперь подготовим GCC к компиляции:
../gcc-3.3.1/configure --prefix=/tools \ |
Описание опций конфигурации:
--enable-threads=posix: Это подключит расширение C++ для мультилинейного кода.
--enable-__cxa_atexit: Эта опция разрешит использование __cxa_atexit, которое предпочтительнее использования atexit, для регистрации деструкторов C++ для локальных и глобальных объектов для обеспечения полного соответствия стандартам ссылок на деструкторы. Он также повлияет на C++ ABI и некоторые другие результаты в библиотеках C++ и программах C++, которые взаимодействуют с другими дистрибутивами Linux.
--enable-clocale=gnu: Эта опция позволяет убедиться в корректном выборе модели локали для библиотек C++ во всех обстоятельствах. Если скрипт конфигурации найдет установленную локаль de_DE, он выберет корректную модель gnu. Тем не менее, люди, которые не установили локаль de_DE рискуют собрать ABI-несовместимую библиотеку C++ из-за неверной модели локали в общем случае.
--enable-languages=c,c++: Эта опция позволяет убедиться, что будут собраны компиляторы 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++ |
Неожиданным прохождением тест для 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.
Ожидаемое время сборки: 11.8 SBU |
Glibc является библиотекой C, которая обеспечивает системные вызовы и основные функции, такие как open, malloc, printf и т.д. Библиотека C используется для всех динамически скомпонованых программ.
Устанавливаемые программы: catchsegv, gencat, getconf, getent, glibcbug, iconv, iconvconfig, ldconfig, ldd, lddlibc4, locale, localedef, mtrace, nscd, nscd_nischeck, pcprofiledump, pt_chown, rpcgen, rpcinfo, sln, sprof, tzselect, xtrace, zdump и zic
Устанавливаемые библиотеки: ld.so, libBrokenLocale.[a,so], libSegFault.so, libanl.[a,so], libbsd-compat.a, libc.[a,so], libc_nonshared.a, libcrypt.[a,so], libdl.[a,so], libg.a, libieee.a, libm.[a,so], libmcheck.a, libmemusage.so, libnsl.a, libnss_compat.so, libnss_dns.so, libnss_files.so, libnss_hesiod.so, libnss_nis.so, libnss_nisplus.so, libpcprofile.so, libpthread.[a,so], libresolv.[a,so], librpcsvc.a, librt.[a,so], libthread_db.so и libutil.[a,so]
Glibc зависит от: Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Gettext, Grep, Make, Perl, Sed, Texinfo.
Перед началом установки Glibc, вы должны перейти (с помощию команды 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 |
Также, Glibc имеет некоторые тонкие проблемы при компиляции с GCC 3.3.1. Применим следующий патч для их исправления:
patch -Np1 -i ../glibc-2.3.2-sscanf-1.patch |
Документация по Glibc рекомендует собирать Glibc вне директории с исходниками, в отдельной директории для сборки:
mkdir ../glibc-build |
Далее, подготовим Glibc к компиляции:
../glibc-2.3.2/configure --prefix=/tools \ |
Описание опций конфигурации:
--disable-profile: Это отключает сборку библиотек с использованием профильной информации. Опустите эту опцию, если собираетесь испольховать профили.
--enable-add-ons: Это подключает любые дополнения при остановке Glibc, в нашем случае Linuxthreads.
--with-binutils=/tools/bin and --with-headers=/tools/include: Строго говоря, эти опции необязательны. Но они позволяют нам удостовериться, что будут использованы нужные заголовки ядра и программы Binutils для сборки Glibc.
--without-gd: Этот переключатель позволит нам быть уверенными, что не соберется программа memusagestat, которая будет пытаться подключить библиотеки из основной системы (libgd, libpng, libz и некоторые другие).
На этом шаге вы можете увидеть следующее предупреждение:
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 должно пройти удачно. Тем не менее. по причинам, перечисленным ниже, тестирование может закончиться неудачно. Вот список наиболее вероятных причин этого:
Тест math иногда не проходит при его запуске на системе с процессорами, отличными от новых Intel-совместимых или оригинальных AMD. Также это может произойти при некоторых установках оптимизации.
Тест gettext иногда не проходит из-за зависимостей от основной системы. Точная причина пока не ясна.
Тест atime иногда не проходит когда раздел LFS монтирован с опцией noatime или из-за других причин, связанных с файловой системой.
Тест shm может не пройти, если в ващей системе запущена файловая система devfs, но нет файловой системы tmpfs, монтированой на /dev/shm, если отключена поддержка tmpfs в ядре.
При запуске на старом и медленном оборудовании некоторые тесты могут не пройти по тайм-ауту.
В общем, вам не стоит беспокоится, естли вы увидите, что тестирование 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 |
Ожидаемое время сборки: 0.4 SBU |
Пакет Shadow создан для усиления безопасности системных паролей.
Устанавливаемые программы: chage, chfn, chpasswd, chsh, dpasswd, expiry, faillog, gpasswd, groupadd, groupdel, groupmod, groups, grpck, grpconv, grpunconv, lastlog, login, logoutd, mkpasswd, newgrp, newusers, passwd, pwck, pwconv, pwunconv, sg (ссылка на newgrp), useradd, userdel, usermod, vigr (ссылка на vipw) и vipw
Shadow зависит от: Bash, Binutils, Bison, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Sed.
Программы login, getty и init (и некоторые другие) поддерживают лог-файлы для записи кто, когда и где логинился в систему. Эти программы, тем не менее, не создают эти лог-файлы если они не существуют, таким образом, если вы собираетесь логгировать эти события, то вам надо создать эти файлы самостоятельно. Пакету Shadow нужны эти файлы в определенном месте, так что мы создадим их для удовлетворения зависимостей:
touch /var/run/utmp /var/log/{btmp,lastlog,wtmp} |
Файл /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%' \ |
Замечание: Будьте очень внимательны при вводе указанной команды. Лучше всего скопировать и вставить ее вместо того, чтобы просто набрать.
Согласно 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 |
Coreutils уже установил программу groups в /usr/bin. Если вы хотите, то можете удалить такую же, установленную Shadow:
rm /bin/groups |
Этот пакет содержит утилиты для модификации паролей пользователей, добавления или удаления пользователей и групп и тому подобные. Мы не собираемся объяснять здесь что такое 'скрытие паролей' ('password shadowing'). Полное объяснение можно найти в файле doc/HOWTO в распакованой директории с исходниками Shadow. Сдесь мы опишем только то, что вам понадобится, если вы захотите использовать поддержку Shadow: программы, которые должны проверять пароли (к примеру: xdm, демоны ftp, демоны pop3) должны будут компилироваться с поддержкой 'shadow-совместимости', что надо для использования работы со скрытыми паролями.
Для использования скрытых паролей, запустите команду:
/usr/sbin/pwconv |
А для использования скрытых паролей групп, выполните:
/usr/sbin/grpconv |
При нармальных обстоятельствах, вам пока нет надобности создавать пароли. Запомните, что если вы решите вернуться к этой главе для включения скрытия паролей, вам надо будет сбросить пароли всех пользователей командой passwd и пароли всех групп командой gpasswd.
Ожидаемое время сборки: 0.2 SBU |
Пакет Inetutils содержит ряд сетевых клиентов и серверов.
Устанавливаемые программы: ftp, ping, rcp, rlogin, rsh, talk, telnet и tftp
Inetutils зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Ncurses, Sed.
Подготовим Inetutils к компиляции:
./configure --prefix=/usr --disable-syslogd \ |
Описание параметров конфигурации:
--disable-syslogd: Этот параметр запрещет inetutils установку System Log Daemon, который мы устанавливаем с пакетом Sysklogd.
--disable-logger: Этот параметр запрещает inetutils установку программы ведения логов, которая использует скрипты для отправки сообщений System Log Daemon. Мы не устанавливаем его потому, что Util-linux установит потом лучшую версию этой программы.
--disable-whois: Этот параметр отключает сборку whois клиента, который является сильно устаревшим. Инструкции по установке лучшей версии клиента whois вы найдете в книге BLFS.
--disable-servers: Этот параметр отключит установку ряда сетевых серверов как части пакета Inetutils. Эти сервера не нужны на простой LFS системе. Некоторые из них являются небезопасными и могут быть запущеными только в доверенной сети. Более полную информацию можно получить на http://www.linuxfromscratch.org/blfs/view/stable/basicnet/inetutils.html. Заметьте, что есть лучшие альтернативы для многих из этих серверов.
Скомпилируем пакет:
make |
Установим его:
make install |
И переместим программу ping на ее место:
mv /usr/bin/ping /bin |
Теперь мы должны покинуть среду chroot и снова войти в нее, это делается следующим вариантом команды chroot:
chroot $LFS /usr/bin/env -i \ |
Причиной этого является то, что нам уже не надо использовать программы из директории /tools. Тем не менее мы пока не удаляем ее. Она нам еще будет нужна в конце книги.
Ожидаемое время сборки: 6.9 SBU |
Пакет 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 зависит от: Bash, Binutils, Bison, Coreutils, Diffutils, Gawk, GCC, Glibc, Grep, Make, Sed.
Подготовим Gettext к компиляции:
./configure --prefix=/usr |
Скомпилируем пакет:
make |
Этот пакет поддерживает тестирование корректности сборки. Если вы хотите использовать эту возможность, то запустите команду:
make check |
И установим пакет:
make install |
Ожидаемое время сборки: 0.2 SBU |
Make определяет, автоматически, какие части больших программ нуждаются в перекомпиляции и вызывают команды для их сборки.
Устанавливаемая программа: make
Make зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Sed.
Подготовим 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 > \ |
Некоторые программы имеют встроеные пути к программам, которые пока не установлены. Чтобы обеспечить доступ к этим программам, мы создадим ссылки на них которые заменят пока нам реальные файлы до тех пор, пока мы их не установим.
ln -s /tools/bin/{bash,cat,pwd,stty} /bin |
Ожидаемое время сборки: 0.1 SBU |
GNU ed является 8-ми битовым, POSIX-совместимым редактором строк.
Устанавливаемые программы: ed и red (ссылка на ed)
Ed зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Sed.
Замечание: 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 |
Ожидаемое время сборки: 0.6 SBU |
Пакет Ncurses содержит библиотеки для тектового и консольного интерфейса, включая панели и меню.
Устанавливаемые программы: captoinfo (ссылка на tic), clear, infocmp, infotocap (ссылка на tic), reset (ссылка на tset), tack, tic, toe, tput и tset
Устанавливаемые библиотеки: libcurses.[a,so] (ссылка на libncurses.[a,so]), libform.[a,so], libmenu.[a,so], libncurses++.a, libncurses.[a,so], libpanel.[a,so]
Ncurses зависит от: Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Glibc, Grep, Make, Sed.
Для начала исправим две вещи:
patch -Np1 -i ../ncurses-5.3-etip-2.patch |
Первый патч откорректирует файл заголовков etip.h, а второй патч устранит проблемы при компиляции конфликтующих заголовков.
Теперь подготовим Ncurses к компиляции:
./configure --prefix=/usr --with-shared \ |
Скомпилируем пакет:
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 |
Ожидаемое время сборки: 0.1 SBU |
Grep является программой для печати строк из файла, совпадающих с заданным шаблоном.
Устанавливаемые программы: egrep (ссылка на grep), fgrep (ссылка на grep) и grep
Grep зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Make, Sed, Texinfo.
Подготовим Grep к компиляции:
./configure --prefix=/usr --bindir=/bin \ |
Скомпилируем пакет:
make |
Этот пакет поддерживает тестирование корректности сборки. Если вы хотите использовать эту возможность, то запустите команду:
make check |
И установим пакет:
make install |
Ожидаемое время сборки: 0.6 SBU |
Bison является генератором парсеров, заменой для yacc. генерирует программу, которая анализирует структуру текстового файла.
Устанавливаемые программы: bison и yacc
Устанавливаемые библиотеки: liby.a
Bison зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, M4, Make, Sed.
Первым делом мы наложим патч на bison, скачаный с CVS, который исправит проблемы компиляции с некоторыми пакетами:
patch -Np1 -i ../bison-1.875-attribute.patch |
Подготовим Bison к компиляции:
./configure --prefix=/usr |
Скомпилируем пакет:
make |
Этот пакет поддерживает тестирование корректности сборки. Если вы хотите использовать эту возможность, то запустите команду (это займет много времени):
make check |
И установим пакет:
make install |
Ожидаемое время сборки: 0.1 SBU |
Kbd содержит файлы раскладки клавиатуры и утилиты для нее.
Устанавливаемые программы: chvt, deallocvt, dumpkeys, fgconsole, getkeycodes, getunimap, kbd_mode, kbdrate, loadkeys, loadunimap, mapscrn, openvt, psfaddtable (ссылка на psfxtable), psfgettable (ссылка на psfxtable), psfstriptable (ссылка на psfxtable), psfxtable, resizecons, setfont, setkeycodes, setleds, setlogcons, setmetamode, setvesablank, showconsolefont, showkey, unicode_start и unicode_stop
Kbd зависит от: Bash, Binutils, Bison, Coreutils, Diffutils, Flex, GCC, Gettext, Glibc, Grep, Gzip, M4, Make, Sed.
По умолчанию некоторые утилиты Kbd (setlogcons, setvesablank и getunimap) не устанавливаются. Для начала выберем установку этих утилит:
patch -Np1 -i ../kbd-1.08-more-programs.patch |
Теперь подготовим Kbd к компиляции:
./configure |
Скомпилируем пакет:
make |
И установим его:
make install |
Ожидаемое время сборки: 0.1 SBU |
Less является просмотрщиком файлов или текста. Он отображает содержимое файла или потока и позволяет его прокрутку. Less имеет некоторые возможности, которые не включены в просмотрщик more, например, позволяет прокрутку назад.
Устанавливаемые прорграммы: less, lessecho и lesskey
Less зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Ncurses, Sed.
Подготовим Less к компиляции:
./configure --prefix=/usr --bindir=/bin --sysconfdir=/etc |
Описание опций конфигурации:
--sysconfdir=/etc: Этот параметр укажет, что надо создавать программы с файлами конфигурации в /etc.
Скомпилируем пакет:
make |
И установим его:
make install |
Ожидаемое время сборки: 0.1 SBU |
Bzip2 является блоко-сортирыющим компрессором файлов, который генерирует арживы с лучшей степенью сжатия, чем традиционный gzip.
Устанавливаемые программы: bunzip2 (ссылка на bzip2), bzcat (ссылка на bzip2), bzcmp, bzdiff, bzegrep, bzfgrep, bzgrep, bzip2, bzip2recover, bzless и bzmore
Устанавливаемые библиотеки: libbz2.a, libbz2.so (ссылка на libbz2.so.1.0), libbz2.so.1.0 (ссылка на libbz2.so.1.0.2) и libbz2.so.1.0.2
Bzip2 зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Make.
Подготовим Bzip2 к компиляции:
make -f Makefile-libbz2_so |
Флаг -f нужен Bzip2 для использование при сборке файла, отличного от Makefile, в нашем случае Makefile-libbz2_so, который создает динамическую библиотеку libbz2.so и подключает ее к утилитам Bzip2.
Скомпилируем пакет:
make |
Установим его:
make install |
И установим библиотеку bzip2 в директорию /bin, затем создадим необходимые ссылки и удалим старые:
cp bzip2-shared /bin/bzip2 |
Ожтдаемое время сборки: 0.1 SBU |
Программа procinfo собирает системные данные, такие как использование памяти и номера IRQ, из директории /proc и приводит их к удобному виду.
Устанавливаемые программы: lsdev, procinfo и socklist
Procinfo зависит от: Binutils, GCC, Glibc, Make, Ncurses.
Скомпилируем Procinfo:
make LDLIBS=-lncurses |
Описание параметров сборки:
LDLIBS=-lncurses: Procinfo будет использовать библиотеку libncurses вместо сильно устаревшей libtermcap.
И установим пакет:
make install |
Ожидаемое время сборки: 0.6 SBU |
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 зависит от: Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Gettext, Glibc, Grep, Make, Sed, Texinfo.
Рекомендуется собирать E2fsprogs вне директории с исходниками:
mkdir ../e2fsprogs-build |
Подготовим E2fsprogs к компиляции:
../e2fsprogs-1.34/configure --prefix=/usr --with-root-prefix="" \ |
Описание параметров конфигурации:
--with-root-prefix="": Определенные программы (такие как программа e2fsck) рассматриваются как необходимые программы. Когда, например, раздел /usr не примонтирован, эти программы не будут доступны. Они должны находится в таких директориях как /lib и /sbin. Есали этот параметр пропущен при конфигурации E2fsprogs, программы разместятся в директории /usr, что нам не нужно.
--enable-elf-shlibs: Это создаст shared-библиотеку для использования некоторыми программами из этого пакета.
Скомпилируем пакет:
make |
Этот пакет поддерживает тестирование корректности сборки. Если вы хотите использовать эту возможность, то запустите команду:
make check |
Установим основную часть пакета:
make install |
Также установим shared-библиотеку:
make install-libs |
Ожидаемое время сборки: 0.2 SBU |
Пакет Texinfo содержит программы, используемые для чтения, записи и преобразования документов Info, которые содержат системную документацию.
Устанавливаемые программы: info, infokey, install-info, makeinfo, texi2dvi и texindex
Texinfo зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Ncurses, Sed.
Подготовим Texinfoк компиляции:
./configure --prefix=/usr |
Скомпилируем пакет:
make |
Этот пакет поддерживает тестирование корректности сборки. Если вы хотите использовать эту возможность, то запустите команду:
make check |
Установим пакет:
make install |
И дополнительно установим компоненты входящие в установку TeX:
make TEXMF=/usr/share/texmf install-tex |
Описание параметров сборки:
TEXMF=/usr/share/texmf: Переменная TEXMF в makefile сохраняет расположения корня дерева TeX, например, если вы собираетесь потом устанавливать пакет TeX.
Ожидаемое время сборки: 0.2 SBU |
Пакет Grub содержит загрузчик.
Устанавливаемые программы: grub, grub-install, grub-md5-crypt, grub-terminfo и mbchk
Grub зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Ncurses, Sed.
Этот пакет известен ошибками при сборке с использованием измененных опций оптимизации компиляции (включая параметры -march и -mcpu). Таким образом, если вы меняли переменные окружения, отвечающие за оптимизацию сборки, такие как CFLAGS и CXXFLAGS, мы рекомендуем сбросить их перед началом сборки Grub.
Для начала исправим проблему с компиляцией при использовании GCC-3.3.1:
patch -Np1 -i ../grub-0.93-gcc33-1.patch |
Теперь подготовим Grub к компиляции:
./configure --prefix=/usr |
Скомпилируем пакет:
make |
И установим его:
make install |
Замените i386-pc на директорию, соответствующую вашему железу.
Директория i386-pc содержит также ряд файлов *stage1_5 для разных файловых систем. Посмотрите какие из них доступны и скопируйте их в директорию /boot/grub. Обычно следует скопировать файлы
e2fs_stage1_5 и/или reiserfs_stage1_5.
Ожидаемое время сборки: 0.1 SBU |
Пакет LFS-Bootscripts содершит shell-скрипты в стиле SysV init. Эти скрипты нужны для выполнения определенных действий на этапе загрузки, таких как проверка файловых систем, загрузки раскладки клавиатуры, установка сети и завершения процессов при выходе.
Устанавливаемые скрипты: checkfs, cleanfs, functions, halt, ifdown, ifup, loadkeys, localnet, mountfs, mountproc, network, rc, reboot, sendsignals, setclock, swap, sysklogd и template
Bzip2 зависит от: Bash, Coreutils.
Мы собираемся использовать init-скрипты в стиле SysV. Мы выбрали этот тип потому, что его использование наиболее комфортно и часто используется. Если вы собираетесь попробовать что-либо другое, то Marc Heerdink написал советы по init-скриптам в стиле BSD, они находятся на http://www.linuxfromscratch.org/hints/downloads/files/bsd-init.txt. Если же вы собираетесь попробовать что-либо более радикальное, посмотрите в архиве списка рассылки LFS.
Если вы решили использовать стиль BSD или другой в скриптах, то вам следует пропустить следующую главу и перейти к Главе 8.
Установим загрузочные скрипты:
cp -a rc.d sysconfig /etc |
Изменим владельца скриптов на root:
chown -R root:root /etc/rc.d /etc/sysconfig |
Ожидаемое время сборки: 2.9 SBU |
Пакет Perl содержит perl, Practical Extraction and Report Language. Perl совмещает в себе некоторые лучшие элементы от C, sed, awk и sh в одном мощном языке.
Устанавливаемые программы: a2p, c2ph, dprofpp, enc2xs, find2perl, h2ph, h2xs, libnetcfg, perl, perl5.8.0 (ссылка на perl), perlbug, perlcc, perldoc, perlivp, piconv, pl2pm, pod2html, pod2latex, pod2man, pod2text, pod2usage, podchecker, podselect, psed (ссылка на s2p), pstruct (ссылка на c2ph), s2p, splain и xsubpp
Устанавливаемые библиотеки: (слишком много названий)
Perl зависит от: Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Glibc, Grep, Make, Sed.
Подготовим Perl к компиляции:
./configure.gnu --prefix=/usr |
Если вы хотите контролировать процесс настроек опций сборки Perlt, вы можете запустить интерактивный скрипт Configure и указывать опции сборки Perl. Если вы хотите оставить настройки (разумные) Perl, которые определяются автоматически по умолчанию, то просто запустите команду, приведенную выше.
Скомпилируем пакет:
make |
Этот пакет поддерживает тестирование корректности сборки. Если вы хотите использовать эту возможность, то сначала создайте простой файл /etc/hosts, необходимый для пары тестов, использующих имя localhost:
echo "127.0.0.1 localhost $(hostname)" > /etc/hosts |
Теперь, если хотите, запустим тест:
make test |
И установим пакет:
make install |
Ожидаемое время сборки: 0.1 SBU |
Man является просмотрщиком man-страниц.
Устанавливаемые программы: apropos, makewhatis, man, man2dvi, man2html и whatis
Man зависит от: Bash, Binutils, Coreutils, Gawk, GCC, Glibc, Grep, Make, Sed.
Мы собираемся сделать три дополнения к исходникам Man.
Первым патчем мы раскоментируем строку "MANPATH /usr/man" в файле man.conf для предупреждения излишней многословности результатов при использовании таких программ как whatis:
patch -Np1 -i ../man-1.5m2-manpath.patch |
Второй патч добавит параметр -R в переменную PAGER для правильного использования escape-последовательностей:
patch -Np1 -i ../man-1.5m2-pager.patch |
Третий и последний патч решит проблему с фоматированием man страниц, содержащих более 80 в связке с существующими релизами groff:
patch -Np1 -i ../man-1.5m2-80cols.patch |
Теперь подготовим Man к компиляции:
./configure -default -confdir=/etc |
Описание параметров конфигурации:
-default: Скрипт конфикурации будет использовать разумные настройки по умолчанию. К примеру: только английские мануалы, не выводить каталог, man без suid, использование сжатых страниц документации, сжатые cat-страницы, создание cat-страниц, когдла существует соответствующая директория, поддерживать FHS выводом cat-страниц в /var/cache/man если такая директория существует.
-confdir=/etc: Программа man будет искать файл конфигурации man.conf в директории /etc.
Скомпилируем пакет:
make |
И установим его:
make install |
Замечание: Если вы собираетесь отключить SGR escape-последовательности, вы можете отредактировать файл man.conf или добавить параметр -c к nroff.
Возможно, вы захотите также посмотреть страницу BLFS на http://www.linuxfromscratch.org/blfs/view/cvs/postlfs/compressdoc.html которая описывает использование форматированых и сжатых файлов man -страниц.
Ожидаемое время сборки: 0.2 SBU |
Gawk является вариантом awk, который используется для манипуляций с текстовыми файлами.
Устанавливаемые программы: awk (ссылка gawk), gawk, gawk-3.1.3, grcat, igawk, pgawk, pgawk-3.1.3 и pwcat
Gawk зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Sed.
Сначала применим патч по следующим причинам:
Gawk по умолчанию устанавливает некоторые из исполняемых файлов в $prefix/libexec/awk. Это расположение несовместимо с FHS, в котором нигде не упоминается директория с именем libexec. Патч дает возможность добавить переключатель --libexecdir к скрипту конфигурации, что позволит нам использовать для размещения grcat и pwcat директорию /usr/bin.
Директория с данными для Gawk по умолчанию: $prefix/share/awk. Но пакетно-зависимые директории должны называться с использованием имени и версии пакета (например: gawk-7.7.2.), а не просто именем пакета, так как может быть несколько версий пакета на одной системе. Птч изменит имя директории для данных на $prefix/share/gawk-3.1.3.
Патч также позволяет убедиться, что директория для данных, вместе со всем содержимым, будет удалена командой make uninstall.
patch -Np1 -i ../gawk-3.1.3-libexecdir.patch |
Теперь подготовим Gawk к компиляции:
./configure --prefix=/usr --libexecdir=/usr/bin |
Скомпилируем пакет:
make |
Этот пакет поддерживает тестирование корректности сборки. Если вы хотите использовать эту возможность, то запустите команду:
make check |
И установим пакет:
make install |
Ожидаемое время сборки: 0.1 SBU |
Пакет Net-tools содержит набор программ для обеспечения основы поддержки сетей в Linux.
Устанавливаемые программы: arp, dnsdomainname (ссылка на hostname), domainname (ссылка на hostname), hostname, ifconfig, nameif, netstat, nisdomainname (ссылка на hostname), plipconfig, rarp, route, slattach и ypdomainname (ссылка на hostname)
Net-tools зависит от: Bash, Binutils, Coreutils, GCC, Glibc, Make.
Если вы не знаете, как ответить на задаваемые командой 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).
Когда отлаживается программа или библиотека, которая была собрана с включением отладочной информации, то отладчик может передать вам не только адреса в памяти, но и имена переменных и функций.
Но исключение отладочных символов существенно уменьшает размер программы или библиотеки. Чтобы получить представление о том, сколько места занимает отладочная информация, посмотрите следующее:
бинарник bash с отладочными символами: 1200 KB
бинарник bash без отладочных символов: 480 KB
файлы Glibc и GCC (/lib и /usr/lib) с отладочными символами: 87 MB
файлы Glibc и GCC без отладочных символов: 16 MB
Размер может немного варьироваться в зависимости от используемых компилятора и библиотеки C. Но размер между программами и библиотеками, собранными с отладочной информацией и без таковой может различаться в 2-5 раз.
Большинство людей никогда не используют отладчик, и довольно много места на диске освободится при удалении отладочных символов.
Для удаления отладочных символов из бинарников (которые должны быть бинарниками форматов a.out или ELF), запустите strip --strip-debug filename. Могут использоваться шаблоны для выбора нескольких файлов (например, strip --strip-debug $LFS/tools/bin/*).
Для вашего удобства, Глава 9 включает одну простую команду для удаления всех отладочных символов изо всех программ и библиотек в вашей системе. Дополнительную информацию по оптимизации можно получить на http://www.linuxfromscratch.org/hints/downloads/files/optimization.txt.
Ожидаемое время сборки: 0.1 SBU |
Скрипт MAKEDEV создает статические записи для устройств, которые обычно расположены в директории /dev. Детальную информацию об устройствах вы можете получить в файле Documentation/devices.txt в директории с исходными кодами ядра.
Устанавливаемый скрипт: MAKEDEV
Make зависит от: Bash, Coreutils.
Заметьте, что распаковка файла MAKEDEV-1.7.bz2 не создаст директорий и вам не надо будет переходить в нее с помощью cd, так как этот файл содержит только скрипт.
Установим скрипт MAKEDEV:
bzcat MAKEDEV-1.7.bz2 > /dev/MAKEDEV |
Запустим скрипт для создания файлов устройств:
cd /dev |
Описание аргументов:
-v: Это заставит скрипт запуститься в verbose режиме.
generic-nopty: Это заставит MAKEDEV создать необходимые файлы устройств за исключением файлов ptyXX и ttyXX. Они нам не нужны потому, что мы используем Unix98 PTY через файловую систему devpts.
Если скрипт не выполниться из-за пропуска какого-либо специального устройства 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} |
По умолчанию, директории создаются с правами доступа 755, но это правильно не для всех из них. Мы сделаем два изменения: одно для домашней директории пользователя root, а другое для директории для временных файлов.
chmod 0750 /root |
Первой командой мы запрещаем доступ в директорию /root для всех, кроме владельца -- тоже самое нам надо будет потом сделать для домашних директорий остальных пользователей.. Второй командой мы позволяем всем пользователям записывать и читать файлы в и из директорий /tmp и /var/tmp directories, но они не смогут удалять оттуда файлы других пользователей. Последнее достигается установкой "sticky bit" -- старшего бита в битовой маске 1777.
Мы создаем наше дерево каталогов совместимым со стандартом FHS (доступен на http://www.pathname.com/fhs/). За исключением директорий /usr/local/games и /usr/share/games, поскольку они не нужны на минимальной системе. Тем не менее можно сделать вашу систему FHS-совместимой. Поскольку структура субдиректорий /usr/local/share не описана в стандарте FHS, то мы создаем ее так, как нам надо.
Ожидаемое время сборки: 0.2 SBU |
Sed является редактором потоков. Редактор потоков используется для простых трансформаций текста на входном потоке (файл или ввод из командной строки).
Устанавливаемые программы: sed
Sed зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Texinfo.
Подготовим Sed к компиляции:
./configure --prefix=/usr --bindir=/bin |
Скомпилируем пакет:
make |
Этот пакет поддерживает тестирование корректности сборки. Если вы хотите использовать эту возможность, то запустите команду:
make check |
И установим пакет:
make install |
Ожидаемое время сборки: 0.1 SBU |
Пакет Gzip содержит программы для сжатия и распаковки файлов с использованием Lempel-Ziv кодирования (LZ77).
Устанавливаемые программы: gunzip (ссылка на gzip), gzexe, gzip, uncompress (ссылка на gunzip), zcat (ссылка на gzip), zcmp, zdiff, zegrep, zfgrep, zforce, zgrep, zless, zmore и znew
Gzip зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Sed.
Подготовим Gzip к компиляции:
./configure --prefix=/usr |
Программа gzexe встраивает в себя путь к бинарнику gzip. Поскольку мы позднее изменим положение этого файла, следующая команда позволит встроить новый путь в бинарник:
cp gzexe.in{,.backup} |
Скомпилируем пакет:
make |
Установим пакет:
make install |
И переместим программы в директорию /bin:
mv /usr/bin/gzip /bin |
В этой главе мы войдем в фазу сборки и начнем серьезно собирать нашу LFS систему. Для этого мы войдем в среду chroot внутри нашей мини Linux системы, проделаем некоторые дополнительные работы и начнем устанавливать пакеты один за одним.
Установка всех этих пакетов весьма проста, и вы можете подумать, что достаточно было бы указать общее описание установки для всех пакетов, а конкретезировать только если установка их отличается от стандартной. Несмотря на то, что мы согласны с этим, мы решили дать полные инструкции по установке каждого из пакетов просто для того, чтобы минимизировать возможность возникновения ошибок.
Если вы решите использовать оптимизацию компилятора в этой главе, то вам стоит посмотреть справку по оптимизации на http://www.linuxfromscratch.org/hints/downloads/files/optimization.txt. Оптимизация компилятора может сделать программы быстрее, но могут возникнуть сложности при компиляции и некоторые проблемы при работе этих программ. Еслои пакет отказывается компилироваться при использовании оптимизации, то попробуйте скомпилировать пакет без нее, возможно проблемы исчезнут. Если пакет компилируется с использованием оптимизации, то есть возможность, что он скомпилируется некорректно, например, могут появиться проблемы между интерактивностью в коде и собраными средствами. В общем, использование оптимизауии при сборке является рискованым. Новичкам в LFS рекомендуется собирать ее без оптимизации. В ваших силах сделать систему быстрой и стабильной одновременной.
Список пакетов, которые надо собирать, является строго последовательным, нам надо убедиться, что в них не будет прописан путь к /tools. По некоторым причинам, не стоит компилировать пакеты параллельно. Параллельная сборка может показаться выгодной иногда (в особенности на многопроцессорных системах), но в результате у программ появится зависимость от средств из /tools и они не смогут работать, когда мы удалим эту директорию.
Ожидаемое время сборки: 1.4 SBU |
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 зависит от: Bash, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Perl, Sed, Texinfo.
Сейчас необходимо проверить правильность работы 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 |
Теперь подготовим Binutils к компиляции:
../binutils-2.14/configure \ |
Скомпилируем пакет:
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 |
Ожидаемое время сборки: 1.5 SBU |
GNU libtool является общей библиотекой поддержки скриптов. Libtool скрывает сложность использования системных библиотек обеспечивая совместимый, портируемый интерфейс.
Устанавливаемые программы: libtool и libtoolize
Устанавливаемые библиотеки: libltdl.[a,so].
Libtool зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Sed.
Подготовим Libtool к компиляции:
./configure --prefix=/usr |
Скомпилируем пакет:
make |
Этот пакет поддерживает тестирование корректности сборки. Если вы хотите использовать эту возможность, то запустите команду:
make check |
И установим пакет:
make install |
Ожидаемое время сборки: 0.2 SBU |
Пакет Util-linux содержит ряд различны утилит. Некоторые из этих утилит используются для монтирования, размонтирования, форматирования, разбиения и обслуживания дисков, открытия портов tty и вызова сообщений ядра.
Устанавливаемые программы: agetty, arch, blockdev, cal, cfdisk, chkdupexe, col, colcrt, colrm, column, ctrlaltdel, cytune, ddate, dmesg, elvtune, fdformat, fdisk, fsck.cramfs, fsck.minix, getopt, hexdump, hwclock, ipcrm, ipcs, isosize, kill, line, logger, look, losetup, mcookie, mkfs, mkfs.bfs, mkfs.cramfs, mkfs.minix, mkswap, more, mount, namei, parse.bash, parse.tcsh, pg, pivot_root, ramsize (ссылка на rdev), raw, rdev, readprofile, rename, renice, rev, rootflags (ссылка на rdev), script, setfdprm, setsid, setterm, sfdisk, swapoff (ссылка на swapon), swapon, test.bash, test.tcsh, tunelp, ul, umount, vidmode (ссылка на rdev), whereis и write
Util-linux зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Ncurses, Sed, Zlib.
FHS рекомендует использовать /var/lib/hwclock, вместо обычного /etc, в качестве расположения для файла adjtime. Для обеспечения программы hwclock FHS-совместимости, запустим следующее:
cp hwclock/hwclock.c{,.backup} |
Подготовим Util-linux к компиляции:
./configure |
Скомпилируем пакет:
make HAVE_SLN=yes |
Описание параметров компиляции:
HAVE_SLN=yes: Это предостережет программу sln (статически скомпонованый ln, уже установленый с Glibc) от повторной сборки.
И установим пакет:
make HAVE_SLN=yes install |
Ожидаемое время сборки: 0.1 SBU |
Пакет Modutils содержит программы, которые вы можете использовать для работы с модулями ядра.
Устанавливаемые пргограммы: depmod, genksyms, insmod, insmod_ksymoops_clean, kallsyms (ссылка на insmod), kernelversion, ksyms (ссылка на insmod), lsmod (ссылка на insmod), modinfo, modprobe (ссылка на insmod) и rmmod (ссылка на insmod)
Modutils зависит от: Bash, Binutils, Bison, Coreutils, Diffutils, Flex, GCC, Glibc, Grep, M4, Make, Sed.
Подготовим Modutils к компиляции:
./configure |
Скомпилируем пакет:
make |
И установим его:
make install |
Ожидаемое время сборки: 5.3 SBU |
Automake генерирует файлы Makefile.in, которые впоследствии должен использовать Autoconf.
Устанавливаемые программы: acinstall, aclocal, aclocal-1.7, automake, automake-1.7, compile, config.guess, config.sub, depcomp, elisp-comp, install-sh, mdate-sh, missing, mkinstalldirs, py-compile, ylwrap
Automake зависит от: Autoconf, Bash, Coreutils, Diffutils, Grep, M4, Make, Perl, Sed.
Подготовим Automake к компиляции:
./configure --prefix=/usr |
Скомпилируем пакет:
make |
Этот пакет поддерживает тестирование корректности сборки. Если вы хотите использовать эту возможность, то запустите команду:
make check |
Установим пакет:
make install |
И создадим необходимые ссылки:
ln -s automake-1.7 /usr/share/automake |
Ожидаемое время сборки: 0.1 SBU |
Пакет Lfs-Utils содержит разные программы, используемые другими пакетами, но которые не доступны в виде отдельных пакетов либо в составе каких либо из них.
Устанавливаемые программы: mktemp, tempfile, http-get и iana-net
Устанавливаемые файлы: protocols, services
(Пока не проверены.)
Скомпилируем пакет:
make |
И установим его:
make install |
Теперь скопируем два файла из архива Lfs-Utils на свое место:
cp etc/{services,protocols} /etc |
Файл /etc/services используется для представления номеров сервисов в "читабельном" виде, а файл /etc/protocols используется для того же, но применительно к номерам протоколов.
Ожидаемое время сборки: 0.1 SBU |
Ядро Linux - это основа любой Linux системы. Это то, что делает Linux собой. Когда компьютер включается и загружает систему Linux, самым первым загружается ядро. Ядро инициализирует аппаратные компоненты: последовательные и параллельные порты, звуковые карты, сетевые карты, контролеры IDE, контролеры SCSI и много чего еще. Собственно, ядро делает доступным аппаратные элементы cbcntvs и позволяет запускаться программам.
Устанавливаемые файлы: ядро и заголовки ядра
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/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, отрывок):
Тем, кто компилирует новые ядра, настоятельно рекомендую: |
Наиболее важная часть сообщения Линуса заключается в том, что файлы заголовков должны быть именно теми, с которыми компилировался пакет glibc. Это те заголовки, которые следует использовать в будущем при компиляции других пакетов, т.к. именно они соответствуют файлам библиотек объектного кода. Копируя заголовки, мы удостоверяемся, что они останутся доступными, если позже мы решим обновить ядро.
Заметьте, что не страшно если исходники ядра находятся в /usr/src/linux, главное, чтобы у вас не было ссылок на /usr/include/{linux,asm}.
Теперь пришло время войти в среду chroot для установки необходимых пакетов. Перед тем, как войти в chroot, вам необходимо войти в систему как root, потому что только root может выполнить команду chroot.
Убедитесь, что переменная окружения LFS установленна корректно запуском echo $LFS, и проверьте, что она содержит путь к точке монтирования раздела LFS, к примеру /mnt/lfs.
Из-под привелегий root запустите следующую команду для входа в среду chroot:
chroot $LFS /tools/bin/env -i \ |
Параметр -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 должны быть доступны из среды 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, иначе могут возникнуть определенные проблемы.
Ожидаемое время сборки: 0.1 SBU |
M4 является макро процессором. Он копирует ввод на вывод, используя макросы. Макросы могут быть как встроеными, так и пользовательскими и могут иметь несколько аргументов. Помимо макро-преобразований, m4 имеет встроеные функции для включения именованых файлов, запуска команд Unix, целочисленной арифметики, разносторонними манипуляциями с текстом, рекурсию и др. Программа m4 может использоваться в качестве front-end для компиляторов или как макропроцессор на ваше усмотрение.
Устанавливаемые программы: m4
M4 зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Perl, Sed.
Подготовим M4 к компиляции:
./configure --prefix=/usr |
Скомпилируем пакет:
make |
Этот пакет поддерживает тестирование корректности сборки. Если вы хотите использовать эту возможность, то запустите команду:
make check |
И установим пакет:
make install |
Ожидаемое время сборки: 0.2 SBU |
Tar является архиватором, разработаным для записи и извлечения файлов из архива, извесного как tar-файл (тарбол).
Устанавливаемые программы: rmt и tar
Tar зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Sed.
Подготовим Tar к компиляции:
./configure --prefix=/usr --bindir=/bin \ |
Скомпилируем пакет:
make |
Этот пакет поддерживает тестирование корректности сборки. Если вы хотите использовать эту возможность, то запустите команду:
make check |
И установим пакет:
make install |
Ожидаемое время сборки: 0.5 SBU |
Пакет Groff содержит некоторые программы для форматирования текста. Groff транслирует стандартный текст и специальные команды в ворматированый вывод, так вы, например, просматриваете man-страницы.
Устанавливаемые программы: addftinfo, afmtodit, eqn, eqn2graph, geqn (ссылка на eqn), grn, grodvi, groff, groffer, grog, grolbp, grolj4, grops, grotty, gtbl (ссылка на tbl), hpftodit, indxbib, lkbib, lookbib, mmroff, neqn, nroff, pfbtops, pic, pic2graph, post-grohtml, pre-grohtml, refer, soelim, tbl, tfmtodit, troff и zsoelim (ссылка на soelim)
Groff зависит от: Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Glibc, Grep, Make, Sed.
Groff использует переменную окружения PAGE для определения размеров бумаги по умолчанию. При использовании в США, нижеприведенная команда корректна. Если вы живете еще где-нибудь, то вам, видимо, надо будет поменять PAGE=letter на PAGE=A4.
Подготовим Groff к компиляции:
PAGE=letter ./configure --prefix=/usr |
Скомпилируем пакет:
make |
И установим его:
make install |
Некоторые программы документации, например, xman, не работают правильно без следующих ссылок:
ln -s soelim /usr/bin/zsoelim |
Для возможности регистрации в качестве пользователя root и для распознавания имени "root", нам необходимо создать соответствующие элементы в файлах /etc/passwd и /etc/group.
Создадим файл /etc/passwd запуском команды:
cat > /etc/passwd << "EOF" |
Пароль пользователя root (символ "x" заменяет его здесь) будет определен позднее.
Создадим файл /etc/group запуском следующей команды:
cat > /etc/group << "EOF" |
Созданные группы не являются частью какого-то стандарта -- эти группы используются скриптом MAKEDEV в следующей главе. Помимо группы "root", LSB (http://www.linuxbase.org) рекомендует устанавливать GID равный 1 для группы "bin". Все другие имена групп и их GID могут свободно выбираться пользователем, но некоторые пакеты зависят от имени группы, хоть и не зависят от номера GID.
Наконец, мы перезайдем в chroot. Имя пользователя и имя группы начнут работать правильно после создания файлов /etc/passwd и /etc/group потому, что мы установили полную Glibc в Главе 5. Это должно убрать вывод сообщения "I have no name!".
exec /tools/bin/bash --login +h |
Замечание по использованию параметра +h. Это скажет bash не использовать внутренний кеш путей. Без этого bash будет запоминать пути к исполненым бинарникам. Поскольку мы собираемся использовать вновь скомпилированые пакеты по мере их установки, мы должны отключить эту функцию в этой главе.
Ожидаемое время сборки: 0.1 SBU |
Пакет Psmisc содержит три программы для работы с директорией/proc.
Устанавливаемые программы: fuser, killall и pstree
Psmisc зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Ncurses, Sed.
Подготовим Psmisc к компиляции:
./configure --prefix=/usr --exec-prefix=/ |
Описание параметров конфигурации:
--exec-prefix=/: Это необходимо для установки бинарников в /bin вместо /usr/bin. Поскольку программы Psmisc programs часто используются в загрузочных скриптах, они должны быть доступны даже при недоступной файловой системне /usr.
Скомпилируем пакет:
make |
And install it:
make install |
По умолчанию программа pidof не устанавливается. Обычно, это не является проблемой, поскольку устанавливаемый позже пакет Sysvinit содержит лучший вариант программы pidof. Но если вы не собираетесь использовать Sysvinit, то вам стоит завершить установку Psmisc созданием следующей ссылки:
ln -s killall /bin/pidof |
Ожидаемое время сборки: 2.9 SBU |
Autoconf создает скрипты shell, которые автоматически конфигурируют исходный код.
Устанавливаемые программы: autoconf, autoheader, autom4te, autoreconf, autoscan, autoupdate и ifnames
Autoconf зависит от: Bash, Coreutils, Diffutils, Grep, M4, Make, Perl, Sed.
Подготовим Autoconf к компиляции:
./configure --prefix=/usr |
Скомпилируем пакет:
make |
Этот пакет поддерживает тестирование корректности сборки. Если вы хотите использовать эту возможность, то запустите команду:
make check |
И установим пакет:
make install |
Ожидаемое время сборки: 0.1 SBU |
Пакет Zlib содержит библиотеку libz, которая используется некоторыми программами для функций сжатия и распаковки.
Устанавливаемые библиотеки: libz[a,so]
Zlib зависит от: Binutils, Coreutils, GCC, Glibc, Make, Sed.
Zlib имеет потенциальную опасность переполнения буфера в функции gzprintf(), которая, для предохранения от использования этой возможности взлома, исправляется наложением следующего патча:
patch -Np1 -i ../zlib-1.1.4-vsnprintf.patch |
Теперь подготовим Zlib к компиляции:
./configure --prefix=/usr --shared |
Замечание: Zlib известна некорректной сборкой shared-библиотеки при указанной переменной окружения CFLAGS. Если вы используете эту переменную, добавите диррективу -fPIC на этом этапе, и удалите ее по окнчании.
Скомпилируем пакет:
make |
Установим shared-библиотеку:
make install |
Теперь установим остальные библиотеки:
make clean |
Этот пакет поддерживает тестирование корректности сборки. Если вы хотите использовать эту возможность, то выполните команду:
make test |
И установим пакет:
make install |
Shared-библиотека Zlib устанавливается в директорию /lib. Таким образо, если вы хотите загрузиться без директории /usr, жизненно важные системные программы не получат доступа к библиотеке:
mv /usr/lib/libz.so.* /lib |
Ссылка /usr/lib/libz.so указывает на несуществующий файл потому, что мы только что его переместили. Создадим ссылку на новое расположение этой библиотеки:
ln -sf ../../lib/libz.so.1 /usr/lib/libz.so |
Zlib не устанавливает свою man-страницу. Используйте следующую команду для установки этой документации:
cp zlib.3 /usr/share/man/man3 |
Ожидаемое время сборки: 0.1 SBU |
Пакет Man-pages содержит более 1200 страниц документации. Это детальная информация по функциям C и C++, описание наиболее важных файлов устройств и документация, которая обычно опущена в других пакетах.
Устанавливаемые файлы: страницы документации
Man зависит от: Bash, Coreutils, Make.
На данный момент, права на директорию /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" до того, как будет создан файл паролей.
Ожидаемое время сборки: 0.9 SBU |
Пакет Coreutils содержит ряд основных утилит для shell.
Устанавливаемые программы: basename, cat, chgrp, chmod, chown, chroot, cksum, comm, cp, csplit, cut, date, dd, df, dir, dircolors, dirname, du, echo, env, expand, expr, factor, false, fmt, fold, groups, head, hostid, hostname, id, install, join, kill, link, ln, logname, ls, md5sum, mkdir, mkfifo, mknod, mv, nice, nl, nohup, od, paste, pathchk, pinky, pr, printenv, printf, ptx, pwd, readlink, rm, rmdir, seq, sha1sum, shred, sleep, sort, split, stat, stty, su, sum, sync, tac, tail, tee, test, touch, tr, true, tsort, tty, uname, unexpand, uniq, unlink, uptime, users, vdir, wc, who, whoami и yes
Coreutils зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Perl, Sed.
Нармальное функционирование uname иногда нарушается, тогда параметр -p всегда возвращает "unknown". Следующий патч исправляет это для архитектуры Intel:
patch -Np1 -i ../coreutils-5.0-uname.patch |
Мы не хотим использовать Coreutils для установки программы hostname потому, что более новая версия содержится в Net-tools. Отключим эту установку патчем:
patch -Np1 -i ../coreutils-5.0-hostname-2.patch |
Теперь подготовим Coreutils к компиляции:
./configure --prefix=/usr |
Скомпилируем пакет:
make |
Программа su из Coreutils не была установлена в Главе 5 потому, что ей нужны привелегии root для этого. Мы собираемся установить ее, поскольку она нужна для тестирования. Установим ее командой:
make install-root |
Этот пакет поддерживает тестирование для определения корректности сборки. Тем не менее, этот специфический тест использует непревилигированных пользователей и группы, которые пока не определены в нашей простой системе. Поэтому мы создадим фиктивного пользователя и две фиктивных группы для корректной работы тестов. Если вы не хотите запускать тестирование, то переходите к "установке пакета". Следующие команды подготовят систему к тестированию. Создадим фиктивных пользователя и группы:
echo "dummy1:x:1000" >> /etc/group |
Следующий тест проверит запуск от имени 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 |
И, наконец, создадим необходимые ссылки:
ln -s test /bin/[ |
Ожидаемое время сборки: 0.1 SBU |
Пакет Procps содержит программы для мониторинга и завершения системных процессов. Procps собирает информацию о процессах из директории /proc.
Устанавливаемые программы: free, kill, pgrep, pkill, pmap, ps, skill, snice, sysctl, tload, top, uptime, vmstat, w и watch
Устанавливаемая библиотека: libproc.so
Procps зависит от: Bash, Binutils, Coreutils, GCC, Glibc, Make, Ncurses.
Для начала исправим проблему с возможным крахом w из-за установок локали:
patch -Np1 -i ../procps-3.1.11-locale-fix.patch |
Теперь скомпилируем Procps:
make |
Установим его:
make install |
И удалим ошибочную ссылку на библиотеку:
rm /lib/libproc.so |
Ожидаемое время сборки: 0.2 SBU |
Пакет Findutils содержит программы для поиска файлов, как "на лету" (для рекурсивного поиска в директориях и вывода только файлов, удовлетворяющих шаблону), так и для поиска по базе данных.
Устанавливаемые программы: bigram, code, find, frcode, locate, updatedb and xargs
Findutils зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Sed.
Подготовим Findutils к компиляции:
./configure --prefix=/usr --libexecdir=/usr/bin |
По умолчанию, база данных для updatedb располоржена в /usr/var. Для размещения ее в /var/lib/misc/locatedb для совместимости с FHS, добавьте опцию --localstatedir=/var/lib/misc к configure.
Скомпилируем пакет:
make |
Этот пакет поддерживает тестирование корректности сборки. Если вы хотите использовать эту возможность, то запустите команду:
make check |
И установим пакет:
make install |
Ожидаемое время сборки: 0.1 SBU |
Пакет Sysklogd содержит программы для записи системных сообщений в логи, например, сообщений ядра.
Устанавливаемые программы: klogd и syslogd
Sysklogd зависит от: Binutils, Coreutils, GCC, Glibc, Make.
Создадим новый файл /etc/syslog.conf запуском команды:
cat > /etc/syslog.conf << "EOF" |
Ожидаемое время сборки: 11.7 SBU |
Пакет GCC сдержит коллекцию компиляторов GNU, включая компиляторы C и C++.
Устанавливаемые программы: c++, cc (ссылка на gcc), cc1, cc1plus, collect2, cpp, g++, gcc, gccbug, и gcov
Устанавливаемые библиотеки: libgcc.a, libgcc_eh.a, libgcc_s.so, libstdc++.[a,so] и libsupc++.a
GCC зависит от: Bash, Binutils, Coreutils, Diffutils, Findutils, Gawk, Gettext, Glibc, Grep, Make, Perl, Sed, Texinfo.
Замечание: Тестирование GCC в этой главе является критичным. Ни в коем случае не пропускайте его.
Этот пакет известен своим нестабильным поведением при компиляции с измененными опциями оптимизации (включая опции -march и -mcpu). GCC рекомендуется компилировать с настройками по умолчанию. Следовательно, если вы задали переменные такие как CFLAGS или CXXFLAGS, изменяющие уровень оптимизации по умолчанию, рекомендуется убрать их при сборке пакета GCC. Изменяя оптимизации для GCC, вы действуете на свой страх и риск.
Сейчас мы собираемся установить компиляторы языков C и C++, таким образом вам надо распаковать архивы GCC-core и GCC-g++ -- они распакуются в одну и ту же директорию. Вы можете также распаковать пакет GCC-testsuite. Полный пакет GCC содержит намного больше компиляторов. Инструкции по их установке вы можете найти на http://www.linuxfromscratch.org/blfs/view/stable/general/gcc.html.
patch -Np1 -i ../gcc-3.3.1-no_fixincludes-2.patch |
Второй патч отключает установку libiberty из GCC, которые мы установили вместе с binutils. Будьте внимательны, не применяйте патч GCC specs из Главы 5 здесь.
Документация GCC рекомендует собирать GCC вне директории с исходниками, в отдельной директории для сборки:
mkdir ../gcc-build |
Теперь подготовим GCC к компиляции:
../gcc-3.3.1/configure --prefix=/usr \ |
Скомпилируем пакет:
make |
Протестируем результаты, но не будем останавливаться при ошибках (вы должны просто запомнить их):
make -k check |
Тестирование из части Установка GCC-3.3.1 - Шаг 2 Главы 5 является весьма желательным здесь. Убедитесь, что все в порядке перед продолжением установки.
И установим пакет:
make install |
Некоторые пакеты рассчитывают, что C PreProcessor будет установлен в директории /lib. Для удовлетворения нужд этих пакетов, создадим ссылку:
ln -s ../usr/bin/cpp /lib |
Многие пакеты используют имя cc для вызова компилятора C. Для этих пакетов мы тоже создадим ссылку:
ln -s gcc /usr/bin/cc |
Замечание: В этом месте рекомендуется повторить тест из части Переустановка средств . Если тест не прошел, то, скорее всего, вы применили патч GCC Specs из Главы 5.
Ожидаемое время сборки: 0.1 SBU |
Пакет Sysvinit содержит пограммы для контроля загрузки, запуска и выключения всех других программ.
Установливаемые программы: halt, init, killall5, last, lastb (ссылка на last), mesg, pidof (ссылка на killall5), poweroff (ссылка на halt), reboot (ссылка на halt), runlevel, shutdown, sulogin, telinit (ссылка на init), utmpdump и wall
Sysvinit зависит от: Binutils, Coreutils, GCC, Glibc, Make.
Когда изменяется уровень запуска (например, при выключении системы), init посылает сигналы TERM и KILL запущеным процессам. Init печатаем "Sending processes the TERM signal" на экране. Это предполагает, что init отсылает эти сигналы всем работающим процессам. Чтобы не входить в заблуждение, исправим это сообщение на "Sending processes started by init the TERM signal".
Исправим сообщение:
cp src/init.c{,.backup} |
Скомпилируем Sysvinit:
make -C src |
И установим его:
make -C src install |
Создадим новый файл /etc/inittab запуском следующих команд:
cat > /etc/inittab << "EOF" |
Ожидаемое время сборки: 0.1 SBU |
Программа patch модифицирует файл в соответствии с файлом патча. Патч обычно является списком, созданным программой diff, который содержит инструкции по изменению оригинального файла, нуждающегося в модификации.
Устанавливаемая программа: patch
Patch зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Sed.
Подготовим Patch к компиляции:
CPPFLAGS=-D_GNU_SOURCE ./configure --prefix=/usr |
Опять же, флаг препроцессора -D_GNU_SOURCE необходим на платформах PowerPC. На других архитектурах его можно опустить.
Скомпилируем пакет:
make |
И установим его:
make install |
Теперь, когда мы установили новую библиотку 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 && |
Желательно просто скопировать и вставить эту команду. После этого также неплохо бы было проверить spec файлы, чтобы убедиться в сделаных изменениях.
Важно: Если вы работаете на платформах, на которых имя динамического компоновщика отличается от ld-linux.so.2, вы должны заменить ld-linux.so.2 на имя компоновщика для вашей платформы в вишеуказанной команде. Вернитесь к части Технрические моменты в Главе 5 если у вас возникли вопросы.
Внимание | |||
На этом месте необходимо остановиться и убедиться, что основные функции (компиляция и компоновка) новых средств работают корректно. Для этого есть простой тест:
Если все в порядке, то не будет ошибок и на выводе вы увидите:
Если эта надпись вообще не появилась или появилась другая, то чтото сильно не так. Вам надо исследовать и повторить все пройденые шаги, чтобы найти в чем проблема и устранить ее. Точки для возврата после этого места уже не будет. Как правило, что-то не так бывает с вышеописаной правкой specs-фала. Убедитесь, что /lib содержит префикс вашего динамического компоновщика. Само собой, если вы работаете на платформе с названием динамического компоновщика, отличным от ld-linux.so.2, вывод будет несколько иным. Если все прошло нормально, удалим тестовые файлы:
|
Ожидаемое время сборки: 1.5 SBU |
Этот пакет известен своим нестабильным поведением при компиляции с измененными опциями оптимизации (включая опции -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 |
Документация GCC рекомендует собирать GCC вне директории с исходниками, в отдельной директории для сборки:
mkdir ../gcc-2-build |
Скомпилируем и установим компилятор:
../gcc-2.95.3/configure --prefix=/opt/gcc-2.95.3 \ |
Ожидаемое время сборки: 0.4 SBU |
Если вы предпочитаете другие редакторы -- Такие ка Emacs, Joe или Nano -- вместо Vim, загляните на http://www.linuxfromscratch.org/blfs/view/stable/postlfs/editors.html для получения инструкций по установке.
Пакет Vim содержит конфигурируемый текстовый редактор для эффективного редактирования текста.
Устанавливаемые программы: efm_filter.pl, efm_perl.pl, ex (ссылка на vim), less.sh, mve.awk, pltags.pl, ref, rview (ссылка на vim), rvim (ссылка на vim), shtags.pl, tcltags, vi (ссылка на vim), view (ссылка на vim), vim, vim132, vim2html.pl, vimdiff (ссылка на vim), vimm, vimspell.sh, vimtutor и xxd
Vim зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Ncurses, Sed.
Изменим раположение по умолчанию файлов vimrc и gvimrc на /etc.
echo '#define SYS_VIMRC_FILE "/etc/vimrc"' >> src/feature.h |
Теперь подготовим Vim к компиляции:
./configure --prefix=/usr |
Скомпилируем пакет:
make |
И установим его:
make install |
Vim может быть запущен в "старом" режиме vi созданием ссылки, которая создается командеой:
ln -s vim /usr/bin/vi |
Если вы собираетесь устанавливать систему X Window на вашей системе LFS, вам надо будет перекомпилировать Vim после установки X. Vim содержит хорошую GUI версию редактора, который использует X и некоторые другие библиотеки при установке. Для более подробной информации прочитайте документацию по Vim.
По умолчанию vim запускается в режиме совместимости с vi. Некоторым это нравится, но мы получим больше преимуществ при запуске vim в режиме vim (иначе бы мы не включили vim в эту книгу, а обошлись бы оригинальным vi). Создадим /root/.vimrc запуском команды:
cat > /root/.vimrc << "EOF" |
Ожидаемое время сборки: 0.1 SBU |
File является утилитой для определения типа файла.
Устанавливаемая программа: file
Устанавливаемая библиотека: libmagic.[a,so]
File зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Sed, Zlib.
Подготовим File к компиляции:
./configure --prefix=/usr |
Скомпилируем пакет:
make |
И установим его:
make install |
Ожидаемое время сборки: 0.1 SBU |
Программы из этого пакета покажут вам различия между двумя файлами или директориями. Как правило, они используются для создания патчей к программам.
Устанавливаемые программы: cmp, diff, diff3 и sdiff
Diffutils зависит от: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Sed.
Подготовим Diffutils к компиляции:
./configure --prefix=/usr |
Скомпилируем пакет:
make |
И установим его:
make install |
Ожидаемое время сборки: 1.2 SBU |
Bash - это Bourne-Again SHell, который обычно используется в качестве интерпритатора командной строки на Unix системах. Программа bash считывает со стандартного ввода (клавиатуры). Пользователь вводит что-либо, а программа определяет, что именно пользователь ввел и что с этим надо делать, например, запустить программу.
Устанавливаемые программы: bash, sh (ссылка на bash) и bashbug
Bash зависит от: Binutils, Coreutils, Diffutils, Gawk, GCC, Glibc, Grep, Make, Ncurses, Sed.
Bash имеет ряд ошибок, из-за которых он ведет временами себя не так, как ожидается. Исправим это наложением патча:
patch -Np1 -i ../bash-2.05b-2.patch |
Подготовим Bash к компиляции:
./configure --prefix=/usr --bindir=/bin |
Скомпилируем пакет:
make |
Этот пакет поддерживает тестирование корректности сборки. Если вы хотите использовать эту возможность, то запустите команду:
make tests |
Установим пакет:
make install |
И перезапустим скомпилированую заново программу bash:
exec /bin/bash --login +h |
Ожидаемое время сборки: 0.1 SBU |
Пакет Flex используется для генерации программ, которые могут обрабатывать шаблоны в тексте.
Устанавливаемые программы: flex, flex++ (ссылка на flex) и lex
Устанавливаемые библиотеки: libfl.a
Flex зависит от: Bash, Binutils, Bison, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, M4, Make, Sed.
Подготовим 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" |
Ожидаемое время сборки: 12.3 SBU |
Glibc является библиотекой C, которая обеспечивает системные вызовы и основные функции, такие как open, malloc, printf и другие. Библиотека C используется всеми динамически скомпоноваными программами.
Устанавливаемые программы: catchsegv, gencat, getconf, getent, glibcbug, iconv, iconvconfig, ldconfig, ldd, lddlibc4, locale, localedef, mtrace, nscd, nscd_nischeck, pcprofiledump, pt_chown, rpcgen, rpcinfo, sln, sprof, tzselect, xtrace, zdump и zic
Устанавливаемые библиотеки: ld.so, libBrokenLocale.[a,so], libSegFault.so, libanl.[a,so], libbsd-compat.a, libc.[a,so], libc_nonshared.a, libcrypt.[a,so], libdl.[a,so], libg.a, libieee.a, libm.[a,so], libmcheck.a, libmemusage.so, libnsl.a, libnss_compat.so, libnss_dns.so, libnss_files.so, libnss_hesiod.so, libnss_nis.so, libnss_nisplus.so, libpcprofile.so, libpthread.[a,so], libresolv.[a,so], librpcsvc.a, librt.[a,so], libthread_db.so и libutil.[a,so]
Glibc зависит от: Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Gettext, Grep, Make, Perl, Sed, Texinfo.
Система сборки Glibc является весьма самодостаточной и должна установится корректно, если ваши spec файл и компоновщик находятся в /tools. Мы не можем установить spec и компоновщик перед установкой Glibc потому, что тест автоконфинурации Glibc даст фиктивные результаты и от этого зависит чистота сборки.
Замечание: Тестирование Glibc в этой главе является критичным. Ни в коем случае нельзя его пропускать.
Перед началом сборки Glibc не забудьте снова распаковать Glibc-linuxthreads в дмректории glibc-2.3.2 и отключить переменные окружения, отвечающие за флаги оптимизации сборки.
На стадии установки Glibc выдает ошибку при отсутствии файла /etc/ld.so.conf. Исправим это командой:
touch /etc/ld.so.conf |
Применим ранее использовавшийся патч:
patch -Np1 -i ../glibc-2.3.2-sscanf-1.patch |
Документация по Glibc рекомендует собирать Glibc вне директории с исходниками в отдельной директории для сборки:
mkdir ../glibc-build |
Теперь подготовим Glibc к компиляции:
../glibc-2.3.2/configure --prefix=/usr \ |
Описание параметров конфигурации:
--libexecdir=/usr/bin: Это надо для установки программы pt_chown в директорию /usr/bin.
--with-headers=/usr/include: Это позволит убедиться, что заголовки ядра из /usr/include будут использованы при сборке. Если вы не укажете этот параметр, то будут использованы заголовки из /tools/include что не идеально (несмотря на их идентичность). Использование этого переключателя позволит также убедиться что вы не забыли установить заголовки ядра в /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 |
Наконец, соберем man страницы для linuxthreads:
make -C ../glibc-2.3.2/linuxthreads/man |
И установим их:
make -C ../glibc-2.3.2/linuxthreads/man install |
Нам нужно создать файл /etc/nsswitch.conf потому, что по умолчанию Glibc не создает этот файл, а без него Glibc не работает с сетью. Также это надо для работы с вашей временной зоной.
Создадим новый файл /etc/nsswitch.conf запуском следующих команд:
cat > /etc/nsswitch.conf << "EOF" |
Для определения вашей временной зоны, запустите скрипт:
tzselect |
Когда вы ответите на некоторые вопросы о вашим местонахождении, скрипт выдаст вам вашу временную зону. Что-то наподобие EST5EDT или Canada/Eastern. Создадим файл /etc/localtime запуском:
cp --remove-destination /usr/share/zoneinfo/Canada/Eastern /etc/localtime |
Описание параметров:
--remove-destination: Это необходимо для удаления существующей ссылки. Мы используем копию файла вместо ссылки на случай, если /usr находится на другом разделе. Также это нужно, например, когда вы загружаетесь в режиме single user (одного пользователя).
Само собой, вам надо заменить 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" |
Если вы решили компилировать файл раскладки вашей клавиатуры внутри ядра в конце Главы 6, то вам, строго говоря, нет надобности запуска этого скрипта loadkeys, поскольку ядро само установит нужную раскладку для вас. Вы можете все равно запускать его, если хотите. Это может пригодиться если вы запускаете разные ядра и забыли или не хотите компилировать все ядра со встроеной раскладкой.
Если вы решили, что вам не нужен этот скрипт или просто не хотите его использовать, то удалите ссылку /etc/rc.d/rcsysinit.d/S70loadkeys.
Этот скрипт setclock считывает время с внутренних часов вашего компьютера (также известных как часы BIOS или CMOS) и конвертирует его в локальное время, используя файл /etc/localtime (если внутренние часы установлены в GMT) или не делает этого (если они установлены в местное время). Нет способа автоматического определения того, установленны ли внутренние часы вашего компьютера в GMT или нет, поэтому нам надо будет это настроить самим.
Установите переменную UTC в 0 (нуль) если ваши системные часы не установлены в GMT в нижеописанном файле.
Создадим файл /etc/sysconfig/clock запуском команды:
cat > /etc/sysconfig/clock << "EOF" |
Вы можете теперь посмотреть очень хорошие советы по настройке времени в системе LFS на http://www.linuxfromscratch.org/hints/downloads/files/time.txt. Они содержат инвормацию по временным зонам, UTC и переменной окружения TZ.
Назад |
В начало |
Далее |
Как происходит загрузка с помощью этих скриптов? | Наверх | Нужен ли мне скрипт loadkeys? |
Этот раздел нужен только в том случае, если вы собираетесь настраивать сетевую карту.
Если у вас таковая отсутствует, вам не надо создавать файлы конфигурации сетевой карты. В этом случае вам надо удалить все ссылки network изо всех директорий с уровнями запуска (/etc/rc.d/rc*.d)
Если вы подключены к локальной сети, то вам надо установить гейт по умолчанию для этой машины. Это делается добавлением соответствующих параметров в файл /etc/sysconfig/network запуском следующей команды:
cat >> /etc/sysconfig/network << "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, скрипт 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 для остановки чего-либо. Это понятно, потому что когда вы собираетесь перезагрузить или отключить систему, вам не надо ничего запускать, а только остановить систему.
Вот описание параметров, которые можно передавать скриптам запуска:
start: Запуск сервиса.
stop: Остановка сервиса.
restart: Сервис останавливается и запускается заново.
reload: Это команда для обновления настроек сервиса. Она обычно вызывается после изменения конфигурационного файла скрипта, но сервису не нужно перезапускаться.
status: Показывает, запущен ли сервис и какой у него PID.
Вы спокойно можеде настраивать и изменять процесс загрузки (после установки вашей системы LFS). Файлы, описываемые здесь, являются только примерами и, возможно, вы сделаете их лучше.
Часть скрипта localnet устанавливает имя системы. Для этого надо настроить файл /etc/sysconfig/network.
Создадим файл /etc/sysconfig/network и укажем имя системы запуском:
echo "HOSTNAME=lfs" > /etc/sysconfig/network |
"lfs" надо заменить на желаемое имя компьютера для вызова. Вам не надо здесь вводить FQDN (Fully Qualified Domain Name - полное доменное имя). Эту информацию мы позже укажем в файле /etc/hosts.
Если вы хотите настроить сетевую карту, вам надо определить IP-адреса, FQDN и возможные псевдонимы в файле /etc/hosts. Его синтакс следующий:
<IP address> myhost.mydomain.org aliases |
Вы должны убедиться, что IP-адреса в частной сети соотвестсвуют допустимым. Корректными значениями являются:
Классы сетей |
Корректным IP адресом может быть 192.168.1.1. Корректным FQDN для этого IP может быть www.linuxfromscratch.org.
Если вы не собираетесь использовать сетевую карту, вам просто надо указать FQDN. Это важно для правильной работы рята важных программ.
Если сетевая карта не будет настраиваться, создайте файл /etc/hosts запуском:
cat > /etc/hosts << "EOF" |
Если вы собираетесь настраивать сетевую карту, то создайте файл /etc/hosts запуском:
cat > /etc/hosts << "EOF" |
Само собой, 192.168.1.1 и <value of HOSTNAME>.mydomain.org надо заменить на ваши варианты (как вам нравится или как установил системный администратор).
уЛТЙРФ sysklogd ЧЩЪЩЧБЕФ РТПЗТБННХ syslogd У РБТБНЕФТПН -m 0. ьФПФ РБТБНЕФТ ПФЛМАЮБЕФ РЕТЙПДЙЮЕУЛХА ПФНЕФЛХ ЧТЕНЕОЙ, ЛПФПТХА syslogd РП ХНПМЮБОЙА РЙЫЕФ Ч МПЗ-ЖБКМ ЛБЦДЩЕ 20 НЙОХФ. еУМЙ ЧЩ ИПФЙФЕ ЙУРПМШЪПЧБФШ ЬФХ НЕФЛХ, ФП ЙУРТБЧШФЕ УППФЧЕФУФЧХАЭЙН ПВТБЪПН УЛТЙРФ sysklogd script. уНПФТЙФЕ man syslogd ДМС ВПМЕЕ РПМОПК ЙОЖПТНБГЙЙ.
Вы полностью установиль новую систему LFS. Теперь нам надо обеспечить возможность ее загрузки. Следующие инструкции применимы только для компьютеров с архитектурой IA-32, т. е. к большинству PC. Информация о загрузке системы на других архитектурах может отличаться и использовать другие ресурсы.
Загрузка может быть комплексной задачей. Для начала, несколько предостережений. Вы очень сильно зависите от вашего текущего загрузчика и любая операционая система на вашем жестком диске (дисках) может перестать загружаться. Убедитесь в том, что у вас есть резервная загрузочная дискета или диск, иначе вы рискуете получить нерабочий компьютер (точнее, незагружающийся).
Мы скомпилировали и установили загрузчик Grub имено для этого шага. Процедура включает запись определенных файлов Grub на специальное место на вашем жестком диске. Перед тем как вы сделаете это, мы крайне рекомендуем зоздать загрузочную дискету с Grub. Вставьте пустую дискету и запустите следующие команды:
dd if=/boot/grub/stage1 of=/dev/fd0 bs=512 count=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" |
Вы можете захотеть добавить пункт для вашей основной системы. Это делается примерно так:
cat >> /boot/grub/menu.lst << "EOF" |
Также, если у вас есть Windows, следующая команда добавит пункт для его загрузки:
cat >> /boot/grub/menu.lst << "EOF" |
Если info grub не даст вам исчерпывающей информации, то вам стоит посетить страничку Grub по адресу: http://www.gnu.org/software/grub.
Файл /etc/fstab испольхуется рядом программ для определения того, какие разделы будут монтированы по умолчанию, какие файловые системы должны быть проверены и т.д. Создадим новую таблицу файловых системм как здесь:
cat > /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.
Ожидаемое время сборки: При параметрах по умолчанию: 4.20 SBU |
Ядро Linux является основой любой системы Linux. Это и есть Linux. Когда компьютер включается и загружает Linux, первым из всех программ для Linux загружается ядро. Ядро инициализирует аппаратные компоненты системы: последовательные и параллельные порты, звуковые и сетевые карты, контроллеры IDE и SCSI и многое другое. Если короче, то ядро делает доступным оборудование системы для запускаемых в дальнейшем программ и позволяет им запускаться.
Устанавливаемые файлы: ядро и его заголовки
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 |
Все закончено! Вы завершили установку вашей системы LFS. Это могло быть весьма продолжительным процессом, но мы надеемся, что он вам понравился, и вы получили массу удовольствия от сборки собственной системы Linux.
Теперь самое время очичтить бинарники вашей системы от отладочных символов. Если вы не программист и не собираетесь заниматься отладкой ваших программ, то вас обрадует возможность освободить несколько десятков мегабайт удалением отладочных символов. Перед началом этого процесса убедитесь, что вам не надо будет отлаживать никакие из установленных программ.
Внимание: 98% людей, использующих описанный метод, не испытывают проблемм. Но вам стоит создать резервный архив с копией системы LFS перед запуском описанных команд. Есть небольшой шанс, что что-либо пойдет не так и сделает вашу системы неработоспособной (как правило при разрушении модулей ядра и библиотек). Могут появится и другие проблемы при использовании данной команды.
Мы уже говорили, что параметр --strip-debug используется для безопасного удаления отладочной информации в нормальных условиях. Он не удалит из файлов ничего жизненно важного. Также можно использовать параметр --strip-all для обычных программ (но не для библиотек - они будут испорчены), но это не полностью безопасно и вы выиграете немного места. Но если вам важен каждый байт на диске, то вам решать. Пожалуйста, посмотрите man-страницу по strip для информации по другим параметрам. Главное - это не запускать strip для библиотек (кроме --strip-debug).
Если вы собираетесь применять strip, вам надо убедиться, что не будут запущены никакие из модифицируемых программ -- включая оболочку bash. Поэтому вам надо покинуть среду chrootи войти в нее с использованием видоизмененной команды:
logout |
Теперь запустите следующую команду:
/tools/bin/find /{,usr/,usr/local/}{bin,sbin,lib} -type f \ |
Вы увидите, что ряд файлов имеет неподдерживаемый формат. Большая часть из них - скрипты, а не бинарники. Так что эти предупреждения можно проигнорировать.
Вы можете создать файл /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 |
Выйдем из среды chroot:
logout |
Помимо всего прочего, после установки всех программ нам больше не нужен каталог /tools. Вы можете удалить его. Помимо этого вы можете удалить временные копии Tcl, Expect и DejaGnu, которые использовалисьдля запуска тестов средств, вы сможете перекомпилировать и установить их на вашей системе LFS позже, если захотите снова использовать их.
Также вы можете захотеть переместить содержимое /sources в /usr/src/packages или куда-то еще (или просто удалить их, если они есть у вас на CD) и удалить эту директорию.
Перед перезагрузкой, отмондируем еще и сам раздел LFS:
umount $LFS |
Если вы решили создать несколько разделов, вам надо отмонтировать их все перед запуском unmount $LFS, как здесь:
umount $LFS/usr |
И теперь вы можете перезагрузить системы командой наподобие этой:
/sbin/shutdown -r now |
Вы также можете настроить Grub на загрузку LFS 5.0 автоматически.
После перезагрузки ваша система LFS готова к использованию и вы можете начать устанавливать дополнительные программы.
Мы благодарим вас за прочтение книги LFS и надеемся, что вы нашли в ней много полезного для себя и провели время с пользой.
Теперь, когда вы закончили установку вашей системы LFS, вы наверно спросите "Что тепрь?". Для ответа на этот вопрос мы составили список ресурсов, который вам может оказаться полезным.
После Linux From Scratch
Книга После Linux From Scratch описывает процедуру установки большого списка программ не вошедших в книгу LFS. Проект BLFS находится по адресу http://www.linuxfromscratch.org/blfs/.
Советы LFS
Советы LFS являются набором небольших разьяснительных документов. составленых волонтерами из сообщества LFS. Эти советы можно найти на http://www.linuxfromscratch.org/hints/list.html.
Списки рассылки
Есть ряд списков рассылки LFS в которые вы можете обратиться за помощью. Смотрите Главу 1 - Списки рассылки для более полной информации.
The Linux Documentation Project
Целью Linux Documentation Project является сотрудничество с целью создания документации по Linux. LDP содержит большую коллекцию различных HOWTO, руководств и man-страниц; все это вы найдете на http://www.tldp.org/.
Эта книга состоит из следующих двух частей:
Часть I содержит некоторые важные сведения о процессе инсталляции и некоторую дополнительную информацию о книге (версию, список изменений, благодарности, списки рассылки и т. п.).
Часть II описывает приготовления к процессу сборки: создание раздела, скачивание пакетов и компиляцию временных средств.
Часть III руководит сборкой системы LFS: компиляцией и установкой всех пакетов по порядку, созданием загрузочных скриптов и установкой ядра. В результате будет создана простая Linux-система в которую вы сможете установить дополнительные программы тем способом и такие, как захотите.
Часть 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:
Software-Building-HOWTO
Это исчерпывающее руководство по установке UNIX-ориентированых пакетов программ. Это HOWTO доступно по адресу http://www.tldp.org/HOWTO/Software-Building-HOWTO.html.
The Linux Users' Guide
Это руководство описывает использование различных Linux-программ и доступно на http://espc22.murdoch.edu.au/~stewart/guide/guide.html.
The Essential Pre-Reading Hint
Это Советы по LFS, написаные специально для новичков в мире Linux. В основном содержит ссылки на внешние источники информации на различные темы. Любой человек, собравшийся установить LFS, должен понимать многие темы из перечисленных в этом документе. Этот документ доступен по адресу http://www.linuxfromscratch.org/hints/downloads/files/essential_prereading.txt
Я перепробовал несколько различных дистрибутивов Linux, но я никогда не был полностью доволен ни одним из них. Мне не нравилось расположение загрузочных скриптов. Мне не нравилось, как некоторые программы были сконфигурированы по умолчанию. Это мне порядком надоело. В конце концов я понял, что только построив собственную систему из исходников, я буду доволен. Я решил отказаться от использования заранее скомпилированых пакетов и от загрузочного диска, который мог бы установить основу системы. Я буду использовать свою нынешнюю систему Linux для построения себе новой.
Эта сумасбродная идея казалась очень сложной или вообще невыполнимой. Но после решения ряда проблем, таких как зависимости или ошибки на этапе компиляции, моя новая самосборная система оказалась полностью работоспособной. Я назвал свою систему Linux From Scratch или, для краткости, LFS.
Я надеюсь, что вы не зря проведете время, работая над своей собственной LFS!
--
Джерард Бикманс
gerard@linuxfromscratch.org