mbox形式で運用しているメールサーバをMaildir形式に移行したときのMemo
既存サーバ
Postfix 2.2.10 + mbox
新サーバ
postfix 2.6.6 + Maildir
移行に利用したプログラム Perfect_maildir
http://perfectmaildir.home-dn.net/
参考にしたサイト [メールデータ移行]
http://scientificsrv.com/migrate_to_maildir.shtml
メールをmboxからMaildirに移行するまえに当然ながら、既存サーバから新サーバにアカウント情報、メールスプールを移行しておきます
- perfect_maildir.plダウンロード
- perfect_maildir.plの実行権限
- スクリプト作成
- アカウントリスト作成
- スクリプトの実行
- pop3で確認
コンバートプログラムのperfect_maildir.plを上記サイトからダウンロードして適当なフォルダに保存します
手っ取り早くperfect_maildir.plの実行権限を追加します
また perl-TimeDateモジュールがインストールされているか確認して下さい
1 |
; html-script: false ][root@host1 ~]# chmod u+x perfect_maildir.pl |
参考サイトのスクリプトを元に今回の条件にあったスクリプトを作成しました
駄作ですが一応載せておきます。条件は
・ホームディレクトリがそれぞれグループ毎に分かれている
・所属グループが分かれている
またmboxからMaildirへの移行処理に限定しています
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
; html-script: false ]#!/bin/bash IFS=":" FOLDERCONVERT=/usr/local/bin/perfect_maildir.pl MIGRATELOG=/tmp/migrate-maildir.log rm -f $MIGRATELOG while read user group home; do inbox="/var/backup/mail/${user}" if [ -f "${inbox}" ]; then newdir="${home}/Maildir/" mkdir -p "$newdir" mkdir -p "$newdir"/cur mkdir -p "$newdir"/new mkdir -p "$newdir"/tmp chown -R ${user}:${group} ${newdir} chmod -R 700 "${newdir}" $FOLDERCONVERT "$newdir" < "${inbox}" >> $MIGRATELOG 2>&1 echo "mail migrate ${user}" fi done |
移行するアカウントリストを/etc/passwdなどを元に作成します
列はアカウント:グループID:ホームディレクトリになります
1 2 3 |
; html-script: false ]user01:501:/home/staffs/user01 user02:501:/home/staffs/user02 user03:600:/home/member/user03 |
スクリプトに実行権限を与えて実行します
1 2 3 4 |
; html-script: false ] [root@host1 ~]# chmod u+x mail_migrate.sh [root@host1 ~]# ./mail_migrate.sh < migrate_user_list.txt |
Dovecotなどのpopやimap経由でメールが読めるか確認します。取り敢えず今回は無事にpop3でメールが読めました
ちなみにperfect_maildir.plのログに警告が出力されます。
Use of uninitialized value $date in string at /usr/local/bin/perfect_maildir.pl line 93.
Use of uninitialized value $delivered_time in concatenation (.) or string at /usr/local/bin/perfect_maildir.pl line 109.
Use of uninitialized value $delivered_time in utime at /usr/local/bin/perfect_maildir.pl line 135.
最初の変数定義で
my $date;
my $delivered_time;
となっていて初期化されていないからだとは思うのですが….