4. FreeBSD 10.4 RELEASE - qmail - 起動スクリプトの作成

 
4.1 起動スクリプトの作成
4.2 qmail-start
4.3 qmail-smtpd
4.4 qmail-smtpd-ssl
4.5 qmail-pop3d
4.6 qmail-pop3d-ssl
4.7 起動

4.1 起動スクリプトの作成

 起動スクリプトを作成・編集します。  起動スクリプトは5つ作成します。

qmail-start		←	qmail
qmail-smtpd		←	smtp
qmail-smtpd-ssl	←	smtp SSL
qmail-pop3d		←	pop3
qmail-pop3d-ssl	←	pop3 SSL

4.2 qmail-start

 インストール後に作成されている /usr/local/etc/rc.d/qmailsend は削除します。

> rm /usr/local/etc/rc.d/qmailsend
 qmail の起動スクリプト /usr/local/etc/rc.d/qmail-start を作成して以下のように編集します。

#!/bin/sh
#
# PROVIDE: qmailstart
# REQUIRE: LOGIN cleanvar
# KEYWORD: shutdown

qmailstart_enable=${qmailstart_enable:-"NO"}

. /etc/rc.subr

name=qmailstart
rcvar=qmailstart_enable

load_rc_config $name

start_cmd=qmailstart_start
procname=/var/qmail/bin/qmail-send
command=/var/qmail/bin/qmail-send
pidfile=/var/run/qmailstart.pid

qmailstart_start()
{
	echo "Starting qmail-start."

	exec env - PATH="/var/qmail/bin:$PATH" qmail-start ./Maildir/ splogger qmail &
	echo $! > $pidfile
}

run_rc_command "$1"
 3~5行は、先頭に # がついていますが、ただのコメントではありません。  man コマンドで rcorder を参照しましょう。

4.3 qmail-smtpd

 インストール後に作成されている /usr/local/etc/rc.d/qmailsmtpd は削除します。

> rm /usr/local/etc/rc.d/qmailsmtpd
 削除したものは、/var/qmail/boot/qmailsmtpd のシンボリックリンクです。  あらためてコピーします。

> cp /var/qmail/boot/qmailsmtpd /usr/local/etc/rc.d/qmail-smtpd
 本サイトの設定と合わない箇所がありますので、編集します。

: ${qmailsmtpd_cdb:=/etc/tcp.smtp}

	・・・

	$qmailsmtpd_tcpserver -x $qmailsmtpd_cdb.cdb $qmailsmtpd_flags $qmailsmtpd_host $qmailsmtpd_port \
		$qmailsmtpd_smtpd $qmailsmtpd_usercheck &
	echo $! > $pidfile
   ↓

: ${qmailsmtpd_cdb:=/etc/tcp/tcp.smtp}

	・・・

	$qmailsmtpd_tcpserver -x $qmailsmtpd_cdb.cdb $qmailsmtpd_flags $qmailsmtpd_host \
		$qmailsmtpd_port \
		$qmailsmtpd_smtpd \
		$qmailsmtpd_usercheck \
		2>&1 | /var/qmail/bin/splogger &
	pid=`expr $! - 1`
	echo $pid > $pidfile
 9~11行目はくるしまぎれの設定ですので解説しておきます。  9行目で splogger に出力を食わせているのは、デフォルトの設定だと、ログが標準出力もしくはエラー出力に表示されてログに記録されないのです。  ログインした状態で再起動するとわかりますが、ログインしたコンソールに simscan のログが出力されてしまうのです。  ところが splogger に出力すると、qmail-smtpdsplogger と2つのプロセスが同時に起動するのです。  で echo $! > $pidfile でプロセスIDを出力すると、$! は最後に起動したプロセスなので、splogger のプロセスID で pid ファイルが出力されてしまうのです。  そうなると stoprestartstatus で見る pidsplogger のものなのでまともな判断ができなくなります。  で、pid は最後に起動したプロセスのIDをデクリメントしたものを出力しているのです。  daemontools の使用も検討してみましたが、設定が面倒なので、このような設定に落ち着きました。  もっとよい方法があったら誰か教えてください。

4.4 qmail-smtpd-ssl

 qmail-smtpdqmail-smtpd-ssl にコピーして

> cd /usr/local/etc/rc.d/
> cp qmail-smtpd qmail-smtpd-ssl
 編集します。

name=qmailsmtpd

	・・・

: ${qmailsmtpd_pidfile:=/var/run/qmailsmtpd.pid}

	・・・

: ${qmailsmtpd_port:=smtp}

	・・・

	$qmailsmtpd_tcpserver -x $qmailsmtpd_cdb.cdb $qmailsmtpd_flags $qmailsmtpd_host \
		$qmailsmtpd_port \
		$qmailsmtpd_smtpd \
		$qmailsmtpd_usercheck \
		2>&1 | /var/qmail/bin/splogger &
   ↓

name=qmailsmtpd_ssl

	・・・

: ${qmailsmtpd_pidfile:=/var/run/qmailsmtpd-ssl.pid}

	・・・

: ${qmailsmtpd_port:=smtps}

	・・・

	echo "Starting qmailsmtpd-_ssl."
	$qmailsmtpd_tcpserver \
		-s -n /etc/ssl/mail/cert.pem \
		-x $qmailsmtpd_cdb.cdb $qmailsmtpd_flags $qmailsmtpd_host \
		$qmailsmtpd_port \
		$qmailsmtpd_smtpd \
		$qmailsmtpd_usercheck \
		2>&1 | /var/qmail/bin/splogger &
 15行目の /etc/ssl/mail/cert.pem は「メールサーバ」の「証明書を使用する」の項で作成したものです。  セキュリティ対策で別のディレクトリに変えたり、ファイル名を変更している場合は適宜置き換えてください。(以下同様) 蛇足)  nameqmailsmtpd-ssl にしたかったのですが・・・。  - が使えないので qmailsmtpd_ssl にしました。

4.5 qmail-pop3d

 qmail-pop3d の起動スクリプト /usr/local/etc/rc.d/qmail-pop3d を作成して編集します。

#!/bin/sh
#
# PROVIDE: qmailpop3d
# REQUIRE: LOGIN cleanvar
# KEYWORD: shutdown

qmailpop3d_enable=${qmailpop3d_enable:-"NO"}

. /etc/rc.subr

name=qmailpop3d
rcvar=qmailpop3d_enable

load_rc_config $name

start_cmd=qmailpop3d_start
procname=/usr/local/bin/tcpserver
command=/usr/local/bin/tcpserver
pidfile=/var/run/qmailpop3d.pid

qmailpop3d_start()
{
	echo "Starting qmaili-pop3d."

	/usr/local/bin/tcpserver \
		0 pop3 /var/qmail/bin/qmail-popup hogehoge.ne.jp \
		/usr/local/bin/checkpassword \
		/var/qmail/bin/qmail-pop3d Maildir &
	echo $! > $pidfile
}

run_rc_command "$1"
 27行目の hogehoge.ne.jp は、ドメイン名を合わせてください。

4.6 qmail-pop3d-ssl

 qmail-pop3dqmail-pop3d-ssl にコピーして

> cd /usr/local/etc/rc.d/
> cp qmail-pop3d qmail-pop3d-ssl
 編集します。

name=qmailpop3d

	・・・

pidfile=/var/run/qmailpop3d.pid
: ${qmailppo3d_port:=pop3}

	・・・

	echo "Starting qmaili-pop3d."

	/usr/local/bin/tcpserver \
		0 pop3 /var/qmail/bin/qmail-popup hogehoge.ne.jp \
		/usr/local/bin/checkpassword \
		/var/qmail/bin/qmail-pop3d Maildir &
   ↓

name=qmailpop3d_ssl

	・・・

pidfile=/var/run/qmailpop3d-ssl.pid

	・・・

	echo "Starting qmaili-pop3d_ssl."

	/usr/local/bin/tcpserver \
		-s -n /etc/ssl/mail/cert.pem \
		0 pop3s /var/qmail/bin/qmail-popup hogehoge.ne.jp \
		/usr/local/bin/checkpassword \
		/var/qmail/bin/qmail-pop3d Maildir &
 -s -n /etc/ssl/mail/cert.pem は、必ず /usr/local/bin/tcpserver の直後に記述します。  位置が変わると証明書をチェックできず、クライアントとの接続がタイムアウトになります。

4.7 起動

 作成したスクリプトに実行権限を付与します。

> chmod +x /usr/local/etc/rc.d/qmail-*
 /etc/rc.conf に以下の行を加えます。

qmailstart_enable="YES"
qmailsmtpd_enable="YES"
qmailpop3d_enable="YES"
 起動します。

> /usr/local/etc/rc.d/qmail-start start
> /usr/local/etc/rc.d/qmail-smtpd start
> /usr/local/etc/rc.d/qmail-smtpd-ssl start
> /usr/local/etc/rc.d/qmail-pop3d start
> /usr/local/etc/rc.d/qmail-pop3d-ssl start
 とりあえず、これでメールの送受信はできます。  「メールサーバ - メール配送テスト」を参考にして、サーバ内で送受信ができるかを確認の後、クライアントのメール設定を行って送受信を確認します。