8.6. 問題が起きた場合には

カスタムカーネルを作る場合に起きるトラブルは、 次の 5 種類に分けられます。

config コマンドの失敗

カーネルコンフィグレーションファイルに設定を行なってから config(8) コマンドが失敗したのであれば、 おそらくファイルのどこかに単純な間違いがあります。 さいわい、config(8) はトラブルの起きた行番号を出力しますので vi で素早く見つけることができます。 例えば、次のように出力された場合

config: line 17: syntax error

vi のコマンドモードで 17G とタイプすれば、 問題のところへ飛ぶことができます。 GENERIC カーネルのファイルや、 他のリファレンスと比較して注意深く修正してください。

make コマンドの失敗

make コマンドが失敗した場合には、 カーネル設定で config(8) がとらえられなかったような間違いをしていることが多いようです。 もう一度コンフィグレーションファイルを見直してください。 それでも問題を解決することができなければ、 FreeBSD general questions メーリングリスト へあなたのカーネルコンフィグレーションファイルをつけてメールしてください。 誰かが素早く間違いを見つけてくれるでしょう。

新しいカーネルのインストールの失敗

カーネルが無事コンパイルできたのに、インストールに失敗 (make install または make installkernel に失敗) したら、最初に確認すべきことは、システムがセキュアレベル 1 以上で動いていないかどうかです (init(8) 参照)。 カーネルのインストール時には、カーネルから immutable (変更不可) フラグを外して、 新しい方に変更不可フラグを設定しようとします。セキュアレベル 1 以上では、システム内のどのファイルからも変更不可フラグを外せないため、 カーネルのインストールはセキュアレベル 0 以下で行わなければなりません。

カーネルが起動しない

新しいカーネルが起動しなかったり、 デバイスの認識をしない場合でもあわてないでください! さいわい、FreeBSD には利用できないカーネルから復帰する洗練されたメカニズムがあります。 それは、FreeBSD のブートローダで起動したいカーネルを選択するだけです。 システムが 10 からカウントダウンしている時に、この機能が使えます。 Enter キー以外の任意のキーを押して、 unload と入力してから、 boot kernel.old か他の正常に起動するカーネルを入力してください。 カーネルの再設定をおこなう場合にはいつも、 確実に動くことが分かっているカーネルを用意しておくようにすると良いでしょう。

問題のないカーネルで起動した後に あなたのコンフィグレー ションファイルを調べ、 再び構築を試みてください。 /var/log/messages ファイルにはすべての成功した 起動時のカーネルメッセージやその他の記録があり、これ は助けになる情報の一つでしょう。また、 dmesg(8) コマンドは現在の起動時のカーネルメッ セージを出力します。

Note: カーネルの構築中にトラブルが起きた時に使うために GENERICや他のカーネルを次の構築で消されない ように異る名前で保存するようにしてください。kernel.old は新しいカーネルをインストールする 時に、 その一つ前にインストールしたうまく動かないかもしれ ないカーネルで上書きされてしまいますので当てにできませ ん。またできる限り早く動作しているカーネルを本来の kernelの位置に移動させてください。 そうしないと ps(1) のようなコマンドが正しく動きません。 make でインストールされたカーネルのファイルを (別のカーネルに戻すために) “アンロック” するための特別 のコマンドは

# chflags noschg /kernel

です。これができないのなら、securelevel(8) を 0 より大きい値にしているのかもしれません。 /etc/rc.confkern_securelevel-1 に変更して再起動してください。新し いカーネルに満足したら、前の設定に戻してよいでしょう。

また、 新しい置き換えたカーネルあるいは重要ファイ ルを動かしたり変更されないように “ロック” するには 次のようにします。

# chflags schg /kernel
カーネルは動きますが ps(1) は動きません!

システムユーティリティと異る バージョンのカーネルをインストールした場合、例えば 4.x のカーネルを 3.x システム上にインストールするような場合、 ps(1)vmstat(8) のような多くの システムステータスコマンドは動かなくなります。 libkvm を再コンパイルして、 これらのユーティリティを作りなおす必要があります。 これは、カーネルとそれ以外で異なるバージョンを組み合わせて オペレーティングシステムを使用することが推奨されない理由の 一つとなっています。