Часть I – Вступление

Глава 1. Вступление

Благодарности

Мы благодарим всех людей и организации за их вклад в развитие проекта Linux From Scratch:

Mark Stone за предоставление сервера linuxfromscratch.org

VA Linux Systems за серверное пространство и канал для сервера linuxfromscratch.org.

Fredrik Danerklint за зеркало se.linuxfromscratch.org.

Tim Jackson за зеркало linuxfromscratch.idge.net.

Hagen Herrschaft за зеркала de.linuxfromscratch.org, и за предоставление P4-2.2GHz для проекта LFS.

UK Mirror Service за зеркало linuxfromscratch.mirror.ac.uk.

Guido Passet за зеркала www.nl.linuxfromscratch.org и ftp.snt.utwente.nl.

Timothy Bauscher за помощь в редактировании этой книги.

Mark Hymers за помощь в редактировании этой книги.

Marc Heerdink за помощь в редактировании этой книги.

DREAMWVR.COM за предоставление ресурсов проекту LFS и другим подпроектам, связанным с ним.

Jan Niemann за зеркало www.de.linuxfromscratch.org mirror.

Torsten Westermann за зеркало lfs.linux-provider.net mirror.

Ian Chilton за зеркала www.us.linuxfromscratch.org и www.linuxfromscratch.co.uk.

Dag Stenstad за предоставление зеркала www.no.linuxfromscratch.org, и Ian Chilton за его администрирование.

Antonin Sprinzl за зеркало www.at.linuxfromscratch.org.

Jason Andrade за зеркало www.au.linuxfromscratch.org.

Ian Cooper за зеркало www.us2.linuxfromscratch.org.

VA Linux Systems , которые от имени Linux.com, предоставили рабочую станцию VA Linux 420 (бывшая StartX SP2) для проекта.

Johan Lenglet за осуществление руководства проекта перевода LFS на французский язык.

Jesse Tie-Ten-Quee highos@linuxfromscratch.org за предоставление пишущего привода Yamaha CDRW 8824E.

O'Reilly за предоставление книг по SQL и PHP.

Robert Briggs за предоставление доменов linuxfromscratch.org linuxfromscratch.com.

Frank Skettino из OSWD за первоначальный дизайн вебсайта LFS.

Garrett LeSage за создание баннера LFS.

Dean Benson за финансовую помощь в образовании некоммерческой организации LFS.

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

Как мы будем работать

Мы собираемся построить систему LFS, используя заранее установленный дистрибутив Linux, как например Debian, SuSE, Slackware, Mandrake, RedHat, и т.д. Мы будем использовать установленную систему как платформу для разработки, т.к. нам понадобится компилятор, линкер, текстовый редактор и другие средства разработки, необходимые для построения нашей системы. Обычно эти инструменты доступны по умолчанию, если выбрать опцию «development» при инсталляции дистрибутива Linux.

После скачивания необходимых для построения системы LFS пакетов, мы создадим раздел Linux native и файловую систему на нем. Там будет скомпилирована и установлена система LFS.

Затем, в Главе 5, мы опишем процесс инсталляции различных пакетов, которые сформируют среду разработки, которую мы используем для построения самой системы и для решения проблемы зависимостей. Например, для сборки нового компилятора необходим компилятор, а для установки оболочки необходима оболочка. Пакеты в этой главе будут слинкованы статически.

Использование статических ссылок позволяет нам избежать необходимости в наличии библиотек на момент завершения сборки. Собранная программа самодостаточна, т.к. части программы, которые обычно находятся в библиотеках, в нашем случае копируются из библиотек и вставляются в программу. Обычно программы компилируются с использованием динамических ссылок. Это позволяет сэкономить место на диске и повышает эффективность многих программ. В Главе 5 мы используем статические ссылки, т.к. теоретически мы перемещаем нашу систему разработки в виртуальную среду, где указанные библиотеки отсутствуют. Если скомпилировать программы на данном этапе с динамическими ссылками, то средства разработки не будут работать. Так как необходимые библиотеки предоставлены нам установленным дистрибутивом Linux, цель Главы 5 – создание среды разработки, в которой эти библиотеки не требуются, что делает эту среду независимым дистрибутивом.

В Главе 6 мы скомпилируем и инсталлируем конечную систему. Мы используем программу chroot, для того, чтобы войти в виртуальную среду и запустить оболочку, для которой корневой каталог будет тот раздел, куда мы установили программы из Главы 5. Это похоже на то, когда при перезагрузке системы мы даем указание ядру монтировать раздел LFS как корневой. Почему мы используем chroot вместо того, чтобы перезагрузиться? Дело в том, что создание загрузочной системы LFS со статическими ссылками подразумевает выполнение дополнительных шагов, которые сейчас излишни. А также мы хотим иметь возможность использовать наш базовый дистрибутив во время установки LFS. Пока компилируется LFS, вы сможете переключиться в другую виртуальную консоль и сессию Х и заняться своими делами.

Когда все пакеты из Главы 6 проинсталлированы, Главы 7, 8 и 9 опишут завершающую стадию установки. Следуя указаниям Главы 7, мы напишем загрузочные скрипты. С помощью Главы 8 мы скомпилируем ядро Linux и установим загрузчик. Глава 9 содержит дополнительные указания по доводке системы после прочтения книги. И, наконец, можно будет перезагрузить систему и начать использовать LFS.

Это краткое изложение процесса установки. Более конкретную информацию вы можете найти в соответствующих главах и описаниях программных пакетов. Если сейчас вам что-то непонятно, ничего страшного. Скоро все приобретет смысл.

Прочтите Главу 2 внимательно. Она объясняет некоторые важные моменты, необходимые для понимания перед тем, как приступить к Главе 5 и далее.

Условные обозначения, используемые в книге

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

./configure –prefix=/usr

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

install-info: unknown option `–dir-file=/mnt/lfs/usr/info/dir'

Текст такого формата (с фиксированной шириной) показывает вывод на экране, как результат выполнения той или иной команды. Также он используется для обозначения имени файла, например /etc/lilo.conf.

Emphasis

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

http://www.linuxfromscratch.org/

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

cat > $LFS/etc/group << «EOF»

root:x:0:

bin:x:1:

......

EOF


Данный раздел используется в основном для создания конфигурационных файлов. Первая команда (выделенная жирным шрифтом) создает файл $LFS/etc/group, наполняя его строчками до EOF. В командной строке данная секция печатается в точности как на экране.

Версия книги

Перед вами Книга LFS версии 4.0 от 5 октября 2002 г. В случае, если данная версия старше месяца, наверняка обновленная версия книги доступна для скачивания с нижеперечисленных зеркал.

Зеркала

Ниже приведен список HTTP и FTP зеркал по состоянию на 10 апреля 2002 г. Для обновления этой информации, посетите http://www.linuxfromscratch.org.

Зеркала HTTP

Северная Америка

Fremont, California, USA [8 Mbit] – http://www.linuxfromscratch.org/lfs/intro.shtml

Lufkin, Texas, USA [6 Mbit] – http://linuxfromscratch.idge.net/lfs/intro.shtml

Columbus, Ohio, United States [1 Mbit] – http://www.us.linuxfromscratch.org/lfs/intro.shtml

Европа

Mainz, Germany [100 Mbit] – http://lfs.linux-provider.net/lfs/intro.shtml

Amsterdam, The Netherlands [100 Mbit] – http://www.nl.linuxfromscratch.org/lfs/intro.shtml

Oslo, Norway [100 Mbit] – http://www.no.linuxfromscratch.org/lfs/intro.shtml

Lancaster, United Kingdom [100 Mbit] – http://linuxfromscratch.mirror.ac.uk/lfs/intro.shtml

Vienna Univ. of Technology, Austria [64 Mbit] – http://www.at.linuxfromscratch.org/lfs/intro.shtml

Karlskrona, Sweden [10 Mbit] – http://www.se.linuxfromscratch.org/lfs/intro.shtml

Freising, Germany [4 Mbit] – http://www.de.linuxfromscratch.org/lfs/intro.shtml

Teeside, United Kingdom [256 Kbit] – http://www.linuxfromscratch.co.uk/lfs/intro.shtml

Австралия

Brisbane, Australia [155 Mbit] – http://www.au.linuxfromscratch.org/lfs/intro.shtml

Зеркала FTP

Северная Америка

Fremont, California, USA [FTP] [8 Mbit] – ftp://ftp.linuxfromscratch.org

Fremont, California, USA [HTTP] [8 Mbit] – http://ftp.linuxfromscratch.org

Lufkin, Texas, USA [FTP] [6 Mbit] – ftp://linuxfromscratch.idge.net/linuxfromscratch

Lufkin, Texas, USA [HTTP] [6 Mbit] – http://ftp.idge.net/linuxfromscratch

Европа

Univ. of Twente, The Netherlands [HTTP] [100 Mbit] – http://ftp.snt.utwente.nl/linux/lfs/

Univ. of Twente, The Netherlands [FTP] [100 Mbit] – ftp://ftp.snt.utwente.nl/pub/linux/lfs/

Oslo, Norway [FTP] [100 Mbit] – ftp://ftp.no.linuxfromscratch.org/mirrors/lfs/

Lancaster, United Kingdom [HTTP] [100 Mbit] – http://www.mirror.ac.uk/sites/ftp.linuxfromscratch.org/

Vienna Univ. of Tech., Austria [FTP] [64 Mbit] – ftp://ftp.at.linuxfromscratch.org/pub/lfs/

Vienna Univ. of Tech., Austria [HTTP] [64 Mbit] – http://ftp.at.linuxfromscratch.org/pub/lfs

Karlskrona, Sweden [FTP] [10 Mbit] – ftp://ftp.se.linuxfromscratch.org/lfs

Freising, Germany [HTTP] [4 Mbit] – http://ftp.de.linuxfromscratch.org/

Freising, Germany [FTP] [4 Mbit] – ftp://ftp.de.linuxfromscratch.org/mirrors/ftp.linuxfromscratch.org/

Австралия

Brisbane, Australia [FTP] [155 Mbit] – ftp://ftp.planetmirror.com/pub/lfs/

Changelog

4.0 – 5 октября 2002 г.

3 октября 2002 [gerard]: Глава 06 – Linuxthreads: Вместо cd man используйте опцию –C для make. В этом больше смысла, и так короче.

29 сентября 2002 [gerard]: Глава 05 – GCC: Исправлен и заново инсталлирован старый патч nofixincludes.

29 сентября 2002 [markh]: Глава 05 – Bash: Правильная ссылка к предыдущему стабильному релизу Debian (potato), т.к. он не подходит к нынешнему (woody). Сообщил h2k1 на канале #lfs.

4.0-RC1 – 28 сентября 2002

Обновления:

automake-1.6.3

bin86-0.16.3

binutils-2.13

bison-1.35

diffutils-2.8.1

file-3.39

gawk-3.1.1

gcc-3.2

gettext-0.11.5

groff-1.18

gzip-1.2.4b.patch

lfs-bootscripts-1.10

linux-2.4.19

MAKEDEV-1.7

man-1.5k

man-pages-1.52

modutils-2.4.19

ncurses-5.2-2.patch

perl-5.8.0

psmisc-21

texinfo-4.2

textutils-2.1

util-linux-2.11u

Добавления:

ed-0.2.patch

fileutils-4.1.patch

gawk-3.1.1-2.patch

gcc-3.2.patch

gcc-3.2-nofixincludes.patch

glibc-2.2.5-2.patch

gzip-1.2.4b.patch

kbd-1.06-3.patch

man-1.5k.patch

ncurses-5.2.patch

procps-2.0.7.patch

sh-utils-2.0-hostname.patch

vim-6.1.patch

zlib-1.1.4

Удалено:

gzip-1.2.4a.patch

kbd-1.06-2.patch

reiserfsprogs-3.x.1b

28 сентября 2002 [gerard]: Глава 05 – GCC: Добавлен патч nofixincludes, чтобы предотвратить запуск этого скрипта в Главе 05. Он должен запускаться в Главе 06, для этого нужен отдельный патч.

28 сентября 2002 [gerard]: Глава 06 – Man: Удалена конструкция sed, теперь используется патч.

28 сентября 2002 [gerard]: Глава 06 – Bzip2: Удалено PREFIX=/usr из команды make install, т.к. PREFIX уже указывает на /usr по умолчанию.

28 сентября 2002 [gerard]: Глава 06 – Vim: Удалены записи о соответствии с FHS. Они не имеют смысла, т.к. Vim вообще не использует localstatedir.

28 сентября 2002 [timothy]: Применен грамматический патч от Bill Maltby. Изменен «$LFS» на «LFS», в случаях когда речь идет о переменной среды LFS.

23 сентября 2002 [timothy]: Применены различные грамматические патчи от Bill Maltby.

23 сентября 2002 [timothy]: Добавлено - опции tar (для ясности).

22 сентября 2002 [timothy]: Глава 06: Применен грамматический патч от Alex.

21 сентября 2002 [timothy]: Глава 02: Применены различные грамматические патчи от Bill Maltby.

21 сентября 2002 [timothy]: Глава 06 – Zlib: mv общую библиотеку в /lib.

20 сентября 2002 [timothy]: Глава 05 – GCC: Удалена опция –enable-threads=posix, т.к. компилятор С++ не собирается в данной главе.

18 сентября 2002 [timothy]: Глава 05 – Вступление: Удален параграф о статических ссылках, т.к. темы лучше раскрыта в разделе «Почему статические ссылки?»

18 сентября 2002 [timothy]: Глава 08 – Linux: Удалена команда cd.

18 сентября 2002 [timothy]: Глава 06 – Ncurses: Удалены старые пояснения команд mv /lib/*.a /usr/lib.

13 сентября 2002 [gerard]: Глава 06 – Shadow: Добавлено –libdir=/usr/lib к опциям скрипта configure. This way a proper libshadow.la is generated. Also changed the mv command to move all the libshadow.so* files to the /lib directory. The lib*a files are already in the /usr/lib directory.

September 13th, 2002 [gerard]: Chapter 06 – Man: Added another regex to the sed command that modifies the man.conf file. The added regex comments out the MANPATH /usr/man line which causes for duplicate results when using the whatis command

September 13th, 2002 [gerard]: Chapter 06: Added the Linux Threads Man Pages installation after the Perl installation.

September 12th, 2002 [gerard]: Chapter 06 – Create mtab link: Made the ln command an ln -sf so the existing /etc/mtab file, created by the mount command, will be removed before re-creating it as a symlink.

September 12th, 2002 [gerard]: Chapter 06 – Sh-utils: Added the sh-utils-hostname patch that supresses the build of the hostname program. This is done because the hostname program from the net-tools package is superior over this version.

September 12th, 2002 [gerard]: Chapter 06 – Gawk: Updated the Gawk patch. It also changes the DDEFPATH directory location now.

September 12th, 2002 [gerard]: Chapter 06 – Procps: Added patch that fixes a locale problem that makes top crash under certain locale settings.

September 12th, 2002 [timothy]: Chapter 04 – Creating a file system: Referenced alternative filesystems in BLFS.

September 12th, 2002 [gerard]: Removed all superfluous /usr/lib/*.so symbolic links from library installations.

September 12th, 2002 [gerard]: Upgraded to lfs-bootscripts-1.10

September 12th, 2002 [gerard]: Chapter 06 – Configure Sysvinit: Changed the sulogin line to once instead of having it respawn. This way it'll behave as expected (ie: a CTRL+D will continue instead of restart sulogin).

September 12th, 2002 [gerard]: Chapter 06 – GCC: Added the –enable-clocale=gnu option to ensure the proper locale mode is used by the C++ libraries.

September 11th, 2002 [timothy]: Preface: Grammatic changes.

September 8th, 2002 [timothy]: Chapter 06: Applied Alex's grammar changes patch.

September 7th, 2002 [timothy]: Chapter 06 – Gzip: Added gzip-1.2.4b.patch.

September 7th, 2002 [timothy]: Chapter 05 – Textutils: Added re_max_failures2 for old host systems.

September 2nd, 2002 [timothy]: Chapter 06 – Bash: Removed creation of sh symlink. Creating the bash and sh symlinks: Added /bin/bash symlink, symlinked sh to bash. Gzip, Sysvinit, Util-Linux: Shortened cp command. Makedev: Removed /bin/bash creation and removal. Man: Modified sed statement to edit less call, so SGR will work.

September 1st, 2002 [timothy]: Chapter 06 – About debugging symbols: Removed info. about stripping /static. Man: Added sed statement to prevent groff from using SGR escape sequences.

September 1st, 2002 [timothy]: Chapter 05 – Install all software as an unprivileged user: Added $CC='gcc -s' to omit the compilation of symbols in static packages.

August 30th, 2002 [timothy]: Chapter 06 – Makedev: Put rm /bin/bash after device creation. Perl: Removed information about the old patch.

August 30th, 2002 [timothy]: Chapter 05 – GCC: Re-added HAVE_GAS_HIDDEN; removed –enable-__cxa-atexit which was incorrect and not needed in this chapter; added information about the patch.

August 26th, 2002 [gerard]: Added a new Glibc patch and introducted a GCC patch.

August 26th, 2002 [gerard]: Updated to automake-1.6.3, gcc-3.2, groff-1.18, makedev-1.7, perl-5.8.0, util-linux-2.11u

August 22nd, 2002 [timothy]: Appendix: Added missing URLs to patches.

August 18th, 2002 [timothy]: Chapter 05 & 06: Changed ln -sf to ln -s wherever possible.

August 18th, 2002 [timothy]: Chapter 06 – Binutils: cp libiberty.h after install, as it is needed by certain software. Shadow: added command to remove the groups program installed by Shadow because Sh-utils installs a (better) groups program.

August 18th, 2002 [timothy]: Chapter 05 – Sh-utils: Re-added sh-utils-2.0.patch.

August 16th, 2002 [markh]: Chapter 06 – Move man-pages to just after the kernel headers installation.

August 15th, 2002 [markh]: Chapter 06 – Move the MAKEDEV installation to before glibc and remove the temporary creation of /dev/null as we don't need it anymore.

August 15th, 2002 [timothy]: Chapter 04 – Preparing a new partition: mentioned that a swap partition can be shared between the LFS and host systems, grammatic changes.

August 13th, 2002 [gerard]: Chapter 06: Removed the –with-curses switch from the Bash installation as it's unnecessary here.

August 9th, 2002 [timothy]: Updated to modutils-2.4.19, linux-2.4.19, gettext-0.11.5, binutils-2.13, textutils-2.1.

August 9th, 2002 [timothy]: Chapter 06 – Vim: changed alternative editors link from hints to BLFS.

August 8th, 2002 [gerard]: Chapter 06 – Ncurses: removed the –disable-termcap configure option. Termcap is disabled by default now, so no need for this option (left over from a long time ago when it was needed).

August 8th, 2002 [gerard]: Chapter 06 – Linux: Added the command cp include/asm-generic /usr/include. There are programs which use the files in there, as well as headers in the asm directory may be split up in the future, and put in the asm-generic.

August 8th, 2002 [gerard]: Appendix A – Gettext: added the missing program description of msgcat.

August 4th, 2002 [timothy]: Added zlib-1.1.4.

August 3rd, 2002 [timothy]: Updated to man-pages-1.52, man-1.5k, gettext-0.11.4, modutils-2.4.18.

July 29th, 2002 [timothy]: Removed Reiserfsprogs. Updated to util-linux-2.11t and file-3.39.

July 29th, 2002 [timothy]: Chapter 04 & 05 – Creating a new partition, Introduction, Why static: grammatic changes. Diffutils, Fileutils, Grep, Texinfo: set LDFLAGS=-static before configure instead of as an argument to make. GCC: appended HAVE_GAS_HIDDEN to auto-host.h.

July 29th, 2002 [timothy]: Chapter 06 – Glibc: added –disable-profile flag.

July 29th, 2002 [timothy]: Chapter 08 – Linux: added information about modules and kernel documentation.

July 29th, 2002 [timothy]: Chapter 09 – Rebooting the system: added a command to remove the static directory.

July 8th, 2002 [timothy]: Chapter 09 – Rebooting the system: Pointed to BLFS as the next step.

July 3rd, 2002 [timothy]: Chapter 06 – Sysvinit: Simplified the sed command and updated the installation description because init now prints «Sending processes» instead of «Sending all processes».

July 2nd, 2002 [markh]: Internal change – Made all patches use a &package-patch-version; entity and removed all hardcoding of patch versions.

June 30th, 2002 [timothy]: Updated to man-pages-1.51 and automake-1.6.2

June 24th, 2002 [timothy]: Chapter 06 – Shadow, Util-linux, LFS-Bootscripts: Updated package contents.

June 23rd, 2002 [timothy]: Chapter 05 & 06 – Net-tools, Perl, Texinfo, Autoconf, Automake, File, Libtool, Bin86, Vim, Linux, Bison, Less, Man-pages, Groff, Bzip2, E2fsprogs, Grep, Lilo, Modutils, Procps, Psmisc, Reiserfsprogs: Updated package contents.

June 23rd, 2002 [timothy] Chapter 05 & 06 – M4, Bzip2, File, E2fsprogs: Added «last checked against» for uniformity. GCC: Removed i686-specific programs.

June 16th, 2002 [timothy]: Chapter 06 – Gettext: Updated package contents.

June 14th, 2002 [timothy]: Chapter 05 & 06 – Binutils, Bzip2, Diffutils, Grep: Updated package contents. GCC: Updated description of c++filt.

June 13th, 2002 [timothy]: Chapter 09 – The End: Changed $LFS/etc/lfs-4.0 to $LFS/etc/lfs and put the version number inside this file.

June 12th, 2002 [timothy]: Chapter 05 – GCC: Modified the build instructions and command explanations to only build the C compiler. The C++ compiler is not needed until after the second GCC build.

June 12th, 2002 [timothy]: Chapter 06 – Shadow: grammatic changes.

June 11th, 2002 [timothy]: Chapter 05 & 06 – Gawk: Created a list of package contents and descriptions. Fileutils: Removed a confusing paragraph about the fileutils patch. GCC: Updated the package contents.

June 11th, 2002 [timothy] All software: Updated the estimated required disk space.

June 9th, 2002 [markh]: Chapter 06 – Creating Directories: Changed usr,usr/local to just usr/local as we use the -p option to mkdir which will create the usr directory anyways.

June 7th, 2002 [timothy] Chapter 06 – Reiserfsprogs: added a description for unpack.

June 7th, 2002 [timothy] Chapter 02 – How to ask for help: mentioned the FAQ.

June 6th, 2002 [markh] – Chapter 05 – Tidy up explanations following the /static change.

June 5th, 2002 [timothy]: Preface – Who would not want to read this book: applied a revised version of Scot's grammar patch.

June 5th, 2002 [timothy]: Chapter 09 – Rebooting the system, Lilo, Bootscripts: named the hint authors. Chapter 06 – Vim: updated the hint URL. Chapter 05 – Gawk: to avoid confusion, mentioned that the patch will be applied in Chapter 06.

June 3rd, 2002 [timothy] Chapter 01 – FAQ: edited to include reporting typos.

May 31st, 2002 [gerard] Chapter 05 – Findutils: Added the CPPFLAGS...re_max_failures fix which is needed on Glibc-2.1 systems.

May 30th, 2002 [markh]: Chapter 05 & 06 – Update to binutils-2.12.1.

May 30th, 2002 [markh]: Chapter 05 – Bash: Removed section about «last two commands executing anyways» because we no longer have the commands referred to there.

May 30th, 2002 [gerard]: Chapter 06 – Glibc: Replaced the various sed fixes with a regular patch.

May 30th, 2002 [gerard]: Chapter 06 – Gawk: Replaced the sed fix with a regular patch.

May 30th, 2002 [gerard]: Chapter 05 – Fileutils: Replaced the sed fix with a regular patch.

May 30th, 2002 [gerard]: Chapter 06 – Ed: Replaced the sed fix with a regular patch.

May 28th, 2002 [gerard]: Chapter 06 – Changing ownership: removed the explicit command to chown /lost+found. This is done by the first command now that proc isn't mounted anymore in chapter 5.

May 27th, 2002 [gerard]: Upgraded to ncurses-5.2-2.patch (this patch is smaller than the previously used one).

May 26th, 2002 [gerard]: Upgraded to: automake-1.6.1, bin86-0.16.3, file-3.38, gawk-3.1.1, gcc-3.1, gettext-0.11.2, modutils-2.4.16, psmisc-21 and util-linux-2.11r. Added gcc-3.1 compile fix patches for ncurses, perl and vim.

May 26th, 2002 [gerard]: Chapter 05+06 – Binutils: Removed the tooldir setting from chapter 05-binutils, moved its description to chapter 06-binutils.

May 26th, 2002 [gerard]: Chapter 05 – Gawk & Findutils: simplified the installation by removing the libexecdir modifications. We can live with a $LFS/static/libexecdir being created. The whole $LFS/static directory is temporarily anyways, so we're not all that concerned with what it looks like.

May 26th, 2002 [gerard]: Chapter 06 – Creating Directories: removed the cd / command and changed the two chmod commands to use absolute paths instead.

May 25th, 2002 [markh]: Chapter 06 – Some minor corrections dealing with removing the $LFS variable where it isn't wanted.

May 23rd, 2002 [gerard]: Implemented the keep_chap5_and_chap6_sep lfs-hint. Highlights of the change: added findutils and util-linux to chapter 5, installed everything from chapter 5 into $LFS/static and re-ordered the installation of packages in chapter 6 to prevent hard-wiring the wrong path (files from $LFS/static).

May 23rd, 2002 [gerard]: Appendix A – E2fsprogs: Added some more descriptions.

May 23rd, 2002 [gerard]: Appendix A – Bin86: Added some descriptions.

May 23rd, 2002 [gerard]: Appendix A – Flex: Added some descriptions.

May 23rd, 2002 [gerard]: Appendix A – Glibc: Added some more descriptions.

May 18th, 2002 [gerard]: Appendix A – E2fsprogs: Added some descriptions.

May 18th, 2002 [gerard]: Appendix A – Glibc: Added some more descriptions.

May 17th, 2002 [markh]: Changed all chown X.X's to chown X:X's which is less likely to run into problems (according to info chown).

May 16th, 2002 [gerard]: Chapter 01 – Mirror sites: Added http interface to FTP mirror at idge.net

May 16th, 2002 [gerard]: Appendix A – Glibc: Added some more descriptions.

May 15th, 2002 [markh]: Chapter 05 – Bzip2. Changed the instructions to deal with hard links in older distros a'la the Chapter 05 gzip instructions.

May 11th, 2002 [markh]: Various XML fixups; mainly altering tags to remove erroneous in the HTML output.

May 9th, 2002 [gerard]: Appendix A – Glibc: Filled in the missing descriptions.

May 6th, 2002 [gerard]: Chapter 06 – Shadow: Fixed the symlink location of vigr to /usr/sbin

May 2nd, 2002 [gerard]: Chapter 06 – Procps: Changed the two single quotes to two double quotes (the two single quotes can be mistaken for one double quote which will cause an error).

May 2nd, 2002 [gerard]: Changed the cd dir && ln -sf commands to one single command (such as ln -sf bash $LFS/bin/sh Same goes for cd dir && mv/cp constructions which are now replaced with constructions like mv $LFS/usr/bin/{bzcat,bzip2} $LFS/bin

May 2nd, 2002 [markh]: Removed the «Removing old NSS library files» section.

1 мая 2002 [gerard]: Removed all Glibc-2.0 workarounds – gzip patch, sh-utils patch, copying of libnss files. Also removed the export VAR=VALUE...unset VAR constructions and changed them to VAR=VALUE ./configure constructions.

26 апреля 2002 [marcheerdink]: Глава 06 Findutils: добавлен libexecdir=/usr/bin к команде make. Исправляет неверный путь libexecdir в updatedb.

25 апреля 2002 [gerard]: Глава 06 Glibc: добавлена заметка от том, что вручную можно установить только нужные локали, а не все. Для этого необходимо создать директорию /usr/lib/locale.

21 апреля 2002 [gerard & markh]: Обновлен пакет MAKEDEV-1.5

12 апреля 2002 [markh]: Добавлена организация директорий к cvs и разделен index.xml.

10 апреля 2002 [marcheerdink]: Обновлены следующие пакеты: bison-1.35, diffutils-2.8.1, texinfo-4.2, util-linux-2.11q

9 апреля 2002 [marcheerdink]: Добавлено –disable-perl-regexp к configure-опциям grep, чтобы избежать ссылки на несуществующую статическую библиотеку pcre.

8 апреля 2002 [gerard]: Добавлено зеркало http://ftp.de.linuxfromscratch.org (в дополнение к ftp://ftp.de).

Списки рассылки и архивы

На сервере linuxfromscratch.org размещены следующие списки рассылки общего доступа:

lfs-support

lfs-dev

lfs-announce

lfs-security

lfs-book

lfs-chat

alfs-discuss

blfs-dev

blfs-book

blfs-support

lfs-support

Список рассылки lfs-support предоставляет поддержку пользователям, собирающим систему LFS в рамках данной книги. Поддержку по дальнейшим этапам работы с LFS ищите в списке blfs-support.

lfs-dev

В списке рассылки lfs-dev обсуждаются вопросы, строго связанные с книгой LFS. Если у вас есть проблемы с книгой, если вы хотите сообщить об ошибке в ней, или хотите дать совет по улучшению данной книги, этот список для вас.

Все просьбы о поддержке направляйте в lfs-support или blfs-support.

lfs-announce

lfs-announce – модерируемый список. На него можно подписаться, но нельзя отправлять сообщения. Он используется в основном для сообщения о выходе новых стабильных релизов. Список lfs-dev сообщает о выходе нестабильных релизов, релизов в разработке. Если вы подписались на lfs-dev, особого смысла подписываться на lfs-announce нет, т.к. все сообщения из него дублируются в lfs-dev..

lfs-security

В списке lfs-security обсуждаются проблемы безопасности. Все вопросы по безопасности системы и отдельных пакетов направляйте в этот список.

lfs-book

Список lfs-book используют редакторы Книги LFS для координирования вопросов эксплуатации, например проблемы XML и т.д. Однако дискуссии о том, что добавлять и что удалять из книги, проводятся в списке lfs-dev.

lfs-chat

Список lfs-chat – место отдыха членов группы LFS (вы один из них) и разной болтовни, необязательно связанной с компьютерами. Оффтопиков не существует.

alfs-discuss

Список alfs-discuss обсуждает развитие Автоматизированной Linux From Scratch, сокращенно ALFS. Цель этого проекта – создание автоматического инсталлятора системы LFS, позволяющего значительно ускорить процесс компиляции, т.к. не нужно вводить команды вручную..

blfs-dev

Список blfs-devобсуждает развитие книги BLFS (Beyond <После>LFS). Направляйте сообщения об ошибках и ваши советы по улучшению Книги BLFS в этот список.

Просьбы помочь со сборкой программ вне книги LFS направляйте в список blfs-support.

blfs-book

Список blfs-book используют редакторы Книги BLFS для координирования вопросов эксплуатации, например проблемы XML и т.д. Однако дискуссии о том, что добавлять и что удалять из книги, проводятся в списке blfs-dev.

blfs-support

Список blfs-support предоставляет помощь по установке программ, не вошедших в Книгу LFS. Разрешается обсуждать любые программы, не являющиеся базовыми программами системы LFS.

Архивы

Все списки рассылки архивируются и могут быть просмотрены на http://archive.linuxfromscratch.org/mail-archives или скачены с http://ftp.linuxfromscratch.org/mail-archives или ftp://ftp.linuxfromscratch.org/mail-archives.

Как отправить сообщение в список

Совсем необязательно подписываться на список для того, чтобы отправить в него сообщение. В таком случае, не забудьте указать в сообщении, что вы не подписаны на этот список рассылки, чтобы при ответе участники списка указали ваш адрес в поле CC:. (это позволит вам получать ответы на ваше сообщение).

Адрес списка рассылки выгляди следующим образом: listname@linuxfromscratch.org где listname – один из списков, описанных выше. Например, lfs-dev@linuxfromscratch.org, lfs-support@linuxfromscratch.org and blfs-support@linuxfromscratch.org.

Как подписаться на список рассылки

Для того чтобы подписаться на список рассылки, пошлите email по адресу listar@linuxfromscratch.org. В поле заголовка впишите subscribe listname, где listname – имя списка.

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

To: listar@linuxfromscratch.org Subject: subscribe lfs-dev subscribe blfs-support subscribe alfs-discuss

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

Как отменить подписку

Для отмены подписки пошлите email по адресу listar@linuxfromscratch.org. В поле заголовка введите unsubscribe listname.

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

To: listar@linuxfromscratch.org Subject: unsubscribe lfs-dev unsubscribe blfs-support unsubscribe alfs-discuss

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

Другие режимы списка

Для установления режимов списка, пользователь должен отправить email по адресу listar@linuxfromscratch.org. Режимы задаются командами, прописанными в поле заголовка сообщения.

Команда Set command включает режим. Команда Unset command его выключает.

Слово «listname» в примере, приведенном ниже, следует заменить на имя списка, для которого необходимо установить режим. Если необходимо установить несколько режимов (для одного или нескольких списков) с помощью одного сообщения, оставьте заголовок сообщения пустым и перенесите все команды в тело сообщения.

Режим обзора

Включить режим: set listname digest Выключить режим: unset listname digest

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

Существует другой режим обзора, digest2. В этом случае, пользователь будет получать как обзорное сообщение, так и все сообщения списка отдельно. Режим включается командой set listname digest2, и выключается командой unset digest2.

Режим «Vacation»

Включить режим: set listname vacation Выключить режим unset listname vacation

В случае вашего временного отсутствия, вы вероятно не захотите получать сообщения от списка рассылки. Для этого, вам не обязательно отменять подписку, вы можете включить режим «vacation». В отличие от аннулирования подписки, данный режим позволит вам избежать необходимости подтверждать подписку и отмену от подписки.

Сервер новостей

Все списки рассылки linuxfromscratch.org доступны также через сервер NNTP. Все сообщения, посланные в список, копируются в соответствующую группу новостей и наоборот.

Адрес сервера новостей – news.linuxfromscratch.org.

FAQ

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

http://www.linuxfromscratch.org/faq/

Как с нами связаться

Убедительная просьба направлять все сообщения в списки рассылки. См. Глава 1 – Списки рассылки и архивы для получения информации об имеющихся списках.

Если вам необходимо связаться с Герардом Бикмансом лично, пишите на gerard@linuxfromscratch.org

Прим. переводчика – Все вопросы по переводу просьба направлять Денису Каледину, hannibal@nline.ru

Глава 2. Важная информация

Про $LFS

Убедительная просьба прочесть этот раздел внимательно: переменная LFS будет часто использоваться далее. $LFS всегда необходимо заменять на путь директории, где монтирован раздел LFS. Как создать такой раздел и куда его монтировать, описано в Главе 4. Допустим, например, что раздел LFS монтирован на /mnt/lfs.

Когда вас просят выполнить ./configure –prefix=$LFS/static , на самом деле вам необходимо исполнить ./configure –prefix=/mnt/lfs/static.

Необходимо запомнить, что так следует поступать везде, где вы видите переменную $LFS – как в командной строке, так и в создаваемых или редактируемых файлах.

Однако можно существенно облегчить задачу. Для того чтобы использовать $LFS, а не прописывать каждый раз путь к директории, создайте переменную среды LFS следующей командой:

export LFS=/mnt/lfs


Теперь, если вас просят выполнить команду ./configure –prefix=$LFS/static, можно печатать как есть, не заменяя $LFS на путь к директории. После нажатия клавиши Enter, оболочка сама подставит вместо $LFS значение этой переменной, как мы ее определили командой export.

Если вы собираетесь использовать $LFS, никогда не забывайте задавать переменную LFS. В случае если она не задана, оболочка проигнорирует $LFS и выполнит остаток команды. Например, если выполнить команду echo «root:x:0:0:root:/root:/bin/bash» > $LFS/etc/passwd , не задав переменную LFS, оболочка заново создаст файл /etc/passwd. Иными словами, уничтожит текущую базу паролей системы.

Для того чтобы всегда быть уверенным в том, что переменная LFS задана, добавьте ее в файлы /root/.bash_profile и /root/.bashrc. Теперь каждый раз когда вы входите в систему под учетной записью root, или получаете его права с помощью команды su , переменная LFS будет задана автоматически.

Про SBU

SBU или Static Bash Units <Статические единицы Bash> используются для определения времени, необходимого для компиляции программы. Почему мы не используем привычные единицы времени, такие как секунды, минуты, часы?

Проблема заключается в том, что использование привычных единиц времени в данном случае дает слишком неточные результаты. Люди инсталлируют LFS на множестве различных систем, и время, затраченное на компиляцию определенной программы будет разным для каждой системы. На одной системе пакет компилируется за 20 минут, на другой системе тот же самый пакет собирается за 3 дня (заметьте, это не преувеличение). Поэтому мы решили использовать SBU.

Как это работает: первым пакетом, который вам будет предложено скомпилировать в Главе 5 будет оболочка Bash со статическими ссылками. Время, потраченное на его компиляцию, будет взято за базис и названо SBU. Время компиляции других программ попадет в прямую зависимость от времени, затраченного на компиляцию Bash. К примеру, компиляция GCC-3.2 занимает примерно 9.5 SBU, и проверено, что это число довольно постоянно на разных системах. Теперь мы умножим 9.5 на число секунд, потраченных на компиляцию Bash (значение SBU), и получим приблизительное время в секундах, необходимое для компиляции GCC.

Примечание: Использование SBU не подходит для многопроцессорных систем. В случае если вы счастливый обладатель такого компьютера, время компиляции, подсчитанное с помощью SBU будет неточным.

Где хранить загруженные программы

На протяжении этой книги мы допускаем, что все скаченные пакеты находятся в директории $LFS/usr/src.

Несмотря на то, что не имеет принципиального значения, где сохранены пакеты, убедительная просьба расположить их по крайней мере на разделе LFS, т.к необходимо иметь доступ к ним, когда вы входите в $LFS с помощью команды chroot или когда вы загружаетесь в систему LFS. Директория $LFS/usr/src – довольно логичное место для хранения исходных кодов, однако это не является необходимым условием. Можно создать подкаталог в $LFS/usr/src для хранения tar-архивов, отделив таким образом tar-архивы от временных директорий компиляции. Опять же, решать вам.

Следующая глава содержит список программ для скачивания. Так как раздел LFS еще не создан, сохранить их там мы пока не можем. На данном этапе сохраните их в другом месте, и переместите на раздел LFS, когда его создадите.

Как инсталлировать программы

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

Перед тем как инсталлировать пакет, его надо распаковать. Обычно пакеты заархивированы в формате gzip или bzip2. Мы не собираемся каждый раз объяснять, как распаковать пакет. Мы объясним это в данном разделе раз и навсегда.

Для начала перейдите в каталог $LFS/usr/src:

cd $LFS/usr/src


Если файл запакован в tar и gzip, разархивируйте его следующим образом, в зависимости от имени файла:

tar -xvzf filename.tar.gz

tar -xvzf filename.tgz


Если файл запакован в tar и bzip2:

bzcat filename.tar.bz2 | tar -xv


Большинство программ tar способны использовать файлы формата bzip2 напрямую. Они используют параметры -I, -y, или -j, которые аналогичны параметру -z для файлов в формате gzip. Команда, приведенная выше, универсальна и не зависит от того, как ваша система интерпретирует tar.

Если файл запакован просто в формате tar, выполните

tar -xvf filename.tar


При распаковке архива в текущем каталоге создается подкаталог (мы подразумеваем, что архивы распаковываются в директории $LFS/usr/src). Войдите в созданный подкаталог перед выполнением инсталляционных инструкций. Повторим еще раз: каждый раз при установке программы, вы должны распаковать ее архив и перейти в созданный архиватором подкаталог.

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

Если файл запакован в формате gzip, распакуйте его следующей командой:

gunzip filename.gz


Если файл запакован в формате bzip2, распакуйте его следующей командой:

bunzip2 filename.bz2


После инсталляции пакета можно либо удалить директорию его исходных кодов, либо сохранить ее. Настоятельно рекомендуем удалять эту директорию. Если этого не сделать и повторно использовать директорию исходников (например, повторно использовать исходники из Главы 5 в Главе 6), получится не совсем то, чего вы ожидали. Деревья исходных кодов в Главе 5 содержат настройки базового дистрибутива, которые не всегда подойдут к системе LFS, после того как вы войдете в среду chroot. Даже выполнение make clean не гарантирует чистого дерева исходников.

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

Загрузка...