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

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

Note: もし、あなたのシステムに/usr/src/sys 以下のディレクトリがなければ、 カーネルのソースが インストールされていません。 もっとも簡単な方法は (rootで) /stand/sysinstall を用いて以下のようにすることです。 設定 (Configure) を選んでから 配布ファイル (Distribution) を選択し、src の中の sys をインストールしてください。 sysinstall が嫌いで、“公式” FreeBSD CDROM を利用できるなら、 コマンドラインからソースコードをインストールすることもできます。

# mount /cdrom
# mkdir -p /usr/src/sys
# ln -s /usr/src/sys /sys
# cat /cdrom/src/ssys.[a-d]* | tar -xzvf -

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

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

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

Tip: カーネルコンフィグレーションファイルを、直に /usr/src の下に置くのはよい考えとはいえま せん。なにか問題が起きたときに、 /usr/src を消してやり直したいと思うかもし れません。その後で、あなたがカスタマイズしたカーネルコンフィグ レーションファイルを消してしまったことに気づくのに時間はかから ないでしょう。

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

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

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

Note: この作業は root 権限でおこなう必要があります。そうでなければ、 permission denied というエラーが出ます。

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

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

Note: FreeBSD Project の最新のソースファイルと、あなたのソースツリーを同期させている 場合、アップデートを行う際には、必ず /usr/src/UPDATING ファイルをチェックしてください。 このファイルには、FreeBSD をアップデートする際の重要な問題がすべて書かれています。 /usr/src/UPDATING は常にあなたの FreeBSD ソースファイルのバージョンと同期していますので、 ハンドブックの情報よりも正確なものとなっています。

ここで、カーネルのソースコードをコンパイルしなくてはなりませ ん。手順は二つあり、どちらを使うかは、なぜカーネルを再構築するか と、動かしている FreeBSD のバージョンによって決まります。

手順 1: “伝統的な” 方法によるカーネル構築

  1. カーネルソースコードを生成するため、config(8) を実 行します。

    # /usr/sbin/config MYKERNEL
    
  2. カーネルを構築するためのディレクトリに移動します。

    # cd ../../compile/MYKERNEL
    
  3. カーネルをコンパイルします。

    # make depend
    # make
    
  4. 新しいカーネルをインストールします。

    # make install
    

手順 2: “新しい” 方法によるカーネル構築

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

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

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

    # make installkernel KERNCONF=MYKERNEL
    

Note: FreeBSD 4.2 とそれ以前の場合は、 KERNCONF= ではなく KERNEL= としなければなりません。 2001 年 2 月 2 日以降の 4.2-STABLE は KERNCONF= を認識します。

何らかの方法であなたのソースツリーをアップグレードして いない 場合 (CVSup, CTM, anoncvs などを実行していない場合)、 config, make depend, make, make install の手順を実行してください。

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

Note: FreeBSD 4.X 以前のバージョンを使っていて、 (サウンドカードなど) 新しいデバイスを追加した場合は、 使う前に /dev ディレクトリにデバイスノードを追加しなければならないかもしれません。 詳しくは、この章で後ほど出てくる デバイスノードの作成 をご覧ください。