После инсталляции пакета можно либо удалить директорию его исходных кодов, либо сохранить ее. Настоятельно рекомендуем удалять эту директорию. Если этого не сделать и повторно использовать директорию исходников (например, повторно использовать исходники из Главы 5 в Главе 6), получится не совсем то, чего вы ожидали. Деревья исходных кодов в Главе 5 содержат настройки базового дистрибутива, которые не всегда подойдут к системе LFS, после того как вы войдете в среду chroot. Даже выполнение
Так что просто удаляйте каталог исходных кодов сразу же после их инсталляции, однако на будущее сохраняйте скаченный tar-архив.
Исключение их этого правила – дерево исходных кодов ядра. Не удаляйте ее, т.к. она понадобится в дальнейшем. До того момента никакая программа не будет использовать это дерево, так что оно не помешает. Однако если у вас дефицит дискового пространства, можете смело удалить каталог с исходниками ядра и повторно распаковать этот архив позже.
Поддерживаемые платформы
Мы стараемся сделать LFS как можно более универсальной. Однако, примите к сведению, что основная разработка ведется на платформе x86. Мы постараемся включить информацию о различиях компиляции для других платформ, например для PPC. Если вы столкнетесь с проблемой компиляции на платформе, отлично от x86, в любом случае отправьте сообщение об этом в список рассылки. Более того, если вам удастся решить проблему, дайте нам знать – пошлите сообщение в список lfs-dev. Проверив правильность решения, мы включим его в книгу.
Как попросить о помощи
В том случае, если при прочтении этой книги вы столкнетесь с проблемой, недокументированной в FAQ, многие участники проекта LFS в списках рассылки и на канале IRC будут рады помочь. Получить общее представление о списках рассылки LFS вы можете в разделе Глава 1 – Списки рассылки и архивы. Чтобы нам было легче диагностировать и решать вашу проблему, постарайтесь привести как можно больше деталей в запросе.
Что необходимо указать
Помимо краткого описания проблемы, не забудьте указать нижеприведенные вещи:
версию используемой книги,
название пакета или секции, с которой у вас проблемы,
сообщение об ошибке или симптомы проблемы,
отклонялись ли вы от шагов, описанных в книге
(Заметьте, что если вы отклонялись от книги, это не значит, что мы не попытаемся помочь, ведь весь смысл LFS – в возможности выбора. Просто напросто ваше признание поможет нам найти решение.)
Проблемы configure
Если при выполнении скрипта configure, что-то прошло не так как надо, обратите внимание на последние строки в файле config.log. Обычно этот файл содержит сообщения об ошибках, которые не были выведены на экран. Если вы задумали попросить нас о помощи, не забудьте включить эти строки в ваше сообщение.
Проблемы при компиляции
Для того чтобы помочь нам найти причину проблемы, важен как вывод на экране, так и содержание некоторых файлов. Вывод на экране скрипта ./configure и команды make содержат много полезной информации. Не стоит слепо включать в свое сообщение весь вывод, но и не следует включать слишком мало информации. Ниже приведен вывод на экран команды make:
gcc -DALIASPATH=\"/mnt/lfs/usr/share/locale:.\" -DLOCALEDIR=\"/mnt/lfs/usr/share/locale\" -DLIBDIR=\"/mnt/lfs/usr/lib\" -DINCLUDEDIR=\"/mnt/lfs/usr/include\" -DHAVE_CONFIG_H -I. -I. -g -O2 -c getopt1.c gcc -g -O2 -static -o make ar.o arscan.o commands.o dir.o expand.o file.o function.o getopt.o implicit.o job.o main.o misc.o read.o remake.o rule.o signame.o variable.o vpath.o default.o remote-stub.o version.o opt1.o -lutil job.o: In function `load_too_high': /lfs/tmp/make-3.79.1/job.c:1565: undefined reference to `getloadavg' collect2: ld returned 1 exit status make[2]: *** [make] Error 1 make[2]: Leaving directory `/lfs/tmp/make-3.79.1' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/lfs/tmp/make-3.79.1' make: *** [all-recursive-am] Error 2
В таком случае, большинство просто включают в сообщении с просьбой помочь строку:
make [2]: *** [make] Error 1
и все, что идет после нее. Однако это недостаточно для решения проблемы. Это показывает, что что-то не так, но не говорит, что именно не так. В сообщение с просьбой помочь необходимо включить всю секцию вывода, т.к. она содержит выполненные команды и их сообщения об ошибках.
В Интернете есть замечательная статья от том, как правильно задавать вопросы, написанная Эриком С. Реймондом. Она находится по адресу http://www.tuxedo.org/~esr/faqs/smart-questions.html. Следую советам статьи, вы научитесь правильно задавать вопросы и ваши шансы получить квалифицированный ответ возрастут.
II. Часть II – Установка системы LFS
Вступление
Ниже приведен список пакетов программ, необходимых для построения базовой системы. Указанные номера версий соответствуют стабильным версиям программ, на которых основана эта книга.
Все ссылки указаны на главный сервер LFS. Можно также воспользоваться FTP-зеркалами, см. Глава 1 – Зеркала.
LFS FTP-архив содержит версии программ, используемые в книге. Для того чтобы узнать о появлении новой версии, посетите официальные места загрузки программ, см. Приложение A. Если вам удастся установить новую версию программы, используя инструкции этой книги, мы будем рады узнать об этом.
Необходимые пакеты
Сервер FTP: ftp://ftp.linuxfromscratch.org/ Сервер HTTP: http://ftp.linuxfromscratch.org/ Загрузите все необходимые пакеты для компиляции системы LFS в одном tar-архиве: Все пакеты LFS – 105,560 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/lfs-packages-4.0.tar http://ftp.linuxfromscratch.org/lfs-packages/4.0/lfs-packages-4.0.tar Или все пакеты по отдельности: Autoconf (2.53) – 739 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/autoconf-2.53.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/autoconf-2.53.tar.bz2 Automake (1.6.3) – 465 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/automake-1.6.3.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/automake-1.6.3.tar.bz2 Bash (2.05a) – 1,400 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/bash-2.05a.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/bash-2.05a.tar.bz2 Bin86 (0.16.3) – 113 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/bin86-0.16.3.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/bin86-0.16.3.tar.bz2 Binutils (2.13) – 9,651 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/binutils-2.13.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/binutils-2.13.tar.bz2 Bison (1.35) – 613 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/bison-1.35.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/bison-1.35.tar.bz2 Bzip2 (1.0.2) – 610 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/bzip2-1.0.2.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/bzip2-1.0.2.tar.bz2 Diffutils (2.8.1) – 642 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/diffutils-2.8.1.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/diffutils-2.8.1.tar.bz2 E2fsprogs (1.27) – 1,176 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/e2fsprogs-1.27.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/e2fsprogs-1.27.tar.bz2 Ed (0.2) – 158 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/ed-0.2.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/ed-0.2.tar.bz2 Ed Patch (0.2) – 1 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/ed-0.2.patch.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/ed-0.2.patch.bz2 File (3.39) – 151 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/file-3.39.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/file-3.39.tar.bz2 Fileutils (4.1) – 1,217 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/fileutils-4.1.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/fileutils-4.1.tar.bz2 Fileutils Patch (4.1) – 1 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/fileutils-4.1.patch.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/fileutils-4.1.patch.bz2 Findutils (4.1) – 226 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/findutils-4.1.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/findutils-4.1.tar.bz2 Findutils Patch (4.1) – 1 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/findutils-4.1.patch.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/findutils-4.1.patch.bz2 Flex (2.5.4a) – 278 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/flex-2.5.4a.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/flex-2.5.4a.tar.bz2 Gawk (3.1.1) – 1,420 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/gawk-3.1.1.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/gawk-3.1.1.tar.bz2 Gawk Patch (3.1.1-2) – 1 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/gawk-3.1.1-2.patch.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/gawk-3.1.1-2.patch.bz2 GCC (3.2) – 20,043 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/gcc-3.2.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/gcc-3.2.tar.bz2 GCC Patch (3.2) – 4 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/gcc-3.2.patch.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/gcc-3.2.patch.bz2 GCC nofixincludes Patch (3.2) – 1 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/gcc-3.2-nofixincludes-2.patch.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/gcc-3.2-nofixincludes-2.patch.bz2 Gettext (0.11.5) – 2,489 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/gettext-0.11.5.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/gettext-0.11.5.tar.bz2 Glibc (2.2.5) – 12,114 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/glibc-2.2.5.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/glibc-2.2.5.tar.bz2 Glibc Patch (2.2.5-2) – 8 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/glibc-2.2.5-2.patch.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/glibc-2.2.5-2.patch.bz2 Glibc-linuxthreads (2.2.5) – 164 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/glibc-linuxthreads-2.2.5.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/glibc-linuxthreads-2.2.5.tar.bz2 Grep (2.5) – 545 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/grep-2.5.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/grep-2.5.tar.bz2 Groff (1.18) – 1,739 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/groff-1.18.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/groff-1.18.tar.bz2 Gzip (1.2.4a) – 179 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/gzip-1.2.4a.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/gzip-1.2.4a.tar.bz2 Gzip Patch (1.2.4b) – 1 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/gzip-1.2.4b.patch.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/gzip-1.2.4b.patch.bz2 Kbd (1.06) – 559 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/kbd-1.06.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/kbd-1.06.tar.bz2 Kbd Patch (1.06-3) – 3 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/kbd-1.06-3.patch.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/kbd-1.06-3.patch.bz2 Less (374) – 189 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/less-374.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/less-374.tar.bz2 LFS-Bootscripts (1.10) – 27 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/lfs-bootscripts-1.10.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/lfs-bootscripts-1.10.tar.bz2 Libtool (1.4.2) – 653 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/libtool-1.4.2.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/libtool-1.4.2.tar.bz2 Lilo (22.2) – 292 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/lilo-22.2.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/lilo-22.2.tar.bz2 Linux (2.4.19) – 25,432 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/linux-2.4.19.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/linux-2.4.19.tar.bz2 M4 (1.4) – 249 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/m4-1.4.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/m4-1.4.tar.bz2 Make (3.79.1) – 794 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/make-3.79.1.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/make-3.79.1.tar.bz2 MAKEDEV (1.7) – 8 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/MAKEDEV-1.7.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/MAKEDEV-1.7.bz2 Man (1.5k) – 168 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/man-1.5k.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/man-1.5k.tar.bz2 Man Patch (1.5k) – 1 KB ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/man-1.5k.patch.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/man-1.5k.patch.bz2 Man-pages (1.52) – 569 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/man-pages-1.52.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/man-pages-1.52.tar.bz2 Modutils (2.4.19) – 213 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/modutils-2.4.19.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/modutils-2.4.19.tar.bz2 Ncurses (5.2) – 1,308 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/ncurses-5.2.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/ncurses-5.2.tar.bz2 Ncurses Patch (5.2-2) – 1 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/ncurses-5.2-2.patch.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/ncurses-5.2-2.patch.bz2 Netkit-base (0.17) – 49 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/netkit-base-0.17.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/netkit-base-0.17.tar.bz2 Net-tools (1.60) – 194 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/net-tools-1.60.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/net-tools-1.60.tar.bz2 Patch (2.5.4) – 149 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/patch-2.5.4.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/patch-2.5.4.tar.bz2 Perl (5.8.0) – 8,416 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/perl-5.8.0.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/perl-5.8.0.tar.bz2 Procinfo (18) – 22 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/procinfo-18.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/procinfo-18.tar.bz2 Procps (2.0.7) – 153 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/procps-2.0.7.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/procps-2.0.7.tar.bz2 Procps Patch (2.0.7) – 1 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/procps-2.0.7.patch.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/procps-2.0.7.patch.bz2 Psmisc (21) – 172 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/psmisc-21.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/psmisc-21.tar.bz2 Sed (3.02) – 221 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/sed-3.02.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/sed-3.02.tar.bz2 Shadow (4.0.3) – 760 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/shadow-4.0.3.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/shadow-4.0.3.tar.bz2 Sh-utils (2.0) – 824 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/sh-utils-2.0.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/sh-utils-2.0.tar.bz2 Sh-utils Hostname Patch (2.0-hostname) – 1 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/sh-utils-2.0-hostname.patch.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/sh-utils-2.0-hostname.patch.bz2 Sh-utils Patch (2.0) – 1 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/sh-utils-2.0.patch.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/sh-utils-2.0.patch.bz2 Sysklogd (1.4.1) – 67 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/sysklogd-1.4.1.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/sysklogd-1.4.1.tar.bz2 Sysvinit (2.84) – 76 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/sysvinit-2.84.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/sysvinit-2.84.tar.bz2 Tar (1.13) – 730 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/tar-1.13.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/tar-1.13.tar.bz2 Tar Patch (1.13) – 1 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/tar-1.13.patch.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/tar-1.13.patch.bz2 Texinfo (4.2) – 1,175 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/texinfo-4.2.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/texinfo-4.2.tar.bz2 Textutils (2.1) – 1,847 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/textutils-2.1.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/textutils-2.1.tar.bz2 Util-linux (2.11u) – 1,073 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/util-linux-2.11u.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/util-linux-2.11u.tar.bz2 Vim (6.1) – 2,823 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/vim-6.1.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/vim-6.1.tar.bz2 Vim Patch (6.1) – 1 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/vim-6.1.patch.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/vim-6.1.patch.bz2 Zlib (1.1.4) – 144 KB: ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/zlib-1.1.4.tar.bz2 http://ftp.linuxfromscratch.org/lfs-packages/4.0/zlib-1.1.4.tar.bz2 Общий объем пакетов: 105,560 KB (103.88 MB)
Вступление
В этой главе речь пойдет о создании раздела для системы LFS. Мы создадим сам раздел, файловую систему на нем, и монтируем его.
Создаем новый раздел
Возможно построить систему LFS на одном разделе с уже установленным дистрибутивом. Несмотря на то, что для первой установки LFS данный шаг не рекомендуется, это удобно, если у вас дефицит дискового пространства. Если вы решили рискнуть, см. совет по
Перед тем как перейти к установке LFS необходимо иметь пустой Linux native раздел. Для установки LFS рекомендуется раздел размеров не менее 1 GB. Это дает возможность хранить tar-архивы с программами и компилировать пакеты. Если вы планируете использовать LFS в качестве основной Linux-системы, вам придется отвести для нее больше места для инсталляции дополнительного программного обеспечения. Если Linux-native раздел для LFS уже существует, можете смело пропустить эту подсекцию.
В связи с тем, что оперативная память компьютера может одновременно уместить ограниченное количество информации, рекомендуется отвести место на диске для файлов swap. Файл swap – это место, где хранится информация из памяти, которую можно вызвать в любой момент. LFS и ваш дистрибутив могут совместно использовать это дисковое пространство. Другими словами, если у вас уже есть swap-раздел, нет особого смысла создавать еще один. Если же у вас его нет, создайте его программой fdisk. В любом случае, запомните обозначение swap-раздела (например, hda2), это понадобится при создании файла /etc/fstab.
Программа cfdisk (аналогичная fdisk) запускается с соответствующим обозначением жесткого диска в качестве аргумента (например /dev/hda, в случае если новый раздел следует создать на жестком диске primary master с IDE интерфейсом). С помощью этой программы создайте раздел Linux native. Обратитесь к документации программы fdisk ( руководства man обычно неплохое начало для поиска информации) для получения информации о создании разделов Linux native и записи таблиц разделов.
Запомните обозначение раздела, оно будет выглядеть как например hda11. Этот раздел мы впоследствии будем называть разделом LFS.
Создаем файловую систему на новом разделе
После того как новый раздел создан, создадим на нем файловую систему. На данный момент стандартная файловая система – ext2, однако так называемые журналируемые файловые системы становятся очень популярными. Мы будем подразумевать, что вы собираетесь использовать ext2. Инструкции по созданию других файловых систем см. на http://beyond.linuxfromscratch.org/view/cvs/postlfs/filesystems.html.
Для создания файловой системы ext2, используйте команду mke2fs. Наименование раздела LFS – единственная опция к команде, и файловая система создана.
mke2fs /dev/xxx
Замените «xxx» на наименование раздела LFS (например hda11).
Монтируем раздел
Итак, файловая система создана и готова к эксплуатации. Для того чтобы получить доступ к разделу (возможность чтения и записи информации на нем), необходимо его монтировать. Если точка монтирования /mnt/lfs, перейти к этому разделу можно с помощью команды cd /mnt/lfs. Мы будем подразумевать, что точка монтирования раздела – /mnt/lfs. Выбор директории для точки монтирования не принципиален, просто запомните, что вы выбрали.
Создайте директорию /mnt/lfs:
mkdir -p /mnt/lfs
Монтируем LFS раздел:
mount /dev/xxx /mnt/lfs
Замените «xxx» наименованием раздела (например hda11).
Эта директория (/mnt/lfs) и есть значение переменной LFS variable из Главы 2. Если вы планируете использовать переменную среды LFS, самое время выполнить export LFS=/mnt/lfs.
Если вы решили выделить LFS несколько разделов (к примеру $LFS и $LFS/usr), монтируйте их следующим образом:
mkdir -p /mnt/lfs && mount /dev/xxx /mnt/lfs && mkdir /mnt/lfs/usr && mount /dev/yyy /mnt/lfs/usr
Естественно, замените /dev/xxx и /dev/yyy на соответствующие наименования разделов.
Вступление
В этой главе мы скомпилируем и установим минимальную Linux-систему. Эта система будет располагать инструментами, необходимыми для сборки окончательной системы LFS в следующей главе.
Файлы, скомпилированные в данной главе, будут инсталлированы в директорию $LFS/static, для того, чтобы отделить их от тех файлов, которые будут установлены в следующей главе. Так как эти программы можно рассматривать как временные, нет необходимости засорять ими нашу будущую систему LFS.
Ключ к пониманию работы Linux – четкое знание о том, для чего нужен системе и пользователю каждый пакет программ, и что он делает. Для этого после инструкций по установке по каждому пакету приведены короткие описания входящих в него программ.
Перед использованием ко многим пакетам необходимо применить патчи. Мы будем делать это только там и тогда, где необходимо, так что не стоит волноваться, если инструкции по применению патча отсутствуют.
Во время инсталляции некоторых пакетов, на экран будут выводиться многочисленные предупреждения компилятора. В них нет ничего страшного, не обращайте на них внимание. Это просто предупреждения – в основном, связанные с некорректным, но не запрещенным использованием синтаксиса C или C++. Дело в том, что стандарты C довольно часто менялись, а некоторые пакеты все еще используют старый стандарт, однако это не проблема.
Прежде чем начать, убедитесь, что переменная LFS задана корректно. Для проверки выполните:
echo $LFS
Убедитесь, что вывод на экране соответствует точке монтирования раздела LFS (например /mnt/lfs).
Почему мы используем статические ссылки?
(Спасибо Plasmatic'у за разъяснение этого вопроса в одном из списков рассылки LFS.)
При компиляции программы, вместо того, чтобы при создании нового файла каждый раз переписывать все функции работы с ядром, аппаратными средствами, файлами, все базовые функции хранятся в библиотеках. glibc, которую мы установим позже, является одной из главных библиотек такого рода. Она содержит код для всех основных функций, таких как открытие файлов, печать информации на экран, получение ввода от пользователя. После компиляции программы эти библиотеки связываются ссылками с новой программой, чтобы она могла использовать любую функцию этих библиотек.
Однако такие библиотеки могут оказаться довольно большими (например, libc.a обычно занимает 2.5 MB), и держать отдельную копию каждой библиотеки прикрепленной к программе не очень то и логично. Представьте себе простую команду вроде ls с лишними 2.5 MB, прикрепленными к ней! Вместо того, чтобы делать библиотеку частью программы, или связывать статической ссылкой, библиотеку можно хранить в отдельном файле, который будет подгружаться по мере необходимости. Это называется динамическими ссылками, т.к. библиотека загружается и выгружается динамически, по мере необходимости программы.
Итак, у нас есть файл размером 1 KB и файл размером 2.5 MB. Пока мы не сэкономили дискового пространства (разве что освободили оперативную память до того, как библиотека понадобится).
Если динамические ссылки позволяют сэкономить столько места, почему же мы везде используем статические ссылки? Потому что, когда вы входите в новую (и далекую от совершенства) систему LFS с помощью команды chroot, динамические библиотеки будут недоступны, т.к. они находятся в дереве старого дистрибутива (например в /usr/lib). Эти каталоги будут недоступны из корневой директории системы LFS ($LFS).
Для того чтобы скомпилированные программы работали в среде chroot, при компиляции убедитесь, что библиотеки связаны статическими ссылками, отсюда возникают опции –enable-static-link, –disable-shared, и -static в Главе 5. Первое, что описывает Глава 6, это компиляция основных библиотек системы, glibc. После этого, мы перекомпилируем все программы, собранные в Главе 5, но в этот раз с динамическими ссылками, чтобы воспользоваться всеми преимуществами экономии дискового пространства.
Именно поэтому мы и используем эти странные опции -static. Если скомпилировать пакеты без них, вы довольно быстро увидите, что случится, после того как вы войдете в парализованную систему LFS при помощи команды chroot.
Для получения более детальной информации по динамически связанным библиотекам, обратитесь к книгам и Linux-ориентированным сайтам по программированию.
Создаем директорию $LFS/static
Как уже говорилось во вступлении в данную главу, все, что будет инсталлировано в этой главе, попадет в директорию $LFS/static, чтобы не загрязнять раздел LFS кучей временных файлов. Нам необходимо лишь создать эту директорию:
mkdir $LFS/static
Для удобства можно поместить загруженные пакеты в директорию $LFS/static, например сохранить их в подкаталоге $LFS/static/src.
Установка всех компонентов в режиме непривилегированного пользователя
Если при выполнении шагов, описанных в Главе 5, вы будете зарегистрированы в системе как root, есть вероятность, что некоторые файлы системы будут заменены файлами, которые будут скомпилированы в Главе 5. На это есть ряд причин, неопределенная переменная $LFS – одна из них. Замена файлов на вашей системе скорее всего приведет к возникновению всякого рода проблем, поэтому рекомендуется выполнять шаги Главы 5 от имени непривилегированного пользователя. Для чистоты эксперимента создадим новую учетную запись «lfs», которую будем использовать на стадии компиляции со статическими ссылками. Для добавления новой учетной записи, выполните следующие команды в режиме пользователя root:
useradd -s /bin/bash -m lfs && passwd lfs
Теперь скорректируем права на директорию $LFS/static, чтобы пользователь «lfs» имел к ней доступ на запись:
chown -R lfs $LFS/static
Теперь войдите в систему под учетной записью «lfs». Это можно сделать двумя способами: через новую виртуальную консоль или оконный менеджер, или командой su – lfs. После этого выполните следующие команды от имени пользователя «lfs» для создания благоприятной среды:
cat > ~/.bash_profile << «EOF» umask 022 LFS=/mnt/lfs LC_ALL=POSIX CC='gcc -s' export LFS LC_ALL CC EOF source ~/.bash_profile
Этот профиль устанавливает umask равным 022, чтобы созданные файлы и директории автоматически получали правильные права. Настоятельно рекомендуется использование этой установки на протяжении всей инсталляции LFS. Также были заданы переменные $LFS, $LC_ALL, и $CC. Про переменную $LFS мы уже не раз говорили. Переменная $LC_ALL используется для интернационализации.
Если на вашем базовом дистрибутиве установлена библиотека glibc версии 2.2.4 и ранее, и на протяжении Главы 5 переменная $LC_ALL определена не как "C" или «POSIX», могут возникнуть проблемы при выходе повторном входе в среду chroot в Главе 6. Для того чтобы быть уверенным в том, что в среде chroot все будет работать корректно, присвойте этой переменной значение «POSIX» ("C" is an alias for «POSIX»).