Наши партнеры

UnixForum






Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Заметки пользователя Linux. О компиляции ядра 2.6.0. Часть 3. Неудачная попытка

(C) В.А.Костромин, kos @ rus-linux dot net

21 декабря 2003 г., последние изменения внесены 10 января 2003 г.

Часть 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 не найден
Как видите, у меня в системе многого не хватает. Придется установить новые версии binutils, module-init-tools, e2fsprogs, nfs-utils, procps и т.д. Перечисленные в этой таблице драйверы разных файловых систем мне не нужны, потому что я не собираюсь их использовать, как и пакет quota. У меня также нет устройств PCMCIA и ISDN, а вот относительно oprofile я ничего не знаю, так что я решил, что лучше этот пакет тоже поставить. И отправился в Интернет, искать необходимые пакеты.

Большинство пакетов, хотя и не все, я нашел по тем ссылкам, которые были даны в файле 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. Насколько я понял, вам встретятся на этом пути по крайней мере следующие затруднения и неприятности:

  • ядро 2.6.0 использует новую виртуальную файловую систему sysfs, которую надо создать;
  • в ядре 2.6 для поддержки звуковых карт используется Alsa вместо устаревшей OSS. А у Alsa могут возникнуть проблемы с установленной звуковой картой;
  • ядро 2.6 более не использует эмуляцию ide-scsi, так что в файле /boot/grub/menu.lst нужно заменить строку
    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  
    
    Но в таком случае у меня, скорее всего, возникнут проблемы при попытке загрузить старое ядро.
  • Как сообщается в статье [3], старая версия 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, но, пока я не уверен, что смогу безболезненно работать с новым ядром, мне не хотелось бы нарушать работоспособность старой системы.
  • Имена модулей для работы с USB отличаются у ядра 2.6.0. Рецепты на этот случай тоже даются в статье [3].
  • И, что меня совсем уж добило, в [3] сообщается, что для обеспечения работоспособности системы VMware тоже придется "поработать ручками".

    А ведь автор статьи [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 (но если решусь, то у этой статьи будет продолжение). А пока напрашивается такой вывод:

    Для не очень опытного пользователя попытка установить новое ядро из исходников может привести к краху системы. Лучше дождаться выхода сбалансированого дистрибутива с новым ядром и провести обновление всей системы в целом.

    Список литературы и ссылки.

    1. В.А.Костромин, "Linux для пользователя", изд. БХВ-Петербург, 2002 год, серия "Самоучитель", 650 стр.
    2. jeremy, "Feature: HowTo Upgrade To The 2.6 Kernel"
    3. Thomer M. Gil, "Migrating to Linux Kernel 2.6"
    4. Kristof Vansant, "Fedora core 1 with kernel 2.6-test"
    5. midian, "Feature: VMWare and NVidia on Linux 2.6 Kernel HowTo"