次のページ 前のページ 目次へ

1. qmail

qmail は,sendmail 等に代表される MTA の一種で,sendmail の代替物とし て機能します。500 名規模の ML の処理に sendmail では 3〜10 時間程度か かりますが,qmail はこれを10〜30 分程度で行うことができます。

1.1 インストール

詳しくは 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 には自マシンへのメー ルとして受け取るメールのドメインを登録します。

また,concurrencylocalconcurrencyremote には,自マシンと 遠隔マシンとの間で同時に処理するメール数(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.2 移行前のテスト

(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.3 sendmailからqmailへの移行

(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 を止める手順を示します。

  1. 現在のsendmail daemon を kill -STOP する。
  2. ここで,sendmail の子供が存在するときは,「kill -CONT し,すこし待って,再度 kill -STOP する」という作業を子供がいる間繰り返す。
  3. 子供がすべて止まったら,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.4 移行後のテスト

(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 にメールが届いていることを確認してください。

1.5 qmail の管理ツール

/var/qmail/bin/qmail-qread

queue の内容をリストにして表示します。

1.6 qmailanalog のインストールと設定

(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の統計

1.7 qmail の qlist による簡易 ML の作成

以下のコマンドを実行し,

% touch .qmail-ifweb .qmail-ifweb-owner

.qmail-ifweb-request ファイルに以下の内容を書き込みます。


| qlist2 ifweb relay.ec.tmit.ac.jp


次のページ 前のページ 目次へ