2000-01-14(金) [長年日記]
■ Courier-IMAP
qmailによるMTAが実現したので、次はメールの読み書きに使うIMAPをMaildir形式に対応させる必要がある。この話題へのリンクもqmailの本家にあって、いろいろ読んでみた。IMAPに関する記述は少ない上に、IMAP-4.1へのリンクは切れていた。でも、わざわざMaildirの「ために」作られたIMAPサーバであるCourier-IMAPというサーバがあることがわかった。いいじゃんいいじゃ〜ん。mbox対応のサーバをわざわざパッチ当てて拡張するくらいなら、最初からMaildirのために作られたサーバ使う方がスマートじゃん。それにrpmのパッケージも置いてあるし。
さっそく拾って来てインストール。あとはマニュアルを頭からじっくりと読む。その途中、別のディレクトリにあるmanページを読む方法がわかる(笑)。なるほど、MANPATH環境変数を追加すればいいのね。昨日わからなかったqmailのmanも追加しておこう。しかしなんだ、マニュアルは英語の方が熱心に読むような気がする。日本語だとさらっと流し読みできちゃうけど、英語だと一言一区読み漏らすまいとしてがんばるもんなぁ。
……とか言ってるはしから、userdbの話は良くわからないので飛ばす(笑)。たぶんユーザ間で共有するフォルダとかそのへんの話でしょう。IMAPは共有フォルダを使ってNetNewsみたいなこともできるらしいから。クライアントの設定のところにNetscape Communicatorの例が出てたので(助かるねぇ)、それを参考にメーラーの設定をして、最初のトライ。昨夜受信したメールがちゃんと読めている。試しに1通出してから、fetchmailで受信して、新しいメールが届いていることも確認できた。実はちょっとエラーが出たけど、どうもNetscapeには問題があるらしいことがドキュメントに延々と書かれているので、そういうものなのかも知れない。まぁ、いつまでもNetscape使い続けるつもりはないからいいんだけど。メーラーを途中で乗り換えてもなんの問題もないのがIMAPのいいところだしね。つーわけで、次はメーラーの選択をしないといけないかな。いやいや、その前にWebをなんとかしよう。Apacheをちゃんと動かさないと、自分のサイトのメンテもできない。
2000-01-13(木) [長年日記]
■ qmail
勢いに任せた昨夜の行動を反省して(笑)、ちゃんとマニュアルを読んで作業をすることにしました。本家のページにはちゃんと邦訳されたインストールやセッティングの手引きがあるので、これを順序よく読んでいけばちゃんと動くようにできるはず。ただ、作者のポリシーからか、ソースからインストールする以外の手段がほとんど書かれていないので、rpmの呪縛に囚われちゃった人は昨日教科書にしたようなサイトを参考に入れるしかないのだよ。たしかにマニュアル読みながら一歩一歩進むのはいい勉強になりますが。それにしても、本家以外のサイトでは「qmailは簡単!」ってあおり文句がやたらと目に付くのに、本家の方ではメール管理をなめるなとばかりに脅し文句が羅列されていて、落差にビビること請け合い。まぁ、メール配送の仕組みやSMTP、メールヘッダの情報についてある程度前提知識がないとqmailの設定はできないと思う。それは確かだけど、sendmailも同じだわな。おれと同じような環境の人向けに、controlのファイルを数カ所直すだけで運用が始められるバイナリパッケージはあったら嬉しいんじゃないの、やっぱし。
さて、参考にするのは付属文書一覧にあるINSTALLという文書である。おっとその前に、昨夜の教科書にあった残りのパッケージは全部入れてしまいましょう。このへんはもう、思考停止(笑)。これをやっておくと、daemonの起動は勝手に設定されるし、linuxconfで見えるようになるし、/etc/inetd.confのsmtpのところはちゃんとコメントにしてくれたりして、INSTALLに書いてある設定作業のほとんどは完了した状態にしてくれることがわかる。ありがたや。でもドキュメントはひととおり目を通すこと。
しかしqmailの作者って、ちょっと変かも。キューをネットワークで共有させてはいけないからと言って、なんでもかんでも/var/qmailに入れてしまう(実行ファイルどころかmanファイルまで!)というのはやりすぎではないのか。あたしゃ、どうやってmanを読めばいいのかわからんよ(笑)。キューだけ/var/qmailに置けばいいのにね。
それはさておき、rpmのおかげでほとんど何も触らずに配送テストTEST.deliverまで来ることができる。4つのdaemonもちゃんと動いていることを確認したら、おもむろにローカル配信のテスト。
$ echo to: sho | /var/qmail/bin/qmail-inject
■ とやってみて、自分の~/Maildir/new/に新しいファイルができていることを確認できるはず。中身を見れば、純然たる自分宛のメールである。ちょっと感動。その他の外部やエラーになるアドレスの配送もテストして、うまくいくことを確認する。OK。
続いてはsendmailの置き換えのところだけど、これは昨日やっちゃったのでパス。qmailの提供するsendmailに置き換えてしまえば、/bin/mailはそのままでいいだろう(たぶん)。ちなみにこの置き換えもrpmがやってくれてあります。お次はTEST.receiveで受信のテスト。ここではtelnetでqmail-smtpdに接続して生SMTPを喋るという、なかなか楽しいテストである。送受信先として指定するアドレスは、いちおうcontrol/meにspc15.tadaと書いたのでそれに準じてsho@spc15.tadaとした。ところがこれが失敗で(泣)。相手のSMTPサーバが「spc15.tadaなんてドメインは実在しねぇだろ、こら」なんて言ってはじいてしまう。あたりまえだ。SMTPを喋るときに、MAILやRCPTで実在するドメイン付加するようにしてもわらねばならん。エンベロープの問題なので、メールヘッダのFromに書いても無駄だしね。
qmail-controlに、/var/qmail/control/配下にある各種ファイルの設定方法が書いてあるので読んでみる。怪しいのはdefaultdomainかdefaulthostかな。qmailはユーザ名のshoだけを使ってるだろう(つまりホスト名は補っていないだろう)と予測して、defaulthostにspc.gr.jpを指定した。自分のアカウントがあるドメイン名なんだから、騙ってることにはなるまい。もう一度チャレンジしてみたら、こんどは実験成功。ちゃんと~/Maildir/new/に新しいファイルが加わっている。ああ、よかった。
■ fetchmail
これで設定は完了した「はず」なので、fetchmailを使ってfreemail.ne.jpのアカウントからメールを持ってきてみる。何も考えずに実行したら、昨夜と違って順調に受信している模様。よしよし……と思ったら、メールは届いていない。あれれ? ログ(/var/log/qmail/の下あたりにある。syslogに出るって書いてあるんだけど、どうやって見るのかわかんねーっす)を見ると、sho@localhostに送れないからダメとか言って、送信者にfailure noticeなんてSubjectのメールが返ってるじゃないの。あうあう。この場を借りてお詫びします。すんません。
さて。localhostなんてドメインへの配送は認めていないってことだろうな、というのは容易に想像がつく。ユーザ名に@localhostを付けた犯人はおそらくfetchmailだろう。とすれば、qmailでlocalhostへの配送を許すか、fetchmailが付けるドメイン名をspc15.tadaに変えるかのいずれかの対応をとればいい……と思う。qmailのマニュアルを読んでいて、「.(ドット)」を含まないアドレスへの配送はしないなんて文章を読んだ記憶があるので、fetchmail側で対応するのが楽そう。fetchmailのマニュアルを探すと、-Dオプションてのがある。これだな。オプション与えるのは面倒だから、設定ファイルに書いておく方法もあるはずだと探すと、smtpaddressってのがあった。これでしょう。いままで使っていた~/.fetchmailrcを書き換えて、
defaults protocol pop3 smtpaddress spc15.tada user ++++++++ poll mizar.freemail.ne.jp pass ********
■ とする。テストのために自分に1通出してから(これはqmail-injectが使える♪)、ふたたびfetchmailを起動する。
$ fetchmail 1 message for ++++++++ at mizar.freemail.ne.jp (1090 octets). reading message 1 of 1 (1090 octets) . flushed
■ こんどは成功♪ やったね。これでメール配送のインフラは完了かな。次はクライアントのためにIMAPをなんとかせねばいけない。また明日。
2000-01-12(水) [長年日記]
■ Maildir
昨日判明したimapサーバのひどい仕様(?)がどうにも許せないので、メール管理方法を変えようと思い立った。Maildir形式ってヤツだ(昨日MHとか言ってたのは嘘)。この形式はメール1通を1ファイルに、1フォルダを1ディレクトリに対応させる直観的でわかりやすい形式で、メールのロスト等の問題が少ないとされている。ただ、以前WindowsでAL-Mailを使っていたときに似たような管理方式だったんだけど、ファイルの数がやたらと増えるのでディスクを食いまくるのと、ファイルのオープン/クローズはコストがかかるので、検索なんて処理をさせるとmbox形式を使っているメーラに比べて遅かった記憶がある。ただ、いずれメールはNamazuを使って検索対象にしようと思っているので、1メールが1ファイルになっているのは都合がいい。
■ qmail
となると、Maildir形式に対応したMTAを用意する必要がある。この形式の祖と言える(嘘かも)、qmailしかない。さっそくqmail関連のサイトを検索してお勉強。そうだ、IMAPもMaildir形式に対応しているものにしないといけないんだよ。大丈夫かなぁ。ちなみにいずれもKondara製のパッケージのない世界である。Maildirを推奨してるんなら、qmailくらい入れといてくださいよぅ、とほほるさん。しっかしなんか、ずんずん地雷原に足を踏み入れてるような気がするぞ……。まぁ、sendmail.cfの悪夢から逃れられるならそれだけの価値はあるかも?!(自分に言い聞かせている)
qmailはバイナリ配布を禁じているらしく、一発インストール可能なRPMは見つからない。どうにかqmail-1.03-102memphis.src.rpmというのを見つけた。ちなみに今日の教科書はここかな。rootになって、
# rpm --rebuild qmail-1.03-102memphis.src.rpm # cd /usr/src/redhat/RPMS # ls qmail-1.03-102memphis.i386.rpm
■ てな感じで、src.rpmからi386.rpmが作れる。Kondara的にはi586で作るべきなのかな。まぁ、specファイルの書き方を勉強していずれ作ってみることにしよう。
続いて、同居はできないsendmailのパッケージを消す。
# rpm -e sendmail
■ 続いてqmailをインストール。
# rpm -ivh qmail-1.03-102memphis.i386.rpm qmail ################################################## Your fully qualified host name is spc15.tada. Putting spc15.tada into control/me... Putting spc15.tada into control/defaultdomain... Putting spc15.tada into control/plusdomain... Putting spc15.tada into control/locals... Putting spc15.tada into control/rcpthosts... Now qmail will refuse to accept SMTP messages except to spc15.tada. Make sure to change rcpthosts if you add hosts to locals or virtualdomains!
■ いいのかな? エラーらしきものはないけど。教科書には他にもいろいろ入れているけど、rpmファイルの中身を見たら必要そうには見えなかったので(うちはセキュリティ気にしなくていいから)、あえて入れずにこのまま進む。続いては、inetdでqmail-smtpd(SMTPサーバ)が起動されるようにするのだ。/etc/inetd.confを開いて、昨日設定したsmtpの所を以下のように変更:
smtp stream tcp nowait qmaild /usr/sbin/tcpd /var/qmail/bin/qmail-smtpd
■ rootじゃなくてqmaildの権限で起動するのがqmailのqmailたる部分なのだろうな。たぶん。ためしにtelnetでSMTPにアクセスしてみる。
$ telnet spc15 smtp Trying 192.168.0.3... Connected to spc15.tada. Escape character is '^]'. 220 spc15.tada ESMTP quit 221 spc15.tada Connection closed by foreign host.
■ おっけー。さて、さっきの教科書にはなんか他にもいろいろ入れてるんだけど、こんなに必要なのかなぁ。ためしにfetchmailしてみようか。
$ fetchmail 33 messages for ++++++++ at mizar.freemail.ne.jp (98182 octets). reading message 1 of 33 (2336 octets) .fetchmail: can't even send to sho! fetchmail: SMTP transaction error while fetching from mizar.freemail.ne.jp fetchmail: Query status=10
■ ああっ、ダメだ(笑)。きっと一緒に協調して動くべきdaemonが他にいるんだな。うーん、今日はここまで。