ezjail の中の一つに OpenLDAP をインストールして以下のように運用してます。
- host.example.com ( ホスト )
- ezjail
- ldap.example.com ( ezjail 1 )
- public.example.com ( ezjail 2 )
ここで、host の /usr/local/etc/rc.d/ezjail.sh によって ldap と public が起動するわけですが、
public が先に起動してしまうと、Apache が SuexecUserGriup に指定したユーザを発見できずに起動失敗します。
これでは困るので必ず ldap → public という順で起動してほしい。
というのが今回の topic。
ezjail.sh を読むと、起動する jail_list を以下のように生成しています。
ezjail_list=`ls /usr/local/etc/ezjail | xargs rcorder`
rcorder?何かなと調べてみると rc の順序決め ( order ) をするプログラムらしい。
最近の /etc/rc.d や /usr/local/etc/rc.d のスクリプトの先頭には決まって
# PROVIDE: inetd # REQUIRE: DAEMON LOGIN cleanvar # KEYWORD: shutdown
という記述があるけど、これを解析して依存関係を解決した順序にソートするらしい。
というわけで、/usr/local/etc/ezjail 以下の設定ファイルの先頭にこの記述を書けばOK。
デフォルトだと
# To specify the start up order of your ezjails, use these lines to # create a Jail dependency tree. See rcorder(8) for more details. # # PROVIDE: standard_ezjail # REQUIRE: # BEFORE: #
こうなっているものを、/usr/local/etc/ezjail/ldap は
# To specify the start up order of your ezjails, use these lines to # create a Jail dependency tree. See rcorder(8) for more details. # # PROVIDE: standard_ezjail ldap # REQUIRE: # BEFORE: #
こうやって ldap を提供することを明示して、/usr/local/etc/ezjail/public に
# To specify the start up order of your ezjails, use these lines to # create a Jail dependency tree. See rcorder(8) for more details. # # PROVIDE: standard_ezjail # REQUIRE: ldap # BEFORE: #
ldap に依存することを示す。
$ rcorder /usr/local/etc/ezjail/* public ldap $
だったのが
$ rcorder /usr/local/etc/ezjail/* ldap public $
になればOK。
ldap に限らず、何かデーモンを立ち上げてそれに他の ezjail が依存する場合には
同様に書き加えていけば rcorder がなんとかしてくれる。