Мы благодарим всех людей и организации за их вклад в развитие проекта Linux From Scratch:
Mark Stone
VA Linux Systems за серверное пространство и канал для сервера linuxfromscratch.org.
Fredrik Danerklint за зеркало se.linuxfromscratch.org.
Tim Jackson
Hagen Herrschaft
UK Mirror Service за зеркало linuxfromscratch.mirror.ac.uk.
Guido Passet
Timothy Bauscher
Mark Hymers
Marc Heerdink
DREAMWVR.COM за предоставление ресурсов проекту LFS и другим подпроектам, связанным с ним.
Jan Niemann
Torsten Westermann
Ian Chilton
Dag Stenstad
Antonin Sprinzl
Jason Andrade
Ian Cooper
VA Linux Systems , которые от имени Linux.com, предоставили рабочую станцию VA Linux 420 (бывшая StartX SP2) для проекта.
Johan Lenglet
Jesse Tie-Ten-Quee highos@linuxfromscratch.org за предоставление пишущего привода Yamaha CDRW 8824E.
O'Reilly за предоставление книг по SQL и PHP.
Robert Briggs за предоставление доменов linuxfromscratch.org linuxfromscratch.com.
Frank Skettino
Garrett LeSage
Dean Benson
Бесчисленное количество людей в различных списках рассылки 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/
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
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.
Если вы столкнетесь с трудностями, если у вас возникнут вопросы или вы найдете опечатку в книге, обратитесь к странице ЧАсто задаваемых ВОпросов.
http://www.linuxfromscratch.org/faq/
Убедительная просьба направлять все сообщения в списки рассылки. См. Глава 1 – Списки рассылки и архивы для получения информации об имеющихся списках.
Если вам необходимо связаться с Герардом Бикмансом лично, пишите на gerard@linuxfromscratch.org
Прим. переводчика – Все вопросы по переводу просьба направлять Денису Каледину, hannibal@nline.ru
Убедительная просьба прочесть этот раздел внимательно: переменная 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 или 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. Следую советам статьи, вы научитесь правильно задавать вопросы и ваши шансы получить квалифицированный ответ возрастут.