Majordomo

Maling List Serverには国産のfmlなどいろいろありますが、ここではデファクトスタンダードであるmajordomoを導入してみましょう。

1.ユーザーとグループを作成
majordomo用のuserを登録してpasswdとgroupを編集します。

# cd /etc
-----
# vi group
majordom::54:majordom,masao  ==>追加します。
-----
# adduser
# majordom
-----
UID は 54としました。
-----
# vi passwd
-----
majordom:x:54:54:Majordomo:/usr/local/majordomo:  ==>編集します。

2.Sourceのgetとコンパイル
ここからmajordomoのsourceをgetして、適当なディレクトリ(例:/usr/src/)に置いて展開します。1998年6月現在の最新バージョンは1.94.4です。

# cd /usr/src/
# tar zxvf majordomo-1.94.4.tar.gz

Makefileを編集します。僕の場合は以下の部分を変えました。

# cd majordomo-1.94.4
# vi Makefile
-----
#PERL = /bin/perl
PERL = /usr/bin/perl

# W_HOME = /usr/test/majordomo-$(VERSION)
W_HOME = /usr/local/majordomo

W_USER = 54
W_GROUP = 54

# These set the permissions for all installed files and executables (except
# the wrapper), respectively.  Some sites may wish to make these more
# lenient, or more restrictive.
FILE_MODE = 644
EXEC_MODE = 751
HOME_MODE = 751

次にmajordomo.cfをコピーして編集します。以下は僕の場合の例です(一部)。

# cd /usr/src/majordomo-1.94.4
# cp sample.cf majordomo.cf
# vi majordomo.cf
-----
$whereami = "fujie.org";
$digest_work_dir = "$homedir/digest";
$sendmail_command = "/usr/sbin/sendmail";
$config'default_subscribe_policy = "open";

makeします。

# cd /usr/src/majordomo-1.94.4
# make wrapper
# make install
# make install-wrapper

インストールが終わったら、メーリングリストを作成します。ML名をsample-mlとしました。またmajordomoとlistsのパーミッションを変更します。

# cd /usr/local
# chmod 751 majordomo
# cd majordomo
# chmod 751 lists
# su majordom
$ cd /usr/local/majordomo/lists
$ mkdir sample-ml

ついでにarchiveのためのディレクトリも作っておきましょう。

$ cd /usr/local/majordomo/lists/
$ mkdir sample-ml.archive

3.aliases
/etc/aliasesを追加してnewaliasesします。次の連番との関連で以下のようにしました。

majordomo: "|/usr/local/majordomo/wrapper majordomo"
majordomo-owner: masao@fujie.jp
owner-majordomo: majordomo-owner
majordom: majordomo-owner

## The bounces mailing list is used to move people off of lists when their
## e-mail address becomes undeliverable.  See the bounce-remind script for a
## way to inform people that they've been moved.

## bounces mailing list
owner-bounces:majordomo-owner
bounces-approval:owner-bounces
owner-bounces-outgoing:owner-bounces

bounces: "|/usr/local/majordomo/wrapper resend -l bounces -h fujie.org bounces-outgoing"

bounces-outgoing::include:/usr/local/majordomo/lists/bounces

## Test List
##
## This is a testing list that should be removed once you are familiar with
## the operation of Majordomo.
##
owner-sample-ml:masao@fujie.jp
owner-sample-ml-digest:owner-sample-ml
owner-sample-ml-outgoing:owner-sample-ml
owner-sample-ml-digest-outgoing:owner-sample-ml
sample-ml-approval:owner-sample-ml
sample-ml-digest-approval:owner-sample-ml

sample-ml: "|/usr/local/majordomo/wrapper sequencer -l sample-ml -r sample-ml -N -h fujie.org sample-ml-outgoing"
sample-ml-digest:sample-ml
sample-ml-outgoing::include:/usr/local/majordomo/lists/sample-ml,
        "|/usr/local/majordomo/wrapper archive -a -m -f /usr/local/majordomo/lists/sample-ml.archive/sample-ml.archive",
        "|/usr/local/majordomo/wrapper digest -r -C -l sample-ml-digest sample-ml-digest-outgoing"
sample-ml-digest-outgoing::include:/usr/local/majordomo/lists/sample-ml-digest

sample-ml-request: "|/usr/local/majordomo/wrapper majordomo -l sample-ml"
sample-ml-digest-request: "|/usr/local/majordomo/wrapper majordomo -l sample-ml-digest"
-----
# newaliases

4.連番を付ける
majordomo付属のsequencerを使用して、subjectに連番が付くようにしましょう。

sequencerをmajordomoにコピーします。

# cp /usr/local/majordomo/Tools/seqencer /usr/local/majordomo/

sample-ml.seqを作り内容は1を入力します。

# cd /usr/local/majordomo/lists/
# vi sample-ml.seq
----
1
----
:wq

ownerを変更します。

# chown majordom sample-ml.seq

sample-ml.configのsubject_prefixの行を以下のように修正します。尚、このsample-ml.configは 一度、sample-mlにaccessすると自然と作られています。また、administrivia = no にしておきます。

#vi /usr/local/majordomo/lists/sample-ml.config
----
administrivia  =  no
subject_prefix = [sample-ml $SEQNUM]

これで、subjectに[sample-ml n]と、連番が付くはずです。ただし、このままではreplyするたびにsubjectが長くなってしまい、みっともないので、Nobさんの方法で、sequencerを書き換えます。sequencerの153行目付近の部分を下記のように変更します。

      &abort("sequencer: Can't open /tmp/sequencer.$$.in: $!");

  while (<STDIN>) {
      print IN $_;
  }

という部分があるので、これを

      &abort("sequencer: Can't open /tmp/sequencer.$$.in: $!");

  while (<STDIN>) {
      if (/^Subject:/) {
                s/R[eE]\:.*[\(\[]$opt_l.*\d+[\)\]]/Re\:/;
                s/R[eE]\:\s+R[eE]\:/Re\:/g;
      }
      print IN $_;
  }

というふうに書き換えて下さい。

5.動作確認
最後に動作確認して終わりです。

# cd /usr/local/majordomo
# ./wrapper config-test

6.アーガイブする
これ以下は付録です。さて、indexコマンドでメールのindexをgetしようとすると、subjectが文字化けしてしまいます。そこで、majordom.cfを次のように書き換えて下さい。

# vi /usr/local/majordomo/majordomo.cf
-----
$index_command = "/bin/ls -lRL";
を
$index_command = "sed -e 's/.* [[]/[/g' INDEX|/usr/local/bin/nkf -l -m";
に書き換える。

これで文字化けせずにindexをgetできます。あらかじめ、nkfをインストールしておいて下さい。なお、この方法はニッセイコンピュータの藤澤さん(fujisawa@sales.nissay-c.co.jp)からヒントを得ました。

7.Sendmail.cfの変更
これは蛇足です。今までの設定のままだと、メールヘッダーにX-Authentication-Warning:******** というWarningが出ます。このままでも実害はなく放置してもいいのですが、精神衛生上よくないとお考えでしたら、/etc/sendmail.cfのT rootの部分にmajordomを加えて下さい。
例:T root daemon uucp majordom

8.Web上でsubscribe
majordomo付属のソフト(md-sub)を利用して、subscribeをWeb上でできるようにしてみましょう。subscribe以外に、unsubscribe、who、info コマンドがWeb上で送れます。

最初にソースディレクトリなどから必要なファイルをcgi-binにコピーします。

# /usr/src/majordomo-1.94.4/md-sub/
# cp md-sub.cgi /usr/local/apache/share/cgi-bin
# cp cgi-lib.pl /usr/local/apache/share/cgi-bin
# cd /usr/lib/perl5/
# cp getopts.pl /usr/local/apache/share/cgi-bin

md-sub.cgi を環境に合わせて修正します。

# cd /usr/local/apache/share/cgi-bin
# vi md-sub.cgi
-----
#!/usr/bin/perl

# $cgiloc   = "http://stout/~jco/md-sub.cgi";
$cgiloc   = "http://www.fujie.org/cgi-bin/md-sub.cgi";

# $listsdb  = "/usr/jco/.md-subrc";
$listsdb  = "/usr/local/majordomo/md-sub/.md-subrc";

# $logfile  = "/usr/jco/md-sub.log";
$logfile  = "/usr/local/majordomo/md-sub/md-sub.log";

$sendmail = "|/usr/sbin/sendmail -t";
# $sendmail = "|/usr/bin/cat - > /tmp/test.out"; # This one is for
                                #  testing...
-----

md-sub ディレクトリを作り、そこに、ml-init.sampleをコピーして環境に合わせて編集します。

# su majordom
$ cd /usr/local/majordomo/
$ mkdir md-sub
$ cd /usr/src/majordomo-1.94.4/md-sub
$ cp ml-init.sample /usr/local/majordomo/md-sub/
$ cd /usr/local/majordomo/md-sub/
$ cp ml-init.sample .md-subrc
$ vi .md-subrc
-----
test-l              majordomo@fujie.jp
info    test-l      http://www.fujie.org/test-l/index.html
help                web-master@fujie.jp
default             test-l
-----
データベースを作成します。
# /usr/local/apache/share/cgi-bin/md-sub.cgi -C /usr/local/majordomo/md-sub/.md-subrc

これで、browserで、 http://www.fujie.org/cgi-bin/md-sub.cgi にアクセスするとWebが開くはずです。

9.追記1
sendmailのバージョンを8.9.0に上げるとセキュリティがきつくなるせいか、errorが出ます。その場合、permissionを751に変更すると正常化します。

# cd /usr/local/
# chmod 751 majordomo
# cd majordomo
# chmod 751 lists

10.追記2
MS Outlook や Outlook Expressで ML から配信されたメールに対して返信すると、Subject にRe: や [********]が重なってしまいます。これはMSのメーラーが、とんでもないMIMEエンコードをしてしまうためなのですが、これを回避する方法を提示します。なお、これは、生田昇氏ふじ@芸工大さんのお知恵を拝借しました(深謝)。

mimer.pl と、mimew.pl を ダウンロードして、/usr/local/majordomo/ にコピーし、属性を変更します。

# cp /tmp/mimer.pl /usr/local/majordomo/
# cp /tmp/mimew.pl /usr/local/majordomo/
# cd /usr/local/majordomo/
# chown majordom mimer.pl mimew.pl
# chgrp majordom mimer.pl mimew.pl
# chmod 755 mimer.pl mimew.pl

さらに、sequencerの require文が書いてあるところ(70行目あたり)に、次の2行を追加しておきます。

require "mimer.pl";
require "mimew.pl";

そして、sequencerの一部(153行目あたり)を書き換えます。

--------------- sequencer の修正内容 ---------------------------

while () {
        if (/^Subject:/) {
                s/R[eE]\:.*[\(\[]$opt_l.*\d+[\)\]]/Re\:/;
                s/R[eE]\:\s+R[eE]\:/Re\:/g;
        }
    print IN $_;
}
---------------------------------------------------------------
を、
--------------- sequencer の修正内容 --------------------------

while () {
        # by nob
        if (/^Subject:/) {
                $_= &mimedecode($_);
                $_= &mimeencode($_);
                s/R[eE]\:.*[\(\[]$opt_l.*\d+[\)\]]/Re\:/;
                s/R[eE]\:\s+R[eE]\:/Re\:/g;

        }
    print IN $_;
}
---------------------------------------------------------------
のように書きなおします。これでMSにメーラーにおけるトラブルがなくなります。

TOP PAGE