いよいよ実際にカーネル RPM と関連するパッケージのアップグレード を行う用意が整いました。以下現れる全てのコマンドは、root で ログインして実行する必要があります。
まず、カーネル以外のパッケージをアップグレードします。リリース 5.2 のシステムでは、大体次のようにタイプすることになります。
rpm -Uvh mkinitrd*rpm SysVinit*rpm initscripts*rpm
注意:開発作業をするのでなければ、このパッケージを インストール、アップグレードする必要はありません。
次に kernel-headers および kernel-source パッケージを アップグレードします。これらのパッケージは多くのディスク容量を 消費するため、頻繁にカーネルを改造する人でなければ、ソースを いくつも用意しておく必要はおそらくないでしょう。
# rpm -Uvh kernel-headers-2.0.36-1.i386.rpm kernel-source-2.0.36-1.i386.rpm
kernel-headers ##################################################
kernel-source ##################################################
kernel-headers ファイルをアップグレードする際にエラーが発生する 場合があります。これは削除しようとするディレクトリが見つからない 場合に生じますが、その他の作業は問題なく進むはずです。
RPM を操作する作業の最後は、新しいカーネルのインストールです。 ここでは安全を考え、アップグレードではなくインストールします。 古いカーネルやモジュールを削除せずに残しておくことで、必要な 時に古いバージョンで起動できるようにしておくことができます。 再び私の 5.2 マシンを例にすると、
# rpm -ivh kernel-2.0.36-1.i386.rpm kernel-ibcs-2.0.36-1.i386.rpm kernel-pcmcia-cs-2.0.36-1.i386.rpm
kernel ##################################################
kernel-ibcs ##################################################
kernel-pcmcia-cs ##################################################
kernel-pcmcia パッケージをインストールする時、
以前の物と新しい物が衝突することが分かります。このエラーを
回避するには、強制的にインストールを実行するか、この
パッケージをアップグレードします。(注意: この
パッケージをアップグレードすると、以前のカーネルで PCMCIA
を使用することができません。)
# rpm -ivh --force kernel-pcmcia-cs-2.0.36-1.i386.rpm
kernel-pcmcia-cs ##################################################
アップグレードの最後の手順は、自分のマシンに合わせた起動用 RAM
ディスクを作成し、LILO を操作して新しいカーネルで起動するように
することです。ここでは、/etc/lilo.confの編集が必要に
なります。
起動用 RAM ディスクの目的は、モジュール化されたカーネルが モジュールの格納されているデバイスにアクセスする前に モジュールを使用できるようにすることです。このようにして、 ドライバが格納されているハードウェアと通信するためにその ドライバ自身が必要になるという「ニワトリと卵」の問題を解決 することができます。この問題は普通 SCSI コントローラを搭載した システムで生じます。
起動用 RAM ディスクを作成するには、/boot ディレクトリに
あるカーネルの名前を調べて、mkinitrd コマンドを実行
します。
どのカーネルに対応した起動用 RAM ディスクを作成するのか確かめる
ために、/boot ディレクトリの一覧を見て、どのカーネルが
インストールされたのか調べます。Red Hat のカーネル RPM を
インストールすると、/boot/vmlinuz からインストール
したカーネルへのシンボリックリンクが作成されるはずです。
# ls -l /boot/vmlinuz*
lrwxrwxrwx 1 root root 16 Dec 2 18:31 /boot/vmlinuz -> vmlinuz-2.0.36-1
-rw-r--r-- 1 root root 454325 Oct 13 22:41 /boot/vmlinuz-2.0.36-0.7
-rw-r--r-- 1 root root 454349 Nov 17 13:11 /boot/vmlinuz-2.0.36-1
上記の例では、インストールされたカーネルが
/boot/vmlinuz-2.0.36-1 であることが分かります。この
情報を mkinitrd コマンドに渡します。
# mkinitrd /boot/initrd-2.0.36.img 2.0.36-1
# ls -l /boot/initrd-2.0.36*
-rw-r--r-- 1 root root 210885 Nov 20 09:57 /boot/initrd-2.0.36-0.7.img
-rw-r--r-- 1 root root 212043 Dec 2 18:47 /boot/initrd-2.0.36.img
これで /boot/initrd-2.0.36.img という名前の起動用 RAM
ディスクを作成することができました。次に LILO ファイルの編集に
進みます。
マシンを再起動する前に行う最後の手順は、LILO を編集して新しい カーネルのイメージを見つけられるようにすることです。これは、 以下の雛型に合わせて項目を追加するだけの単純な作業です。
image=/boot/vmlinuz-<kernel version goes here>
image=/boot/vmlinuz-<カーネルのバージョンを書きます>
label=linux-test
root=<ルートパーティション (/) を書きます>
initrd=/boot/initrd-<カーネルのバージョンを書きます>
read-only
私が例に使用しているリリース 5.2 のマシンでは、
/etc/lilo.conf を次のように変更しました。
# cat /etc/lilo.conf
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
image=/boot/vmlinuz-2.0.36-1
label=linux
root=/dev/hda9
initrd=/boot/initrd-2.0.36.img
read-only
image=/boot/vmlinuz-2.0.36-0.7
label=linux.old
root=/dev/hda9
initrd=/boot/initrd-2.0.36-0.7.img
read-only
other=/dev/hda1
label=dos
table=/dev/hda
ここで行ったことは、私がインストールした新しいカーネルをデフォルト
で起動するカーネルとしたこと、そして以前のカーネルをブートする
ためのオプションの名前を linux.old に変更したことです。
私のシステムではルートパーティションは /dev/hda9 です
が、あなたのマシンでは異なっている可能性が高いでしょう。
最後に、lilo コマンドを実行して今の変更を LILO が
インストールされているブートセクタに書き込む必要があります。
# lilo -v
LILO version 20, Copyright 1992-1997 Werner Almesberger
Reading boot sector from /dev/hda
Merging with /boot/boot.b
Boot image: /boot/vmlinuz-2.0.36-1
Mapping RAM disk /boot/initrd-2.0.36.img
Added linux *
Boot image: /boot/vmlinuz-2.0.36-0.7
Mapping RAM disk /boot/initrd-2.0.36-0.7.img
Added linux.old
Boot other: /dev/hda1, on /dev/hda, loader /boot/chain.b
Added dos
/boot/boot.0300 exists - no backup copy made.
Writing boot sector.
これで、shutdown -r now コマンドを使ってマシンを再起動する
準備が完了しました。再起動すると新しいカーネルが動き出すはずです。
忘れずに救助フロッピーをドライブから抜いておきましょう。
(私は本稿時にうっかり忘れてしまいました。)