2022年8月、ホームページを全面リニューアルしました! 情報を分かりやすくお伝えできるサイト作りを目指してまいります。

Debian 4.0 etch Kernel Upgradeにトライ!

Debian 4.0 etchのKernelのソースレベルアップグレード方法を説明する。初めての人にはリスクが伴うので良く読んで個人の責任において再構築してほしい。


1. はじめにインストしておく道具

あらかじめ、以下の2つのモジュールをインストしておく。もちろん、既にセットアップされているなら必要なし。

# apt-get update

# apt-get install libncurses5-dev kernel-package bzip2 modutils module-init-tools initramfs-tools

をインストールする。


2.現在のKernelのバージョンとプロセッサータイプやチップセットタイプ、さらにNICの種類をメモする

CPU情報をゲットする。
# more /proc/cpuinfo

processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 7
model name : Pentium III (Katmai)
stepping : 3
cpu MHz : 598.641
cache size : 512 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 2
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 sep mtrr pge mca cmov pat p
se36 mmx fxsr sse up
bogomips : 1198.26
clflush size : 32

現在のKernelのバージョンを表示。あとi586プロセッサであることも解る。
# uname -a
Linux sub2.kozupon.com 2.6.8 #1 Sun Sep 19 09:57:31 JST 2004 i586 unknown

チップセットとマウントされているNICが表示されている。
# lspci
00:00.0 Host bridge: Intel Corp. 430HX – 82439HX TXC [Triton II] (rev 03)
00:07.0 ISA bridge: Intel Corp. 82371SB PIIX3 ISA [Natoma/Triton II] (rev 01)
00:07.1 IDE interface: Intel Corp. 82371SB PIIX3 IDE [Natoma/Triton II]
00:09.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8029(AS)
00:0c.0 VGA compatible controller: Texas Instruments TVP4020 [Permedia 2] (rev 01)

Kernelコンフィグするとき必要になるため、メモしておく。


3.kernel.orgからゲットする

ftp://ftp.kernel.org/pub/ から最新Kernelをゲットする。今回は、 Kernel 2.6.22 (2007年7月現在) をゲットしてきた。

# cd /usr/src

# wget ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.22.tar.bz2

# tar jxvf linux-2.6.22.tar.bz2

ソースファイルが展開される。

# chown -R root:root linux-2.6.22

以下、kernel.orgからゲットしてきたソースで説明する。


4.メニューコンフィグ

シンボルリンク作成
# ln -s linux-2.6.22 linux

メニューコンフィグ
# cd linux

もし、カーネルパッチが有るなら、kernel.orgからダウンロードして、以下の手順パッチを当てる。

# zcat patch-2.6.22.gz | patch -p1

以前のコンフィグ設定の内容を参照する。以前のカーネルのバージョンのコンフィグファイルをコピーして、新カーネルの設定ファイルとして流用する。
# cp /boot/config-2.6.8-2.386 .config

コンフィグの整合性を取る。新機能が追加されている場合は、いくつか質問されるが特別に設定しない限り「リターン」で全てデフォルト設定として答えてかまわない。現在のカーネルと新しいカーネルの設定項目そのものの相違点を見つけて、新しく追加された項目にたいしては、対話的に設定が行える。「リターン」で進むと大文字で表示された値が反映される(つまり、デフォルト値がヒットする)、「n」を入力すると無条件に、その機能は組み込まれない、「y」を入力すると無条件に、その機能が組み込まれる、「m」を入力すると、その機能を動的に取り外しできる。ただし、menuconfigをしないで以前のconfigの内容を100パーセント流用する場合は、CPUタイプを正確に設定しておくこと。
# make oldconfig

kernel config設定の確認を行いたい場合は、これを実行して必要項目の確認を行う。必要なければ、この作業はスキップしてかまわない。
# make menuconfig
コンフィグ用メニューが立ち上がる。
①プロセッサータイプ
②NICドライバ
以上の項目は最低限設定すること。それで設定用のマークは、build inにする。
注:プロセッサータイプは、間違えずに設定しないと動かなくなるので注意すること。
  その他、あきらかに不要だと思われるデバイスは無効に設定すること。


5.ビルドしてパッケージ化

make-kpkg clean
クリーンアップする。
# make-kpkg –initrd –revision=20070720 kernel_image kernel_headers
バイナリを作る。             ↑ 今日の日付などの名前がベストだと思う。

–initrdパラメータを設定することによって、/bootディレクトリへinitrdデバイスイメージを勝手に作ってくれる。etch以前は、デバイスファイルシステムが「devfs」だったので、mkinitrdコマンドでinitrdデバイスブートイメージを作っていたが、etchからは、デバイスファイルシステムが「udev」に変更になっているので、initramfsコマンドでinitrdデバイスブートイメージを作成するようになった。しかし、kernel-imageを作成してから、mkinitramfsコマンドを実行すると起動時にmodules.depのパスが見つからない旨のエラーが出て停止してしまう。あきらかな原因はつかんでないが、予めブートイメージをkernelパッケージ内で作成しておかないと、modules listに何らかの不整合が起きデバイスパスの間違いが起こっているのではないかと予想する。パッケージ内にデバイスイメージを作成することによって、dpkg –installコマンドによる展開時にブートイメージをリンクして、depmodを自動的に発行してくれる。したがって、上記のように–initrdオプションを指定して予めinitrdイメージをパッケージ化することによって旨くいった。

■ 運悪くカーネルの再構築に失敗した場合(以下の作業を行ってからバイナリを作り直す)
# rm -f ../kernel-image-2.6.22_20040920_i386.deb
一度バイナリを削除してから、以下を実行してクリーニングして、もう一度 make-kpkg からやり直す。

# make-kpkg clean


6.パッケージを展開する

# cd ..

# dpkg –install *.deb
カーネルイメージ、カーネルヘッダーを展開する。


7.grubへ追加された設定を確認する

# more /boot/grub/menu.lst

title Debian GNU/Linux, kernel 2.6.22
root (hd0,1)
kernel /boot/vmlinuz-2.6.22 root=/dev/hda2 ro
initrd /boot/initrd.img-2.6.22
boot

title Debian GNU/Linux, kernel 2.6.22 (recovery mode)
root (hd0,1)
kernel /boot/vmlinuz-2.6.22 root=/dev/hda2 ro single
initrd /boot/initrd.img-2.6.22
boot

title Debian GNU/Linux, kernel 2.4.18-bf2.4
root (hd0,1)
kernel /boot/vmlinuz-2.4.18-bf2.4 root=/dev/hda2 ro
boot

title Debian GNU/Linux, kernel 2.4.18-bf2.4 (recovery mode)
root (hd0,1)
kernel /boot/vmlinuz-2.4.18-bf2.4 root=/dev/hda2 ro single
boot

赤文字の部分が追加されていればOK。

注意:
尚、ハードウェアRAIDを使う場合は、ディスクをマウントする前にRAIDコントローラードライバーをロードしておかなければならない、そのため、デバイスドライバーが正しくビルドされていなければ、起動時にrootがマウント出来ずに停止してしまうので注意が必要だ。


8.最終的に運悪くやり直しを強いられた場合

# cd /usr/src
# rm -Rf linux-headers-2.6.22
# rm -f *.deb
一度バイナリを削除してから、以下を実行してクリーニングして、もう一度 make-kpkg からやり直す。

kernelイメージ、bootイメージ、デバイスファイル等の削除
# cd /boot
# rm *2.6.22
# rm -Rf /lib/modules/2.6.22

# cd /usr/src/linux

以降、戻って5項からやり直し。
以上

コメント