ライン

ポイント:メーリングリストといえば…

ライン

 はじめに

mail/mailman

 FreeBSD 9.3でMTAをPostfixで動作させているサーバ上にMailManを設置します。
既存のsendmailで動作させているMailManから移行して利用することになります。

 FreeBSDでMailManを利用したことがあり、過去にもページを公開していますが、それ以来になります。

 導入と設定

導入

 pkgで導入可能になっていますが、日本語版と英語版では導入バージョンが異なるようです。

#pkg install mailman
Updating FreeBSD repository catalogue...
Fetching meta.txz: 100%   968 B   1.0k/s    00:01
Fetching packagesite.txz: 100%    5 MB 659.7k/s    00:08
Processing entries: 100%
FreeBSD repository update completed. 23774 packages processed

milter-greylist-4.4.3_4 is locked and may not be modified
The following 4 packages will be affected (of 0 checked):

New packages to be INSTALLED:
        mailman: 2.1.18.1_7
        python2: 2_3
        py27-dnspython: 1.11.1_1
        py27-setuptools27: 5.5.1

The process will require 34 MB more space.
3 MB to be downloaded.

Proceed with this action? [y/N]: n
kimura /home/kimura #pkg install ja-mailman
Updating FreeBSD repository catalogue...
FreeBSD repository is up-to-date.
All repositories are up-to-date.

milter-greylist-4.4.3_4 is locked and may not be modified
The following 2 packages will be affected (of 0 checked):

New packages to be INSTALLED:
        ja-mailman: 2.1.14.j7_1,1
        python2: 2_3

The process will require 31 MB more space.
3 MB to be downloaded.

Proceed with this action? [y/N]:y
Fetching ja-mailman-2.1.14.j7_1,1.txz: 100%    3 MB 451.0k/s    00:08
Fetching python2-2_3.txz: 100%    1 kB   1.1k/s    00:01
Checking integrity... done (0 conflicting)
[1/2] Installing python2-2_3...
[1/2] Extracting python2-2_3: 100%
[2/2] Installing ja-mailman-2.1.14.j7_1,1...
===> Creating users and/or groups.
Creating group 'mailman' with gid '91'.
Creating user 'mailman' with uid '91'.
[2/2] Extracting ja-mailman-2.1.14.j7_1,1: 100%
---> Starting post-install script
---> Running update
Upgrading from version 0x0 to 0x2010ef0
getting rid of old source files
no lists == nothing to do, exiting
---> Checking crontab(5) file for user "mailman"
---> Creating crontab(5) file for user "mailman"
---> Checking (and fixing) file and directory permissions
Message for ja-mailman-2.1.14.j7_1,1:
 ----------------------------------------------------------------------------
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 MTA (meaning "not Sendmail"), you MUST
be sure that the correct value of MAIL_GID was used when this port or
package was built.  You can choose your MTA with the correct MAIL_GID by
running "make config" in the Mailman port directory.

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.
You can also see the Japanese document in
<http://www.python.jp/pipermail/mailman-users-jp/2004-August/001008.html>
----------------------------------------------------------------------------
# pkg delete ja-mainman
# cd /usr/ports/japanese/mailman
# make MAIL_GID=nobody install clean
# pkg lock ja-mailman
ja-mailman-2.1.14.j7_1,1: lock this package? [y/N]: y
Locking ja-mailman-2.1.14.j7_1,1

 今回は、Postfix用にする必要があるので、再導入をしました。
MTAの選択画面が表示されますので、選択を行います。

 導入は完了です。引き続き、Apache24側に設定を入れます。
他のページで導入とワイルドカードでのSSL化は実施済なので、このページではその部分が抜けます。

設定

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

    ScriptAlias /cgi-bin/ "/usr/local/www/apache24/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>

 サービスを入れ直します。gracefulでも十分ですが、自サーバなのでリスタートにしました。

#service apache24 restart
Performing sanity check on apache24 configuration:
Syntax OK
Stopping apache24.
Waiting for PIDS: 28200.
Performing sanity check on apache24 configuration:
Syntax OK
Starting apache24.

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

DEFAULT_SERVER_LANGUAGE = 'ja'
MTA='Postfix'

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', 'list.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
# bin/check_perms -f
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.
No problems found

 上記のように操作を完了します。
旧側の/usr/local/etc/mail/aliasesの中身で移行対象のものをコピペで持ち込みます。

 さて、Postfix側の設定に入ります。以前のページは、mailman4.html という名前で、MailMan 2.1.8の時代だったのですね。

/usr/local/etc/mail/main.cf の該当箇所を修正します。上記で作成したaliasesを反映するためのものです。

alias_maps = hash:/etc/mail/aliases, hash:/usr/local/etc/mail/aliases
alias_database = hash:/etc/mail/aliases, hash:/usr/local/etc/mail/aliases

そして、コマンドでhash dbを作成します。

# newaliases

何もメッセージは出ませんが、dbファイルは更新されていましたので大丈夫そうです。

/etc/rc.conf には

# mailman
mailman_enable="YES"

を追加して開始させます。

#service mailman start
#ps -ax | grep mailman | grep -v grep
58175 ??  Is       0:00.01 /usr/local/bin/python2.7 /usr/local/mailman/bin/mailmanctl -s -q start
58176 ??  S        0:00.14 /usr/local/bin/python2.7 /usr/local/mailman/bin/qrunner --runner=ArchRunner:0:1 -s
58177 ??  S        0:00.16 /usr/local/bin/python2.7 /usr/local/mailman/bin/qrunner --runner=BounceRunner:0:1 -s
58178 ??  S        0:00.15 /usr/local/bin/python2.7 /usr/local/mailman/bin/qrunner --runner=CommandRunner:0:1 -s
58179 ??  S        0:00.15 /usr/local/bin/python2.7 /usr/local/mailman/bin/qrunner --runner=IncomingRunner:0:1 -s
58180 ??  S        0:00.15 /usr/local/bin/python2.7 /usr/local/mailman/bin/qrunner --runner=NewsRunner:0:1 -s
58181 ??  S        0:00.18 /usr/local/bin/python2.7 /usr/local/mailman/bin/qrunner --runner=OutgoingRunner:0:1 -s
58182 ??  S        0:00.16 /usr/local/bin/python2.7 /usr/local/mailman/bin/qrunner --runner=VirginRunner:0:1 -s
58183 ??  I        0:00.12 /usr/local/bin/python2.7 /usr/local/mailman/bin/qrunner --runner=RetryRunner:0:1 -s

問題なく起動できました。

日本語対応

 /usr/local/etc/mail/jsendmail というファイルを作成して今回も利用したいと思います。
そもそも、これsendmailだし、いらんような気がしてきたけど、とりあえずいれとくか。

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

とします。Postfix利用ですが、実はここはそのままで問題ありません。

###SENDMAIL_CMD = '/usr/sbin/sendmail'
SENDMAIL_CMD = '/usr/local/etc/mail/jsendmail'

上記のように、/usr/local/mailman/Mailman/Defaults.py の該当箇所に変更を入れました。
後ほどサービスはリスタートすることにします。

nkfを追加しておきます。また、スクリプトはオーナーとパーミッションを変更しておきました。

#pkg install ja-nkf
Updating FreeBSD repository catalogue...
FreeBSD repository is up-to-date.
All repositories are up-to-date.
Updating database digests format: 100%
The following 1 packages will be affected (of 0 checked):

New packages to be INSTALLED:
        ja-nkf: 2.1.3,1

The process will require 442 kB more space.
141 kB to be downloaded.

Proceed with this action? [y/N]: y
Fetching ja-nkf-2.1.3,1.txz: 100%  141 kB 144.5k/s    00:01
Checking integrity... done (0 conflicting)
[1/1] Installing ja-nkf-2.1.3,1...
[1/1] Extracting ja-nkf-2.1.3,1: 100%
# chmod 500 /usr/local/etc/mail/jsendmail
# chown mailman:mailman  /usr/local/etc/mail/jsendmail

これで導入は完了です。

 旧サーバよりの移行手順

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

 さて、ここからは以前のページとあまり変わりません。
今回サーバが異なるIPアドレスに変更となるので、DNS上のTTLを小さな値に変更してから開始しました。

$TTL 600

とかに一時的に変更して、キャッシュによる影響を小さくします。もちろん、シリアルも変更してください。

# rndc reload

で反映します。

 旧サーバにある/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

シーケンサーの値ですが、移行した後には既に移行できていましたので、何もしないで大丈夫でした。

 試して問題なさそうでしたら、DNS向き先を変更し、TTL値も戻してテスト投稿を行います。

This is the mail system at host -.

I'm sorry to have to inform you that your message could not
be delivered to one or more recipients. It's attached below.

For further assistance, please send mail to postmaster.

If you do so, please include this problem report. You can
delete your own text from the attached returned message.

                   The mail system

<->: Command died with status 2:
    "/usr/local/mailman/mail/mailman post hamfair". Command output: Group
    mismatch error.  Mailman expected the mail wrapper script to be executed as
    group "mailman", but the system's mail server executed the mail script as
    group "nobody".  Try tweaking the mail server to run the script as group
    "mailman", or re-run configure,  providing the command line option
    `--with-mail-gid=nobody'.

とかいわれる。バージョンアップされた際などで、リコンパイルした際に make MAIL_GID=nobody reinstall のようにしないと発生するので注意が必要。
/usr/ports/japanese/mailman/files/FreeBSD-post-install-notesには、

3.3) Postfix

     The value of MAIL_GID has to be set to 'nobody' (or 65534) when building
     the Mailman port, so you have to choose POSTFIX on build options to
     set it to you.

     NOTE: the group needs to be 'mailman' if you are using the Mailman
     integration for generating the postfix virtual and aliases files.

     Review the instructions found in mailman-install.txt in the same
     directory as this file.

とか書いてある。

また、最近では、サーバがIPv6も使っていたりして、postfixのmail.cfで「mynetworks = ....., 127.0.0.0/8, localhost」としていないことにより、”postfix/smtpd[-]: -: reject: RCPT from localhost[::1]: 554 5.7.1” のような残念なエラーになってしまうので注意が必要。

また、移行の際の作業では、check_perms -fを入れるのを忘れないことや、/usr/local/mailman/Mailman/mm_cfg.pyの移行忘れをしないように注意が必要です。

【改訂履歴】作成:2015/01/17 更新:2017/04/02
【参考リンク】

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

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