カーネルをアップデート(2)

作成:

カーネルのアップデートに入りますが、 カーネルのアップデートについて、詳しい内容は (Kernel Upgrade/Configure Guide for Vine)を参照してください。

RPM(RedHat Package Manager)でカーネルをインストール

カーネルのアップデートでは、安全のため不必要なサービスの起動していないシングルユーザーモードに移って作業します。

# init S
bash# cd /root/updates
bash# rpm -ivh kernel-2.2.19-0vl0.23.i386.rpm
error: failed dependencies:
        mount < 2.10r conflicts with kernel-2.2.19-0vl0.23
        nfs-utils < 0.3.2 conflicts with kernel-2.2.19-0vl0.23
bash# rpm -Uvh mount-2.10r-0.6.xvl0.i386.rpm
mount                  ##################################################
bash# rpm -Uvh nfs-utils-0.3.1-0.6.x.1vl0.i386.rpm
nfs-utils              ##################################################
bash# rpm -ivh kernel-2.2.19-0vl0.23.i386.rpm
kernel                 ##################################################

「init S」でシングルユーザーモードに移行します。「init 1」としても同じです。
シングルユーザーモードに移行すると、プロンプトが「bash#」になり(面倒なので以下ではプロンプトがどちらでも#とします)、 カレントディレクトリは/になっています。
次に、パッケージを保存しておいた/root/updatesに移ってインストールをします。

「rpm」コマンドはrpm形式のパッケージをインストールするコマンドで「i」は新規インストール 「U」アップグレード「v」詳細表示「h」進行状態の表示のオプションです。

カーネルはバージョンアップすると言っても前にあるカーネルを書き換える訳にはいかないので (書き換える場合、何らかの原因でインストールが中断した場合などで一切起動できなくなってしまうため、 複数のカーネルファイルが共存できるようになっている)新規インストール扱いです。

はじめのインストールでは依存性に問題があるとしてはねられました。
そこで、指定されたモジュールをアップデートしておきます。

これで、カーネル本体はインストールできました。
次にこのカーネルに関係のあるファイルをインストールします。

# rpm -Uvh kernel-doc-2.2.19-0vl0.23.i386.rpm
kernel-doc             ##################################################
# rpm -Uvh kernel-headers-2.2.19-0vl0.23.i386.rpm
error: failed dependencies:
        kernel-headers = 2.2.18 is needed by kernel-source-2.2.18-0vl4.2
# rpm -Uvh kernel-source-2.2.19-0vl0.23.i386.rpm
error: failed dependencies:
        kernel-headers = 2.2.19 is needed by kernel-source-2.2.19-0vl0.23
# rpm -ivh kernel-headers-2.2.19-0vl0.23.i386.rpm
kernel-headers         ##################################################
# rpm -Uvh kernel-source-2.2.19-0vl0.23.i386.rpm
kernel-source          ##################################################

kernel-headersとkernel-sourceのインストールでエラーが出てしまいました。
このエラーメッセージを勘違いして解決するのに時間がかかってしまいました。(互いに必要だと言われていると勘違いした)

バージョンナンバーをよく見ると
kernel-headersの2.2.19をインストールしようとして、
kernel-headersの2.2.18はkernel-sourceの2.2.18に必要である。とのエラー。
kernel-sourceの2.2.19をインストールしようとして、
kernel-headersの2.2.19はkernel-sourceの2.2.19に必要である。とのエラー。
つまりkernel-header-2.2.19にアップデートするとき、前のバージョン2.2.18を上書きするので、 それは現在インストールされているkernel-source-2.2.18が必要としているのでできない。 kernel-source-2.2.19にアップデートするにはkernel-header-2.2.19が必要だが、 まだインストールされていないのでできないということだったのだ。
ということは、kernel-headersをアップデートするのではなく新規インストールしてしまえば万事解決。
なんでそんな勘違いするんだって思われるかも知れませんが、 こういう勘違いって一度はまるとなかなか抜け出せないんですよ(p_q)。

まあ、これで必要なアップデートは完了しました。
(他のモジュールも更新情報を元にアップデートしておきましょう。 ひたすら長くなるのでそれについては触れないでおきます)

LILO(Linux Loader)の設定

さて、これだけでは再起動してもこれまでのカーネルが読み出されるだけなので、 新しいカーネルを読み出すようにLILOを設定しましょう。
インストールした後のLILOはだいたい以下のようになっています。

boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
message=/boot/message
append="apm=on"
linear
default=linux

image=/boot/vmlinuz-2.2.18-0vl4.2
        label=linux
        read-only
        root=/dev/hda1
        append="ide0=0xd000,0xd402 ide1=0xd800,0xdc02"

さて、これを書き換えて新しいカーネルを読み出すようにするのですが、 新しいカーネルで起動できなかったときのため、古いほうのカーネルでも起動できるようにしておきます。
ついでにLILOのオプションlinearをlba32に書き換えます。 まあ、どっちでもいいんですが何となく気持ちの問題です(排他的な指定なので両方同時には指定できない)
あと、見て分かるように起動するカーネルに渡すオプションはappend=""という形で記述します。必要に応じて書き加えてください。

boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
message=/boot/message
append="apm=on"
lba32
default=linux

image=/boot/vmlinuz-2.2.19-0vl0.23
        label=linux
        read-only
        root=/dev/hda1
        append="ide0=0xd000,0xd402 ide1=0xd800,0xdc02"

image=/boot/vmlinuz-2.2.18-0vl4.2
        label=old
        read-only
        root=/dev/hda1
        append="ide0=0xd000,0xd402 ide1=0xd800,0xdc02"

黄色い文字のところが書き換えもしくは書き加えた部分です。
imageから後の部分をコピーしてカーネルイメージファイル名の部分を書き換えます。
また古い方のカーネルを起動するラベルは適当にold等としておきます。
これでrootでliloコマンドを実行します。

# lilo
Added linux *
Added old

このようなメッセージが出れば成功です。
エラーが出た場合lilo.confの設定を見直してください。
カーネルイメージのファイル名が長く複雑なので間違えやすいので気をつけてください。 l(エル)と1(いち)のように見間違えやすい文字は慎重に確認してください。
このファイルは実際に/boot以下に入っているので確認してみてください。

確認

さて再起動して見ましょう。再起動はrootで

# shutdown -r now

または

# reboot

です。

Vine Linux 2.1.5 (Calon-Segur)
Kernel 2.2.19-0vl0.23 on an i586

localhost login:

となれば成功です。
もし、うまく起動できなかった場合はoldの方で起動してインストール作業をやり直したりしてください。

では、肝心のHDDのパフォーマンスはどうなったでしょう?

# hdparm -t /dev/hda

/dev/hda:
 Timing buffered disk reads:  64 MB in  2.77 seconds = 23.10 MB/sec

成功です。ちゃんとDMA転送ができているようです。