"Playfully doing something difficult whether useful or not - that's hacking"
RMS



ОПЕРАЦИОННАЯ СИСТЕМА GNU/LINUX ver 2.6.6 СВОИМИ РУКАМИ
(пользуясь руководством Linux From Scratch версии 5.0)



GNU/LINUX поселился на жестком диске моего компьютера сравнительно недавно - в сентябре 2003 года. Это Mandrake 9.1 (Bamboo), который использовался в качестве домашней операционной системы (десктопа) - почта, интернет, просмотр DVD и прочее программирование. В Mandrake многое спрятано от глаз пытливого пользователя, которому хочется заглянуть ему под юбку, понять как это всё вертится, разобрать по кирпичику. Установить новое ядро GNU/LINUX 2.6.6.

В руководстве Linux-From-Scratch (LFS-5.0) подробно расскахывается о том, как собрать из исходников рабочую операционную систему GNU/LINUX на ядре linux-2.4.22, поэтому не удивительно, что при использовании ядра linux-2.6.6 вместо linux-2.4.22 с помощью текста LFS-5.0 возникают ошибки. Но их можно приодолеть. Версия 2.6 стоит того.

Итак, Вам потребуется некоторый опыт общения с одним из дистрибутивов GNU/LINUX, доступ к интернет и устанновленная на Вашем компьютере рабочая ОС LINUX. Я использовал английский вариант этой книги, возможно уже есть новая версия с изменениями для linux-2.6.## - проверьте прежде чем использовать этот текст.

Итак, у меня было:

1) Установленный дистрибутив Mandrake

2) Книга Linux from scratch версии 5.0 (LFS)

3) Доступ в интернет

4) Любопытство 


В книге LFS есть список программ в исходниках, который необходим для инсталяции GNU/LINUX с нуля. Всё удовольствие занимает 134MB. Можно скачать все исходники с приведенных в книге LFS сайтов разработчиков. Или же воспользоваться образами CD дисков, информацию о которых можно найти на этой странице. Там же можно найти линки на пакеты в р2р сетях - bittorent или edonkey. А также скрипты для автоматического скачивания всех пакетов с помощью программы wget.



Некоторые изменения в необходимых нам файлах:

1) Вместо ядра версии 2.4.22 нужно скачать linux-2.6.6.tar.bz2.

2) Вместо Modutils нужно скачать module-init-tools-3.0.tar.gz (возможно сейчас уже есть новые версии). В ядре 2.6 module-init-tools заменили modutils, поэтому modutils нам не нужны.


Необходимые знания и умения

1) Вы всё делаете ТОЛЬКО на свой страх и риск. В результате необдуманных действий Вы можете потерять полезную информацию на вашем винчестере. Будьте бдительны и сделайте резервные копии на CD-R, например.

2) Вам необходимо уметь редактировать файлы в vi, и уметь работать в консоле, разахивировать файлы и так далее.

3) Иметь установленные компиляторы и прочая. Если вы не знаете, что такое компилятор, то лучше отложить эту затею с linux-2.6 до лучших времен.

4) Английский язык со словарем


Некоторые замечания:

0) Вся работа по установке linux-2.6.6 с нуля проходила параллельно моим развлечениям в Мандрейк - можно смотреть фильмы или лазить в интернете пока компилятся пакеты (т.е. никакого текстового терминала :)). У меня всё заняло примерно неделю вечернего времени.

1) Следуйте всем рекоммендациям руководства LFS-5.0. Не пользуйте pdf версию, лучше скачать книгу в формате html - будет меньше вопросов к тексту (проблема со шрифтами - меня замучили вопросы "есть в комманде пробел или нет?". Но пришлось больше вникать - что хорошо ;-)).

2) Нужно около 3GB на диске, необходим чистый partition

3) Не удаляйте директории с откомпилированными исходниками, пока этого не разрешат :)

4) Нам придется устанавливать одни и те же программы по нескольку раз - пользуйтесь "make clean" перед повторной конфигурацией пакета.


Поиск свободного раздела на диске.

По книге LFS-5.0 необходимо иметь на диске свободный раздел, в котором будет собираться наш Linux. Мне пришлось разбить 10G раздел FAT32 на два по 5G. Эту операцию я выполнил под rescue console WindowsXP (первая установленная операшионная система на моем компьютере). После этой операции "исчез" загрузчик Мандраке LILO. Пришлось уже грузиться с установочного диска Мандраке и восстанавливать LILO.

Но и после этого загрузиться в Мандраке не получилось. Дело в том, что имена партиций изменились (hda6 стал hda7) и LILO естественно не мог найти ядро Мандраке на hda6. Всё вылечилось аккуратным редактированием /etc/fstab в режиме rescue загрузочного диска Мандраке - названия новых партиций я узнал по комманде df, а редактировал файл fstab с помощью редактора vim. После этого всё заработало. Разобравшись с форматом fstab я подмонтировал и новый 5G раздел для сборки GNU/LINUX ver 2.6.6. Мораль: если вы не знаете как работать с разделами диска - почитайте man и другую литературку (в текстовой rescue консоле это делать менее приятно, чем в КDE).



Начало.

Вся работа происходила в Мандраке. Книга LFS-5.0 дает исчерпывающее описание сборки нового ядра - дальше я только буду описывать проблемы с которыми сталкивался и рассказывать о том как их решать. Остальное вы прочитаете в книге.

Первым делом мне нужно было отформатировать новый раздел диска в файловую систему GNU/LINUX. И я понятия не имел как это сделать в linux. Выручил apropos и LFS-5.0


$ apropos partition
cfdisk               (8)  - Curses based disk partition table manipulator for Linux
fdisk                (8)  - Partition table manipulator for Linux
mpartition           (1)  - partition an MSDOS hard disk
sfdisk               (8)  - Partition table manipulator for Linux
cfdisk               (8)  - Curses based disk partition table manipulator for Linux
fdisk                (8)  - Partition table manipulator for Linux
mpartition           (1)  - partition an MSDOS hard disk
sfdisk               (8)  - Partition table manipulator for Linux


Толково, не правда ли? Дальше я пользовал man c названием программы и запускал их с ключом --help. Самой приятной и понятной оказался cfdisk. Операции с разделами диска требуют права root (cмотрите "man su"). ВНИМАНИЕ: необдуманные действия могут привести к потери ценной информации на диске!



Начинайте установку, следуя тексту LFS-5.0. Я встретил следующие проблемы:

Глава "Installation of the kernel headers"

Всё шло как по маслу до раздела книги - "Installation of the kernel headers". Дело в том, что я устанавливал GNU/LINUX версии 2.6.6, а в книге рассказыватся о установке версии 2.4.22. Почувствуйте разницу - Мандраке ругался на "make symlinks" при сборке linux-2.6.6. Решение было простое - замена "make symlinks" на "make install/asm". (Решение я подсмотрел в Makefile ядра linux-2.6.6), а потом нашел подтверждение своей догадки в www.google.com


Глава "Installing Glibc-2.3.2"

Здесь возникли ошибки на "make check", о которых предупреждали в LFS-5.0. Но они не повлияли на конечный результат. Игнорируем ошибки в разумных пределах.

   ibc-build/crypt:/mnt/mylinux/sources/glibc-build/linuxthreads /mnt/mylinux/sources/glibc-build/libc.so.6 /mnt/mylinux/sources/glibc-build/libc_nonshared.a -lgcc `gcc -B/tools/bin/ --print-file-name=crtend.o` /mnt/mylinux/sources/glibc-build/csu/crtn.o
   /bin/sh -e tst-gettext.sh /mnt/mylinux/sources/glibc-build/ /mnt/mylinux/sources/glibc-build/intl/ \
     /mnt/mylinux/sources/glibc-build/intl/tst-gettext.mtrace
     make[2]: *** [/mnt/mylinux/sources/glibc-build/intl/tst-gettext.out] Error 1
     make[2]: Leaving directory `/mnt/mylinux/sources/glibc-2.3.2/intl'
     make[1]: *** [intl/tests] Error 2
     make[1]: Leaving directory `/mnt/mylinux/sources/glibc-2.3.2'
     make: *** [check] Error 2



Глава "Installing Texinfo-4.6"

В этой главе тоже возникли проблемы (у меня, а у вас их быть не должно). При компиляции ругнулся texinfo 4.6. При повторном запуске configure я заметил предупреждение о том, что у меня не установлены библиотеки ncurses, которые я точно уже устанавливал. После недолгих поисков выяснилось, что я забыл проинсталлировать ncurses (забыл выполнить комманду "make install" после "make"). Так что - будьте бдительны. ;)


Глава "Installing util-linux-2.12"

Эта бяка изрядно попортила мне кровь :-\ - правда не совсем в этой главе. Здесь проблемы решились достаточно просто - патчем util-linux-2.12-2.6-headers.patch (www.google.com - рулит) и четким выполнинием инструкций в этой главе книги LFS-5.0

Все дополнительные патчи собраны в этом архиве (10kb).


Глава "Installing e2fsprogs-1.34"

Возникающая ошибка в этой главе - лечится изменением SCSI_DISK_MAJOR на SCSI_DISK0_MAJOR в пробленом файле - смотрите его название в строке с ошибкой.


Глава "Installing sysklogd-1.4.1"

Проблема вылечилась применением патча sysklogd-1.4.1-kernel_header.patch


Глава "Installing util-linux-2.12" (Chapter 5)

Я использовал новый пакет util-linux-2.12a после натравления на него этого патча.

$patch -Np1 -i ../patch-util-linux-2.12a-with-2.6-linux.diff



Инсталляция ядра linux-2.6.6


Самая интересная часть. Перед началом конфигурации соберите как можно больше информации о вашем "железе". Мануалы должны быть под рукой.


Разахивируем linux-2.6.6.tar.gz (#tar xvfz linux-2.6.6.tar.gz)
Переходим в директорию linux-2.6.6 (#cd linux-2.6.6)
Не побрезгуйте чтением README, INSTALL, (справочная информация по различному железу лежит в ./Documentation)
Готовимся к конфигурации ядра (#make mrproper)
Конфигурируем ядро (#make menuconfig). В первый раз это может занять продолжнительное время. Закончив конфигурацию, выходим, сохранив изменения.
Компилируем ядро (#make)
Если вы сконфигурировали какие-либо компоненты ядра в виде модулей, компилируем их (#make modules_install)
Если всё прошло нормально копируем ядро в /boot, где его будет искать наш загрузчик.
#cp arch/i386/boot/bzImage /boot/LINUX-2.6.6
#cp System.map /boot/System.map


Дальше остаётся только добавить новую запись в наш загрузчик (в моём случае это lilo), добавив к /etc/lilo.conf

image=/mnt/lfs/boot/LINUX-2.6.6
        label="linux-2.6.6"
        root=/dev/hda6
        read-only


Естественно, вам необходимо адаптировать запись lilo под себя (путь к ядру в "image=" и "root=").
Записываем наш загрузчик- #/sbin/lilo

Если вы правильно сконфигурировали ядро - вы cможете насладиться операционной системой, собранным своими собственными руками!

mojoholder Jun04 EOF