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

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

FreeBSD の起動スクリプト


先日の記事の続き。
http://d.hatena.ne.jp/Hossy/20090218#p1

The following key points apply to old-style scripts in
/usr/local/etc/rc.d/:
Scripts are only executed if their basename(1) matches the shell
globbing pattern *.sh, and they are executable. Any other files or
directories present within the directory are silently ignored.

FreeBSD man rc.d より引用。


どうやら私の勘違いだった模様。


.sh ブログパターンにマッチする必要があるのはあくまで old-style なスクリプトだけで、
new-style のスクリプトは関係ない、という解釈が正しいみたい。


起動時に実行されるスクリプト /etc/rc は、/etc/rc.d にあるスクリプト ( みんな new-style ) を
実行した後で、/usr/local/etc/rc.d にある new-style のスクリプトのみを実行する。
で、/etc/rc.d/localpkg が、/usr/local/etc/rc.d にある old-style のスクリプトを実行する。


ちなみに、new-style と old-style の判断は、/etc/rc.subr にある find_local_scripts_new(), find_local_scripts_old() に書いてある。

old-style なスクリプト


これは昔ながらの

#!/bin/sh

case "$1" in
start)


で始まるスクリプトのことで、ふるーい時代から使われているスタートアップスクリプトの形式。


起動順序に依存関係がある場合には、000.hoge.sh みたいにファイル名に数字の接頭辞をつけると
その数字の順番に起動する…という、原始的な方法で依存関係を解決するので面倒。

new-style なスクリプト

#!/bin/sh

# PROVIDE: hoge-script
# REQUIRE: LOGIN

. /etc/rc.subr


で始まるスクリプトで、割と新しい rcNG と呼ばれる形式に対応したやつ。


# PROVIDE: で提供するサービスを # REQUIRE: で要求するサービスを書いておくと、
`rcorder /usr/local/etc/rc.d` とか実行するだけで、依存関係を解決してソートしてくれるので便利。


あと、主要な手続きは /etc/rc.subr というサブルーチン集に収まっているのでスクリプトが簡潔になる。