会社のサーバにインストールしてあった mailman の調子が悪いということで、再インストールをしました。
作業はけっこう難航してしまって朝5時までかかってしまったが、今後のためにもインストールメモとして残しておきます。
1. mailaman のダウンロード(現時点では最新版 2.1.9)する
2. ダウンロードしたファイルを展開してから、次のコマンドを実行する
# ./configure –prefix=[インストール先] –with-mail-gid=nobody –with-cgi-gid=apache
※ポイントは、–with-mail-gid をつけるところです。これをつけないと、mailman を実行したときに group miss match といエラーがたくさんでます
# make && make install
3. 管理用 ML mailman を作る(mailman は、基本的に bin ディレクトリにあるコマンドで管理可能となっているので、いくつか簡単なシェルスクリプトを作ってみましたので、あとで紹介します)
# bin/newlist mailman
※管理者のメールアドレスと管理用の Web 画面にログインするためのパスワードを入力します
4. mailman ML にデフォルトの設定を適用する
# bin/config_list -i data/sitelist.cfg
※このデフォルトの設定も、他の ML を作るときにはカスタマイズしました
5. mailman ML にメンバを追加する
# bin/add_members -r -
※標準入力にメンバのメールアドレスを入力してから、Ctrl – D を押す
6. mailman ML の Web 画面が使えるように httpd の設定を追加する
ScriptAlias /mailman/ /[mailman のインストール先]
AllowOverride None
Options None
Order allow,deny
Allow from all
※必要に応じて、pipermail の設定もしますが、僕の場合は公開保存アーカイブを作ってないので不要でした
あとは、apache を再起動して、mailman を起動するだけです。mailman の起動スクリプトは /etc/init.d に次のようなスクリプトをもってきて入れておきました。
PYTHON=/usr/bin/python
MAILMANHOME=[mailman のインストール先]
MAILMANCTL=$MAILMANHOME/bin/mailmanctl
case "$1" in
'start')
#rm -f $MAILMANHOME/locks/*
$PYTHON $MAILMANCTL -s -q start
;;
'stop')
$PYTHON $MAILMANCTL -q stop
;;
'restart')
$PYTHON $MAILMANCTL -q restart
;;
esac
exit 0
それでは、このときに作った超手抜きな mailman のスクリプトを紹介します。この後、紹介するスクリプトを使う人は MAILMAN_DIR に mailman のインストール先を追加してください。
まずは、ML の作成スクリプトから、ML の作成は newlist するだけでできるのがそのあと ML の設定も一緒に行うために簡易スクリプトを作ってみました。
#!/bin/sh
MAILMAN_DIR=
sudo $MAILMAN_DIR/bin/newlist $1
sudo $MAILMAN_DIR/bin/config_list -i data/sitelist.cfg $1
次に ML メンバのメールアドレスのリストを取得するスクリプトです。
#!/bin/sh
MAILMAN_DIR=
sudo $MAILMAN_DIR/bin/list_members $1 > $1
次に ML メンバの追加スクリプトです。ML 名と同じ名前のファイルにメンバのメールアドレスが入っていることを前提としてあります。
#!/bin/sh
MAILMAN_DIR=
sudo $MAILMAN_DIR/bin/add_members -r $1 $1
次に ML を削除するスクリプトです。念のためアーカイブをまとめて消すオプションをつけています。
#!/bin/sh
MAILMAN_DIR=
sudo $MAILMAN_DIR/bin/rmlist -a $1
ML 移行の時に便利な現在の ML の post_id を取得するスクリプトです。
#!/bin/sh
MAILMAN_DIR=
sudo $MAILMAN_DIR/bin/withlist -l -r showseq $1
※このスクリプトを使うには、showseq.py というプログラムを bin ディレクトリにコピーしておく必要があります。
showseq.py は、次のプログラムです。
#!/usr/bin/python2.2
#
# usage:
# withlist -l -r showseq listname
import sys
def showseq(mlist):
print 'post_id = %s' % mlist.post_id
そして、ML の post_id を再設定するスクリプトです。post_id は、withlist コマンドを使って再設定することができるのですが、すこし操作が面倒だったのでスクリプトを作成しました。第一引数は ML 名、第二引数は再設定する post_id です。
#!/bin/sh
MAILMAN_DIR=
sudo $MAILMAN_DIR/bin/withlist -l -r changeseq $1 $2
※このスクリプトを使うには、bin ディレクトリに changeseq.py というプログラムを入れておく必要があります。
changesq.py は、次のようなプログラムです。
#
# usage:
# withlist -l -r changeseq listname newseq
import sys
def changeseq(mlist, arg):
try:
newseq = int(arg)
except:
print 'The new sequence number MUST BE INTEGER.'
sys.exit(1)
if (newseq < = mlist.post_id):
print 'The new sequence number (%d) MUST BE GREATER than the current pos
t_id (%d).' % (newseq, mlist.post_id)
sys.exit(0)
print 'change sequence number(%d -> %d).' % (mlist.post_id, newseq)
mlist.post_id = newseq
print 'Saving list'
mlist.Save()
最後に ML を削除するスクリプトです。
#!/bin/sh
MAILMAN_DIR=
sudo $MAILMAN_DIR/bin/rmlist -a $1
後は、ML をしっかり管理できるように logrotate を使ってログファイルのローテションする設定と logwatch を使ってログファイルの監視を設定しました。
この設定については今日行ってみたのですが、ちゃんと動いていることを確認した上でこのブログに書きたいと思います。