web-dev-qa-db-ja.com

最小限のFreeBSDカーネルを適切に構築する方法は?

FreeBSD用の最小限のカーネルを構築する適切な方法はありますか? FreeBSDハンドブックにはこれに関する情報が不足しています。デフォルトでは、/boot/kernelディレクトリのサイズはかなり大きくなります(約450MB)。カーネルフィンガープリントを最小限に抑え、不要なカーネルモジュールとオプションをすべて削除したいと思います。 "NO_MODULES"/etc/make.confオプションを使用する必要がありますか?または、Cコンパイルフラグを使用しますか?

2
powerthrash

/boot/kernelのファイルのサイズと数を減らすためにできることはたくさんあります。

おそらく、WITHOUT_KERNEL_SYMBOLS/etc/src.confを設定して(このファイルがまだ存在しない場合は作成するだけで)、次にinstallkernelを実行するときに、スペースを節約するのが最善です。デバッグシンボルファイルはインストールされません。すぐにスペースが必要な場合は、今すぐ削除しても安全です(rm /boot/kernel/*.symbols

構築するモジュールを制御するmake.conf設定がいくつかあります。

  • NO_MODULES-モジュールの構築を完全に無効にする
  • MODULES_OVERRIDE-ビルドするモジュールを指定します
  • WITHOUT_MODULES-ビルドしてはならないモジュールのリスト

NO_MODULESオプションはおそらく少し手間がかかるので、他の2つの賢明な組み合わせがより良い選択です。必要なモジュールが正確にわかっている場合は、それらをMODULES_OVERRIDEに設定するだけです。 WITHOUT_MODULESが評価されることに注意してくださいafterMODULES_OVERRIDEなので、両方のリストで指定されたモジュールはビルドされません。

すべてのモジュールのビルドを本当に抑制したい場合は、NO_MODULESを使用して、必要なすべてのドライバーとモジュールがカーネルに静的にコンパイルされていることを確認できます。各ドライバーのマンページには、カーネル構成ファイルに追加する適切な行が示されているため、必要なものを理解できるはずです。

それでもスペースに問題がある場合、またはカーネルを可能な限り削除したい場合は、カーネル構成を編集して、マシンがサポートしていないデバイスやサブシステムを削除できます。使いたくないでしょう。ビルドシステムは非常に賢明であり、構成でまだアクティブなモジュールに必要なモジュールを誤って削除すると、ビルドが失敗し、何が問題だったかを説明するエラーメッセージが表示されます。

非常に面倒な場合もありますが、最善のアプローチは、小さな手順を実行して、一度に1つまたは2つのものを削除し、結果の構成が正しくビルドおよび起動されるようにすることです。ただし、何をするにしても、/usr/src/sys/<Arch>/config/GENERICのコピーを作成し、そのコピーを編集することを強くお勧めします。混乱してデフォルトの設定から開始するしか方法がない場合は、システムにGENERICファイルが残っていることをうれしく思います。

カスタムカーネルを構築するには、コマンドラインで構成の名前をmake KERNCONF=MYKERNCONF buildkernelとして渡すか、/etc/make.confKERNCONFを設定します。カスタム構成ファイルを/usr/src/sys/<Arch>/configに配置すると、ビルドシステムがそれを見つけることができるようになります。

3
D_Bye

「適切な」カーネルは相対的な概念であり、ニーズによって異なります。カーネルの構築について質問する必要がある人は、カーネルを構築するビジネスを持っていません。ちなみに、どのようにして450MBサイズのFreeBSDカーネルを思いついたのですか。

root@neill-backup:~ # uname -a
FreeBSD neill-backup.int.autonlab.org 10.1-RELEASE FreeBSD 10.1-RELEASE #0 r274401: Tue Nov 11 21:02:49 UTC 2014     [email protected]:/usr/obj/usr/src/sys/GENERIC  AMD64

ここに

root@neill-backup:~ # du -h /boot/kernel/kernel
 20M    /boot/kernel/kernel
1