新しいカーネルをコンパイルしようとする動機はなんでしょう? Debian では、標準で入っているカーネルで多くの機能をサポートしているので、ほとんどその必要はありません。また、Debian は多くの場合、いくつかの代替カーネルを提供しています。ですからおそらく、もっと自分のハードウェアに対応する代わりのカーネルイメージパッケージがあるかどうかをまず確認したいと思うでしょう。しかし、以下のような目的のためには、新しいカーネルをコンパイルすることは有益です。
特殊なハードウェアを使ったり、標準カーネルとハードウェアとの競合を回避するため
(ハイメモリサポートなど) 標準カーネルでサポートされていない機能を利用するため
使わないドライバを取り除くことでカーネルを最適化し、起動にかかる時間を短くするため
モジュール化されたカーネルの代わりに、一体化したカーネルを作成するため
最新のカーネルや開発版のカーネルを使用するため
linux カーネルに関してもっと学ぶため
カーネルのコンパイルを恐がらないでください。楽しく、かつ役に立つ作業です。
Debian 流にカーネルをコンパイルするのに必要なパッケージは、fakeroot
、kernel-package
、linux-source-2.6
、あとは多分すでにインストール済みのパッケージがいくつか、です (完全な一覧については /usr/share/doc/kernel-package/README.gz
をご覧ください)。
この方法はカーネルソースから .deb を作り、また非標準のモジュールがあれば、作成したカーネルに依存した .deb も同時に作ります。これはカーネルイメージの管理には良い方法で、/boot
にカーネル、System.map、ビルドに使った設定ファイルの記録を保存します。
必ずしも「Debian 流」にカーネルをコンパイルする必要は ありません。しかし、カーネルの管理にもパッケージングシステムを用いるほうが、実際に安全で簡単です。実は linux-source-2.6
ではなく、Linus が配付しているカーネルソースをそのまま利用することもできますが、その場合でも kernel-package
を用いてコンパイルしてください。
kernel-package
の利用に必要な文書すべては、/usr/share/doc/kernel-package
ディレクトリにあります。そのため、この節では簡単な解説のみを行います。
以降では、あなたがマシン上で行動する自由があって、ホームディレクトリのどこかにカーネルソースを展開すると仮定します[27]。また、カーネルバージョンが 2.6.32 だと仮定します。カーネルソースを取り出したいディレクトリにいることを確認してから、tar xjf /usr/src/linux-source-2.6.32.tar.bz2
としてソースを展開し、作成された linux-source-2.6.32
ディレクトリに移動してください。
次にカーネルコンパイルの設定を行います。X11 のインストールおよび設定が済んでいて、X11 を実行中の場合は make xconfig
を、そうでない場合は make menuconfig
を実行します (後者では libncurses5-dev
がインストールされている必要があります)。オンラインヘルプを時間をかけて読み、注意深く選択してください。一般的に、迷った場合はそのデバイスドライバ (イーサネットカードや、SCSI コントローラなどの周辺機器を制御するソフトウェア) を入れた方がよいでしょう。なお注意していただきたいのですが、特定のハードウェアに関係のないその他のオプションで、よく理解できないものはデフォルトの値のままにしておいてください。また、「Loadable module support」 にある 「Kernel module loader」 (デフォルトでは選択されていません) は忘れずに選択してください。さもないと、Debian のインストールに問題が生じることもあります。
続いてソースツリーをクリアし、kernel-package
のパラメータをリセットします。これには、make-kpkg clean
を実行してください。
さあ、カーネルをコンパイルしましょう。fakeroot make-kpkg --initrd --revision=custom.1.0 kernel_image
を実行してください。バージョン番号 「1.0」 は自由に変えられます。この番号は、構築したカーネルを後から確認できるようにするためのものだからです。同様に、「custom」 の箇所にもお好みのキーワード (例えばホスト名など) を使うことができます。マシンのパワーにもよりますが、カーネルのコンパイルにはかなり時間がかかります。
一旦コンパイルが完了すれば、他のパッケージと同じように、そのカスタムカーネルをインストールできます。root アカウントで dpkg -i ../linux-image-2.6.32-
を実行してください。subarchitecture
_custom.1.0_i386.debsubarchitecture
は、カーネルのオプションで設定された 「686」 のような 任意のサブアーキテクチャを表しています。また dpkg -i
とすると、カーネルと一緒に役に立つ補助的なファイルもいくつかインストールされます。例えばカーネルの問題をデバッグするのに役立つ System.map
や、現行のカーネルの設定が記録されている /boot/config-2.6.32
などが適切にインストールされます。さらに、新たに作成されたカーネルパッケージは、新しいカーネルを使用するようにブートローダの設定を自動的に更新してくれます。なお、モジュールパッケージを作成した場合、同様にそれらもインストールする必要があるでしょう。
さて、システムを再起動する時がやってきました。これまでの作業の間に何か警告が表示されていたらそれらを注意深く読み、それから shutdown -r now
を実行してください。
Debian カーネルやカーネルのコンパイルに関するより詳しい情報については、Debian Linux Kernel Handbook をご覧ください。kernel-package
に関するより詳しい情報については、/usr/share/doc/kernel-package
にある素晴しいドキュメントをお読みください。