qmail は,sendmail 等に代表される MTA の一種で,sendmail の代替物とし て機能します。500 名規模の ML の処理に sendmail では 3〜10 時間程度か かりますが,qmail はこれを10〜30 分程度で行うことができます。
詳しくは INSTALL
ファイル参照。
(1) qmail のディレクトリを決めます。qmail は,このディレクトリにすべて
のメールを queue します。このディレクトリは自マシンのディスクにする必
要があるようです。NFS 等による遠隔マシンのディスクを使うことはできませ
ん。本当の理由はわかりませんが,たぶん,速度が落ちるからでしょう。デフォ
ルトは /var/qmail
です。このディレクトリを変更するには,
conf-home.h
ファイルを編集してください。以下では,デフォルト
の/var/qmail
ディレクトリで話を行います。このディレクトリを作
成してください。
# mkdir /var/qmail; chmod 755 /var/qmail
(2) qmail が使う user と group を登録します。詳しくは INSTALL.ids
ファイル参照。以下の group を /etc/group
に登録し,
qmail:*:2107: nofiles:*:2108:
以下の user を /etc/passwd
に登録します。
alias:*:7790:2108::/var/qmail/alias:/bin/true qmaild:*:7791:2108::/var/qmail:/bin/true qmaill:*:7792:2108::/var/qmail:/bin/true qmailp:*:7793:2108::/var/qmail:/bin/true qmailq:*:7794:2107::/var/qmail:/bin/true qmailr:*:7795:2107::/var/qmail:/bin/true qmails:*:7796:2107::/var/qmail:/bin/true
qmail は,root 権限での実行をできるだけ避けるために,これらの user と
group を使います。これらの user と group 名を変更するには,
conf-user.h
ファイルを編集してください。
(3) 以下のコマンドを実行します。
# make
# make man
# make setup
# make check
(4) qmail の各種設定は,先に設定した qmail のディレクトリ,user,group
の変更を除き,/var/qmail/control/
以下のファイルで行います(詳
しくは INSTALL.ctl
ファイルを参照してください)。この際に,qmail
の再コンパイルは必要ありません。通常は,control/me
ファイルを
除き,デフォルト値のままでよいので,特に設定する必要はありません。
control/me
ファイルには,自マシンの FQDN を指定します。このほ
かのファイルは必要に応じて設定してください。
付属の qmail-makectl
スクリプトを実行すれば,control
以下の
ファイルを簡単に設定することができます。
# ./qmail-makectl
このスクリプトは自マシンの FQDN を DNS 経由で推定し,この値を
control/me
に書き込み,さらに control/locals
等の関
連するファイルに値を書き込みます。
以下に設定例を示します。
-- control/me -- relay.ec.tmit.ac.jp -- control/defaultdomain -- ec.tmit.ac.jp -- control/plusdomain -- tmit.ac.jp -- control/locals -- localhost ecpxb.tmit.ac.jp ecpxb.ec.tmit.ac.jp relay.ec.tmit.ac.jp -- control/rcpthosts -- localhost ecpxb.ec.tmit.ac.jp relay.ec.tmit.ac.jp ----
control/me
は自マシンの FQDN,control/defaultdomain
はホスト名だけ指定されたときに付加されるドメイン名,
control/plusdomain
はホスト名と ``+'' が指定されたときに付加
されるドメイン名です。
control/locals
に登録されたドメインへのメールは自マシンへのメー
ルとして処理されます。control/rcpthosts
には自マシンへのメー
ルとして受け取るメールのドメインを登録します。
また,concurrencylocal
と concurrencyremote
には,自マシンと
遠隔マシンとの間で同時に処理するメール数(SMTP 接続数)を設定します。デ
フォルト値は concurrencylocal
が10,concurrencyremote
が20で
す。control/concurrencyremote
の上限に関してはFAQファイルを参
照してください。
(5) qmail は alias 関連の設定を /etc/aliases
ではなく,
~alias
ディレクトリと ~user
ディレクトリ以下の .qmail-*
ファイルで行います(詳しくは INSTALL.alias
ファイルを参照してくだ
さい)。
(6) 基本の alias の設定は ~alias/.qmail-*
ファイルで行います。
例えば,root の alias は ~alias/.qmail-root
ファイルに設定し
ます。以下のコマンドを実行すれば,postmaster,mailer-daemon,root の各
alias を設定することができます。この設定で,これらのアドレスへのメール
は ~alias/Mailbox
へ保存されます。
■qmail は,/usr/spool/mail
ではなく,~user/Mailbox
にメールを保存します。詳しくはINSTALL.mbox
ファイルを参照してく ださい。□
# (cd ~alias; touch .qmail-postmaster .qmail-mailer-daemon .qmail-root)
# chmod 644 ~alias/.qmail*
各利用者独自の alias の設定は ~user/.qmail-*
ファイルで行いま
す。qmail では,各利用者が独自に複数の alias を設定することができます。
例えば,利用者 foo は,foo-group というアドレスの alias は
~foo/.qmail-group
ファイルで設定することができます。
■qsmhook を使うことで,alias の指定を/etc/aliases
で行った り,/usr/spool/mail
にメールを保存したりという sendmail 互換 の動作を qmail に指示することができますが,これは止めたほうがよいらし いです。詳しくはINSTALL.qsmhook
ファイルを参照してください。□
■一般の利用者が sendmail から qmail へ移行するときのことは,
qmail-upgrade.*
ファイルにまとめられています。□
(1) qmail の動作を確認します。以下のコマンドを実行して,qmail を起動し てください。
# env - PATH="/var/qmail/bin:$PATH" qmail-start splogger qmail &
/usr/adm/messages
ファイルに保存されたログから qmail の起動を
確認してください。以下に例を示します。``running'' であれば成功,
``cannot start'' であれば失敗です。
Apr 28 02:17:00 ecpxb qmail: 862161420.691666 running
ps コマンドでも起動を確認してください。
# ps aux | grep qmail
qmails 1635 0.0 1.7 876 268 p0 S 02:17 0:00 qmail-send
qmaill 1636 0.0 1.9 844 292 p0 S 02:17 0:00 splogger qmail
root 1637 0.0 1.4 840 212 p0 S 02:17 0:00 qmail-lspawn
qmailq 1639 0.0 1.5 836 224 p0 S 02:17 0:00 qmail-clean
qmailr 1638 0.0 1.3 836 208 p0 S 02:17 0:00 qmail-rspawn
root 1659 0.0 2.2 932 328 p1 S 02:23 0:00 grep qmail
#
4 つの qmail (qmail-send が qmails で,qmail-lspawn が root で, qmail-rspawn が qmailr で,qmail-clean が qmailq) と,splogger が動い ていれば成功です。
(2) 自マシンから自マシンへのメールのテストを行います (me
は正しい
利用者名を使ってください)。
% echo to: me | /var/qmail/bin/qmail-inject
この結果,即座に ~foo/Mailbox
にメールが届いていることと,
/usr/adm/messages
のログを確認してください。以下にログの例を
示します (53 と 20345 は実行するたびに変わります)。
qmail: new msg 53
qmail: info msg 53: bytes 246 from <me@relay.ec.tmit.ac.jp> qp 20345 uid 666
qmail: starting delivery 1: msg 53 to local me@relay.ec.tmit.ac.jp
qmail: delivery 1: success: did_1+0+0/
qmail: end msg 53
(3) 自マシンでのエラーメールのテストを行います。
% echo to: nonexistent | /var/qmail/bin/qmail-inject
以下にログの例を示します。また,エラーメールが ~/Mailbox
に戻っ
てきていることを確認してください。
qmail: new msg 53
qmail: info msg 53: bytes 246 from <me@relay.ec.tmit.ac.jp> qp 20351 uid 666
qmail: starting delivery 2: msg 53 to local nonexistent@relay.ec.tmit.ac.jp
qmail: delivery 2: failure: No_such_address.__#5.1.1_/
qmail: bounce msg 53 qp 20357
qmail: end msg 53
qmail: new msg 54
qmail: info msg 54: bytes 743 from <> qp 20357 uid 666
qmail: starting delivery 3: msg 54 to local me@relay.ec.tmit.ac.jp
qmail: delivery 3: success: did_1+0+0/
qmail: end msg 54
(4) 自マシンから遠隔マシンへのメールのテストを行います。
% echo to: koyama@ec.tmit.ac.jp | /var/qmail/bin/qmail-inject
以下にログの例を示します。また,メールが遠隔マシンに届いていることを確 認してください。
qmail: new msg 53
qmail: info msg 53: bytes 246 from <me@relay.ec.tmit.ac.jp> qp 20372 uid 666
qmail: starting delivery 4: msg 53 to remote koyama@ec.tmit.ac.jp
qmail: delivery 4: success: 1.2.3.4_accepted_message./...
qmail: end msg 53
(5) 自マシンの postmaster へのメールのテストを行います。メールが
~alias/Mailbox
に届いていることを確認してください。
% echo to: POSTmaster | /var/qmail/bin/qmail-inject
(6) 自マシンの postmaster へのメールのテストを行います。メールが
~alias/Mailbox
に届いていることを確認してください。
(7) バウンドメールのテストを行います。メールの終わりは ``.'' ではなく,
CTRL-D で指定してください。バウンドメールに関するエラーメールが
~alias/Mailbox
に届いていることを確認してください。
% /var/qmail/bin/qmail-inject -f nonexistent
To: unknownuser
Subject: testing
This is a test. This is only a test.
(CTRL-D)
%
(8) 利用者の ~/.qmail-*
ファイルによる alias のテストを行いま
す。例として,~me/.qmail-groups
を作成します。
% cat > ~me/.qmail-groups
|groups >> MYGROUPS; exit 0
(CTRL-D)
ここで,me-groups にメールして,~me/MYGROUPS
ファイルに group
id が保存されているかどうかを確認してください。
% /var/qmail/bin/qmail-inject me-groups < /dev/null
(1) マシンの起動時に,sendmail ではなく,qmail を起動するように設定し
ます。詳しくは INSTALL.boot
ファイルを参照してください。この例で
は,起動時に実行されるスクリプト(/etc/rc.d/rc.M
)で sendmail
が起動されているとします。
# Start the sendmail daemon: if [ -x /usr/sbin/sendmail ]; then echo "Starting sendmail daemon (/usr/sbin/sendmail -bd -q 15m)..." /usr/sbin/sendmail -bd -q 15m fi
この部分を以下のものに置換することにします。
env - PATH=''/var/qmail/bin:$PATH'' csh -cf 'qmail-start splogger qmail &'
(2) 実行中の sendmail を止めます。以下に sendmail を止める手順を示します。
kill -STOP
する。kill -CONT
し,すこし待って,再度 kill -STOP
する」という作業を子供がいる間繰り返す。kill -TERM
し,kill -CONT
してsendmailを止める。(3) qmail の sendmail 版 wrapper(sendmail のインターフェイス付き qmail)で,現在の sendmail を置換します。
# mv /usr/lib/sendmail /usr/lib/sendmail.bak
# ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
(4) /etc/inetd.conf
を修正します。以下の行を
/etc/inetd.conf
に書き込み(これはすべて 1 行で書くこと),
comsat に関する行をコメントアウトします。
smtp stream tcp nowait qmaild /var/qmail/bin/tcp-env tcp-env /var/qmail/bin/qmail-smtpd
(5) マシンを再起動します。あるいは inetd を kill-HUP
し,qmail が
正しく動作していることを確認してもかまいません。
(6) sendmail で未処理のまま queue に残っているメールの処理を行います
(この処理は省略してもかまいません)。qmail の実行中であっても,
sendmail.bak -q
(あるいは sendmail.bak -q15m
) を実行してもか
まいません。queue に残っているメールがすべて処理されるまで,これを行っ
てください(数日かかることもあります)。
# /usr/lib/sendmail.bak -q
(7) sendmail と binmail 等の実行許可を取り除きます(この処理は省略して
もかまいません)。ここでは,chmod 0
を実行することにします。
# chmod 0 /usr/sbin/sendmail /usr/lib/sendmail.bak /usr/lib/sendmail.mx
# chmod 0 /bin/mail
...
(8) mail が正しいメイラーを起動することを確認します(意味不明)。SVR4 の 処理は省略してもかまいません)。SVR4 では,mail から mailx へリンクを作 成すればよいでしょう(意味不明)。
(1) SMTP のテストを行います。SMTP 経由で自マシンにメールを出すテストを
行います。自マシンの ~me/Mailbox
にメールが届いていることを確
認してください。
% telnet 127.0.0.1 25
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 relay.ec.tmit.ac.jp ESMTP
helo dude
250-relay.ec.tmit.ac.jp
250-PIPELINING
250 8BITMIME
mail <me@relay.ec.tmit.ac.jp>
250 ok
rcpt <me@relay.ec.tmit.ac.jp>
250 ok
data
354 go ahead
Subject: testing
This is a test.
.
250 ok 812345679 qp 12345
quit
221 relay.ec.tmit.ac.jp
Connection closed by foreign host.
%
(2) 遠隔マシンから自マシンのメールのテストを行います。ほかのマシンか ら自マシンのアカウントへメールを出してみてください。
(3) 遠隔マシンからのテストメールのテストを行います。
(4) MUA のテストを行います。mh-e 等を使って,最初は自マシンのアカウン ト,次に遠隔マシンのアカウントにメールを出してください。
(5) 遠隔マシンから自マシンの postmaster へのメールのテストを行います。
遠隔マシンから PoStMaStEr@relay.ec.tmit.ac.jp
へメールを出し,
~alias/Mailbox
にメールが届いていることを確認してください。
/var/qmail/bin/qmail-qread
queue の内容をリストにして表示します。
(1) qmailanalog のディレクトリを決めます。デフォルトは
/usr/local/bin/qmailanalog
です。これを変更するには,
conf-bin.h
を編集してください。
(2) 以下のコマンドを実行します。
# make
# make setup
# ln -s /usr/bin/awk /usr/bin/nawk
(3) qmail のログがマイクロ秒単位であることを確認します。
849347513.939860 running
849347523.531129 new msg 19326
849347523.532347 info msg 19326: bytes 266 ...
(4) qmail のログを qmailanalog/matchup
に処理してもらいます。
% awk '{$1=";$2=";$3=";$4=";$5=";print}' < /usr/adm/message \
| /usr/local/bin/qmailanalog/matchup > out
(5) matchup の出力を qmailanalog/z*
スクリプトで処理します。
% /usr/local/bin/qmailanalog/zddist < out # メールの遅れの統計
% /usr/local/bin/qmailanalog/zfailures < out # 失敗メールのチェック
% /usr/local/bin/qmailanalog/zrecipients < out # 受け取り先の統計
% /usr/local/bin/qmailanalog/zrxdelay < out # 受け取り先の統計(遅れでソート)
% /usr/local/bin/qmailanalog/zsuccesses < out # 成功時に理由の統計(意味無し)
% /usr/local/bin/qmailanalog/zdeferrals < out # deferral時の理由の統計
% /usr/local/bin/qmailanalog/zoverall < out # 基本統計
% /usr/local/bin/qmailanalog/zrhosts < out # 相手のホストの統計
% /usr/local/bin/qmailanalog/zsenders < out # 差し出し元の統計
% /usr/local/bin/qmailanalog/zsuids < out # 差し出し元のuidの統計
以下のコマンドを実行し,
% touch .qmail-ifweb .qmail-ifweb-owner
.qmail-ifweb-request
ファイルに以下の内容を書き込みます。
| qlist2 ifweb relay.ec.tmit.ac.jp