"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