カーネルをカスタマイズする

ここでは OpenBSD のカーネルをカスタマイズする手順を紹介します。
なお、標準のカーネル(GENERIC)には、通常の用途に必要なものは全て含まれているので、 特別な理由が無い限り、カーネルのカスタマイズは不要です。 不用意なカスタマイズにより正常に動作しなくなる可能性もあるので、 リカバリーできるだけのスキルが無い場合には、実行してはいけません。

参考: OpenBSD FAQ: Kernel Configuration Options

カーネルオプションの定義ファイルを作る

標準のカーネルオプションが /usr/src/sys/arch/i386/conf/GENERIC に定義されているので、 このファイルをコピーして(同一のディレクトリに置くこと)、 カスタマイズのベースにするのが良いでしょう。 ここでは、MYSERVER という名前で説明します。 以下に、カスタマイズの具体例を挙げますが、カスタマイズできる項目の詳細は、 Kernel configuration および man options の説明を参照してください。

  1. RTC を日本時間のままで運用するための設定。 以下の行を追加して定義します。
    option  TIMEZONE=-540
    
  2. ダミーの NOP 挿入を止めて性能を向上するための設定。 ただし、古いマシンだとクラッシュする可能性があるそうです。 以下の行の先頭の # を外して有効にします。
    option  DUMMY_NOPS
    
  3. FPU を持っているマシンでは、 浮動小数点演算のエミュレーション機能は不要なので、削除します。 以下のようにコメントアウトするか削除します。
    注意: 3.0版の GENERIC の定義では、option GPL_MATH_EMULATE のコメントに required. が追加されています。 具体的に、何が変わったのか判りませんが、削除不可になったようです。
    注意: 3.1版では required. のコメントが削除され、元に戻りました。
    #option  GPL_MATH_EMULATE
    
  4. ネットワーク負荷が高い環境で使う場合、バッファ領域を大きくします。 以下の行を追加して定義します。 なお、2.9 版のデフォルトは 2048 のようです。
    option  NMBCLUSTERS=8192
    
  5. ファイルサーバとして使用する場合、 ファイル・システム・バッファの大きさを変えます。 以下の行を追加して定義します(RAM の何パーセントを使うかで指定する)。 なお、2.9 版のデフォルトは 5% のようです。
    option  BUFCACHEPERCENT=10
    
  6. 【3.0版のみ】 プロセス間でのファイルディスクリプタの共有を有効にします。 システムコール rfork を全てのパターンで動作可能するために必要になります。 また、Linux emulation の配下で動くプログラムの一部 (システムコール clone を特定のパターンで使用するもの、mozilla など) を動作させるためにも必要です。
    option  RFORK_FDSHARE
    
    これは、3.0 版だけにあるオプションで、 セキュリティ上の理由により、デフォルトでは無効になっています。 man options によると、これが有効になっている場合には、 任意のユーザがシステムをクラッシュさせることが可能だそうです。 ソースコード上のコメントでは "Too dangerous right now." となっています。 覚悟の上で、指定してください。 なお、3.1 版以降では、 src/sys/kern/kern_fork.c の更新ログ によると、 "No more RFORK_FDSHARE option, always allow FORK_SHAREFILES." なのだそうです。
  7. メモリ節約のため使用しないデバイスのドライバを削除します。 不要なデバイスドライバを定義する行をコメントアウトするか削除します。 ただし、これで節約できるメモリは 1〜2MB 程度なので、 RAM が非常に小さいマシンを除き、あまり意味がないと思われます。 削除でなく、無効にするほうが良いかもしれません。 無効化は、カーネルに対する config -e コマンド等で設定できます。

コンパイルとインストールを行う

  1. 以下のようにして、カーネルを再コンパイルします。
    # cd /usr/src/sys/arch/i386/conf
    # /usr/sbin/config MYSERVER
    # cd /usr/src/sys/arch/i386/compile/MYSERVER
    # make clean && make depend && make
    
  2. カーネルを置き換え、リブートします。 古いカーネルを削除しないこと。 新カーネルが不調の際に必要になります。
    # chmod -x bsd
    # mv /bsd /bsd.generic; cp bsd /bsd
    # reboot