T:freebsd:dovecotpop3
出典: Tariki
目次 |
dovecotでPOP3サーバ
Dovecotはインストールすりゃ(あとちょっとの変更で)運用できる。これは歴史的経緯をもった組織でのPOP3サーバ変更の(ムダな)苦労の記録。
制約条件
- とある組織のSMTP/POP3サーバ。
- →IMAP4は使わない(以前私が唯一のIMAP4ユーザだった(爆))
- /home/ はメールサーバマシンになく、NFSマウントしている
- SMTPサーバはPostfix
- 以前はcyrus-imapdで運用
- → /var/mail/ユーザ名 がINBOXで、~ユーザ名/ にファイルは作らない
まずやったこと
- Dovecotの導入
- /usr/local/etc/dovecot.conf の書き換え
- →protocols = pop3、logfile = /var/log/dovemaillog くらい
- 認証の作成
- POP3 onlyでも必要みたい。
# mkdir /etc/ssl/certs # mkdir /etc/ssl/private # /usr/ports/mail/dovecot/work/dovecot-1.2.4/doc
このあと『無理やりアップグレード』によるライブラリのバージョン違いでハマるが、それは別の話。
パーミッションでハマる
INBOXができる /var/mail/ は、もともとgid: mailの1775とかになっているようですが、このパーミッションが違うと以下のようなエラーになります。
日付時刻 POP3(だれそれ): Error: stat(/var/mail/だれそれ) failed: Permission denied
NFSでハマる
まずは /usr/local/etc/dovecot.conf をデフォルトのまま
mail_location = mbox:~/mail/:INBOX=/var/mail/%u
で動かす。これって ~ユーザ名/mail/ なるIMAPディレクトリを作って整理する、というポリシみたいである。POP3では当然不要だからできないと思ったら
Fatal: Mailbox indexes in /home/だれそれ are in NFS mount. You must set mail_nfs_index=yes (and mail_nfs_storage=yes) to avoid index corruptions. If you're sure this check was wrong, set nfs_check=no.
FreeBSDのNFSロックが腐っているのは有名ですが、競合するほどメールこないし。いやIMAP4使わないんですけど。と思いつつも下記をdovecot.confに追加してみる。
mmap_disable=yes mail_nfs_index=yes mail_nfs_storage=yes
そしたら出たエラーが
日付時刻 POP3(だれそれ): Error: fcntl() failed with mbox file /home/だれそれ/mail/inbox: Operation not supported
dovecotのメールボックスロックの機構は、dotlock (ファイルを作る)、fcntl、flock、lockfの方法があり、それぞれ読み書きのロックで変更できるようだ。じゃあ
mbox_read_locks = flock mbox_write_locks = dotlock flock
で『flockが腐っている』でエラー、ならば(あれ、FreeBSDはlockfだっけ)で『lockfが腐っている』でエラー、dotlockのみにしたら『ファイルが作れません』だかでエラー。どうせいちゅうねん。
ここで思いついて
mail_location = mbox:/var/tmp/dovecot_dummy:INBOX=/var/mail/%u
を書き加え、 /var/tmp/dovecot_dummy/を掘りパーミッション0777。つまりIMAP4のメールボックスはどーせできないので、架空のディレクトリをローカルファイルシステムに作って指定してしまった。
これでうまくいきました。ちなみにあとでぐぐると http://wiki.dovecot.org/MailLocation/Mbox に同様の手法があり(『Only /var/mail/ mboxes』)、正しくは
mail_location = mbox:/var/empty:INBOX=/var/mail/%u:INDEX=MEMORY
のように書けということです (IMAP4ユーザがいると危険とも)。
mail_location = mbox:/var/tmp/dovecot_dummy/%u:INBOX=/var/mail/%u
としたら安全じゃないのかな?
正しい運用
Dovecotのポリシは、ホームディレクトリにIMAP4メールボックスを必ず作る (INBOXはincomingのみ)、ということのようなので、NFSロックが腐っている場合 (IMAP4が必要な場合)、正しくは
- /home/のNFSサーバ (ローカルにあるマシン)でDovecotを運用する
- 各ユーザのIMAP4メールボックスをローカルに作る
ということなようです。
今回は既に運用していたメールサーバのPOP3サーバ変更だったので自由は利かなかったのだが、いずれポリシを変更してみようかと思う。
