ほっしーの技術ネタ備忘録

技術ネタの備忘録です。基本的に私が忘れないためのものです。他の人の役にも立つといいなぁ。

ezjail の起動順序制御


ezjail の中の一つに OpenLDAP をインストールして以下のように運用してます。

ここで、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 がなんとかしてくれる。