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
形式ってヤツを試してみろってことかな。ふむん。ちょっと調べてみよう。
2000-01-10(月) [長年日記]
■ えっらい久しぶりにLinuxを立ち上げたような(笑)。こんなことでいいのか。まぁ、いいか。古いマシンは嫁に出したので、これでデスクトップにはこのLinuxマシンと、こないだ組んだゲーム専用機ことWindows98マシン。今後の目標は、現在ゲーム専用機でしかたなくやっているゲーム以外のことを可能な限りLinuxに移行することだ。まずはメールをちゃんとやろう。
■ samba
……と思ったけど、Windowsからアクセスできずにいるsambaの設定を見直す。Linux側からWindows側の資源はちゃんと見える。Linuxから、自マシンの資源も見える。でも、WindowsからLinuxの資源は見えない。マシン名もブラウズできないし、公開している資源も見えない。パスワードの暗号化の問題かと思って暗号化をNoにしてみたけどこれもダメ。うーん、何が悪いんだろう。Vineでは見えていたように記憶しているのだが。そういえばLinux Magazineに「sambaと闘う」って連載があったことを思い出して読み返してみるが、あまり参考になりそうな話が出ていない。ただ、最初の動作チェック時にsmbclient
の実行をするところで、ちょっと変なことに気がついた。雑誌の例に出ている出力は、マシンのIPアドレスが本来設定されているプライベートアドレスが表示されているのに、このマシン(spc15)でやるとlocalhostのアドレスである127.0.0.1が出ている。ははぁん、と思って/etc/hosts
を見ていると、spc15
のエントリーが127.0.0.1と192.168.0.3のニヶ所にある。これか。ためしに127.0.0.1
のエントリーを削除し見ると案の定、つながった!! そーかー、名前が解決できていなかったんだ。前に/etc/hosts
をいじった時に、変なことをしちゃったんだな。SMBをTCP/IP経由で使うときにはこのあたりに注意しないといけないのであった。うーん大ポカだ。でも素人には絶対に気がつかない原因でもあるよなぁ。やれやれ。
■ bind
さて、起動時にsendmail
がDNSを探しに行くのがたまらんので、次はbind
の設定だ。Webで検索してみて、ここがわかりやすそうだったので教科書にする。うちはISDNルータでDHCPを運用しているけど、DNSにするにはそのままにするわけにはいかないだろう。ということで、まずはこのマシンを固定IPアドレスに変更しなければならない。とは言っても現在使っているIPアドレスをそのまま使うことにして、MACアドレスをDHCPサーバに予約することでアドレスが変わることを抑止しよう。このあたりはlinuxconf
でてけとーに変更できた、と思う。
続いてbind
の設定は、教科書を参考に、ドメイン名をtada、IPアドレスを192.168.0.xxxに読み変えて設定する。各種ファイルの作成が終ったら、/usr/sbin/named
を実行すればDNSが動き出す。動作のチェックはnslookup
コマンドで:
$ nslookup *** Can't find server name for address 192.168.0.3: Server faild *** Default servers are not available
■ あれ? 変だなぁ。設定を見直して、どこも間違っていないことを確認する。ためしにrebootしてみたら、いつものsendmail
のタイムアウト待ちはなくなった(これはめでたしめでたし)。でもnalookup
は同じメッセージを吐く。しかも、外部のマシンが見えなくなっちゃったので、Webを参照することもできない。ふがーっ。なんでやねーん。
しかたがないのでWindowsを立ち上げて、Linuxにはtelnet
でアクセスしながら色々いじる。あっ。なんだ? linuxconfで何かいじった拍子に、/etc/named.conf
がぐちゃぐちゃに(泣)。いまさらながらman named.conf
を見てみると、なんと、vetsion 8からnamed.conf
のフォーマットが変わっているだと。やられたぜ。教科書の説明はversion 4だもんなぁ。で、コンバータがあるそうなので、こんな感じに変換する:
$ cd /etc $ mv named.conf named.4.conf $ named-bootconf < named.4.conf > named.conf
■ これで改めてnslookup
を実行。やった、ちゃんと名前が引けてるぅ。外部の(forwardする)DNSの指定を、プロバイダのものを指定していたせいで外部の名前が引けなくなっていたが、これはISDNルータのアドレスに変更して解決。やったぜ。
■ いやー、今日はやろうと思ってたことが全部できたねぇ。毎日こうだといいねー(笑)。