1. 起動スクリプトの作成
起動スクリプトを作成・編集します。
起動スクリプトは5つ作成します。
qmail-start ← qmail
qmail-smtpd ← smtp
qmail-smtpd-ssl ← smtp SSL
qmail-pop3d ← pop3
qmail-pop3d-ssl ← pop3 SSL
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」を参照しましょう。
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-smtpd」と「splogger」と2つのプロセスが同時に起動するのです。
で「echo $! > $pidfile」でプロセスIDを出力すると、$! は最後に起動したプロセスなので、「splogger」のプロセスID で「pid」ファイルが出力されてしまうのです。
そうなると「stop」・「restart」・「status」で見る「pid」が「splogger」のものなのでまともな判断ができなくなります。
で、「pid」は最後に起動したプロセスのIDをデクリメントしたものを出力しているのです。
「daemontools」の使用も検討してみましたが、設定が面倒なので、このような設定に落ち着きました。
もっとよい方法があったら誰か教えてください。
4. qmail-smtpd-ssl
「qmail-smtpd」を「qmail-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」は「メールサーバ」の「証明書を使用する」の項で作成したものです。
セキュリティ対策で別のディレクトリに変えたり、ファイル名を変更している場合は適宜置き換えてください。(以下同様)
蛇足)
「name」を「qmailsmtpd-ssl」にしたかったのですが・・・。
「-」が使えないので「qmailsmtpd_ssl」にしました。
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」は、ドメイン名を合わせてください。
6. qmail-pop3d-ssl
「qmail-pop3d」を「qmail-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」の直後に記述します。
位置が変わると証明書をチェックできず、クライアントとの接続がタイムアウトになります。
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
とりあえず、これでメールの送受信はできます。
「メンテナンス・トラブルシュート - メールサーバ - 配送テスト」を参考にして、サーバ内で送受信ができるかを確認の後、クライアントのメール設定を行って送受信を確認します。