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が他にいるんだな。うーん、今日はここまで。
2000-01-11(火) [長年日記]
■ fetchmail
さて、今日はメールを受信しよう。この日のために、FreeMailに実験用のアカウントを用意しておいたわけよ。今日の教科書はここ。昨日はbindのバージョンが違って痛い目にあったけど、今日は(たぶん)大丈夫(笑)。用意したアカウントは++++++++@mizar.freemail.ne.jpなので、設定ファイルである.fetchmailrcは以下のようになる。*******はパスワード。マルチユーザで使うなら書くべきじゃないだろうけど、このマシンはおれ専用なので問題ないだろう。
defaults protocol pop3 user ++++++++ poll mizar.freemail.ne.jp pass ********
■ このファイルを$HOMEに置いて、/usr/bin/fetchmailを実行するだけ。
$ fetchmail File /home/sho/.fetchmailrc must have no more than -rwx--x--- (0710) permissions.
■ おぉぅ。怒られてしまった。セキュリティ対策ですな。
$ chmod 0710 .fetchmailrc $ fetchmail 1 message for ++++++++ at mizar.freemail.ne.jp (1090 octets). reading message 1 of 1 (1090 octets) . flushed
■ 試しにNetscape Mailで読みだしてみる。よし、ちゃんと届いてるぞ、と。あとはいつも使ってる設定を.fetchmailrcに書き加えるだけで、Linuxで受信できるって寸法だ。まぁ、それはもう少しあとだけど(だってまだメール出せないからね)。
教科書のsendmailのところを読んでいたら、daemonとしてではなく、inetd経由でsendmailを動かす方法が書いてあった。ふむ。これはいいかも知んない。このサイトはslackwareをネタにしているので、Kondaraには合わないところもあるけど、なんとかなりそうなので、ついでに挑戦しておこう。まず、sendmailをdaemonとして起動させない方法は、linuxconfを使えばいい。/etc/inetd.confの編集はまったく同じ。sendmailを殺して、inetdにHUPを送るのも同じでいい。ただし、Kondaraを使っている場合は/var/runにあるファイルを使ってプロセスIDを得た方がカッコイイ(笑)。SMTPポートへtelnetしての動作確認、fetchmailによるメール受信も成功したので、大丈夫でしょう。あとはメールの送信か。あぁ、sendmail.cf。やりたくねぇなぁ、これだけは。
それはまぁ、明日にしようと思って、メーラをうだうだいじっていたら、重大なことに気がついた。フォルダが階層的に作れないのだ。例えばメーリングリストのメールを分類しようと思って、MLというフォルダを作る。その下に例えばrubyというフォルダを掘ろうとすると、「すでにMLというファイルがあるよ〜ん」という(意味の)メッセージが出る。そりゃそうだ。IMAPの「フォルダ」はそのフォルダに入っているメールをすべて集めた単一のファイルなので、その下にフォルダを掘ろうとしたらML/rubyというファイルを作らないといけない。でも、MLというファイルはすでにあるから、同じ名前のディレクトリなんて掘れるわけがないのだ。はて、これはいったいどうすればいいのじゃ? 試しにMLというファイル(フォルダ)は削除して、新規にML/rubyというフォルダを作ってみた。つまり最初から階層構造を意識した指定をしたわけ。そしたらできた。でもさぁ、これだとMLにはメールを整理できないんだよね。それに、あとから階層を深くしたいと思った時もダメ。なんだこの仕様。ダメじゃん。時おり見かけるMH形式ってヤツを試してみろってことかな。ふむん。ちょっと調べてみよう。