FreeBSD ハンドブック
Prev | Chapter 8. FreeBSD カーネルのコンフィグレーション | Next

# 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 にしたがってください。

- 4.0 より前の FreeBSD を使っていて、 `make world` を行って FreeBSD 4.0 以上にアップグレードしないなら、 手順 1 にしたがってください。

- (`IPFIREWALL` オプションを追加するなど のように) ソースコードを更新せずに新しいカーネルを構築するな らどちらの手順を用いても構いません。

- `make world` の一環としてカーネルの再構築を行っているなら、 手順 2 にしたがってください。

手順 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` ディレクトリにデバイスノードを追加しなければならないかもしれません。 詳しくは、この章で後ほど出てくる デバイスノードの作成 をご覧ください。

Prev | Home | Next
なぜカスタムカーネルを作るか? | Up | コンフィグレーション ファイル