はじめに
衝撃的なニュースをお知らせしましょう。近年Linuxは目覚しい普及を遂げていますが、そのなかで、これまで一度もカーネルをコンパイルしたことがないという新しい世代のLinuxユーザーが出現しているのです。この嘆かわしい事態を一体どう説明すればいいのでしょうか? 原因はおそらく、ディストリビューションメンテナーがこの作業を完璧に済ませてしまい、個々のユーザーが行う必要がなくなっているからだと思われます。あるいは、自分でもできるということをユーザーが知らないだけかもしれません。原因の究明はさておき、今回の記事ではLinuxカーネルをカスタマイズするさまざまな方法の一部を取り上げ、紹介していきます。まず、以前から一般的に使用されている信頼できる方法について説明し、その後でFedoraおよびDebianでカーネルをカスタマイズする方法を紹介します。
カスタムカーネルの構築はそれほど難しい作業ではありませんが、複雑で時間がかかります。最後まで終えたあかつきには、非ブートカーネルのコンパイルをやり遂げたと言って大きな顔をしてもいいでしょう。ありがたいのは、システムを壊すことを恐れずに何回でも好きなだけやり直しができる点です。どのLinuxシステムでも複数のカーネルを持つことができ、どのカーネルを使ってブートするかを選択できます。したがって、古いカーネルを削除するのは、新しいカーネルが正しく動作することを確認してからにしてください。明示的に設定しなければ新しいカーネルにブートすることはないので、知らないうちに新しいカーネルが使われてしまうおそれはありません。したがって、新しいカーネルをいくつでも好きなだけビルドし、テストすることができます。
作業用に数ギガバイトのディスク空き容量を確保してください。これはカーネルソースを格納したりツールや他のユーティリティをビルドしたりするのに必要になります。その他に、ビルド中に作成される中間ファイル用に500メガバイト、また、新しいカーネルやカーネルモジュールを保存する場所も必要です。
ハードウェア情報が必要になる場合があるので、lshwコマンドとlspciコマンドをインストールします。まず、update-pciidsコマンドを実行し、情報を最新の状態にします。cat /proc/cpuinfo
を実行すると、CPUの仕様が表示されます。
カーネルを自分でコンパイルする理由
なぜ、こんな作業が必要なのでしょうか? 理由はいくつか考えられます。たとえば、カーネルを自分でコンパイルすることにより、追加の機能を利用したり、不必要な機能を削除したり、パフォーマンスを向上させたりできます。さらに、新しいパッチのテストに役立つから、あるいは単にその方法が知りたいだけ、という理由も考えられます。特に、最後に挙げた2つの理由は大切です。私は、どんな人にも常に好奇心と向上心を持っていてほしいと思っています。
広く使用されている汎用Linuxのほとんどは、すべての人を満足させるために、ありとあらゆるハードウェアをサポートするカーネルとモジュールを備えています。その結果、カーネルとモジュールが200~300メガバイトにもなり、システムが肥大します。これは、セキュリティ上の懸念をもたらしますし、中にはバカげてるとしか言いようがない機能もあります。たとえば、赤外線、アマチュア無線、そしてデスクトップコンピュータには無用の数々のラップトップ用機能などです(この3つは、私が個人的に考える三大役立たず機能です)。そもそも、なぜこのような「贅肉」がついているのでしょうか? 自分のCPU用にカスタマイズされ、必要なハードウェアや機能だけをサポートするカーネルをビルドするのは楽しい作業ですし、それによってパフォーマンスの向上も期待できます。
一般的な方法でカーネルをカスタマイズする
最新のカーネルとパッチはKernel.orgから取得できます。ここには、修正されていないオリジナルのカーネルがあるので、「バニラカーネル」と呼ばれます(「プレーンなバニラ味のカーネル」の意味)。次に、ビルド環境を用意する必要があります。この作業は、FedoraとDebianを使用すれば簡単です。Fedoraでは、Development Toolsパッケージグループをインストールします。
# yum groupinstall 'Development Tools'
QTも必要です。
# yum install qt-devel
Debianでは、次のコマンドを使用します。
# aptitude install build-essential libqt3-mt-dev qt3-dev-tools
解凍されていないソースtarballにあるDocumentation/Changesファイルには、ビルド環境に必要なアプリケーションの基本リストがあります。実際、カーネルのtarballのドキュメントには大量の情報が格納されているので、ぜひ時間をかけて調べてみてください。
新しくダウンロードし解凍したカーネルソースは、/usr/srcに置かないでください。この/usr/srcに置くよう指示する人もいますが、その指示に耳を傾けてはいけません。ソースツリーを保存するディレクトリをホームディレクトリに作成します。カーネルのREADMEファイルでは、次のように説明しています。
「...カーネルのtarballを、自分が権限を持つディレクトリ(たとえば自分のホームディレクトリ)に置いてください.../usr/src/linux領域は使用しないでください! この領域には、ライブラリヘッダーファイルによって使われる一連のカーネルヘッダー(大抵は不完全)があります。これらはライブラリと一致する必要があり、“本日のカーネル”が何であっても混乱してはなりません。」
私の場合は、「/home/carla/kernel」を使用します。