Рейтинг@Mail.ru
[Войти] [Зарегистрироваться]

Наши друзья и партнеры

UnixForum
Альтернативная энергия

Беспроводные выключатели nooLite

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

Библиотека сайта или "Мой Linux Documentation Project"

Глава 17. Обновление ядра

Предыдущий раздел Оглавление Следующий раздел

17.3. Установка нового ядра из rpm-пакета

Честно сказать, я довольно долгое время не решался браться за обновление ядра, поскольку первая из предпринятых мною попыток оказалась неудачной, причем до того неудачной, что мне пришлось полностью переустановить систему. Я тогда пытался установить ядро из исходных текстов. Но однажды я наткнулся в новостях на сообщение о том, что выпущен rpm-пакет с ядром 2.2.16-1. Поскольку мой опыт работы с rpm-пакетами был вполне положительным, я решился попытаться еще раз, и попытка эта оказалась вполне успешной!

Итак, вначале рассмотрим установку нового ядра, откомпилированного кем-то и представленного в виде rpm-пакета. Естественно, что первым делом надо скачать rpm-пакет с новым ядром. Если вы не ставите своей целью тестирование новшеств в ядре, то ищите rpm-пакет со стабильной версией, т. е. с четной второй цифрой в номере версии ядра (номер версии указывается в названии пакета). Я скачал ядро версии 2.2.16-1 с сервера http://rufus.w3.org/linux/RPM/.

Скачав ядро, запустите команду

[root]# rpm -i kernel-2.2.16-1.i386.rpm

По этой команде программа rpm установит в каталог /boot четыре файла: System.map-x.y.z-a, vmlinux-x.y.z-a, vmlinuz-x.y.z-a и module-info-x.y.z-a (где x.y.z-a — это номер версии нового ядра), создаст каталог /lib/modules/x.y.z-a, в котором разместит модули нового ядра, а также установит скрипт /sbin/installkernel.

Если у вас есть такое желание, вы можете предварительно (или потом) выполнить команду

[root]# rpm -qpl kernel-2.2.16-1.i386.rpm,

которая выдаст полный список устанавливаемых из пакета файлов. Выполнение этих команд еще ничего не меняет в системе, только подготавливает файлы для запуска нового ядра.

Я после установки пакета с ядром решился сразу запустить скрипт /sbin/installkernel. Скрипт завис, его пришлось снимать комбинацией клавиш <Ctrl>+<C>. Тогда я стал разбираться с тем, что делает этот скрипт. Вот его полный текст:

#------------------- начало скрипта ------------------

#! /bin/sh

# /sbin/installkernel — written by tyson@rwii.com

#

INSTALL_PATH=/boot

KERNEL_VERSION=$1

BOOTIMAGE=$2

MAPFILE=$3

if [ -f $INSTALL_PATH/vmlinuz-$KERNEL_VERSION ]; then

mv $INSTALL_PATH/vmlinuz-$KERNEL_VERSION \

$INSTALL_PATH/vmlinuz.old;

fi

if [ -f $INSTALL_PATH/System.map-$KERNEL_VERSION ]; then

mv $INSTALL_PATH/System.map-$KERNEL_VERSION \

$INSTALL_PATH/System.map.old;

fi

cat $BOOTIMAGE > $INSTALL_PATH/vmlinuz-$KERNEL_VERSION

cp $MAPFILE $INSTALL_PATH/System.map-$KERNEL_VERSION

ln -fs vmlinuz-$KERNEL_VERSION $INSTALL_PATH/vmlinuz

ln -fs System.map-$KERNEL_VERSION $INSTALL_PATH/System.map

if [ -x /sbin/lilo ]; then /sbin/lilo; else /etc/lilo/install; fi

#------------------- конец скрипта ------------------

Как видите, скрипту требуются некоторые параметры, а я запускал его без аргументов. Однако, поскольку программа rpm уже разместила в /boot файлы vmlinux-2.2.16-1, vmlinuz-2.2.16-1 и System.map-2.2.16-1, а также создала ссылки с именами vmlinuz и System.map, я решил, что осталось только перезапустить lilo. Но прежде чем запускать lilo, я подредактировал файл /etc/lilo.conf, добавив туда секцию с указанием на ядро 2.2.16 (просто скопировал секцию с меткой linux, после чего подправил строки image и label). Причем новую секцию поставил первой. Вот что у меня получилось (добавленные мной строки выделены жирным шрифтом):

#------------------- начало файла /etc/lilo.conf -----------

boot=/dev/hdb1

map=/boot/map

install=/boot/boot.b

prompt

timeout=50

image=/boot/vmlinuz-2.2.16-1

label=linux-2.2.16

root=/dev/hdb1

read-only

image=/boot/vmlinuz-2.2.11-4bc

label=linux

root=/dev/hdb1

read-only

other=/dev/hda1

label=dos

table=/dev/hda

#------------------- конец файла /etc/lilo.conf ------------

Обратите внимание на то, что в данном случае Linux грузится со второго диска, поскольку на первом диске стоит Windows NT, и в качестве загрузчика используется NT Loader.

После этого я запустил команду /sbin/lilo, причем вначале с параметрами -t -v, чтобы посмотреть, что она будет делать, а только потом уже — без параметров, для реального исполнения. Когда команда отработала, я перезагрузился, однако на этапе загрузки система зависла, выведя строку LIL-. Пришлось воспользоваться загрузочной дискетой (заготовленной еще при установке системы) и выполнить команду

[root]# dd if=/dev/hdb1 of=/mnt/hda1/bootsect.lnx bs=512 count=1

Все правильно, команда lilo меняет загрузочный сектор, а я забыл "подсунуть" загрузчику его обновленный вариант.

Еще раз перезагружаюсь, и с радостью вижу сообщение о том, что загрузилось ядро 2.2.16-1.

Если у вас LILO является основным загрузчиком (установлен в MBR первого диска), то последнюю операцию (копирование загрузочного сектора в файл) выполнять, конечно, не нужно.


Предыдущий раздел Оглавление Следующий раздел

Эта статья еще не оценивалась
Вы сможете оценить статью и оставить комментарий, если войдете или зарегистрируетесь.
Только зарегистрированные пользователи могут оценивать и комментировать статьи.

Комментарии отсутствуют