Debian流Linuxカーネル構築法


なんかけっこう質問されることが多いので、ここに書き留めておきます。

確認

まずは
$ id
と、コマンドを打ち込みましょう。自分の所属してるグループが表示されます。そのなかにsrcというグループがなければ、rootになって/etc/groupのsrcの行に、自分のログインネームを追加しておきましょう。
$ cat /etc/group | grep src
src:x:40:koshian,mitsuka
こんなふうに自分のログインネームがあれば大丈夫です。
無い場合は追加した後、ログインしなおしてください。ログインしなおさないですむ方法もあったような気がするのですが、忘れました(笑)

準備

次にこんなコマンドを打ち込んで、カーネルソースを探しましょう。
$ apt-cache search kernel-source-.\..\..
そうすると、環境によって違うけれども、現在ゲット出来るカーネルソースの一覧が出ます。
kernel-source-2.2.19 - Linux kernel source for version 2.2.19
kernel-source-2.4.8 - Linux kernel source for version 2.4.8
kernel-source-2.4.9 - Linux kernel source for version 2.4.9
kernel-source-2.1.57 - Linux kernel source.
うちの環境ではこんな感じ。一番新しいのは2.4.9ですな。それでは、毎度おなじみ
$ apt-get install kernel-source-2.4.9
で、カーネルソースをインストールしましょう。
もし、kernel-packageとfakerootが入ってないなら、それも一緒に入れておきましょう。この二つは必須になってないので自動では入らないのですが、無いと困ります(笑)
インストールが終ると、/usr/srcにkernel-source-x.x.x.tar.bz2という名前のファイルができてるはずです。x.x.xは先ほどapt-getしたカーネルソースのバージョンが入ります。
$ cd /usr/src
と、ディレクトリを移動し、
$ tar xjfv kernel-source-x.x.x.tar.bz2
とやって、カーネルソースを展開しましょう。xjfvは、xが展開する、jがbzip2を通す、vは展開するファイルネームを表示する、という意味です。fは良くわかりません(笑) ファイルを指定するというような意味だったと思うのですが、他にも意味があるようです。
jの「bzip2を通す」ですが、古いtarだと、Iのこともあります。BSD tarだとyだったりなんかして、けっこうややこしいです。
$ tar --help | grep bzip2
ってな感じで確認しましょう。
そしたら次は、
$ cd kernel-source-x.x.x
とやって展開されたディレクトリに移動し、
$ make menuconfig
と、入力しましょう。これでカーネルの設定画面が立ち上がります。
menuconfig以外にも、xconfigやconfigなどの引数を指定することも出来ますが、使いにくいのであんまりおすすめはしません。
menuconfigの画面が起動しないことがありますが、これはターミナル関係のパッケージが足りないからです。たぶん、なんのファイルが無いぞとか怒られると思いますので、auto-aptやdebian便利ワザ集ファイルXXXがどこにあるか知りたいの方法を使って調べてみて下さい。

設定

無事にmenuconfigが起動したら、いよいよ設定です。ハードウェアに合わせて必要なものを入れ、不必要なものを削りましょう。
どれが必要でどれがいらないものかを判別するのは、けっこう難しいかもしれません。でも、だいたい見ればわかりますし、わからないときはhelp画面を見ると書いてありますので、読みましょう。
実際に各項目を解説しようかとも思ったのですが、まだ良くわからない部分が多いのと手間暇かかり過ぎるのとで死ねるので、今回はかんべんして下さい(笑)

コンパイルとパッケージ化

設定が終ったら、コンパイルです。make depしろとか英語でメッセージが出てきますが、(たぶん)無視していいです。debian流にやるので関係ない(はず)ですから。
実際の作業はmake-kpkgというperlスクリプトが自動でやってくれます。コンパイルからパッケージ化まで完全自動です。だから難しいことは考えなくて大丈夫ですんで、
$ make-kpkg clean
とやって、make-kpkgを初期化し、
$ fakeroot make-kpkg --revision=custom.0.1 kernel_image
とやってコンパイルを実行します。よくわからないのですが、fakerootを使わないと一般ユーザーではコンパイルできないようです。custom.0.1の部分は、自分の好きなように書き換えて下さい。これはファイルネームなどに使われる情報です。hostnameと何個目に作ったカーネルかで決めるのが、あとでわかりやすいのでいいと思います。
また、モジュールのパッケージが必要になることもあるでしょう。pcmciaモジュールや、alsaモジュールのパッケージを作る時は、それぞれのソースをapt-getして、展開しておきます。aptで入れれば/usr/srcにtarballがあるはずですので、/usr/srcに移動してから展開して下さい。すると/usr/src/module以下に勝手に展開されます。
pcmciaやalsaのソースは、tar.bz2ではなくtar.gzになってるかもしれません。その場合はbzip2を通すオプションの代わりにgzipを通すオプションを入れれば展開できます。
$ tar xzfv alsa-driver.tar.gz
なんてふうにやるわけです。jがzになるだけですね。
そして、カーネルソースを展開したディレクトリで、
$ fakeroot make-kpkg --revision=custom.0.1 modules_image
とやれば、/usr/src/module以下に展開されてるソースをコンパイルし、パッケージ化してくれます。もちろんめんどくさいときは、
$ fakeroot make-kpkg --revision=custom.0.1 kernel_image modules_image
なんてふうに同時にやっちゃうことも出来ます。
コンパイルが終ると、/usr/srcに*.debファイルが出来てます。カーネルの方はkernel-image-x.x.x_custom.0.1_i386.debというような名前になってると思います。これをrootになってから、dpkgを使って手動でインストールします。
# dpkg -i /usr/src/kernel-image-x.x.x_custom.0.1_i386.deb
するとliloの設定も一緒に変えてくれますんで、リブートするだけでもう新しいカーネルで動きはじめます。万が一起動しなかった場合は、liloのプロンプトでaltキーを押せば、古いバージョンのカーネルで起動できます。
モジュールのパッケージも同様に/usr/srcに出来上がってるはずですので、dpkg -iで同じようにインストールして下さい。

終りに

このサイトのドキュメントはだいたい"だ"とか"である"調なんですが、このドキュメントだけは"ですます"調で書かれてます。これは意図したものではなく、ふと気づいたらそうなっていました(笑)
たぶん他のドキュメントが自分のための設定メモであるのに対し、このドキュメントは聞かれたら見せようと思って書いた、人に見せるためのドキュメントだからでしょう。なのであまり気にしないで下さい(笑)
戻る
Back to HOME