起動時に POPFile を起動させる

POPFile がちゃんと動作するところまでは確認ができたので、今回は TeraStation を起動したときに自動的に POPFile が起動するようにする。ここまでできれば、POPFile サーバとしての設定が完了したと言えるだろう。
まず、プログラム(POPFile 本体)とデータ(データベースや設定ファイル)を保存する場所を決め、それぞれのディレクトリを作成する。ここでは、/mnt/array1/share/usr/share/popfile/ (プログラムディレクトリ)と /mnt/array1/share/var/lib/popfile/ (データディレクトリ)とした。popfile-0.22.4.zip をプログラムディレクトリに展開し、前回動作テストしたときに使用した popfile.cfg と popfile.db(もともとは iBook からコピーしたもの)をデータディレクトリにコピー。下準備はこんなところ。
次に、Startup / Shutdown Script for RedHat and Mandrake を参考にして POPFile の起動や終了を行うスクリプトを作成する。ほとんどはそのままでメイン部分は、

popfile="./popfile.pl"
perl_path=/usr/local/bin/perl58

POPFILE_ROOT=/mnt/array1/share/usr/share/popfile;export POPFILE_ROOT
POPFILE_USER=/mnt/array1/share/var/lib/popfile;export POPFILE_USER

# Setup variables
folder_saved=`pwd`

start() {
cd ${POPFILE_ROOT}
echo -n "Starting popfile: "
${perl_path} ${popfile} >> /dev/null 2>&1 &
echo -n "started as background process" && echo success && echo
}

stop() {
echo -n "Stopping popfile ... "
pid=`ps -ef | grep perl | grep popfile.pl | gawk '{print $2}'`

if [ "${pid}" = "" ] ; then
echo "popfile is not running"
else
kill $pid
fi
#echo -en "\033[${RES_COL}G[ OK ]"
echo success && echo
}

status() {
pid=`ps -ef | grep perl | grep popfile.pl | gawk '{print $2}'`

if [ "${pid}" = "" ] ; then
echo "stopped"
else
echo "running"
fi
}

case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
status
;;
*)
echo $"Usage: $0 {start|stop|restart|status}"
exit 1
;;
esac

# Back to original folder
cd $folder_saved
exit 0

このような感じになった。/etc/init.d/functions などは存在しないようなので、その部分はばっさり削除してしまった。また、プログラムディレクトリとデータディレクトリを別に指定するために、それぞれ POPFILE_ROOT、POPFILE_USER という環境変数を設定。Perl も最初からインストールされているものとは別のものを使用するために、そのパスを設定した(popfile.pl 自体を実行可能にして 1 行目の Perl のパスを編集するという方法もあるが、POPFile 自体を修正することは避けたかったのでこのようにした)。
そして、このファイルを /etc/init.d/ に popfile という名前でコピーする。また、同じフォルダにある他のスクリプトと同様に実行権限をつけておく。/etc/init.d/popfile start で起動、/etc/init.d/popfile stop で終了ができることを確認する。
TeraStation の起動時に POPFile を起動、終了時に終了できるよう、/etc/rc.d/rc0.d などに上で作成したスクリプトシンボリックリンクを作成していく。rc0.d が終了時、rc3.d が起動時、rc6.d が再起動時(rc*.d の数字はランレベルというものを表しているようだが、どの数字がどれなのかというのはよくわからない。他の Linux での例や、中に入っているスクリプトの内容などからこのように判断)に実行されるもののようなので、

ln -s /etc/init.d/popfile /etc/rc.d/rc0.d/K25popfile
ln -s /etc/init.d/popfile /etc/rc.d/rc3.d/S96popfile
ln -s /etc/init.d/popfile /etc/rc.d/rc6.d/K25popfile

としてそれぞれのディレクトリにリンクを作成した(K は Kill、S は Start の頭文字で、その後ろの番号は実行される順番。実行される順番は、使われていない番号の中から適当なものを選択した)。
これで準備は完了。TeraStation を再起動後、telnet でログインして

ps -ef | grep popfile

を確認すれば、

root       585     1  5 07:31 ?        00:00:10 /usr/local/bin/perl58 ./popfile.pl

というプロセスを確認することができる。iBook からコントロールセンターへの接続も問題なく、もちろんメールの受信もできる。これでめでたく TeraStationPOPFile サーバとすることができた。