2.6系列のKernelも2.6.7まできたので、そろそろ挑戦してみようかと思いました。
Woodyでは公式には2.6系列はサポートしていません。ここでのメモはWoodyをSargeにアップグレードしてから行いました。
バイナリパッケージの導入
自分でカーネルをビルドしたいところですが、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
コメント