BlueOnyx は MDA (Mail Delivery Agent) として dovecot を採用し,mbox 形式のメールボックスを扱う。しかし mbox 形式では,フォルダ内のすべてのメールを一つのファイルで管理するので,次のような不都合が発生する場合がある。
- ファイルサイズが膨大になる
- rsync などで差分バックアップするときに効率が悪い
- ファイルが破損すると,メールボックスまるごと読めなくなる
- ウイルス駆除プログラムを走らせると,メールボックスをまるごと削除されるおそれがある
そこで,メールボックスの形式を mbox から Maildir 形式に移行することにする。
今回の移行に際し,次のような点で注意が必要となる。
- Maildir 形式はディレクトリ階層の区切り文字に “.” (ドット) を用いるので,フォルダ名にはドットが使えない
(自動でハイフンに置き換えることにする) - 移行前の各メールの flag (既読,返信済み etc.) は消去される
- メールが cmuExport / cmuImport の対象からはずれる
それでは以下で具体的な手順を説明する。
まず,mbox 形式のファイルを Maildir に変換するプログラム (mbox2maildir) を untroubled.org からダウンロードする。
# wget http://untroubled.org/mbox2maildir -O /usr/local/bin/mbox2maildir.pl
# chmod 755 /usr/local/bin/mbox2maildir.pl
sendmail と dovecot を停止し,Maildir 形式で動作するように dovecot の設定ファイルを書き換える。
# /etc/init.d/sendmail stop
# /etc/init.d/dovecot stop
# vi /etc/dovecot.conf
#mail_location = mbox:~/mail/:INBOX=mbox
mail_location = maildir:~/Maildir
次のシェルスクリプト (Maildir.sh) を作成して実行し,既存のユーザのメールボックスを変換する。
# vi ~/Maildir.sh
#!/bin/sh
# See: /archives/1067.html
CONVERTER='/usr/local/bin/mbox2maildir.pl'
if [ ! -f $CONVERTER ]; then
echo "$CONVERTER ... Not found!"
exit 1
fi
HOMES=`cat /etc/passwd | grep /home/.sites/ | egrep -v '^SITE[0-9]+\-logs' | awk 'BEGIN { FS=":"; } { print $6; }'`
for HOME in $HOMES
do
USER=`echo $HOME | awk 'BEGIN { FS="/"; } { print $8; }'`
GROUP=`echo $HOME | awk 'BEGIN { FS="/"; } { print $5; }'`
echo "processing $USER..."
mkdir -p $HOME/Maildir/{cur,new,tmp}
chmod -R 0700 $HOME/Maildir
if [ -f $HOME/mail/.subscriptions ]; then
$CONVERTER $HOME/mbox $HOME/Maildir
for BOX in `cat $HOME/mail/.subscriptions`
do
if [ $BOX = "INBOX" ]; then
continue
fi
DBOX=`echo $BOX | perl -pe 's/\./-/g'`
mkdir -p $HOME/Maildir/.$DBOX/{cur,new,tmp}
chmod -R 0700 $HOME/Maildir/.$DBOX
$CONVERTER $HOME/mail/$BOX $HOME/Maildir/.$DBOX
echo $DBOX >> $HOME/Maildir/subscriptions
done
chmod 600 $HOME/Maildir/subscriptions
fi
chown -R $USER:$GROUP $HOME/Maildir
done
echo "done!"
# sh ~/Maildir.sh
processing taro....
processing jiro....
:
done!
受信したメールが Maildir に配送されるように procmail (ローカル MDA) の設定を変更する。
# vi /etc/procmailrc
#ORGMAIL=$HOME/mbox
#DEFAULT=$ORGMAIL
MAILDIR=$HOME/Maildir/
DEFAULT=$MAILDIR
sendmail と dovecot を起動する。
# /etc/init.d/sendmail start
# /etc/init.d/dovecot start
新しくユーザを追加したときに,自動的に Maildir が作られるように設定する。
# mkdir -p /etc/skel/user/{de,en,es,fr,ja}/Maildir/{cur,new,tmp}
# chmod -R 0700 /etc/skel/user/{de,en,es,fr,ja}/Maildir
mboxfix.pl を無効にする。
# chmod 600 /etc/cron.daily/mboxfix.pl
以上により,すべてのユーザのメールボックスが変換されるはずである。
うまく移行できていることが確認できたら,ディスク容量削減のため,各ユーザのホームディレクトリから mbox ファイルおよび mail/ ディレクトリを削除しても構わない。次のようなシェルスクリプト (delmbox.sh) を使って,一括で削除することもできる。
# vi ~/delmbox.sh
#!/bin/sh
HOMES=`cat /etc/passwd | grep /home/.sites/ | egrep -v '^SITE[0-9]+\-logs' | awk 'BEGIN { FS=":"; } { print $6; }'`
for HOME in $HOMES
do
rm -ri $HOME/mbox
rm -rf $HOME/mail/
done
echo "done!"
# sh ~/delmbox.sh
コメント