0. 前提
- CentOS[5-7]でしか検証していません。
- rpmパッケージによるデフォルトのインストールパスであることを想定しています。
1. 移行元サーバで下記コマンド群を実行し、ファイルにシーケンス番号をエクスポートする。
cat <<'__EOD__' >/tmp/mailman-get-sequence.sh
#!/bin/bash
ls /var/lib/mailman/lists/*/config.pck | while read LINE
do
echo -n "$LINE" | sed -r 's@.+/([^/]*)/config.pck@\1@g'
/usr/lib/mailman/bin/dumpdb -p $LINE \
| grep "'post_id'" \
| sed -r "s@[ \t]*'post_id': '?([0-9\.]+)'?,?@ \1@g"
done
#EOF
__EOD__
chmod 755 /tmp/mailman-get-sequence.sh
/tmp/mailman-get-sequence.sh | tee /tmp/mailman-sequence.txt
2. 上記により生成されたファイル/tmp/mailman-sequence.txt
を、移行先サーバへコピー。
移行先サーバの/tmp/mailman-sequence.txt
へ配置する。
3. 移行先サーバで下記コマンドを実行し、インポート前のシーケンス番号を確認する。
ls /var/lib/mailman/lists/*/config.pck | while read LINE; do echo -n "$LINE" | sed -r 's@.+/([^/]*)/config.pck@\1@g'; /usr/lib/mailman/bin/dumpdb -p $LINE | grep "'post_id'" | sed -r "s@[ \t]*'post_id': '?([0-9\.]+)'?,?@ \1@g"; done
4. 移行先サーバで下記コマンド群を実行し、ファイルからシーケンス番号をインポートする。
cat <<'__EOD__' >/tmp/mailman-set-sequence.sh
#!/bin/bash
expect -c "
set timeout 4
spawn /usr/lib/mailman/bin/withlist -i -l $1
expect \">>>\"
send \"m.post_id=$2\\n\"
expect \">>>\"
send \"m.Save()\\n\"
expect \">>>\"
send \"quit()\\n\"
expect \"Any character string that will never be output.\"
exit 0
"
sleep 0.5
echo
#EOF
__EOD__
chmod 755 /tmp/mailman-set-sequence.sh
cat /tmp/mailman-sequence.txt | while read LINE; do /tmp/mailman-set-sequence.sh $LINE; done
5. 移行先サーバで下記コマンドを実行し、シーケンス番号が引き継がれていることを確認する。
ls /var/lib/mailman/lists/*/config.pck | while read LINE; do echo -n "$LINE" | sed -r 's@.+/([^/]*)/config.pck@\1@g'; /usr/lib/mailman/bin/dumpdb -p $LINE | grep 'post_id' | sed -r "s@[ \t]*'post_id': '?([0-9\.]+)'?,?@ \1@g"; done