デベロッパー

デベロッパー

Linux:DebianとFedoraを使用したカーネルカスタマイズ

Carla Schroder
2007年12月25日 / 10:00
 
 

はじめに

 カスタムLinuxカーネルを構築する一般的な方法については、以前の記事で一通り説明しました。今回は、Debianの便利なショートカットと、Fedoraの独特のカスタムカーネル構築方法を紹介します。

Debianでカスタムカーネルを構築する

 Debianのカーネルソースパッケージの名前は「linux-source-<バージョン名>」です。現在リリースされている公式のソースパッケージは、linux-source-2.6.18(安定版)、linux-source-2.6.21(テスト版、不安定)、linux-source-2.6.22(実験版、不安定)の3つです。

 バイナリのDebianカーネルソースパッケージの名前は「linux-image-<バージョン名>」です。以前は「kernel-source」や「kernel-image」というパッケージでしたが、バージョン2.6.12以降はこの形式が使われています。この新しい名前付け規則によって、Debianは他のカーネルにも門戸を開くことになりました。実際にどのようなカーネルが使われるのか現時点ではわかりませんが、とにかく受け入れの準備はできているということです。

 カーネルのカスタマイズを行うには、まず、ビルド環境、カーネルソース、さらにfakerootパッケージをインストールします(詳しくは以前の記事を参照)。

# aptitude install linux-source-2.6.22 kernel-package fakeroot

 これにより、ソースtarballが/usr/src/にダウンロードされます。このままでは都合が悪いので、次のようにしてソースtarballを個人用のカーネル構築ディレクトリに移動してください。

# mv /usr/src/linux-source-2.6.22.tar.bz2 ~/kernel

 個人用カーネル構築ディレクトリでtarballを解凍します。

$ tar zxvf linux-source-2.6.22.tar.bz2

 次に、最上位のソースディレクトリに移動し、新規カーネルの構成を開始します。

$ cd linux-source-2.6.22
$ make mrproper
$ make xconfig

 構成作業を済ませたら、次のコマンドを実行します。

$ make-kpkg clean
$ make-kpkg -rootcmd fakeroot -rev kernel.1 linux_image

 fakerootにより、一般ユーザーとしてカーネルを構築するのに十分なルート特権を取得できます。この方法では、本物のルート特権を必要とするコマンドは実行できませんが、カーネルを構築するにはこれで十分です。この作業を行うと、「linux-image-2.6.22_kernel.1_i686.deb」という名前の.debパッケージが配置されます。もちろん、-revオプションを指定してもかまいません。次に、dpkgを使用して通常どおりの方法でlinux-image-2.6.22_kernel.1_i686.debをインストールします。

# dpkg -i linux-image-2.6.22_kernel.1_i686.deb

 これにより、モジュールがインストールされ、モジュールの依存関係が処理されます。また、ブートメニューのエントリが作成され、カーネルと関連ファイルが/bootディレクトリにコピーされます。リブートすると、ブートメニューから新しいカーネルを選択し、そのカーネルを操作できるようになります。

Fedoraでカスタムカーネルを構築する

 Fedoraでは、バニラカーネルが動作しなくなるくらいまでカーネルのあちこちにパッチを適用します。もちろんお金がかかることはありませんが、時間はそれなりにかかります。本物のFedoraカーネルソースを使用する場合は、ソースRPM(SRPM)の形式になっているので、カーネルを構築し、それをRPMにパッケージする必要があります。まず、カーネルのSRPMをお気に入りのFedoraミラーからフェッチします。

$ wget http://mirrors.kernel.org/fedora/releases/7/Fedora/source/
SRPMS/kernel-2.6.21-1.3194.fc7.src.rpm

 次に、RPMT構築ツールを持っているかどうか、また、前回の記事で用意した標準構築環境が残っているかどうかを確認します。

# yum install rpmdevtools

 その後、ホームディレクトリでビルドツリーを作成します。この作業は必ず自分自身として行ってください。ルートユーザーとして行ってはいけません。

$ fedora-buildrpmtree

 これによりrpmbuildtreeディレクトリが作成されます。このディレクトリにはBUILD、RPMS、SOURCES、SPECS、SRPMSの5つのディレクトリがあります。次に、ソースRPMをインストールします。このソースRPMをインストールすると、新しいrpmbuildtreeディレクトリにファイルが解凍されます。

$ rpm -ivh 2.6.21-1.3194.fc7.src.rpm

 「group kojibuilder does not exist.」という警告が表示されますが、無視してください。

 次に、RPM再構築の%prepステージを実行します。--targetオプションは、使用しているCPUの種類に合わせます。

$ rpmbuild -bp --target=i686 ~/rpmbuild/SPECS/kernel-2.6.spec

 これにより、カーネルtarballが抽出され、すべてのFedoraパッチが適用されます。ここで、新しいビルドツリーのソースディレクトリに移動します。

$ cd ~/rpmbuild/BUILD/kernel-2.6.21/linux-2.6.21-1.3194.i686/

 まず、新しいカーネルを構成します。

$ make mrproper
$ make xconfig

 最後に、すべてをRPMに組み込みます。

$ rpmbuild --target i686 -ba ~/rpmbuild/SPECS/kernel-2.6.spec

 ここでも、--targetオプションはCPUの種類に合わせます。新しいRPMは、~/rpmbuild/RPMS/i686/にあるはずです。新しいkernel.rpmを見つけ、他のRPMと同様にしてインストールします。

# rpm -ivh kernel-2.6.21-1.3194.i686.rpm

 新しいkernel.rpmをインストールすると、ファイルがコピーされます。また、ブートメニューエントリも作成されるので、リブート後は、すぐにブートメニューから新しいカーネルを選択できます。

カーネルオプションについて

 初めてxconfigを開くと、その内容に圧倒されます。現在のLinuxカーネルは非常に大きくなっており、構成にもかなり時間がかかります。この作業の目的は、構成内容を吟味し、不必要なものを取り除き、本当に必要なものだけを採用することなので、腰を落ち着け、少し時間をかけて取り組むことをお勧めします。一度構成を行えば、そのカスタム.configファイルを再利用して、今後のカーネル構築を効率よく進めることができます。新しいカーネルを構築するたびに、そのファイルをソースツリーの最上位レベルのディレクトリにコピーすればいいのです。

 一般的なオプションと必須オプションについては簡単にしか説明しないので、一部の設定についてはご自分で判断してください。xconfigを実行すれば全オプションに関する情報を確認できますし、カーネルソースツリーのDocumentation/ディレクトリには、さまざまな情報がぎっしり詰まっています。

 最初に決めなければならないのは、[Code Maturity Level Options]→[Prompt for development and/or incomplete code/drivers (EXPERIMENTAL)]です。過去の安定したシンプルなカーネルだけが必要な場合、つまり実験的な新機能を使いたくないときは、このオプションは選択しないようにします。新しい実験的機能をテストしたいときは、このオプションを選択します。

 原則として、[Configure standard kernel features (for small systems) (EMBEDDED)]は選択しないでください。ただし、もちろん、カーネル開発者などのように、このオプションが必要であることが確実にわかっていれば、選択してもかまいません。

 [Loadable module support]では、すべてを設定してください。

 [Processor Type and Features]では、パフォーマンスに関する調整を行うことができます。マルチコアまたはマルチプロセッサマシンを実行していない場合は、SMPはオフにします。CPUの種類は適切なものを選択します。さらに、物理RAM容量に対するメモリサポートを選択します。ラップトップコンピュータを実行していない場合は、ラップトップ関係の設定をオフにします。

 [Block layer]では、2テラバイトを超える大きなディスクおよびファイルをサポートできるようにします。

 ラップトップではないシステムについては、[Bus options]でPCMCIA設定をオフにします。

 [Executable File Formats]では、すべてを選択します。

 [Networking]では、Appletalk、Bluetooth、無線、IPXなど、使用しないネットワークプロトコルの選択はすべて解除します。ルータまたはファイアウォール以外のマシンについては、QoSなどのルーティングオプションも削除します。また、Netfilter/iptablesを削除すると、さらにスリム化できます。ただし、本当に不必要なものでない限りは、ネットワークオプションを削除することは避けてください。むやみに削除すると、必要なネットワーク機能が動作しなくなってしまう可能性があります。[IP: kernel level autoconfiguration (IP_PNP)]については、ディスクなしのネットブートを可能にするために有効にしておきます。

 SoekrisやPC Engines WRAPボードなどのルータボードのカーネルを構成している場合は、SATA、SCSI、およびPATAドライブのサポートを削除することを考慮してみてもよいでしょう。これらのドライブをサポートしているルータボードはあまりないからです。

 最後に、ハードウェアとファイルシステムのサポート、暗号化オプション、およびその他のオプションを見直します。暗号化オプションについては、毎日の業務に不可欠なのですべてサポートすることをお勧めします。私ならば、デスクトップコンピュータ上のラップトップ機能、DellやToshibaなど特定のラップトップに関連する機能、および将来的にも絶対に使わないであろう多数のハードウェアドライバを見つけて削除することにかなりの時間を費やすでしょう。

 一般的に、デバッグメッセージの生成に関連する機能はすべてオフにできます。これらは主にカーネルハッカーが必要とする機能であり、その彼らにしても使用しないことがたびたびあります。

参考資料

 カーネルソースに同梱されている豊富なドキュメント類。カーネル開発者からの貴重な情報を入手できます。

  1. Debian Kernel Handbook
  2. KernelNewbies.org
  3. Kernel.org
  4. Compiling a Custom Linux Kernel

著者紹介

Carla Schroder(Carla Schroder)
【関連記事】
Linux:カスタムカーネルでスリム化とパフォーマンス向上を実現
Sun、カーネルレベルで『CIFS』に対応
Apple、旧 OS『Tiger』のアップデートを公開
Linux カーネルサミット2009年は東京で開催!?
Wind River、マドリッドの OsiM で組み込み Linux 次世代版を発表

New Topics

Special Ad

ゆりかごからロケットまで、すべての乗り物をエンジョイ
ゆりかごからロケットまで、すべての乗り物をエンジョイ えん乗り」は、ゆりかごからロケットまで、すべての乗り物をエンジョイする、ニュース、コラム、動画などをお届けします! てんこ盛りをエンジョイするのは こちらから

Hot Topics

IT Job

Interviews / Specials

Popular

Access Ranking

Partner Sites