Mailman

From ArchWiki
Jump to navigation Jump to search
ノート: このページでは Mailman 2 を対象としています。Mailman 3 については #Mailman 3 を見てください。

Mailman は電子メーリングリストを管理するためのアプリケーションです。基本的にメールサーバーウェブサーバーと合わせて使うことになるため、最初にメールサーバーを Postfix, Exim, Sendmail, Qmail などから選択して (どれが良いかわからないときは、Postfix を選ぶことを推奨します)、それから Apache, Lighttpd, Nginx などのウェブサーバーを決めて下さい (どのウェブサーバーでもかまいません)。Mailman とメールサーバー、ウェブサーバーは必ずしも同一のコンピュータで実行する必要はありません。

この記事では Mailman のインストールだけを扱います。メールサーバーやウェブサーバーのインストールについてはそれぞれの wiki ページを参照してください。

このガイドでは "arch" という名前のマシンを使って "a", "b", "c" という名前の組織のメーリングリストをセットアップすることにします。それぞれサンプルドメイン "a.org", "b.org", "c.org" が存在して "arch" にアクセスできるようになっているとします。各ドメインで以下のように設定します:

  • Mailman のウェブインターフェイスlists.example.org からアクセスできるようにする。
  • lists.example.org/archivesリストのアーカイブを配置する。
  • リストのアドレスlist@example.org などとする。

注意事項: Mailman を使うことで複数のドメインのリストを管理することはできますが、たとえドメインが違っていても同じ名前のリストを作ることはできません。

Mailman のインストール

mailman パッケージをインストールしてください。

Mailman の設定

デフォルト設定は /usr/lib/mailman/Mailman/Defaults.py ファイルに全て記述されています。ただしこのファイルを修正してはいけません。代わりに、mm_cfg.py (/etc/mailman/mm_cfg.py) ファイルに変更を加えて下さい。Defaults.py のデフォルト設定と異なる値だけを mm_cfg.py に追加してください。Mailman をアップグレードしても mm_cfg.py に勝手に手が加えられることはありません。

ウェブサーバーの統合

DEFAULT_URL_HOST = 'lists.a.org'

VIRTUAL_HOSTS.clear()
add_virtualhost(DEFAULT_URL_HOST, DEFAULT_EMAIL_HOST)
add_virtualhost('lists.b.org', 'b.org')
add_virtualhost('lists.c.org', 'c.org')

POSTFIX_STYLE_VIRTUAL_DOMAINS = ['a.org', 'b.org', 'c.org']

DEFAULT_URL_PATTERN = 'http://%s/'
PUBLIC_ARCHIVE_URL = 'http://%(hostname)s/archives/%(listname)s'

Apache の場合を以下のように変更してください:

DEFAULT_URL_PATTERN = 'http://%s/lists/'

MTA の統合

選択したメールサーバーに合わせて /etc/mailman/mm_cfg.py の中身を変更します。

Postfix の統合

DEFAULT_EMAIL_HOST = 'a.org'
MTA = 'Postfix'

mm_cfg.py を編集したら、以下を実行して Postfix が必要とする aliases ファイルを作成してください:

# /usr/lib/mailman/bin/genaliases

Exim の統合

DEFAULT_EMAIL_HOST = 'a.org'
MTA = None

メールサーバーの設定

ノート: ドメインネームサーバー (DNS) の設定を確認してください。インターネット上でメールを送るには、DNS が正しくないといけません。MX レコードがメールホストに設定されている必要があります。DNS に関する情報はこのドキュメントでは扱いません。

Postfix

Postfix のインストールと設定については、Postfix を見て下さい (Mailman 用にのみ Postfix を使う場合は設定はとてもシンプルです: mailboxdatabase などは無視してかまいません)。

/etc/postfix/main.cf に以下のフィールドと値を記述してください:

myhostname = arch.a.org
mydomain = a.org
myorigin = $mydomain
mydestination = localhost, a.org, b.org, c.org
mynetworks_style = host

alias_maps = hash:/etc/postfix/aliases, hash:/var/lib/mailman/data/aliases
alias_database = $alias_maps
virtual_alias_maps = hash:/etc/postfix/virtual, hash:/var/lib/mailman/data/virtual-mailman

recipient_delimiter = +

Exim

/etc/mail/exim.conf を編集して以下のセクションにエントリを追加してください:

routers セクション:

local_mailman_list:
    driver = accept
    require_files = /var/lib/mailman/lists/${lc::$local_part}/config.pck
    local_part_suffix = -admin : -bounces : -bounces+* : -confirm : -confirm+* : -join : -leave : -owner : -request : -subscribe : -unsubscribe
    local_part_suffix_optional
    transport = mailman_transport

transports セクション:

mailman_transport:
    driver = pipe
    user = mailman
    group = mailman
    home_directory = /usr/lib/mailman
    current_directory = /usr/lib/mailman
    command = /usr/lib/mailman/mail/mailman '${if def:local_part_suffix {${sg{$local_part_suffix}{-(\\w+)(\\+.*)?}{\$1}}}{post}}' $local_part

ウェブサーバーの設定

Nginx

Nginx のインストールと設定については、Nginx を見て下さい。Mailman のウェブインターフェイスは CGI を使います。以下の設定では Nginx と fcgiwrap を使います。詳しくは Nginx#CGI を動かす を参照。

ドメインごとに /etc/nginx/nginx.conf に以下の設定を記述 (例: a.org):

server {
  server_name lists.a.org;
  root /usr/lib/mailman/cgi-bin;

  location = / {
    rewrite ^ /listinfo permanent;
  }

  location / {
    fastcgi_split_path_info ^(/[^/]*)(.*)$;
    fastcgi_pass unix:/run/fcgiwrap.sock;
    include fastcgi.conf;
    fastcgi_param PATH_INFO         $fastcgi_path_info;
    fastcgi_param PATH_TRANSLATED   $document_root$fastcgi_path_info;
  }

  location /icons {
    alias /usr/lib/mailman/icons;
  }

  location /archives {
    alias /var/lib/mailman/archives/public;
    autoindex on;
  }

}
ノート: Nginx は user http と group http で動作させないと Mailman はエラーを吐きます。/etc/nginx/conf/nginx.confuser ディレクティブを次のように定義されていることを確認してください (html ブロックの外側): user http http;

Lighttpd

server.modules = ("mod_rewrite",
                  "mod_cgi")

url.rewrite = ( "^/$" => "/listinfo" )
alias.url = (
        "/icons" => "/usr/lib/mailman/icons",
        "/archives" => "/var/lib/mailman/archives/public"
)

cgi.assign = (
        "/usr/lib/mailman/cgi-bin/admin" => "",
        "/usr/lib/mailman/cgi-bin/admin/" => "",
        "/usr/lib/mailman/cgi-bin/admindb" => "",
        "/usr/lib/mailman/cgi-bin/admindb/" => "",
        "/usr/lib/mailman/cgi-bin/confirm" => "",
        "/usr/lib/mailman/cgi-bin/confirm/" => "",
        "/usr/lib/mailman/cgi-bin/create" => "",
        "/usr/lib/mailman/cgi-bin/create/" => "",
        "/usr/lib/mailman/cgi-bin/edithtml" => "",
        "/usr/lib/mailman/cgi-bin/edithtml/" => "",
        "/usr/lib/mailman/cgi-bin/listinfo" => "",
        "/usr/lib/mailman/cgi-bin/listinfo/" => "",
        "/usr/lib/mailman/cgi-bin/options" => "",
        "/usr/lib/mailman/cgi-bin/options/" => "",
        "/usr/lib/mailman/cgi-bin/private" => "",
        "/usr/lib/mailman/cgi-bin/private/" => "",
        "/usr/lib/mailman/cgi-bin/rmlist" => "",
        "/usr/lib/mailman/cgi-bin/rmlist/" => "",
        "/usr/lib/mailman/cgi-bin/roster" => "",
        "/usr/lib/mailman/cgi-bin/roster/" => "",
        "/usr/lib/mailman/cgi-bin/subscribe" => "",
        "/usr/lib/mailman/cgi-bin/subscribe/" => ""
        )

$HTTP["host"] =~ "(^|\.)lists.a.org$" {
        server.document-root            = "/usr/lib/mailman/cgi-bin/"
        server.errorlog                 = "/var/log/lighttpd/lists.a.org_error.log"
        accesslog.filename              = "/var/log/lighttpd/lists.a.org_access.log"
}

Apache

以下の行を /etc/mailman/mm_cfg.py に追加してください:

IMAGE_LOGOS = '/mailman-icons/'

lists.a.org の作成にはバーチャルホストの作成も含まれます。httpd.conf を編集するかわりに以下の設定をバーチャルホストの定義に移動すると良いでしょう。

/etc/httpd/conf/httpd.conf を編集して以下のスニペットを追加してください:

<IfModule alias_module>
    Alias /mailman-icons/ "/usr/lib/mailman/icons/"
    Alias /archives/ "/var/lib/mailman/archives/public/"
    ScriptAlias /lists/ "/usr/lib/mailman/cgi-bin/"
    ScriptAlias / "/usr/lib/mailman/cgi-bin/listinfo"
</IfModule>

<Directory "/usr/lib/mailman/cgi-bin/">
    AllowOverride None
    Options Indexes FollowSymlinks ExecCGI
    Require all granted
</Directory>

<Directory "/usr/lib/mailman/icons/">
    Require all granted
</Directory>

<Directory "/var/lib/mailman/archives/public/">
    Require all granted
</Directory>

httpd systemd サービスを再起動してください。

その後の設定

Site-wide メーリングリスト

Mailman が正しく動作するために必要なリストを作成するために、以下のコマンドを実行 (パスワードリマインダーなどに使われます):

# /usr/lib/mailman/bin/newlist mailman

デフォルトドメインで "mailman" という名前のリストが作成されます (例: mailman@a.org)。他のドメインでも作成する必要はありません (b.orgc.org)。

後でサイトリストを購読するようにしてください。

タイマーの設定

定期的に実行される Mailman の機能があるため、タイマーを設定して適切なプログラムを適切な時に実行させる必要があります:

# cd /usr/lib/systemd/system
# for X in mailman-*.timer ; do systemctl enable $X && systemctl start $X ; done

Mailman の起動

systemctlmailman が起動されるまで、Mailman は処理を開始してメールを送ることはありません。

何か問題が発生したら、より多くの情報を出力させることでトラブルシューティングに役立ちます:

# /usr/lib/mailman/bin/mailmanctl start

パスワードの作成

コマンドラインから作成できるパスワードは2つ存在します。1番目のパスワードはどこでも使えるパスワードであるジェネラルパスワード (サイトパスワード) です。サイトパスワードは全てのリストの管理者ページに入ることができ、どのユーザーでもログインできます。

2番目のパスワードはリストクリエイターパスワードです。サイトパスワードのような全ての権限を与える代わりに、新しいメーリングリストを作成する権限を与えることができます。サイトパスワードを持っていれば新しいメーリングリストを作ることもできますが、リストクリエイターパスワードはリストの作成だけに権限が制限されています。

ジェネラルパスワードを設定するには、以下のコマンドを実行:

# /usr/lib/mailman/bin/mmsitepass <general-password>

リストクリエイターパスワードを設定するには、以下のコマンドを実行:

# /usr/lib/mailman/bin/mmsitepass -c <list-creator-password>

リストクリエイターパスワードは必ずしも設定する必要はありませんが、ジェネラルパスワードは設定してください。

Mailman を使う

リストを管理 (リストを作成・設定、ユーザーを管理など) するときはウェブインターフェイスを使います。それぞれのドメインごとに別々のインターフェイスが作られます。例えば、組織 "a" の URL は http://lists.a.org という具合です。

コマンドラインから Mailman を管理することもできます。例えばリストを作成するには:

# newlist --urlhost=lists.b.org --emailhost=b.org list_name

Mailman 3

Mailman 3 はモジュール形式で設計されています:

postorius や hyperkitty をデプロイするには django が必要になります。mailman-suite-gitAUR にデプロイするのに使える django のプロジェクトスケルトンが入っています。付属している README.md を読んで postorius や hyperkitty をデプロイしてください。

mailman-core は /var/lib/mailman/var/etc/mailman.cfg で設定でき、次のコマンドで起動できます:

# systemctl start mailman.service

詳しくはプロジェクトの公式ドキュメントを参照してください。

トラブルシューティング

check_perms スクリプトを実行してパーミッションがグループの所有権が正しいことを確認してください:

# /usr/lib/mailman/bin/check_perms

何か問題が表示される場合、手動で修正するか、同じプログラムを使用して修正してください (後者のほうが簡単です):

# /usr/lib/mailman/bin/check_perms -f

エラーが全く表示されなくなるまで上のコマンドを繰り返し実行してください。

Postfix

/var/lib/mailman/data/ にある以下のファイルの所有者と所有ユーザーが mailman となっておりグループに書き込み権限が与えられていることを確認してください:

  • aliases.db
  • aliases
  • virtual-mailman
  • virtual-mailman.db

UTF-8

http://www.divideandconquer.se/2009/08/17/convert-mailman-translation-to-utf-8.

参照