mailman のインストールメモと簡易スクリプトの紹介

November 11th, 2006 by naoya | Filed under day.

会社のサーバにインストールしてあった 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 を使ってログファイルの監視を設定しました。

この設定については今日行ってみたのですが、ちゃんと動いていることを確認した上でこのブログに書きたいと思います。

Leave a Reply

Get Adobe Flash playerPlugin by wpburn.com wordpress themes