qpopperが重い件.-sオプション付けてサーバーモードで動かしてたらOK?とか思ってたのですが,どうやら甘かったらしい.
qpopperのFAQページによると,
> Server Mode reduces I/O on sessions that:
> 1. delete all mail on the server
> 2. leave all the mail on the server
とな.手元の環境で実験すると,新着メールが0のときはDisk I/Oほとんどないけど,新着メールがあるときにPOPすると,スプールを丸ごと別ファイルにコピーするいつものqpopperな挙動を示す.
ということは,毎日山ほどSPAMが来てスプールが500MBあるのに1分に1回POPする某先生対策にはならないということですか…
というわけで,10数年間お世話になりつづけたmbox形式に別れを告げて,Maidir形式に改宗することを決意する.df -iしたらinodeには十分余裕があるようだし.
てなわけで,以下作業ログ.OSはFreeBSD 6.4です.
旧:sendmail+qpopper
新:sendmail+procmail+dovecot
まずは必要となるパッケージをportからインストール
#portinstall mail/procmail
#portinstall mail/dovecot
#portinstall mail/mbox2mdir
sendmailがデフォルトで使うmail.localはMaildir形式には対応していないので,local配送にprocmailを使うようにする.
-/etc/mail/****.mcに
FEATURE(`local_procmail')
を追加.
メールを/var/mail/usrname/にMaildir形式で保存するようにprocmailrcを設定
-/usr/local/etc/procmailrcに
DEFAULT=/var/mail/$LOGNAME/
と書いておけばOK.最後の/を忘れると悲惨なことに.
現在mbox形式になってるスプールをMaildir形式に変換,全ユーザ分を以下のスクリプトで片付ける.
#!/bin/csh
cd /var/mail
foreach i (*)
mv $i $i-tmp
mkdir $i
mkdir $i/cur
mbox2mdir $i-tmp $i/cur/
chmod 700 $i
chown -R $i $i
end
dovecotの設定&qpopperとおさらば
-/etc/inetd.confに書いてあったqpopperに関するエントリを削除してinetdリロード
-/etc/rc.confに
dovecot_enable="YES"
と書いて自動的にdovecotが起動するようにする.
-/usr/local/etc/dovecot.confを編集していろいろと設定.
--/var/mail/usrname/の下を読みに行くようにする
mail_location = maildir:/var/mail/%u
-- 「メールをサーバに残す」設定をしていた人々が同じメールを再受信しなくて済むよう,qpopper時代にメールに付加していたX-UIDLを再利用するよう設定
pop3_reuse_xuidl = yes
今のところうまく動いているようだ.
gstatとかsystat -vmstatとかしてみてもディスクがbusyになる割合が高い時でも20%くらいに低下した.前は平気で80%とかいくときがあったのに・・・