Библиотека сайта rus-linux.net
Заметки пользователя Linux. О компиляции ядра 2.6.0. Часть 3. Неудачная попытка
(C) В.А.Костромин, kos @ rus-linux dot net
Часть 1. Файл README.
Часть 2. Файл Changes.
Закончив чтение файлов README и Documentation/Changes, я приступил к практическим действиям по компиляции ядра. К сожалению, процедуру эту завершить мне не удалось. В этой части заметок я расскажу, как проходил этот процесс и почему он завершился неудачно. Надеюсь, что мой опыт будет кому-то полезен.
Первым делом я, естественно, проверил, установлены ли в системе все необходимые пакеты из таблички, приведенной в таблице 2 на предыдущей страничке моих заметок (и в файле Documentation/Changes). Проверку эту я проводил на основном своем домашнем компьютере. Если вы читали мои предыдущие заметки, то вы, возможно, помните, что на нем у меня установлен ASP Linux 7.2 с ядром 2.4.23 (которое я сам компилировал). В ходе этой проверки я получил следующие результаты:
Таблица 3. Версии пакетов на основной системе.
Пакет | Требуется версия | Имеется у меня |
Gnu C | 2.95.3 | 2.96 |
Gnu make | 3.78 | 3.79-1 |
binutils | 2.12 | 2.11.93.0.2 20020207 |
util-linux | 2.10o | 2.11n |
module-init-tools | 0.9.10 | не найден |
e2fsprogs | 1.29 | 1.27 |
jfsutils | 1.1.3 | не найден |
reiserfsprogs | 3.6.3 | не найден |
xfsprogs | 2.1.0 | не найден |
pcmcia-cs | 3.1.21 | не найден |
quota-tools | 3.09 | 3.01 |
PPP | 2.4.0 | 2.4.1 |
isdn4k-utils | 3.1pre1 | не найден |
nfs-utils | 1.0.5 | 0.3.3 |
procps | 3.1.13 | 2.0.7 |
oprofile | 0.5.3 | не найден |
Большинство пакетов, хотя и не все, я нашел по тем ссылкам, которые были даны в файле Documentation/Changes. Некоторые ссылки не работали, например, я никак не мог достучаться по ссылке, приведенной для пакета mkinitrd, а поэтому провел поиск и нашел готовый rpm-пакет по адресу http://people.redhat.com/arjanv/2.5/RPMS.kernel/. Следующий список показывает, какие именно пакеты мне удалось найти, и их размер:
10399066 binutils-2.14.90.0.6.tar.bz2 10575077 binutils-2.14.90.0.7.tar.bz2 388310 docbook-dsssl-1.78.tar.gz 237519 docbook-dsssl-doc-1.78.tar.gz 13096 e2fsprogs-1.29.tar.gz 143693 iproute2-2.2.4-now-ss991023.tar.gz 140139 iproute2-2.4.7-now-ss010824.tar.gz 138908 iptables-1.2.8-9.src.rpm 1092062 jade-1.2.1.tar.gz 55898 ksymoops-2.4.9.tar.bz2 126450 microcode_ctl-1.06.tar.gz 83241 mkinitrd-3.5.15.1-2.i386.rpm 265964 nfs-utils-1.0.6.tar.gz 13075 oprofile-0.5.4.tar.gz 557727 oprofile-0.7.1.tar.gz 573995 powertweak-0.99.5.tar.bz2 250300 procps-3.1.14.tar.gz 1266784 util-linux-2.11z.tar.bz2
Находка rpm-пакета для mkinitrd подтолкнула меня к мысли о том, что может быть проще найти rpm-пакеты с нужными программами, чем заниматься компиляцией всех этих программ самому. Так что я заодно разыскал и скачал следующие пакеты:
2 896 893 binutils-2.14.90.0.7-1.i386.rpm 138 908 iptables-1.2.8-9.src.rpm 83 241 mkinitrd-3.5.15.1-2.i386.rpm 238 329 module-init-tools-0.9.13-0.1.i686.rpm 510 197 e2fsprogs-1.32-6.i386.rpm 405 358 ppp-2.4.2-4.i686.rpm 166 621 procps3-3.1.5-2mdk.i586.rpm 476 758 util-linux-2.12-1.i686.rpm 138 908 iptables-1.2.8-9.src.rpm 554 497 iproute2-2.2.4-ipl10mdk.i586.rpm 63 452 powertweak-0.99.0-8.i386.rpm 4 502 879 openjade-1.3-17.i386.rpm
Пока я лазил по Интернет в поисках нужных пакетов, я натолкнулся на 4 статьи (см. [2-5]), в которых рассказывалось об опыте миграции на ядро версии 2.6.0. Как пишут авторы этих статей, на пути перехода с ядра 2.4.х на ядро 2.6.0 встречаются (или могут встретиться) некоторые трудности, о которых я и не подозревал, убаюканный легкостью перехода с версии 2.4.18 на 2.4.23. Насколько я понял, вам встретятся на этом пути по крайней мере следующие затруднения и неприятности:
kernel /boot/vmlinuz-2.6.0-0.test10.1.95 ro root=LABEL=/ hdc=ide-scsi rhgbна строку
kernel /boot/vmlinuz-2.6.0-0.test10.1.95 ro root=LABEL=/ rhgbНо в таком случае у меня, скорее всего, возникнут проблемы при попытке загрузить старое ядро.
rpm
может не работать с ядром 2.6. После запуска
она выдаст сообщение об ошибке следующего вида:
rpmdb: unable to join the environment error: db4 error(11) from dbenv->open: Resource temporarily unavailable error: cannot open Packages index using db3 - Resource temporarily unavailable (11) error: cannot open Packages database in /var/lib/rpm no packagesи откажется работать. В [3] приводятся рекомендации, как восстановить работоспособность
rpm
, но, пока я не уверен, что смогу
безболезненно работать с новым ядром, мне не хотелось бы нарушать
работоспособность старой системы.
А ведь автор статьи [3] пишет только о своем опыте и не претендует на то, что ему удалось найти и преодолеть все сложности перехода с ядра 2.4.х на 2.6.0. В общем, прочитав эти статьи, я решил, что не стоит подвергать риску мою основную систему и лучше перенести эксперименты с новым ядром на мой старенький тестовый компьютер.
Для того, чтобы вы четко представляли ситуацию, опишу конфигурацию этого компьютера.
Процессор Pentium II MMX 233 MHz, HDD IDE 4 GB, ОЗУ 128 MB, FDD, USB порт, ATAPI CD-ROM FX810T4, сетевая карта, операционная система Red Hat Linux 9 (Shrike) с ядром 2.4.20-13.9 на основе файловой системы Ext3fs.
Теперь посмотрим, какие пакеты требуется доустановить перед установкой ядра 2.6.0:
Таблица 4. Версии пакетов на тестовой системе.
Пакет | Требуется версия | Имеется у меня |
Gnu C | 2.95.3 | не установлен |
Gnu make | 3.78 | 3.79.1 |
binutils | 2.12 | 2.13.90.0.18 20030206 |
util-linux | 2.10o | 2.11y |
module-init-tools | 0.9.10 | не найден |
e2fsprogs | 1.29 | 1.32 |
jfsutils | 1.1.3 | не найден |
reiserfsprogs | 3.6.3 | не найден |
xfsprogs | 2.1.0 | не найден |
pcmcia-cs | 3.1.21 | 3.1.31 |
quota-tools | 3.09 | 3.01 |
PPP | 2.4.0 | 2.4.1 |
isdn4k-utils | 3.1pre1 | 3.1pre4 |
nfs-utils | 1.0.5 | 1.0.1 |
procps | 3.1.13 | 2.0.11 |
oprofile | 0.5.3 | не найден |
Как видите, пакет gcc у меня оказался не установлен. На дистрибутивном диске Red Hat Linux 9 нашелся пакет gcc-3.2.2-5.i386.rpm, который, как вы помните, не рекомендуется для компиляции ядра. Поэтому я установил пакет gcc-2.96-110.i386.rpm, который нашел на дистрибутивном диске от Red Hat Linux 7.3 CE. Правда, при этом пришлось применить силу, то бишь опцию --force, поскольку для gcc-2.96 потребовался еще пакет cpp-2.96, а последний конфликтовал с установленным пакетом cpp-3.2.2 (который, в свою очередь, не удалялся, потому что был нужен пакету XFree86-4.3.0-2).
Попытка установить пакет module-init-tools-0.9.13-0.1.i686.rpm привела к появлению следующего сообщения:
ошибка: Неудовлетворенные зависимости: modutils < 2.4.25-2 конфликтует с module-init-tools-0.9.13-0.1
Но, поскольку в прочитанных мной материалах сообщалось, что module-init-tools вполне заменяют modutils и причем успешно работают с ядрами 2.4.х, я решился удалить пакет modutils и установить module-init-tools-0.9.13-0.1. Удаление modutils без проблем не прошло:
[root@linux Kernel]# rpm -e modutils ошибка: неудовлетворенные зависимости: modutils >= 2.3.11-5 нужен для (установлен) kudzu-0.99.99-1 modutils >= 2.3.11-5 нужен для (установлен) initscripts-7.14-1 modutils >= 2.4.18 нужен для (установлен) kernel-2.4.20-8 modutils >= 2.3.21-4 нужен для (установлен) irda-utils-0.9.14-9 modutils >= 2.4.18 нужен для (установлен) kernel-2.4.20-13.9 /sbin/insmod.static нужен для (установлен) mkinitrd-3.4.42-1Учитывая, что система тестовая, я снова решился на применение силы (только на сей раз это не опция --force, а опция --nodeps):
[root@linux Kernel]# rpm -e --nodeps modutils
Опция сработала, после чего я установил и новые утилиты
[root@linux Kernel]# rpm -Uhv module-init-tools-0.9.13-0.1.i686.rpm Подготовка... ########################################### [100%] 1:module-init-tools ########################################### [100%]
Пакет procps я вначале нашел только в виде tar-gz-архива procps-3.1.14.tar.gz. Но попытка его установить командами
[root@linux Kernel]# tar xvfz procps-3.1.14.tar.gz [root@linux Kernel]# cd procps-3.1.14 [root@linux Kernel]# make [root@linux Kernel]# make install(как было сказано в файле README) привела к появлению сообщения о том, что при выполнении команды make не найдены файлы curses.h и term.h. Их действительно не было в развернутом архиве.
А попытка установить пакет oprofile-0.7.1.tar.gz привела к тому, что при выполнении команды .configure в развернутом из архива каталоге появилось сообщение об ошибке: "no suitably configured kernel include tree found". Этого я не понял: требуется установить ядро, для того, чтобы установить пакет, нужный для установки ядра. Пришлось снова заняться поиском rpm-пакетов. Дольше всего пришлось искать пакет procps версии 3.1.13. Но и он в конце концов нашелся по адресу ftp://ftp.pbone.net/mirror/ftp.turbolinux.com/pub/TurboLinux/stable/untested/Server/8/i586/procps-3.1.13-1.i586.rpm
Нашелся и rpm-пакет oprofile-0.6-122.i586.rpm
687925 oprofile-0.6-122.i586.rpm 157069 procps-3.1.13-1.i586.rpmНо вот с попыткой их установить у меня ничего не получилось. А дело вот в чем.
Я имею обыкновение выключать компьютер на ночь. Во-первых, денежку надо экономить, незачем гонять его впустую, а, во-вторых, нет у меня ИБП, а сеть у нас не идеальна, так что и компьютером рисковать нет желания, оставляя его без присмотра. Этот факт (то, что каждый день перезапускаю компьютер) играет в моем повествовании существенную роль. Не знаю, работай я без перезагрузок, получил ли бы я тот эффект, о котором затянувшееся предисловие никак не дает мне рассказать.
А эффект этот заключался в следующем. Скачал я упомянутые пакеты на свой основной
компьютер и вознамерился перенести их на тестовый с помощью дискеты. Однако, смонтировать
дискету мне не удалось! Когда попытался сделать это простой командой
[root]# mount /mnt/floppy
получил сообщение
mount: you must specify the filesystem type
А команда
[root]# mount -t vfat /dev/fd0 /mnt/floppy
выдала
mount: fs type vfat not supported by kernel
Но я ведь ядро еще не менял, а до сих пор оно знало, что такое vfat!
Далее я пытался перенести нужные пакеты на тестовый компьютер еще несколькими способами:
- пытался смонтировать диск к основному компьютеру по NFS и наоборот - диск основного
компьютера к тестовому (сеть отказалась работать);
- записать пакеты на CD-RW (CD не удалось смонтировать тоже);
Придя в совершенное недоумение я отложил эксперименты на некоторое время (да и другие занятия отвлекали, почему и затянулось продолжение моих заметок). Но через некоторое время повторил свои действия на другом компьютере (на одном из компьютеров на работе). Результат получился тот же самый.
Посмотрел я протокол работы системы (на домашнем тестовом компьютере), но ничего там необычного не нашел.
Перезапустил еще раз комьютер и заметил, что на этапе загрузки появляются несколько сообщений о том, что ядру требуется старый modprobe и старый depmod, но оно не может найти файлы /sbin/modprobe.modutils и /sbin/depmod.modutils. В результате не запустился и демон NFSD.
Короче, какой-то из моих силовых приемов оказался слишком сильным! Пришлось мне на обоих компьютерах установить систему заново. Как хорошо, что я не пошел на эти действия на своем основном компьютере. Имейте мой опыт в виду, если решитесь ставить новое ядро. Не обещаю, что я решусь еще на одну попытку установки ядра 2.6.0 (но если решусь, то у этой статьи будет продолжение). А пока напрашивается такой вывод:
Для не очень опытного пользователя попытка установить новое ядро из исходников может привести к краху системы. Лучше дождаться выхода сбалансированого дистрибутива с новым ядром и провести обновление всей системы в целом.
Список литературы и ссылки.
- В.А.Костромин, "Linux для пользователя", изд. БХВ-Петербург, 2002 год, серия "Самоучитель", 650 стр.
- jeremy, "Feature: HowTo Upgrade To The 2.6 Kernel"
- Thomer M. Gil, "Migrating to Linux Kernel 2.6"
- Kristof Vansant, "Fedora core 1 with kernel 2.6-test"
- midian, "Feature: VMWare and NVidia on Linux 2.6 Kernel HowTo"