FreeBSD 14.0 RELEASE - qmail - 起動スクリプトの作成 - qmail-smtpd

クラウディア 
1. qmail-smtpd
2. qmail-smtpd-ssl

1. qmail-smtpd

 「qmail-smtpd」の起動スクリプトを、作成して編集します。

vi /usr/local/etc/rc.d/qmail-smtpd
 以下を記述します。

#!/bin/sh

# $FreeBSD: head/mail/qmail/files/qmailsmtpd.in 400559 2015-10-30 23:07:16Z bdrewery $
#
# PROVIDE: qmailsmtpd
# REQUIRE: LOGIN cleanvar
# KEYWORD: shutdown
#
# To use the checkpassword interface to qmail-smtpd, set
# qmailsmtpd_checkpassword to the full path to the checkpassword program (e.g.
# security/checkpassword or security checkpassword-pam).
#
# Note: tcpserver can be found in the sysutils/ucspi-tcp package.
#
# qmailsmtpd_checkpassword could be set to e.g. /usr/local/bin/checkpassword-pam

. /etc/rc.subr

name=qmailsmtpd
rcvar=qmailsmtpd_enable

load_rc_config $name

: ${qmailsmtpd_tcpserver:=/usr/local/bin/tcpserver}
: ${qmailsmtpd_tcprules:=/usr/local/bin/tcprules}
: ${qmailsmtpd_pidfile:=/var/run/qmailsmtpd.pid}
: ${qmailsmtpd_enable:=NO}
: ${qmailsmtpd_cdb:=/etc/tcp/tcp.smtp}
: ${qmailsmtpd_flags="-R -H -u 82 -g 81"}
: ${qmailsmtpd_host:=0}
: ${qmailsmtpd_port:=smtp}
: ${qmailsmtpd_smtpd:=/var/qmail/bin/qmail-smtpd}
: ${qmailsmtpd_fqdn:=`hostname`}
: ${qmailsmtpd_checksubprogram:=/usr/bin/true}

start_cmd=qmailsmtpd_start
start_precmd=qmailsmtpd_precmd
pidfile=${qmailsmtpd_pidfile}
procname=${qmailsmtpd_tcpserver}

qmailsmtpd_start()
{
	if [ -n "$qmailsmtpd_checkpassword" ]; then
		qmailsmtpd_usercheck="$qmailsmtpd_fqdn $qmailsmtpd_checkpassword $qmailsmtpd_checksubprogram"
	fi

	echo "Starting qmailsmtpd."

	$qmailsmtpd_tcpserver -v \
	    -x $qmailsmtpd_cdb.cdb \
	    $qmailsmtpd_flags $qmailsmtpd_host \
	    $qmailsmtpd_port \
	    $qmailsmtpd_smtpd \
	    $qmailsmtpd_usercheck \
	    2>&1 | /var/qmail/bin/splogger smtpd &
	pid=`expr $! - 1`
	echo $pid > $pidfile
}

qmailsmtpd_precmd()
{
	if ! [ -e "${qmailsmtpd_tcpserver}" ]; then
	        echo "sysutils/ucspi-tcp is required" >&2
	        return 1
	fi
	if ! [ -e "${qmailsmtpd_cdb}" ]; then
	        echo "TCP rules file '${qmailsmtpd_cdb}' is missing." >&2
	        return 1
	fi
	$qmailsmtpd_tcprules $qmailsmtpd_cdb.cdb $qmailsmtpd_cdb.tmp < $qmailsmtpd_cdb \
	  || return 1
}

run_rc_command "$1"
 49行目の「-v」オプションは、「tcpserver」のログを冗長(Verbose)にしています。  起動・終了・接続の都度ログを出力しますので、抑えるのであれば、「-v」をはずします。(以下同様)  56~57行目は、いささかくるしまぎれの設定ですので解説しておきます。  55行目で「splogger」に出力を食わせているのは、デフォルトの設定だと、ログが標準出力もしくはエラー出力に表示されてログに記録されないのです。  ログインした状態で再起動するとわかりますが、ログインしたコンソールに「simscan」のログが出力されてしまうのです。  ところが「splogger」に出力すると、「qmail-smtpd」と「splogger」と2つのプロセスが同時に起動するのです。  で「echo $! > $pidfile」でプロセス ID を出力すると、「$!」は最後に起動したプロセスなので、「splogger」のプロセス ID で「pid」ファイルが出力されてしまうのです。  そうなると「stop」「restart」「status」で見る「pid」が、「splogger」のものなのでまともな判断ができなくなります。  で、「pid」は最後に起動したプロセスのIDをデクリメントしたものを出力しているのです。  「daemontools」の使用も検討してみましたが、設定が面倒なので、このような設定に落ち着きました。  もっとよい方法があったら誰か教えてください。

2. qmail-smtpd-ssl

 前項の「SSL」版です。  本項は、「SSL」の証明書が必要ですので、必ず先に「FreeBSD - メンテナンス・トラブルシュート - メールサーバ」の「証明書」に関する項を参考にして、作成しておいてください。  「qmail-smtpd」の起動スクリプトを、作成して編集します。

vi /usr/local/etc/rc.d/qmail-smtpd-ssl
 以下を記述します。  ほとんど前項と同じですので、違う箇所を緑太字にしています。

#!/bin/sh

# $FreeBSD: head/mail/qmail/files/qmailsmtpd.in 400559 2015-10-30 23:07:16Z bdrewery $
#
# PROVIDE: qmailsmtpd
# REQUIRE: LOGIN cleanvar
# KEYWORD: shutdown
#
# To use the checkpassword interface to qmail-smtpd, set
# qmailsmtpd_checkpassword to the full path to the checkpassword program (e.g.
# security/checkpassword or security checkpassword-pam).
#
# Note: tcpserver can be found in the sysutils/ucspi-tcp package.
#
# qmailsmtpd_checkpassword could be set to e.g. /usr/local/bin/checkpassword-pam

. /etc/rc.subr

name=qmailsmtpd_ssl
rcvar=qmailsmtpd_enable

load_rc_config $name

: ${qmailsmtpd_tcpserver:=/usr/local/bin/tcpserver}
: ${qmailsmtpd_tcprules:=/usr/local/bin/tcprules}
: ${qmailsmtpd_pidfile:=/var/run/qmailsmtpd-ssl.pid}
: ${qmailsmtpd_enable:=NO}
: ${qmailsmtpd_cdb:=/etc/tcp/tcp.smtp}
: ${qmailsmtpd_flags="-R -H -u 82 -g 81"}
: ${qmailsmtpd_host:=0}
: ${qmailsmtpd_port:=smtps}
: ${qmailsmtpd_smtpd:=/var/qmail/bin/qmail-smtpd}
: ${qmailsmtpd_fqdn:=`hostname`}
: ${qmailsmtpd_checksubprogram:=/usr/bin/true}

start_cmd=qmailsmtpd_start
start_precmd=qmailsmtpd_precmd
pidfile=${qmailsmtpd_pidfile}
procname=${qmailsmtpd_tcpserver}

qmailsmtpd_start()
{
        if [ -n "$qmailsmtpd_checkpassword" ]; then
                qmailsmtpd_usercheck="$qmailsmtpd_fqdn $qmailsmtpd_checkpassword $qmailsmtpd_checksubprogram"
        fi

    echo "Starting qmailsmtpd-ssl."

        $qmailsmtpd_tcpserver -v \
            -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 smtpds &
        pid=`expr $! - 1`
        echo $pid > $pidfile
}

qmailsmtpd_precmd()
{
        if ! [ -e "${qmailsmtpd_tcpserver}" ]; then
                echo "sysutils/ucspi-tcp is required" >&2
                return 1
        fi
        if ! [ -e "${qmailsmtpd_cdb}" ]; then
                echo "TCP rules file '${qmailsmtpd_cdb}' is missing." >&2
                return 1
        fi
        $qmailsmtpd_tcprules $qmailsmtpd_cdb.cdb $qmailsmtpd_cdb.tmp < $qmailsmtpd_cdb \
          || return 1
}

run_rc_command "$1"
 19、26、31、47、50、55行の色付け部分の変更と以下の1行追加だけなので、前項で作成したファイルをコピーして編集する方が速いかもしれません。  50行目の「/etc/ssl/mail/cert.pem」は「メールサーバ」の「証明書を使用する」の項で作成したものです。  セキュリティ対策で別のディレクトリに変えたり、ファイル名を変更している場合は適宜置き換えてください。(以下同様) 蛇足)  「name」を「qmailsmtpd-ssl」にしたかったのですが・・・。  -(ハイフン) が使えないので「qmailsmtpd_ssl」にしました。
ハイスピードプラン