FreeBSD用の最小カーネルを構築する適切な方法はありますか?これFreeBSDマニュアルこれに関する情報が不足しています。ディレクトリのサイズは基本的に/boot/kernel
約450MBとかなり大きいです。カーネルの指紋を最小限に抑え、不要なカーネルモジュールとオプションの両方を削除したいと思います。"NO_MODULES"
オプションを使用する必要がありますか/etc/make.conf
?それともCコンパイラフラグを使用しますか?
答え1
を減らすためにできることがたくさんあります/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
後ろに MODULES_OVERRIDE
したがって、両方のリストに名前が付けられたモジュールは構築されません。
すべてのモジュールビルドを無効にするには、を使用して、必要NO_MODULES
なすべてのドライバとモジュールがカーネルに静的にコンパイルされていることを確認します。各ドライバのマンページには、カーネル構成ファイルに追加する行が表示され、必要なものがわかります。
それでもスペースが問題であると思った場合、またはカーネルをできるだけ簡潔に保ちたい場合は、カーネル構成を編集して、コンピュータがサポートしていないかサポートしていないすべてのデバイスとサブシステムを削除できます。使いたくありません。ビルドシステムは非常に合理的です。構成でまだアクティブなモジュールに必要なモジュールを誤って削除すると、ビルドが失敗し、誤った理由を説明するエラーメッセージが表示されます。
これは非常に退屈かもしれませんが、最善のアプローチは小さなステップを実行し、一度に1つまたは2つのエントリを削除し、結果の構成が正しく構築され起動されることを確認することです。しかし、何をしてもコピーして/usr/src/sys/<arch>/config/GENERIC
編集することをお勧めします。あまりにも混乱している場合、唯一の解決策は基本的な構成から始めることです。そうすれば、システムにファイルがまだ残っていて幸いですGENERIC
!
カスタムカーネルをビルドするには、コマンドラインのように設定名を渡すmake KERNCONF=MYKERNCONF buildkernel
か、 。カスタム設定ファイルを配置したら、ビルドシステムがそれを見つけることができることを確認してください。KERNCONF
/etc/make.conf
/usr/src/sys/<arch>/config
答え2
「正しい」カーネルは相対的な概念であり、必要に応じて異なります。カーネルを作成した人にカーネルを作成してもらう必要はありません。しかし、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