DebianのKernelのバイナリレベル及びソースレベルアップグレード方法を説明する。
初めての人にはリスクが伴うので良く読んで個人の責任において施行してほしい。
1. はじめにインストしておく道具
あらかじめ、以下の2つのモジュールをインストしておく。もちろん、既にセットアップされているなら必要なし。
# apt-get update
# apt-get install libncurses5-dev
# apt-get install kernel-package
# apt-get install bzip2
# apt-get install modutils
# apt-get install module-init-tools
Debianでは、4.0etch以降デバイスファイルシステムをdevfsからudevへ切り替えたらしい。したがって、
従来のdevfsを使う場合は(次期リリースでは完全にudevへ移行らしいが)、
# apt-get install initrd-tools
udevを使う場合は、
# apt-get install 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.バイナリレベルアップグレード
1)アップグレード出来るkernel-image一覧を表示
# apt-get update
Hit http://ftp.yz.yamagata-u.ac.jp stable/main Packages
Hit http://ftp.yz.yamagata-u.ac.jp stable/main Release
Hit http://ftp.yz.yamagata-u.ac.jp stable/main Sources
Hit http://ftp.yz.yamagata-u.ac.jp stable/main Release
Get:1 http://security.debian.org stable/updates/main Packages [176kB]
Get:2 http://security.debian.org stable/updates/main Release [110B]
Fetched 176kB in 2s (72.0kB/s)
Reading Package Lists… Done
# apt-get install kernel-image
Reading Package Lists… Done
Building Dependency Tree… Done
Package kernel-image is a virtual package provided by:
kernel-image-2.6.8-2-k7-smp 2.6.8-16sarge1
kernel-image-2.6.8-2-k7 2.6.8-16sarge1
kernel-image-2.6.8-2-686-smp 2.6.8-16sarge1
kernel-image-2.6.8-2-686 2.6.8-16sarge1
kernel-image-2.6.8-2-386 2.6.8-16sarge1
kernel-image-2.6.8-11-em64t-p4-smp 2.6.8-16sarge1
kernel-image-2.6.8-11-em64t-p4 2.6.8-16sarge1
kernel-image-2.6.8-11-amd64-k8-smp 2.6.8-16sarge1
kernel-image-2.6.8-11-amd64-k8 2.6.8-16sarge1
kernel-image-2.6.8-11-amd64-generic 2.6.8-16sarge1
kernel-image-2.4.27-speakup 2.4.27-1.1
kernel-image-2.4.27-2-k7-smp 2.4.27-10sarge1
kernel-image-2.4.27-2-k7 2.4.27-10sarge1
kernel-image-2.4.27-2-k6 2.4.27-10sarge1
kernel-image-2.4.27-2-686-smp 2.4.27-10sarge1
kernel-image-2.4.27-2-686 2.4.27-10sarge1
kernel-image-2.4.27-2-586tsc 2.4.27-10sarge1
kernel-image-2.4.27-2-386 2.4.27-10sarge1
You should explicitly select one to install.
E: Package kernel-image has no installation candidate
目的のimageをアップグレードする。
2)目的のkernel-imageをアップグレードする
# apt-get install kernel-image-2.6.8-2-686
これだけでkernelアップグレード完了。
3)アップグレードしたkernelを自動更新で勝手にアップグレードされないようにkernelをロックする
# aptitude hold kernel-image-2.6.8-2-686
これをやっておけば、apt-get upgradeの自動更新でkernelが勝手に更新されるのを防げる。
さらに、上記のロックの解除は、
# aptitude unhold kernel-image-2.6.8-2-686
これで解除される。
4.ソースレベルアップグレード
1)apt-getでソースをゲットする場合
# apt-get install kernel-source
Reading Package Lists… Done
Building Dependency Tree… Done
Package kernel-source is a virtual package provided by:
kernel-source-2.4.14 2.4.14-1
kernel-source-2.4.10 2.4.10-1
kernel-source-2.4.19 2.4.19-4.woody2
kernel-source-2.4.18-hppa 62.3
kernel-source-2.4.18 2.4.18-14.3
kernel-source-2.4.17-ia64 011226.17
kernel-source-2.4.17-hppa 32.4
kernel-source-2.4.17 2.4.17-1woody3
kernel-source-2.4.16 2.4.16-1woody2
kernel-source-2.2.22 2.2.22-1woody1
kernel-source-2.2.20 2.2.20-5woody3
kernel-source-2.2.19 2.2.19.1-4woody1
kernel-source-2.2.10 2.2.10-2
You should explicitly select one to install.
E: Package kernel-source has no installation candidate
アップグレードできるKernelソースが表示される。
# apt-get install kernel-source-2.4.19 2.4.19-4.woody2
アップグレードしたいKernelソースをゲットする。
# cd /usr/src
# tar jxvf kernel-source-2.4.19.tar.bz2
ソースファイルが展開される。3)のメニューコンフィグアーへ。
2)kernel.orgからゲットする場合
ftp://ftp.kernel.org/pub/ から最新Kernelをゲットする。今回は、 Kernel 2.6.8 (2004年9月現在) をゲットしてきた。
# cd /usr/src
# wget ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.8.tar.bz2
# tar jxvf linux-2.6.8.tar.bz2
ソースファイルが展開される。
# chown -R root:root linux-2.6.8
以下、kernel.orgからゲットしてきたソースで説明する。
3)メニューコンフィグ
シンボルリンク作成
# ln -s linux-2.6.8 linux
メニューコンフィグ
# cd linux
もし、カーネルパッチが有るなら、kernel.orgからダウンロードして、以下の手順パッチを当てる。
# zcat patch-2.6.xx.gz | patch -p1
以前のコンフィグ設定の内容を参照する。以前のカーネルのバージョンのコンフィグファイルをコピーして、新カーネルの設定ファイルとして流用する。
# cp /boot/config-2.6.8-2.386 .config
コンフィグの整合性を取る。新機能が追加されている場合は、いくつか質問されるが特別に設定しない限り「リターン」で全てデフォルト設定として答えてかまわない。現在のカーネルと新しいカーネルの設定項目そのものの相違点を見つけて、新しく追加された項目にたいしては、対話的に設定が行える。「リターン」で進むと大文字で表示された値が反映される(つまり、デフォルト値がヒットする)、「n」を入力すると無条件に、その機能は組み込まれない、「y」を入力すると無条件に、その機能が組み込まれる、「m」を入力すると、その機能を動的に取り外しできる。
# make oldconfig
kernel config設定の確認を行いたい場合は、これを実行して必要項目の確認を行う。必要なければ、この作業はスキップしてかまわない。
# make menuconfig
コンフィグ用メニューが立ち上がる。
①プロセッサータイプ
②NICドライバ
以上の項目は最低限設定すること。それで設定用のマークは、build inにする。
注:プロセッサータイプは、間違えずに設定しないと動かなくなるので注意すること。
その他、あきらかに不要だと思われるデバイスは無効に設定すること。
4)コンパイル&ビルド
# make-kpkg clean
クリーンアップする。
# make-kpkg –revision 20040920 kernel-image
バイナリを作る。 ↑ 今日の日付などの名前がベストだと思う。
■ カーネルの再構築に失敗した場合(以下の作業を行ってからバイナリを作り直す)
# rm -f ../kernel-image-2.6.8_20040920_i386.deb
一度バイナリを削除してから、以下を実行してクリーニングして、もう一度 make-kpkg からやり直す。
# make-kpkg clean
5)カーネルイメージを展開する
# cd ..
# dpkg -i kernel-image-2.6.8_20040920_i386.deb
カーネルイメージを展開する。
# cd /usr/src/linux
# make clean
/lib/modules/<カーネルバージョン> ディレクトリへ関連モジュールを入れる。# make modules
# make modules_install
6)ブートイメージを作る(kernelをソースからコンパイルした場合のみ)
initrdイメージを別途作る。これを作らないとIDEとかSCSI等の各種デバイスモジュールがロード出来ない。
devfsファイルシステムを使う場合は、
# mkinitrd -o /boot/initrd.img-2.6.8-2-686
udevファイルシステムを使う場合は、
# mkinitramfs -o /boot/initrd.img-2.6.8-2-686
7)ブートローダを更新する
① LILOの場合
# lilo -v
liloを設定する。新しいイメージがlinuxになって、現在のイメージがlinux.oldとなる。
注:lilo -vをやらないと新しいカーネルイメージの設定ががブートローダに反映されないので注意すること。
② GRUBの場合
# vi /boot/grub/menu.lst
title Debian GNU/Linux, kernel 2.6.8-2-686
root (hd0,1)
kernel /boot/vmlinuz-2.6.8-2-686 root=/dev/hda2 ro
initrd /boot/initrd.img-2.6.8-2-686
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
赤文字の部分を追加する。
以上
コメント