(キーワード: Debian)
バイナリパッケージの導入
自分でカーネルをビルドしたいところですが、 kernel-image以外にも様々なパッケージが必要になります。 まずは、とりあえずDebianで用意されているバイナリパッケージを入れましょう。 私のマシンのCPUはAthlonなのでkernel-image-2.6.6-1-k7パッケージを利用します。 Pentium系の人はkernel-image-2.6.6-1-686パッケージを利用するようです。
# apt-get update # apt-get install kernel-image-2.6.6-1-k7
2.6系列のパッケージから、起動時にRAM Disk Image(initrd)を利用するようで、 ブートローダの起動パラメータに「initrd=/initrd.img」を付け加えるように警告が出ます。 また、起動パラメータを追加したら/etc/kernel-img.confに、 「do_initrd = Yes」を追加するように言われます。 このメッセージを確認したら「Do you want to stop now?」に「N」と応えて、 インストールを続行しましょう。
また、次にinitrd.imgがないと怒られますので 「Do you want me to create a link from .....」に「Y」と応えて シンボリックリンクを作ってもらいます。
さて、無事にパッケージのインストールが完了したら、 忘れずにブートローダの設定を変えます。 私は、ブートローダにGrubを使っているので、 /boot/grub/menu.lstを変更して、「initrd=/initrd.img」を追加したメニュー項目 を作成しました。
timeout = 10 title = Linux (high resolution console [Optimized]) root = (hd0,0) kernel = /vmlinuz root=/dev/hda1 vga=0x317 video=vesa:ywrap,ypan,mtrr title = Linux (high resolution console) root = (hd0,0) kernel = /vmlinuz root=/dev/hda1 vga=0x317 title = Linux root = (hd0,0) kernel = /vmlinuz root=/dev/hda1 title = Linux (with initrd) root = (hd0,0) kernel = /vmlinuz root=/dev/hda1 initrd = /initrd.img title = Linux (Singl User Mode) root = (hd0,0) kernel = /vmlinuz root=/dev/hda1 single title = Linux (Old Version) root = (hd0,0) kernel = /vmlinuz.old root=/dev/hda1
動作確認
さて、バイナリパッケージをインストールして、ブートローダの設定を変更したら リブートして起動することを確認しましょう。 もちろん、ブート時のGrubのメニューでは「Linux (with initrd)」を選びます。
ただ、私のところではいろいろ不具合が出ました。 まずブート中にACPIのところで固まりました。 これは、BIOSでACPIを無効にすることによって回避しました。 次に、コンソールが見えなくなりました。 これはフレームバッファの最適化が悪影響しているみたいなので、 起動時のGrubのメニューでフレームバッファを利用しない設定を選択することで 逃れました。
カーネルのビルド
さてせっかくなので、自分でビルドしましょう。
ソースツリーの取得
2.6.7のカーネルソースを取得します。 私はいつもカーネルの構築は/usr/srcでやってるのでそこに移動してから行います。 サイズは30MB程です。
# cd /usr/src # wget http://ring.nihon-u.ac.jp/pub/linux/kernel.org/kernel/v2.6/linux-2.6.7.tar.bz2
ソースツリーの展開
取得したカーネルソースを展開します。
# tar xfvj linux-2.6.7.tar.bz2
コンフィグレーション
コンフィグレーションします。 なお、私の環境では、最初「make menuconfig」がうまく動かなかったので、 一旦「make oldconfig」で適当にコンフィグレーションすると、 「meke menuconfig」が使えるようになりました。
一応、2.4系列でのコンフィグレーション設定を読み込むことができるので、 用意しておくと良いと思います。
# make menuconfig
はっきり言って設定項目が多すぎて困りました。 とりあえずヘルプをみて「If unsure, say Y」というところは組み込むことにしました。
ビルド
次のように入力して、カーネルの構築を開始します。 XXXXのところはホスト名か何かに置き換えると良いでしょう(kernel-sourceはなくてもかまいません)。 CPUによってはかなり時間がかかりますので気長に待ちましょう。
# make-kpkg --revision=XXXX.1 kernel-image modules-image kernel-headers kernel-source
パッケージのインストール
上記のビルドコマンドでできたパッケージをインストールします。
# dpkg -i kernel-image-2.6.7_XXXX.1_i386.deb # dpkg -i nvidia-kernel-2.6.7_1.0.5336-6+XXXX.1_i386.deb # dpkg -i kernel-source-2.6.7_XXXX.1_all.deb # dpkg -i kernel-headers-2.6.7_XXXX.1_i386.deb
ブートローダの再設定
Grubの設定(/boot/grub/menu.lst)を修正し、 最後の行に「initrd = /initrd.img.old」を追加しておきましょう。 というのも、「/vmlinux.old」は最初にインストールしたバイナリパッケージなので、 起動にinitrd.img.oldが必要となるからです。
再起動
これで再起動すれば自分でカスタマイズしたカーネルで起動するはずです。 うまく動いたら、最初にインストールしたバイナリパッケージはアンインストールしておきましょう。
# dpkg --purge kernel-image-2.6.6-1-k7
Copyright © 2004-2008 scratchpad All rights reserved.