qmail を研究室に導入するまで

back

注意: いいかげんに書いた文章なので ひどいです。qmail の仕組みがわからない人は、 最初に こっちを 読んだほうがいいかも。


はじめの動機


田中・徳永研究室のメール配送


どういう状況なのか

こっちと内容的にかぶってます。


qmail の啓蒙活動

まず、ほとんど新山の専用機と化している (でも公共物) Linux マシンに 入れてみる。インストールはさっさと終わった。 jp.qmail.org の膨大な ドキュメント (でもちょっと索引が面倒です) を見ながらやったら、 あっさり動く。設定も control/ をいじるだけですごく楽。 このころ、OSF で sendmail を動かしている研究室の人々は 「sendmail に kill -HUP すると落ちてしまう」という理由で 苦労していた。なんだ、qmail のほうがずっといいじゃん、と思う。

このマシン上であれこれ設定を変えてしばらく遊んでみる。 tcp_wrapper も入れてみたりして、ふむふむ。 この試行錯誤のさいに仕入れた知識をもとに qmail の動作というドキュメントを 書いた。こういうのを書くことで自分自身でもずっと理解がしやすくなる。


まずゲートウェイ cl0 から qmail 化

cl0 にこっそりインストール。さっくり動作。 設定ファイルは こっち 参照。 メールばんばん来てるので、sendmail を止めるのが一番こわかった。 止めたら最後、 qmail は一発で動く。うまくいきすぎて逆にあやしい。

ゲートウェイはメールの中継をするので tcp_wrapper を入れる。 qmail-smtpd は inetd から呼び出されるが、ほんとうは tcpserver のほうがいいらしい (あとで tcpserver から立ち上がるように なおした)。


続いてほかのマシンに

研究室のほかのマシン (ゲートウェイでもなく、ファイルサーバでもない マシン) は基本的にメールを受けとらない。送るだけである。 なので sendmail は止めて、inetd のエントリも消して、ネットワーク上からの 受けとりは一切できないようにした。送るときは直接ゲートウェイに 接続すればいいし、ローカル配送は home を NFS マウントしているから、 qmail ならネットワーク使わないからね。

Mew は共有ファイル (lib/im の SiteConfig) を設定すれば OK。

MH は post を spost にリンクすりゃいい。 ほんとはもうちょいいろいろある。


.forwardユーザにアナウンス

.qmail は .forward とすこし書きかたがちがうのだ。 以下はその文面:

Subject: Important notice
Date: Sat, 23 Oct 1999 18:25:07 +0900
From: SHINYAMA Yusuke <euske@cl.cs.titech.ac.jp>

(Japanese - The english version is below)
東工大 徳永研究室の新山です。このメールは田中・徳永研で、
メールの転送を利用している方にお送りしています。

1999年 11月 7日より、田中・徳永研のメール転送方式が変わります。
今までメールの転送先にはホームディレクトリ直下の .forward ファイルが
使われてきましたが、今後このファイルは無視され、かわって「.qmail」という
ファイルが使われることになります。

お手数ですが、メールの転送を希望する方は新しく .qmail ファイルを
ホームディレクトリの直下に作成していただくようお願いします。
もし、ログインするのが面倒な場合はその旨私あてに返信してください。こちらで
管理者権限により適切な .qmail を作成させていただきます。

.forward にひとつのアドレスしか書いていないかたは、ただ名前を .qmail に
変えていただくだけで結構です。複数のアドレスを記述している方は注意が必要です。
.qmail は .forward と書き方が異なり、1行に1アドレスを記述するように
なっています。またメールをこちらのサーバに残しておく場合、従来のように
スラッシュ \ を使うのではなく、"./Mailbox" という行を書いてください。
以下にメールをeuske@hoge.hoge に転送し、田中・徳永研のサーバにも残しておく
ような .qmail の例を挙げます:

---- .forward の場合:
\euske,euske@hoge.hoge

----  .qmail の場合:
./Mailbox
euske@hoge.hoge

移行後もまだ .qmail が作成されていないユーザの方には再度連絡いたします。
ご不明の点がありましたらお問い合わせください。
--
 新山 祐介  euske@cl.cs.titech.ac.jp


(English)
Hello, I'm a system administrator in Tanaka/Tokunaga Lab., Tokyo Inst. of Tech.
On Nov. 7, 1999, our mail system will be altered.  After this,
your `dot-forward' file doesn't work. If you want to have your mail
forwarded, please create a `dot-qmail (.qmail)' file under your home
directory. If you agree that I may create the file as a system
privileged account, please just reply to this mail.

Unlike a dot-forward, a dot-qmail file contains distination addresses
one per line.  If you have only one address, just rename the dot-forward 
file into ".qmail". Otherwise, you can put addresses at each line. And
you may not let a slash(\) or comma(,) contained in a line.
If you want to preserve mails on our server, have the file include a line
"./Mailbox". Here is an example dot-qmail file, which forwards a mail to
euske@hoge.hoge and preserves it:

---- in .forward:
\euske,euske@hoge.hoge

---- in .qmail:
./Mailbox
euske@hoge.hoge

If you have any question, please ask me.  Thank you,

Yusuke Shinyama
Tokyo Institute of Technology, Japan
euske@cl.cs.titech.ac.jp

さて、この時点で sendmail が動いているのはもはや snow (メイルスプール) だけ。しかしいきなり qmail にするにはまだ早い。xbiff やらその他を qmail 対応にしなけりゃならない。

xbiff, xpbiff, xlbiff(利用者一名) を qmail の Mailbox に対応させる。 これは、パッチあててがさごそやる。Maildir にまで対応させるのは さすがにしんどいので省略。しかし xpbiff ならパッチがあるらし。

Solaris の lpsched が印刷キャンセル時の通知をメールでするのだが、 UUCP なメールアドレスを吐くので、qmail だと エラーになる。しょうがないので LPRngを導入。くそったれ。


いよいよメイルスプールを qmail 化

qmail をインストールし、うごかしておく。 あと tcp_wrapper も。でも inetd はまだ直していない。

/etc/aliases の内容を /var/qmail/alias に展開。 たいした量じゃないだろう…と思って手でやったが、大変だった。 /var/qmail/filters にメイリングリスト関係のフィルタやら、 メンバーファイルやらを置くことにする。以後、こっち使って。 この時点で研究室の admin にアナウンスしたら、もう qmail が 動いてるのかと勘違いされる。まだですよ。


Date: Nov. 4
From: euske
To: admin
Subject: [qmail] important

しんやまです。

qmail への移行にともない、従来の /etc/aliases は機能しなくなり、かわりに
/var/qmail/alias にある .qmail-* ファイルがそのアドレスへの
転送を指示します。これは、ユーザのホームにある .qmail と同じです。

で、snow の /etc/aliases の内容を snow:/var/qmail/alias/ 以下に
手で展開しました (ほんとは fastforward を使うのがよいのだが、
あんまり複雑にするのはいやなんで)。

これからはひとつのファイルで全部のエイリアスを書くということがなくなるんで、
どのファイルがだれの責任下にあるか明確にするため、
snow:/var/qmail/alias/NOTICE というファイルを作り、そこに
責任の所在を書くようにしてください。現在これは admin が書き込めるように
なっています。

現在の NOTICE を以下に添付しますんで、
責任のある方が以降その dot-qmail を管理するようにしてください。
念のため、正しく展開されてるかどうか確認したほうがよいでしょう。

あと誰が管理してんのか不明な ML があるんですけど、これはどうしましょ。
- euske
(以下省略)

Date: Nov. 4
From: euske
To: admin
Subject: Re: [qmail] important

しんやまです。

/usr/lib/mail-list 以下をごっそり /var/qmail/filters というディレ
クトリにコピーしました。ML のメンバーファイルは
/var/qmail/alias/.qmail-*から /var/qmail/filters/ への symbolic
link にしました。いちおうご確認を。

つうわけで、qmail が動きだしてから以降は、エイリアスやフィルタ関係は
/var/qmail/filters のものが作動します。気をつけてください。フィル
タでパス名に依存してるものはとくになかったんで、問題ないと思います。

が。

せっかく qmail へ以降するにあたって、/usr/lib/sendmail (にせ sendmail) を
わざわざ呼び出すのはきもちわるいので、各スクリプト中で

 }'|/usr/lib/sendmail -fowner-hoge@cl.cs.titech.ac.jp -oi -oem -odb hoge-member

となってるところは、

 }'|/var/qmail/bin/qmail-inject -fowner-hoge@cl.cs.titech.ac.jp hoge-member

としたほうがいいと思う。
まちがえて /usr/lib/mail-list のほうをいじらないように。

- euske

Date: Nov. 4
From: euske
To: admin
Subject: [qmail] notice

しんやまです。
誤解があるようなので少々補足。

ML の qmail 用のエイリアスは、まだ動いていません。フィルタ類も同様です。
snow では、まだ sendmail がメールを受けているのです。
sendmail は 11/7 か 11/8 あたりに止める予定です。

メーリングリストをテストするときは、snow で 
/var/qmail/bin/qmail-inject を使ってください。
注意!: これは snow での qmail ローカル配送を呼び出すので、研究室内の
ユーザに配送される場合 /var/spool/mail/ ではなく $HOME/Mailbox に
ファイルができてしまいます。リモートではちゃんと配送されるようです。

qmail には、いわゆる newaliases に相当するコマンドはありません。
dot-qmail ファイルは、できたその時から、いきなり動き出します。

クリティカルなタイミングを避けるため、
dot-qmail の sticky bit (+t) を立てておくと、
qmail はそのアドレスへの配信を一時中止します。だから dot-qmail の
書き換えを安全にやりたかったら、いったんその sticky bit を立ててから
編集してください。終わったら、sticky bit をおろせば
配信が再開されます (つっても、オレはそんなめんどくせーことしねーけど)。

- euske

/var/qmail/filters の Mailing List のスクリプトを あれこれ変更し、sendmail のかわりに qmail-inject を呼び出すようにする。 さあこれで準備完了。

sendmail を止める。もう後戻りできんぞ。

/var/spool/mail のファイルを 各ユーザの ~/Mailbox に mv する。でも、従来の pop がまだ使えるように /var/spool/mail から それぞれの人の ~/Mailboxln -s

cd /var/spool/mail
for i in /home/tanaka/* /home/tokunaga/*; do
  n=`basename $i`
  if [ -d $i -a -f $n ]; then
    mv $n $i/Mailbox
    ln -s $i/Mailbox $n
  fi
done

inetd をかきかえて kill -HUP。 内側とか外側とかあっちこっちにメールを出してみてうまくいってるかどうか 確認する。ヒヤヒヤ。この瞬間から sendmail とはおさらば。


あとしまつ

sendmail, binmail をいろいろ消去。rc を変更。 マシンが何台もあるとけっこう気をつかいますよ、やりのこしがないかどうか。

まだ .qmail がない人 (で forward している人) に警告。

うげー Linux の MH で、 NFS ごしのファイルから inc できない! ファイルのロックがうまくいかないらしいので、 /usr/local/lib/mh/mtstailor を、つぎのように変更。

mmdfldir:
mmdflfil:	Mailbox
sendmail:	/var/qmail/bin/qmail-inject
servers:	cl0i
lockstyle:	1	←ここ

できれば~/Mailbox からメールをとってくれるようにアナウンス。

けっきょく、popper は今まで使っている qpopper (これは qmail とは 関係がない) をそのままにした。qmail-pop3d は maildir/ のみにしか 対応してないようなので。

こんなメールがきました。


To: admin
Subject: ML の sed すくりぷと
Date: Fri, 19 Nov 1999 14:49:38 +0900
From: SUZUKI Taizan

  泰山です.

  sed を使ったお気楽 ML スクリプトを使っている人におしらせです.

  qmail を導入した時に ML がちゃんと配送されなくなったので

/^Received: /d

  を削除した人がいるみたいですが,これをやるのであれば,その次の行の

/^[	][	]*id /d

  も削っておいた方がいいです.

  もし,以前のように Received がつかないようにしたいのであれば,上記
  の二行の代わりに,

/^Received: /d
/^[ \t][ \t]*id /d
/^[ \t][ \t]*by /d

  と書くのがよいかと思います.

# sendmail では Received が複数行に渡る場合に id で折り返されていた
# のですが,qmail では by で折り返されるようです.

- たいざん

あれまあ。qmail はヘッダのつけかたが違うので、sed で 適当なスクリプトを書いてたひとはひっかかっちゃうのだ。

rblsmtpd を入れて、 MAPS RBL にあるサイトはすべて拒否

ここから先はまだ実行していません - 12/6 euske

各種設定ファイルのサンプルをつくる。

そのうち、/var/spool/mail からのリンクをけす。


Last modified: Wed Sep 26 18:50:01 2001
Yusuke Shinyama