FreeBSD用の最小限のカーネルを構築する適切な方法はありますか? FreeBSDハンドブックにはこれに関する情報が不足しています。デフォルトでは、/boot/kernel
ディレクトリのサイズはかなり大きくなります(約450MB)。カーネルフィンガープリントを最小限に抑え、不要なカーネルモジュールとオプションをすべて削除したいと思います。 "NO_MODULES"
で/etc/make.conf
オプションを使用する必要がありますか?または、Cコンパイルフラグを使用しますか?
/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.conf
にKERNCONF
を設定します。カスタム構成ファイルを/usr/src/sys/<Arch>/config
に配置すると、ビルドシステムがそれを見つけることができるようになります。
「適切な」カーネルは相対的な概念であり、ニーズによって異なります。カーネルの構築について質問する必要がある人は、カーネルを構築するビジネスを持っていません。ちなみに、どのようにして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