システム設定の要/etc/rc.conf
FreeBSDのサービス管理の特徴の一つに、すべての設定を/etc/rc.confファイルに書いておけるというものがあります。システムのデフォルト設定は/etc/defaults/rc.confに記述されています。/etc/rc.confはこれよりも優先されますので、そのシステムがどんな設定になっているのかは/etc/rc.confファイルを読めばわかるようになっています。
FreeBSDプロジェクトはFreeBSD 5系でNetBSD由来のサービス制御システムを移植しました。システム起動時のソフトウェアの自動アップデート、起動後のサービスの制御はrc(8)のもとで実行できます。/etc/rc.confで有効化されていないサービスはそのままでは制御できないようになっています(強制制御も可能です)。典型的には次のようにservice(8)コマンド経由でサービスを制御します。
service(8)コマンド経由で実行される制御スクリプトは/etc/rc.d/にまとまっています。直接このスクリプトを実行しても同じように処理が実行されますが、サービスを制御するために適切な環境変数の設定などservice(8)コマンドは事前に設定してくれるので、service(8)コマンドを経由して制御したほうが良いでしょう。
パッケージやPorts Collection経由でインストールしたサードパーティ製のソフトウェアの制御スクリプトは/usr/local/etc/rc.d/以下にインストールされます。
/usr/local/etc/rc.d/以下のスクリプトも/etc/rc.confで利用するかどうかを設定でき、service(8)コマンドでの制御の対象となります。
/etc/rc.confの利点と欠点
なにごとにも利点と欠点があるように、/etc/rc.confの方法にも双方の面があります。まず利点を見てみましょう。/etc/rc.confには次のような利点があります。
- このファイルだけでシステム設定の多くを知ることができる
- 人間にとって扱いやすい
これに対して次のような欠点があります。
- 設定内容が膨れあがってくると把握も管理も面倒になってくる
- ソフトウェアにとって扱いにくい
/etc/rc.conf.d/*および/usr/local/etc/rc.conf.d/*というのは、こうした欠点に応えるために仕組みです。
分割配置のための/etc/rc.conf.d/と/usr/local/etc/rc.conf.d/
/etc/rc.conf.d/*と/usr/local/etc/rc.conf.d/*はこれまで/etc/rc.confファイルにまとめていた設定を、それぞれ個別の設定に分割できるというものです。たとえば、sshd(8)とnginx(8)の設定を個別に分離すると、次のようにファイルを分けることになります。
/etc/rc.confの設定のほうが優先されますので、試す場合には/etc/rc.confからは設定を削除しておいてください。
この方法はChefやPuppetのような管理ツール、またはFreeBSDをベースにして開発されるソフトウェアアプライアンスなどと相性の良い方法です。サービスの有効化や無効化、またはその設定などを個別のファイルとして作成するだけでよいからです。
/etc/rc.confをそのまま使う方法だと、ソフトウェアを使って/etc/rc.confファイルを編集しなければなりません。これはソフトウェアにとってはあまり使いやすい方法ではないわけです。ソフトウェアアプライアンスではあとからサードパーティ製のソフトウェアを追加したり、プラグインやアドオンを追加できるようにするものがあります。/etc/rc.confの場合、このファイルを編集する必要がありますが(rc.conf.localを使うと言った別の方法もあります)、/usr/local/etc/rc.conf.d/にファイルを置く、またはファイルを置き換えるだけで良いので、ソフトウェアにとっては管理が簡単です。
設定ファイルを単一のファイルにまとめるか、個別のファイルに分割するか、好みの問題もあります(単一ファイルだとファイル削除などの危険性が高いとして好まないユーザもいます)。どちらの方法も提供されていますので、要望に応じて使ってみてください。