[mailman-users-jp 2880] fml から Mailman への移行手順

Yoshito Takeuchi kinchan @ kinchan.com
2011年 3月 14日 (月) 10:55:15 JST


■ fml から Mailman への移行手順

お世話になります。竹内です。

メーリングリストマネージャーを fml から Mailman へ移行する手順をまとめてみました。
私自身の忘却録の要素が高く、端折っている部分が多数あります。
もっと良いやり方があるかもしれませんし、やり方が間違っているかもしれません。
共にご指摘頂けると幸いです。

(1)前提条件

fml を利用していて、そのメーリングリストを Mailman に移行する。

メーリングリストの名称は test-ml @ exsample.com とし、fml の実体は
/var/spool/ml/test-ml
 以下にあるものとする。

Mailman-2.1.14+j5 以降を
/usr/local/mailman 以下にインストールし動作確認済みとする。

テスト環境
FreeBSD 8.2
Postfix 2.8.1
Python 2.7.1
Perl 5.12.3

なお、以下は root で作業しました

(2)前準備

fml の動作を止める。( alias から test-ml 関係を削除し、newaliases するとか、fml 8 なら、makefml
rmml test-ml を実行するなど)

fml で過去ログをとっている場合、それを mbox 形式にまとめる。
過去ログは無い場合は、(3)に進む。

通常過去ログは
/var/spool/ml/test-ml/spool 以下にある。
過去ログを /var/spool/ml/test-ml/var/archive/ 以下などに圧縮してある場合は
それを /var/spool/ml/test-ml/spool 以下に展開しておく。

mbox 形式にまとめるには、fml 付属の packmbox.pl を wget などでダウンロードし適当なところにおいておく。
ここでは /var/spool/ml/test-ml/packmbox.pl として
ダウンロードしたとする。

ftp://ftp.fml.org/pub/fml/4.0-stable/src/contrib/utilities/packmbox.pl

なお、packmbox.pl は fml-4.0-stable などをダウンロードして解凍すると、contrib/utilities 以下にもある。

mbox 形式にまとめる手順は次の通り。今回は/tmp/test-ml.mbox に暫定的に保存している。
# cd /var/spool/ml/test-ml/spool
# perl ../packmbox.pl > /tmp/test-ml.mbox

(3)Mailman で test-ml を作成する

/usr/local/mailman/bin/newlist
或いは
http://www.exsample.com/mailman/create
などで、test-ml を Mailman 上に作成する

(4)fml の過去ログを Mailman の保存書庫に反映させる

作業は以下の通り

# mv /tmp/test-ml.mbox /usr/local/mailman/archives/private/test-ml.mbox/
# /usr/local/mailman/check_perms -f
# /usr/local/mailman/bin/arch test-ml
/usr/local/mailman/archives/private/test-ml.mbox/test-ml.mbox
(だ〜〜〜とスクロールして、Mailman に過去ログの html などが作成される)
# /usr/local/mailman/check_perms -f

(5)fml の連番を Mailman に引き継ぐ

fml では、投稿メールの subject に [test-ml:01234] のような連番がデフォルトでつきます。この連番を
Mailman に引き継ぐため、以下のコマンドを実行します。
なお、subject に連番を付けていない場合でも、この作業をしないと、これ以後の投稿メールが Mailman
の保存書庫に自動的に保存されないようですので、必須作業と思われます。

# /usr/local/mailman/bin/withlist test-ml
test-ml のリストを読み込中 (ロック解除)
変数 `m' が test-ml の MailList インスタンスです
>>> m.Lock()
>>> m.post_id = (var/spool/ml/test-ml/seq より1多い数字)
>>> m.Save()
>>> m.Unlock()
>>> ^D        ( ctrl-D を入力)
最終処理中

Mailman の test-ml 全体オプション - 「件名の先頭に付ける語句」に

[Test-ml:%05d]

とすることで、Mailman でも subject に [Test-ml:01234] が付加される形式となる。

(6)fml の会員リストを Mailman へ移行する

fml の会員リストは二つあります。
ともに、/var/spool/ml/test-ml 以下にあります。

members
と
actives(fml4)
recipients(fml8)

で、members が投稿可能なメールアドレスの入ったファイル
actives, recipients が実際に配送されるメールアドレスが入ったファイルです。
これにより、投稿できるけど配送されないアドレスなどが実現されています。
まず、
# diff members actives
などして現状を把握する。
続いて、Mailman に転送する前に、fml の members, actives には、登録解除した
メールアドレスの頭に ##bye などと入っているので、エディターで編集、あるいはなんらかのフィルターを使って削除し、Mailman
に登録するメールアドレスだけのファイルにする。

実際の作業は
# /usr/local/mailman/bin/add_members -r /var/spool/ml/test-ml/members
-w n -a y test-ml
# /usr/local/mailman/bin/check_perms -f
となる。

-r は会員ファイル指定オプション、-w と -a は下記参照。

 --welcome-msg=<y|n>
    -w <y|n>
        リスト会員に, 歓迎メールを出すかどうか. これは `send_selcome_msg'
        の設定より優先します.

    --admin-notify=<y|n>
    -a <y|n>
        リスト管理者に登録の成功/失敗を通知するかどうか.
        これは `admin_notify_mchanges' の設定より優先します.

Mailman に会員を登録後、投稿できるけど配送されないアドレスなどの修正を行う。

(7)動作テスト

test-ml @ exsample.com にテストメールを出して、会員に配送されるか、保存書庫に反映されるか、subject の連番が正しいかチェックする。

動作テストが OK なら、とりあえず、fml から Mailman への移行は終了。

以後、細かいチューニングを行う。

以上。

p.s
私の mm_cfg.py

蛇足と思いますが、15年近く fml を使用して、Mailman に移行してきた私の mm_cfg.py を添付しておきます。

----------------------------------------------------------------------------
MTA = 'Postfix'
POSTFIX_ALIAS_CMD = '/usr/local/sbin/postalias'
POSTFIX_MAP_CMD = '/usr/local/sbin/postmap'

DEFAULT_SERVER_LANGUAGE = 'ja'

DEFAULT_EMAIL_HOST = 'exsample.com'
DEFAULT_URL_HOST = 'www.exsample.com'

OWNERS_CAN_DELETE_THEIR_OWN_LISTS = No

# for Japanese patch

GLOBAL_PIPELINE.insert(1, 'iso2022jpfix')

# 0=public, 1=private
DEFAULT_ARCHIVE_PRIVATE = 1

DEFAULT_SUBJECT_PREFIX = "[%(real_name)s:%%05d]" # for numbering
DEFAULT_MSG_FOOTER = ""

# 0 - Reply-To: not munged
# 1 - Reply-To: set back to the list
# 2 - Reply-To: set to an explicit value (reply_to_address)
DEFAULT_REPLY_GOES_TO_LIST = 1

# Language list

def _(s):
    return s

LC_DESCRIPTIONS = {}

def add_language(code, description, charset, direction='ltr'):
    LC_DESCRIPTIONS[code] = (description, charset, direction)

add_language('en',    _('English (USA)'),       'us-ascii',    'ltr')
add_language('ja',    _('Japanese'),            'euc-jp',      'ltr')

ADMIN_CATEGORIES = [
    # First column
    'members', 'general', 'passwords', 'language', 'nondigest', 'digest',
    # Second column
    'privacy', 'bounce', 'archive', 'autoreply','contentfilter', 'topics',
    ]

DEFAULT_SEND_REMINDERS = No

# Send welcome messages to new users?
DEFAULT_SEND_WELCOME_MSG = No
# Send goodbye messages to unsubscribed members?
DEFAULT_SEND_GOODBYE_MSG = No
# Check for administrivia in messages sent to the main list?
DEFAULT_ADMINISTRIVIA = No

DEFAULT_MAX_MESSAGE_SIZE = 0           # KB

DEFAULT_LIST_ADVERTISED = No

# Private_roster == 0: anyone can see, 1: members only, 2: admin only.
DEFAULT_PRIVATE_ROSTER = 2

# 0 - yearly
# 1 - monthly
# 2 - quarterly
# 3 - weekly
# 4 - daily
DEFAULT_ARCHIVE_VOLUME_FREQUENCY = 0
DEFAULT_DIGEST_VOLUME_FREQUENCY = 0

# Is the list owner notified of subscribes/unsubscribes?
DEFAULT_ADMIN_NOTIFY_MCHANGES = Yes
-----------------------------------------------------------------------------



mailman-users-jp メーリングリストの案内