ライン

ポイント:サーバ更改でも移行も簡単

ライン

 はじめに

mail/mailman

 FreeBSD 9.2に移行するのを放置していましたが、ついにサーバも切り替える時期が近づき、重い腰をあげました。

 導入と設定

導入

 pkgで導入できないたぐいみたいなので、普通にportsを利用します。

# cd /usr/ports/japanese/mailman
# make install clean

 今回も日本語バージョンのportsから導入を行うことにしました。
MTAの選択画面が表示されますので、選択を行います。

 sendmailとNamazu2を選択できるのが面白いです。

You may change the following build options:
MM_USERNAME=mailman     The username of the Mailman user.
MM_USERID=91            The user ID of the Mailman user.
MM_GROUPNAME=mailman    The group to which the Mailman user will belong.
MM_GROUPID=MM_USERID    The group ID for the Mailman user.
MM_DIR=mailman          Mailman will be installed in /usr/local/mailman.
CGI_GID=www             The group name or id under which your web server executes CGI scripts.
IMGDIR=www/icons        Icon images will be installed in /usr/local/www/icons.

という表示がされています。これは以前のままです。

Mailman has been installed, but requires further configuration before use!

You will have to configure both your MTA (mail server) and web server to
integrate with Mailman.  If the port's documentation has been installed,
extensive post-installation instructions may be found in:

  /usr/local/share/doc/mailman/FreeBSD-post-install-notes

Note (1):  If you use an alternate (non-Sendmail) MTA, you MUST be sure
that the correct value of MAIL_GID was used when this port or package
was built.  Performing a "make config" in the Mailman port directory
you can choose your MTA with the correct MAIL_GID.

Note (2):  The entire Mailman installation resides under /usr/local/mailman
The command-line scripts necessary to administer Mailman have been
installed in /usr/local/mailman/bin

Note (3):  As of version 2.1, Mailman's queue runner runs as a daemon and
is started by a script in /usr/local/etc/rc.d

In order to make private archives searchable with namazu2, you need copy
or link /usr/local/libexec/namazu.cgi to
/usr/local/mailman/archives/private/<ML name>/ and configure .namazurc
to refer to /usr/local/etc/namazu/namazu-sample.
See also
http://www.python.jp/pipermail/mailman-users-jp/2004-August/001008.html
written in Japanese.
----------------------------------------------------------------------------

こんなメッセージを表示しつつ完了していました。

設定

 GUI設定は、Apache24に導入設定を行います。httpd.conf に追加する形で設定を加えます。

    ScriptAlias /cgi-bin/ "/usr/local/www/apache22/cgi-bin/"
    ScriptAlias /mailman/ "/usr/local/mailman/cgi-bin/"
    Alias /pipermail/ "/usr/local/mailman/archives/public/"

</IfModule>
.
.
.
<Directory "/usr/local/mailman/cgi-bin">
    AllowOverride None
    Options None
    Require all granted
</Directory>
<Directory "/usr/local/mailman/archives/public/">
    Options FollowSymLinks Indexes
    AllowOverride None
    Require all granted
</Directory>

 次に、 /usr/local/mailman/Mailman/mm_cfg.py に追加する設定です。

DEFAULT_SERVER_LANGUAGE = 'ja'

SENDMAIL_CMD = '/usr/local/etc/mail/jsendmail'

DEFAULT_REPLY_GOES_TO_LIST = 1
DEFAULT_URL_PATTERN = 'https://%s/mailman/'
PUBLIC_ARCHIVE_URL = 'https://%(hostname)s/pipermail/%(listname)s'
DEFAULT_SUBJECT_PREFIX = "[%(real_name)s:%%04d]"
DEFAULT_LIST_ADVERTISED = No
DEFAULT_ARCHIVE_PRIVATE = 1
DEFAULT_FIRST_STRIP_REPLY_TO = Yes
ARCHIVE_TO_MBOX = 2
OLD_STYLE_PREFIXING = No
DEFAULT_SEND_WELCOME_MSG = No
DEFAULT_SUBSCRIBE_POLICY = 2
DEFAULT_PRIVATE_ROSTER = 2
ALLOW_RFC2369_OVERRIDES = No
DEFAULT_MAX_MESSAGE_SIZE = 1000
DEFAULT_DIGESTABLE = No
DEFAULT_DEFAULT_MEMBER_MODERATION = Yes
add_virtualhost('ml.example.ne.jp', 'ml.example.ne.jp')

 のように記述追加しました。

メーリングリストの初期設定

 サイトのパスワードを決めておきましょう。その後マスターのリストを作成し、セキュリティの確認をしておきます。

# cd /usr/local/mailman
# bin/mmsitepass
New site password:
Again to confirm password:
Password changed.
# bin/newlist mailman
Enter the email of the person running the list: foo@example.ne.jp
Initial mailman password:
To finish creating your mailing list, you must edit your /etc/aliases (or
equivalent) file by adding the following lines, and possibly running the
`newaliases' program:

## mailman mailing list
mailman:              "|/usr/local/mailman/mail/mailman post mailman"
mailman-admin:        "|/usr/local/mailman/mail/mailman admin mailman"
mailman-bounces:      "|/usr/local/mailman/mail/mailman bounces mailman"
mailman-confirm:      "|/usr/local/mailman/mail/mailman confirm mailman"
mailman-join:         "|/usr/local/mailman/mail/mailman join mailman"
mailman-leave:        "|/usr/local/mailman/mail/mailman leave mailman"
mailman-owner:        "|/usr/local/mailman/mail/mailman owner mailman"
mailman-request:      "|/usr/local/mailman/mail/mailman request mailman"
mailman-subscribe:    "|/usr/local/mailman/mail/mailman subscribe mailman"
mailman-unsubscribe:  "|/usr/local/mailman/mail/mailman unsubscribe mailman"

Hit enter to notify mailman owner...

# bin/genaliases -q >> /usr/local/etc/mail/aliases
# bin/check_perms -f
directory permissions must be 02775: /usr/local/mailman/archives/private/mailman.mbox (fixing)
directory permissions must be 02775: /usr/local/mailman/archives/private/mailman (fixing)
directory permissions must be 02775: /usr/local/mailman/lists/mailman (fixing)
directory permissions must be 02770: /usr/local/mailman/qfiles/virgin (fixing)
Warning: Private archive directory is other-executable (o+x).
         This could allow other users on your system to read private archives.
         If you're on a shared multiuser system, you should consult the
         installation manual on how to fix this.
Problems found: 4
Re-run as mailman (or root) with -f flag to fix

 上記のように操作し、設定を進めます。

 以下は、/etc/mail 以下の.mcのファイルに追加した1行です。既存行と入れ替えて make cf install restartしておきましょう。
その後にnewaliasesコマンドを入れることにより、両方のaliases.dbが有効になります。

define(`ALIAS_FILE',`/etc/mail/aliases,/usr/local/etc/mail/aliases')dnl

/etc/rc.conf には

# mailman
mailman_enable="YES"

を追加して開始させます。問題なく起動できたと思います。

日本語対応

 /usr/local/etc/mail/jsendmail というファイルを作成して今回も利用したいと思います。

#! /bin/sh
/usr/local/bin/nkf -j | /usr/sbin/sendmail $

とします。

nkfによる変換ツールのインストールが必要なので導入しておきます。pkgngでは導入できないのでportsを利用します。

# cd /usr/ports/japanese/nkf
# make install clean
# cd /usr/local/mailman
# chmod 500 /usr/local/etc/mail/jsendmail
# chown mailman:mailman  /usr/local/etc/mail/jsendmail

これで導入は完了です。

 旧サーバよりの移行手順

旧サーバより2つのディレクトリを保存し、同位置に展開

 旧サーバにある/usr/local/mailmanディレクトリにある2つのフォルダ以下を保存して展開します。 

# cd /usr/local/mailman
# tar pzcvf /var/tmp/mailman-lists.tar.gz ./lists
# tar pzcvf /var/tmp/mailman-archives.tar.gz ./archives

これをscpやsftpで新しいサーバに持ち込んで展開することで移行できます。

# cd /usr/local/mailman
# tar pzxvf /var/tmp/mailman-lists.tar.gz
# tar pzxvf /var/tmp/mailman-archives.tar.gz

次に、メールのホスト名やシーケンサーの値を調整します。
※以下。pythonがパスが違う場合には、実体のファイル名にして実行してください

# cd bin
# python -i withlist mailman
Loading list mailman (unlocked)
The variable `m' is the mailman MailList instance
>>> m.Lock() ※ロックします
>>> m.post_name ※現在の移行した値が表示されます
'OLD.example.ne.jp'
>>> m.host_name='NEW.example.ne.jp' ※新しい値を入力します
>>> m.host_name ※変更後を確認します
'NEW.example.ne.jp'
>>> m.web_page_url ※現在の値を確認します
'https://OLD.example.ne.jp/mailman/'
>>> m.web_page_url='http://NEW.example.ne.jp/mailman/' ※新しい値を入力します
>>> m.web_page_url ※現在の値を確認します
'http://NEW.example.ne.jp/mailman/'
>>> m.Save() ※保存します。m.Unlock()で単純なロック解除もできます
>>> (Ctrl +Dを入力) 
>>> (Ctrl +Dを入力)
Unlocking (but not saving) list: mailman
Finalizing

のように更新することで、新ホスト上の名前でおかしな挙動にならないように修正を行います。

 後は、今までのメーリングリストのシーケンスを同じ数値まで持ってこないと整合性がとれなくなりますので、上記同様に変更をかけます。

# cd /usr/local/mailman
# python -i bin/withlist LIST名
Loading list LIST (unlocked)
The variable `m' is the LIST MailList instance
>>> m.Lock()
>>> m.post_id ※現在の移行した値が表示されます
1.0
>>> m.post_id = 1281 ※現在の移行した値が表示されます
>>> m.post_id ※現在の移行した値が表示されます
1281
>>> m.Save() ※保存します。m.Unlock()で単純なロック解除もできます
>>> (Ctrl +Dを入力)
>>> (Ctrl +Dを入力)
Unlocking (but not saving) list: LIST
Finalizing

のようにすればいいだけです。上記では 1から、1281に変更した内容です。

 これで移行が完了しました

【改訂履歴】作成:2014/02/11 更新:2014-05-14 微修正:2017-04-02
【参考リンク】

Mailman, GNU メーリングリスト管理システム … Mailman のオフィシャルページ

Copyright © 1996,1997-2006,2007- by F.Kimura,