[an error occurred while processing this directive]

カーネルの再構築

作業の概要

この作業でやりたいこと、というのはカーネルの再構築、ということになるが、そもそもなぜカーネルを再構築するかというと、今後、このマシンで次のような運用を行うためである。

ということで、新しいカーネルの設定は、以下の条件を備えていなければならない

ということで、早速作業を開始したい

標準のカーネルパッケージを探す

Debian GNU/Linuxの特徴は、すべてのソフトウェアがパッケージと呼ばれる形で提供されることである。で、なんとLinuxカーネル自体も何種類もカーネルパッケージとして用意されているということなので、どんなものがあるのか調べることにした。

dselectによるパッケージのインストール

パッケージ選択ツールに、「dselect」というプログラムがある。rootになって、

    root@host# dselect

でメニュー画面が起動する。

「Select」メニュに入ると、驚くほどのパッケージがリストアップされ、スクロールするだけでも何分もかかるような状態に。さすがにすごい。で、適当に探していると「opt」の「base」セクションに「kernel-image-」で始まるパッケージがいくつもあるのを発見した。

大きく分けて、2.2.20カーネルと2.4.18カーネル、そしてノート用のpcmciaサポートのある、ないで4通りの系統があった。というわけでもちろん2.4.18の、pcmciaサポートなしバージョンの中から、PenII最適化されたものを選んでインストール。dselectでは、+キーを押してパッケージを選択してから、Installメニューでインストールする、という手順になる。

インストール中に、起動FDを作るかどうか、また、liloでMBRを更新するかどうか聞かれる。そのときに、lilo.confを編集するように勧められたので、一回中断して /etc/lilo.conf をエディタで編集しておく。

    image=/vmlinuz
        label=Linux
        read-only
        initrd=/initrd.img  #この行を追加する
    #   restricted
    #   alias=1

再度「Install」するとダウンロード済みのパッケージからカーネルイメージなどがコピーされ、インストール完了。あとは再起動するだけで2.4.18カーネルが起動する(はず)。

カーネルの設定の確認

さて、カーネルの入れ替えが無事に終了したら(うちでは無事に完了した。ちょっと感動)、そのカーネルが最初に挙げた条件を満たしているかどうかを確認してみる。1つでも満たしていない条件があったら別の方法を考えなければ。

というわけで、まずはRAIDサポートである。まずは、モジュールとしてRAIDっぽいのがいないか確認。raidという文字が含まれたモジュールが存在するかどうか確認するには、

    root@host# modprobe -l *raid*

でいい。そしたらいくつか出てきてしまったので確認作業は即終了。あんまり期待していなかったけど、やっぱり自分でraidサポートを組み込んだカーネルを作らないといけないようだ。それにしても、一発でアウトとは…。

やっぱり自分でmake 〜Debian流〜

自分でカーネルを作るといっても、せっかくDebianなんだからDebian風にやってみた。

カーネルソースを準備

ということで結局自分でConfigを作ってカーネルを用意しなければならないということに。まずはカーネルのソースコードを入手しなければならない。普通にFTPして www.kernel.org あたりから取ってきてもいいんだけど、せっかくなのでこれもパッケージから取得することにした。またまた dselect して、kernel-image-2.4.18 を選択。一緒に解凍ツールやカーネルパッケージ作成ツールなどもインストールするように勧められ、もちろん一緒に選択、インストールする。

エラーは出なかったが、カーネルソースのインストールって結局どうなるの?と思い探していたら、/usr/src/ に kernel-source-2.4.18.tar.bz2 というファイルができているのを発見した。これのようだ。

解凍とカーネルオプションの選択は一般ユーザーで行うことにした。一般ユーザーに戻って、

    user@host$ cd /usr/src/
    user@host$ tar jxvf kernel-source-2.4.18.tar.bz2

で解凍できるはずだったのだが、ここではエラーが出た。一般ユーザーは /usr/src/ ディレクトリへの書込権限がないのだ。rootになって解凍するのも嫌だったので調べてみると、このディレクトリの所有者は root:src に設定されている。つまり、わざわざrootにならなくても、ソース管理に使う一般ユーザーをsrcグループに加えておけばいいということのようだ。とはいえ、ユーザー権限を変更するにはroot権限が必要だが。

    root@host# usermod -G src user   userというユーザーをsrcグループに加える

またまた一般ユーザーでログインして(一回ログアウトしないとグループの変更が反映されないらしい)、再度解凍を試みるとうまく解凍できた。

コンフィグとパッケージの作成

早速カーネルオプションを構成する。

    user@host$ cd kernel-source-2.4.18
    user@host$ make menuconfig

テキストのメニューが起動するので、あとは最初の条件に合うようなコンフィグを自分で選ぶ。USBやサウンド、プリンタポートのサポートなどの使用しないであろう機能をことごとく切って、RAID1、Reiserfsのサポートをモジュール化するではなくカーネルに直接組み込む。あと、NetFilter(iptables)関連の機能はすべてモジュール化しておいた。あとはほとんどデフォルトのままっていうかよく覚えてません(ぉ

カーネルオプションを構成したら、普通なら make dep などの手順を踏むことになるが、ここからはDebian流で。この設定でコンパイルされたカーネルパッケージを作成するのだ。

    user@host$ su -  rootになる
    Password:
    root@host# make-kpkg --revision=iserlohn.1.0 kernel-image

revisionには適当な識別子を入れておくと後で管理がしやすいかもしれない(自分はホスト名+バージョンにしてある。実際には、何度かカーネルオプションを調整したので、現在は1.4になっている)。ともあれ、このコマンドを実行すると、勝手にカーネルのコンパイルが始まり、終わったらそのまま自動的にカーネルイメージが作成される。

新生カーネルでの起動

出来上がった.debファイルは他のパッケージと同じようにインストールできるというので驚きだ。rootで、

    root@host# dpkg -i kernel-image-2.4.18_iserlohn.1.0_i386.deb

でOK。かなり感動モノだ。

ところが、このまま再起動すると起動途中にカーネルパニックを起こして起動出来なかった(ぉぃ 仕方がないのでレスキューディスクで起動してみる。何が悪いのか分からなかったので、とりあえずdselectで今まで入っていた2.4.18カーネルイメージをRemoveして、カスタムカーネルを再インストールしてみる。

すると、liloを実行する部分でエラーが発生した。カーネルファイル(/vmlinuz)が見つからないという。見ると、vmlinuzというファイルはあるが、これは実はシンボリックリンクで、そしてリンク先のファイルがなかった。

    とりあえず無効なシンボリックリンクを削除
    root@host# cd /
    root@host# rm vmlinuz
    カスタムカーネルイメージへのシンボリックリンクを作成
    root@host# ln -s /boot/vmlinuz-2.4.8-686 vmlinuz  
    liloを再実行してブートレコードを編集
    root@host# lilo
    今度はエラーが出なかったので再起動
    root@host# shutdown -r now

これでめでたく自分のコンフィグが反映されたカーネルで起動できるようになった。このカーネルの作成目的の、ソフトウェアRAIDの構築などは、また後日。


Last Update: Tuesday, 03-May-2005 21:44:15 JST

Copyright© 1999-2003,Gensui