備忘録のため,内容の正当性については責任を持ちません。

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

コメント

コメントする




CAPTCHA