9.5. カスタムカーネルの構築とインストール

注意: カーネルを構築するには、FreeBSD のすべてのソースファイルが必要です。

まず、 カーネル再構築に必要なディレクトリをざっと見てみましょう。 ここではディレクトリはすべて /usr/src/sys 以下の相対位置で示します。 また、パス名 /sys からもアクセス可能です。 ここには、カーネルの各部分を構成するサブディレクトリがいくつもあります。 しかし、私たちの目的で最も重要なのは arch/conf です。 ここで、あなたのシステムに合わせてカーネルコンフィグレーションを編集します。 それから compileディレクトリ、 ここはカーネルが作られる場所です。 arch は、i386, amd64, ia64, powerpc, sparc64 または pc98 (日本で普及している PC のための開発ブランチ) のいずれかを表します。 各アーキテクチャのディレクトリ内部にあるファイルはすべてそのアーキテクチャでのみ使用されます。 残りのコードは、アーキテクチャに依存しない、 FreeBSD が移植されるすべてのプラットフォームで共有されるコードです。 サポートされているデバイス、ファイルシステム、オプションが、 それぞれのサブディレクトリに分かれている、 という論理的な構成に注意してください。

この章で示されるコマンドの例は、 i386 アーキテクチャを使用していることを仮定しています。 他のアーキテクチャを使用しているのであれば、 使用しているアーキテクチャに適したパス名に変更してください。

注意: もし、あなたのシステムに /usr/src/ ディレクトリが存在しない (または、空である) のであれば、 カーネルのソースがインストールされていません。 すべてのソースツリーをインストールするもっとも簡単な方法は、項18.6 で説明した csup(1) を用いる方法です。 以下のように、/usr/src/sys/ へのシンボリックリンクも作成してください。

# ln -s /usr/src/sys /sys

つぎに、 arch/conf に移動して、 GENERIC コンフィグレーションファイルをカーネルに与えたい名前にコピーしてください。 たとえば次のようにします。

# cd /usr/src/sys/i386/conf
# cp GENERIC MYKERNEL

慣習として、この名前はすべて大文字でつづられます。もし、 いくつかの異なるハードウェアの FreeBSD マシンを扱うなら、 この名前にホスト名を含めるとよいでしょう。ここでは、例として MYKERNEL と呼ぶことにします。

ティップ: カーネルコンフィグレーションファイルを、直に /usr/src の下に置くのはよい考えとはいえません。 なにか問題が起きたときに、 /usr/src を消してやり直したいと思うかもしれません。 その後で、あなたがカスタマイズしたカーネルコンフィグレーションファイルを消してしまったことに気づくのに時間はかからないでしょう。 また、GENERIC ファイルを直接編集しないでください。 なぜなら、編集後に ソースツリーをアップデート すると、ファイルが上書きされ、変更点が失われてしまいます。

カーネルコンフィグレーションファイルは他の場所において、 i386 ディレクトリにシンボリックリンクを張る方がよいでしょう。

たとえば、次のようにします。

# cd /usr/src/sys/i386/conf
# mkdir /root/kernels
# cp GENERIC /root/kernels/MYKERNEL
# ln -s /root/kernels/MYKERNEL

では、MYKERNEL をあなたの好きなエディタで編集してください。もし、 システムをインストールしたばかりならば、利用できるエディタは vi だけかもしれません。ここでは使い方の説明はしませんが、 参考図書 にあるような多くの本で詳しく説明 されていますので、 そちらを参照してください。FreeBSD にはより簡単なエディタとして ee があります。初心者の方であればこちらをエディタに選ぶとよいでしょう。 まずファイルの最初の方のコメント行を編集し、 あなたのコンフィグレーションに合せて変更した点などを記述して GENERIC と区別がつくようにしておきましょう。

もし SunOS™ や他の BSD オペレーティングシステムでカーネルの再構築をしたことがあれば、 このファイルはとても親しみやすいでしょう。しかし、DOS のようなその他の オペレーティングシステムしか知らない人から見れば、 GENERIC コンフィグレーションファイルはとてもなじみにくいものかもしれません。 そのような場合は、 コンフィグレーションファイル の節をゆっくりと注意深く読んでください。

注意: FreeBSD プロジェクトの最新のソースファイルと、あなたのソースツリーを同期させている 場合、アップデートを行う際には、必ず /usr/src/UPDATING ファイルをチェックしてください。 このファイルには、 アップデートされたソースコードに関する重要な問題や特別に注意すべき点がすべて書かれています。 /usr/src/UPDATING は常にあなたの FreeBSD のソースと同期しているので、 ハンドブックの記述よりも内容が新しいことがあります。

さあ、カーネルのソースコードをコンパイルしましょう。

カーネルの構築

注意: カーネルを構築するには、FreeBSD のすべてのソースファイルが必要です。

  1. /usr/src ディレクトリに移動します。

    # cd /usr/src
    
  2. カーネルをコンパイルします。

    # make buildkernel KERNCONF=MYKERNEL
    
  3. 新しいカーネルをインストールします。

    # make installkernel KERNCONF=MYKERNEL
    

ティップ: デフォルトでは、カスタムカーネルを構築すると すべて のカーネルモジュールが同時に構築されます。 カーネルのアップデートをより早く行いたい、または、 カスタムモジュールのみを構築したいといった場合には、 カーネルの構築を開始する前に、以下のように /etc/make.conf を編集してください。

MODULES_OVERRIDE = linux acpi sound/sound sound/driver/ds1 ntfs

この変数は、すべてのモジュールのかわりに構築するモジュールを指定します。

WITHOUT_MODULES = linux acpi sound ntfs

この変数は、構築を行わないトップレベルのモジュールを指定します。 カーネルの構築のプロセスに関する、他の有益な変数については、 make.conf(5) を参照してください。

新しいカーネルは /boot/kernel ディレクトリに /boot/kernel/kernel という名前でコピーされ、 今までのカーネルは /boot/kernel.old/kernel という名前へ変更されます。 では、新しいカーネルを使うために、システムをシャットダウンして再起動してください。 うまく行かない場合は、この章の終りの 問題が起きた場合には を参照してください。有用な情報があるかもしれません。この章の新しいカーネルが 起動しない 場合のリカバリの方法を注意深く読んでおいてください。

注意: ブートローダ (loader(8)) や設定などのブートプロセスに関係する他のファイルは、 /boot に置かれます。 サードパーティ製やカスタムモジュールを /boot/kernel に置くこともできますが、 コンパイルしたカーネルとモジュールを同期しておく必要があります。 コンパイルしたカーネルとモジュールが対応しない場合には、 システムが不安定になったり、正常に動作しない可能性があります。

本文書、および他の文書は ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/ からダウンロードできます。

FreeBSD に関する質問がある場合には、ドキュメント を読んだ上で <[email protected]> まで (英語で) 連絡してください。
本文書に関する質問については、<[email protected]> まで電子メールを (英語で) 送ってください。