2004年05月27日 木曜日

自宅サーバ設置 その2

今日からDNSサーバ、メールサーバ、Webサーバと言ったコアになるサービスの立ち上げを行う。DNSはdjbdns、メールサーバはqmailと言う感じでdjbが作ったサービスで固めることにした。HTTPサーバは言わずともしれたApacheを選択。

daemontool

daemontoolはdjb謹製のデーモン管理ツールである。デーモンの起動/停止/設定ファイルの読み直しなどの操作を統一的に扱えるようにできたり、ログローテーションができたり、必要なデーモンが常時起動しているか監視できるツールである。一昨日までの対応でdaemontoolは使えるようになっているので、あとはざくざくサービスを登録すればよいと言うわけだ。

準備

こんな起動スクリプト(FreeBSDの場合)を/etc/rc.d/に入れておけばdaemontoolはサーバ起動時に自動的に起動する。

#!/bin/sh
#
## daemontools by djb
#
DTdir=/usr/local/daemontools/bin
case "$1" in
 start)
    if [ -x $DTdir/svscan -a -d /service ]; then
        env - PATH=$DTdir\:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin \
        csh -cf 'svscan /service &' ; echo -n ' daemontools'
    fi ;;
 stop)
    $DTdir/svc -d /service/*
    (sleep 1; killall svscan)& ;;
esac

ただし上のスクリプトを読めば分かるように、/serviceを作らないとdaemontoolは使えるようにならないので、早速/serviceを作成する。/ ディレクトリにファイルを作るのに抵抗を感じないわけではないが、djb-toolを使うという時点で自分のポリシーよりもdjb先生の方法論を優先すべきだろう。ということで_躊躇なくディレクトリを作る。_(どうせこのディレクトリにはシンボリックリンクしか置かないし。気にしない。)
mkdir /service
chmod 755 /service

daemontoolを使ったデーモン管理の基礎

daemontoolを使ってサービスを起動してみる。とりあえずさくっと設定できそうなcannaを例にしてみる。ますcannaのディレクトリ(/usr/local/cannaとする)にデーモン管理用ディレクトリを作る。(サービスの名前と同名の方が都合がよい。)
# cd /usr/local/canna/
# mkdir /usr/local/canna/canna
ここで作成した管理用ディレクトリ(/usr/local/canna/canna)にサービスを起動するrunスクリプトを作る。cannaの場合はこんな感じ。

#!/bin/sh
/bin/rm -f /tmp/.iroha_unix/IROHA
PATH=/usr/iekei/Canna/bin
exec 2>&1
exec cannaserver -d

更にデーモンが吐き出すログを取りたい時はログ管理用のディレクトリを作る。

# cd /usr/local/canna/canna/log
# mkdir /usr/local/canna/canna/log

ここにもrunスクリプトを置く

#!/bin/sh
exec setuidgid bin multilog t ./main

ここでサービス登録といきたいところだが… /usr/local/canna/canna/run を実行してcannaserverが立ち上がるかどうか確認する。もしうまく立ち上がったらなOKで、サービスを登録しよう。サービスの登録は簡単で/usr/local/canna/canna/のシンボリックリンクを/serviceに作るだけでおしまいで、5秒以内にcannnaserverが自動的に起動される。

# ln -s /usr/local/canna/canna/ /servece/canna

ログの見方や管理コマンドの使い方は追々お勉強。こんな感じでサービスを登録していけば良いので、daemontoolを使うことで、サービスの起動や終了やメンテのための一時停止などはLinuxでもBSDでも他でも統一的にあつかえる。何とも便利だと思うのである。(まぁ良いラッパーと言うことになるのかな。)