Majordomo はメーリングリストサーバであり、sendmail が動いている メールサーバでメーリングリストを運用するのによく使われるソフトウェ アです。。以下に Majordomo の特徴を示します。
- 電子メールによるユーザの受け付け及び削除
- 登録ユーザ以外からの電子メールの拒否
- 電子メールの配送の制御
- Subject などのメールヘッダのカスタマイズ
- 過去の電子メールのアーカイブ機能、及びその取り出し機能
- Perl プログラムなのでカスタマイズ及び拡張が容易
- FTPMAIL、ダイジェストをサポート
ダウンロート
現在、Majordomoのバージョンは 1.94.4 と 2.x があります。 2.x は開発バージョンですので、今回は 1.94.4 をインストールします。
以下の URL
ftp://ftp.greatecircle.com/pub/majordomo/
ftp://ftp.sgi.com/other/majordomo/1.94.4/
ftp://ftp.win.ne.jp/pub/network/mail/majordomo/1.94.4/
より、majordomo-1.94.4.tar.gz を入手します。確認
Majordomo をインストールするためには、Perl 4.036 か Perl 5.002 以 上が必要です。使用している Perl のバージョンを知りたいときは、% perl -vとして下さい。ドキュメントによれば、「将来は Perl 4.x では動作しな い予定」とのことなので、もし Perl 4.x しかインストールしていない場 合には、この機会に Perl 5.x をインストールしておきましょう。 入手は各 Anonymous FTP サイトから可能である。例えば以下の URL から入手できます。
ftp://ftp.digital.com/pub/plan/perl/CPAN/src/5.0/インストール
ここでは、Majordomo を FreeBSD-2.2.8Release が動作している計算機に インストールします。
取得した majordomo-1.94.4.tar.gz を展開します。% tar xvfz majordomo-1.94.4.tar.gz % cd majordomo-1.94.4
- Majordomo のホームディレクトリ、UID、GID の決定
インストール作業に入る前に、Majordomo のホームディレクトリ、 管理ユーザ名とUID(ユーザID)、所属グループ名とGID(グループID) を決めておきます。ここでは、以下のように設定します。ユーザ名 majordom (UID:123) グループ名 majordom (GID:123) ホームディレクトリ /usr/local/majordomo ログインシェル /bin/tcshメーリングリスト(ML)の管理ユーザ majordom が所属するグループ majordom を 作成します。以下のように /etc/group を編集します。# vi /etc/group 以下の行を追加 majordom:*:123:majordom,daemon次に、ユーザ majordom を作成します。以下のように vipw により追加します。# vipw 以下の行を追加 majordom:*:123:123::0:0:Majordomo Owner:/usr/local/majordomo:/bin/tcsh ユーザ majordom のパスワードを設定します。 # passwd majordom- Makefile の編集
次に Makefile の編集を行います。編集する主なものは、Perl コマンド のパス名を指定する PERL、C コンパイラを指定する CC、Majordomo のイ ンストールディレクトリを指定する W_HOME、Majordomo が動作する UID、 GID を指定する W_USER、W_GROUP などがあります。
また、使用しているシステムが SunOS 4.x, SGI Irix 4.x などの BSD 系 の場合には、Makefile の 43 〜 46 行目をコメントアウトし、代わりに 50 〜 53 行目を有効にします。反対に、使っているシステムが POSIX 系 (Sun Solaris, SGI Irix 5 and 6, Dec Ultrix MIPS, BSDI or other 4.4-based BSD, Linux)の場合には何もせずそのままにしておきます。変更後 PERL = /usr/local/bin/perl CC = gcc W_HOME = /usr/local/majordomo MAN = /usr/local/man W_GROUP = 123 W_PATH = /bin:/usr/bin:/usr/local/bin TMPDIR = /var/tmp 変更前 PERL = /bin/perl CC = cc W_HOME = /usr/test/majordomo-$(VERSION) MAN = $(W_HOME)/man W_GROUP = 45 W_PATH = /bin:/usr/bin:/usr/ucb TMPDIR = /usr/tmp変更後の Makefile をここに置いておきます。
majordomo.cf の編集
次に Majordomo の基本的な動作を指定する majordomo.cf ファイルを使 用環境に合わせて編集します。これは sample.cf というサンプルファイ ルがあるので、% cp sample.cf majordomo.cfとコピーして使います。主な変更部分を以下に示します。
- $whereami = "ドメイン名";
- ここには Majordomo が稼働しているホストの FQDN(Fully Qualified Domain Name:正式なドメイン名)を定義します。$whereami は、$whoami 及び $whoami_owner でも使用されるので、Majordomo@ドメイン名お よび Majordomo-owner@ドメイン名できちんと受け取れるようなもの を指定します。
- $listdir = "$homedir/lists";
- 実際にメーリングリストに関する情報を置くディレクトリを指定します。 デフォルトでは Majordomo のホームディレクトリの下にある lists ディレクトリとなります。もしホームディレクトリが設定されていない場 合は、/usr/test/majordomo/lists ディレクトリが使用されます。
- $digest_work_dir = "/usr/local/mail/digest";
- ダイジェストを作成する場合に使用されるディレクトリを指定します。
- $sendmail_command = "/usr/lib/sendmail";
- sendmail コマンドをフルパスで指定します。Solaris では /usr/lib/sendmail ですが、FreeBSD では /usr/sbin/sendmail です。 なお、sendmail に渡したいオプションがある場合は &mailer を書き 換えます。
- $config'default_subscribe_policy = "open+confirm";
- 新規ユーザの登録方針を指定します。"open"で自動登録、 "open+confirm"で承認作業後、登録を行います。
- $filedir = "$listdir";
$filedir_suffix = ".archive";- アーカイブを格納するディレクトリを指定します。デフォルトでは $listdir となっています。また、アーカイブファイルの拡張子は $listdir_suffix によって指定できますが、何も付けたくない場合は ""としておきます。
- $TMPDIR = $ENV{'TMPDIR'} || "/usr/tmp";
- 一時作業用のディレクトリです。ここでは、 $TMPDIR = "/var/tmp"; としています。
変更後の majordomo.cf をここに 置いておきます。
- Majordomo,wrapper のコンパイルとインストール
wrapper プログラムを作成するため、% make wrapperを実行します。次に root になって、以下のように Majordomo をインストー ルします。% su Password: # make install次に、先ほどコンパイルした wrapper をインストールするため# make install-wrapperを実行します。wrapper が正しくインストールされたかどうか確認するため、# cd /usr/local/majordomo # ./wrapper config-testとして確認を行います。結果をここ に置いておきます。
- alias の設定
/etc/aliases に Majordomo を運営する上で必要なエイリアスを定義します。 ここでは、以下のような記述を追加しました。majordomo: "|/usr/local/majordomo/wrapper majordomo" owner-majordomo: sakai majordomo-owner: sakai/etc/aliases を修正したら、忘れずに# newaliasesを実行しておきます。
動作チェック
正しく Majordomo がインストールできたか確認を行います。 majordom ユーザになり、% su - majordom Password: $ cd ~/lists $ touch testとして、仮のメーリングリスト"test"を作成します。次に適当なユーザから majordomo 宛てにメールを出してみます。その際、Subject は空にし、 本文の 1 行目に"lists"と記述します。% mail -v majordomo Subject: lists ^D (Ctrl + d) majordomo... aliased to "|/usr/local/majordomo-1.94.4/wrapper majordomo" "|/usr/local/majordomo-1.94.4/wrapper majordomo"... Connected to prog... "|/usr/local/majordomo-1.94.4/wrapper majordomo"... Sent正しくインストールが出来ていれば、>>>> lists Majordomo@oak.eg.t.kanazawa-u.ac.jp serves the following lists: test Use the 'info ' command to get more information about a specific lists.のようなメールが返って来ます。
名称を決める
最初にメーリングリストの名前を決めます。名前に使用できるのは、 英字、数字、ハイフン"-"、アンダーバー"_"です。名前には、英字の 大文字/小文字を用いることもできますが、電子メールの世界ではこれら を区別しないので注意してください。
ここでは、研究室用に名前を"funada-lab"とします。メンバーリストファイルの作成
メーリングリストの名称を決定したら、メーリングリストのメンバーを登 録するファイルを作成します。ファイル名はメーリングリストの名前を用 います。なお、作成する場所は majordomo.cf で定義した $listdir(/usr/local/majordomo/lists)以下に作成します。 以下にその手順を示します。% su - majordom Password: $ cd lists $ touch funada-lab $ chmod 664 funada-labインフォメーションファイルの作成
Majordomo では info コマンド(後述)によりユーザはメーリングリストの説明文 をメールで自動的に取り寄せることができます。Majordomo サーバはユー ザから info の要求を受けると、$listdir ディレクトリに用意されている、 「メーリングリスト名.info」というファイルを説明文として送付します。 このファイルには、メーリングリストの説明文を書いておきます。% su - majordom Password: $ cd lists ML名.info ファイルを編集 $ chmod 664 ML名.infoなお、日本語の場合、例えば以下のようにして、漢字コードを JIS にしておきます。$ nkf -j ML名.info > ML名.info.jis $ mv ML名.info.jis ML名.infoイントロファイルの作成
次に、ユーザから Majordomo サーバに発行される intro コマンド(後述)に対し て送付するファイルを「メーリングリスト名.intro」という名前で 用意します。このファイルは Majordomo サーバが、参加登録を終えたユー ザに対し最初に送信するメールに添付するものです。このファイルには メーリングリストの内容紹介だけでなく、Majordomo サーバが許可してい るコマンドおよび投稿に対する諸注意などを解説した、事実上のマニュアル に相当することを記述します。% su - majordom Password: $ cd lists ML名.intro ファイルを編集 $ chmod 664 ML名.intro同様に、日本語の場合、漢字コードを JIS にします。管理者用パスワードの設定
Majordomo では、メーリングリストの管理者が電子メールを使ってメーリ ングリスト自身の設定を行えるようになっています。この場合は、管理者専 用のコマンド(後述)を使うために、パスワードを指定する必要があります。 管理者のパスワードは $listdir ディレクトリに 「メーリングリスト名.passwd」というファイルを用紙し、そこに記述し ます。なお、このファイルには以下のようにパーミッションを設定します。% su - majordom Password: $ cd lists ML名.passwd ファイルを編集 $ chmod 660 ML名.passwdエイリアルファイルの設定
エイリアスファイル(/etc/aliases)を編集します。以下のような記述を /etc/aliases に追加します。ML名は funada-lab です。# vi /etc/aliases 以下の記述を追加 funada-lab: "|/usr/local/majordomo/wrapper resend -l funada-lab -h oak.eg.t.kanazawa-u.ac.jp lab-members owner-funada-lab: sakai lab-members: :include:/usr/local/majordomo/lists/funada-lab funada-lab-request: "|/usr/local/majordomo/wrapper request-answer funada-lab owner-funada-lab-request: owner-funada-lab funada-lab-approval: owner-funada-lab 追加後、newaliases を実行 # newaliases上記の /etc/aliases で resend コマンドを呼び出していますが、この resend コマンドは、受け取ったメールのヘッダなどの書き換えを行います。
オプションには、以下のようなものがあります。以上で、メーリングリストの作成は終了です。実際に info,intro,subscribe などの コマンドを発行してみて、動作を確認します。また、メーリングリストにもメールを 出してみて、動作を確認します。
- -l listname
メーリングリスト名(listname)を指定します。このオプションは必ず指定する 必要があります。- -h hostname
Majordomoサーバが動作するホスト名をドメイン名も含めて指定します。- -f from-addr
"From:"フィールドにアドレス(from-addr)をセットします。- -M max-msg-size
メーリングリストで扱える最大のメールサイズ(max-msg-size)を指定します。- -A
メーリングリストをモデレート状態で運用します。モデレート状態では、 モデレータ(仲裁者)を経て、メーリングリストにメールが流されます。- -a passwd-file
メーリングリストで使用している approval用パスワードか、もしくはそれが 入っているファイルを指定します。- -R
メールのヘッダにある "Received:"ヘッダを削除します。- -s
メーリングリスト管理者宛のメール (subscribe,unsubscribe などの単語が含まれているか)かどうかをチェックします。- -d
デバッグ用のオプションです。処理を表示します。- -C config-file
メーリングリストの設定ファイルとして config-file を指定します。 省略時は、ML名.config となります。Subject:フィールドのカスタマイズ
ここでは、Subject:フィールドとして、ML名とシーケンス番号が入った、 以下のような形式Subject: [funada-lab 123] .....となるような設定を行います。
まず、カウントするファイルを準備します。カウント用のファイルは、 $listdir に「メーリングリスト名.seq」というファイル名で作成します。% su - majordom Password: $ cd lists $ vi ML名.seq ML名.seq ファイルを作成。内容は単に "1" とだけ記述する $ chmod 664 ML名.seq次に、majordom のホームディレクトリ以下の Tools ディレクトリにある sequencer スクリプトを、ホームディレクトリにコピーします。$ cd /usr/local/majordomo $ cp Tools/sequencer .次に、メーリングリストのコンフィグレーションファイルである、 「メーリングリスト名.config」を編集します。以下のように編集します。$ cd /usr/local/majordomo/lists $ vi ML名.config 以下のような設定にする subject_prefix = [$LIST $SEQNUM]その後、resend から sequencer に切り替えるために /etc/aliases ファイルを 編集します。以下のような記述に変更します。# vi /etc/aliases funada-lab: "|/usr/local/majordomo/wrapper sequencer -l funada-lab -n -h oak.eg.t.kanazawa-u.ac.jp lab-members owner-funada-lab: sakai lab-members: :include:/usr/local/majordomo/lists/funada-lab funada-lab-request: "|/usr/local/majordomo/wrapper request-answer funada-lab owner-funada-lab-request: owner-funada-lab funada-lab-approval: owner-funada-lab 追加後、newaliases を実行 # newaliases以上で設定は終了です。実際にメーリングリストにメールを出し、Subject:フィールド を確認します。アーカイブファイルの作成
メーリングリストのアーカイブを作るには、majordom のホームディレクトリにある archive2.pl スクリプトを使用します。
archive2.pl のオプションを以下に示します。アーカイブファイルを置くディレクトリは、majordom のホームディレクトリにある majordomo.cf ファイルで、デフォルトでは以下のように定義されています。
- -f archive
アーカイブ先を archive ディレクトリに指定する- -u
入力ファイルはメールスプール形式- -a
入力ファイルはメールメッセージ形式- -d
アーカイブファイル名は arvhive名.YYMMDD- -D
アーカイブファイル名は arvhive名.YYYYMMDD- -m
アーカイブファイル名は arvhive名.YYMM- -M
アーカイブファイル名は arvhive名.YYYYMM- -y
アーカイブファイル名は arvhive名.YY- -Y
アーカイブファイル名は arvhive名.YYYY$filedir = "$listdir"; $filedir_suffix = ".archive";今回は、上記の設定を使用します。これにより、$listdir 以下に 「メーリングリスト名.archive」というディレクトリが、アーカイブ用の ディレクトリになります。
まず、以下のようにして、アーカイブファイルを置くディレクトリを作成します。% su - majordom Password: $ cd lists $ mkdir ML名.archive次に、/etc/aliases ファイルを編集します。以下のような記述に変更します。# vi /etc/aliases funada-lab: "|/usr/local/majordomo/wrapper sequencer -l funada-lab -n -h oak.eg.t.kanazawa-u.ac.jp lab-members owner-funada-lab: sakai lab-members: :include:/usr/local/majordomo/lists/funada-lab , funada-lab-archive funada-lab-request: "|/usr/local/majordomo/wrapper request-answer funada-lab owner-funada-lab-request: owner-funada-lab funada-lab-approval: owner-funada-lab funada-lab-archive: "|/usr/local/majordomo/wrapper archive2.pl -f /usr/local/majordomo/lists/funada-lab.archive -a -m owner-funada-lab-archive: owner-funada-lab 追加後、newaliases を実行 # newaliases以上で設定は終了です。実際にメーリングリストにメールを出し、アーカイブファイル (上記の例では、例えば funada-lab.9906)が作成されるかどうかを確認します。
MLに送られたメールを Web 上で見られるようにする方法のひとつに、 mist2html があります。
以下のURL
http://www.y-min.or.jp/~nob/ML/mlist2html.html
に、mlist2html についての情報がのっています。
この mlist2html は Perl で書かれたスクリプトで、MHonArc というソフトウェアを 起動しているため、あらかじめ MHonArc を導入しておきます。
MHonArc は、メールを HTML形式に変換するソフトウェアで、以下のサイトに情報が あります。 http://www.oac.uci.edu/indiv/ehood/mhonarc.html
実際の入手は、次の CPANサイトから行います。
http://www.perl.com/CPAN/authors/id/EHOOD/
上記の URL より、最新の MHonArc を入手します。今回は、MHonArc2.4.6.tar.gz を 入手しました。入手後、適当なディレクトリで解凍・展開してディレクトリを 移動します。% tar xvfz MHonArc2.4.6.tar.gz % cd MHonArc2.4.6付属の INSTALL を読み、インストールを行います。以下のように実行し、 質問に答えます。% su Password: # perl install.me Pathname of perl executable: ("/usr/local/bin/perl") Directory to install executables: ("/usr/local/bin") Directory to install library files: ("/usr/local/lib/perl5/site_perl/5.005") /usr/local/lib/MHonArc "/usr/local/lib/MHonArc" does not exist. Create ['y'] Directory to install documentation: ("/usr/local/doc/MHonArc") /usr/local/share/doc/MHonArc "/usr/local/share/doc/MHonArc" does not exist. Create ['y'] Directory to install manpages: ("/usr/local/man") You have specified the following: Perl path: /usr/local/bin/perl Bin directory: /usr/local/bin Lib directory: /usr/local/lib/MHonArc Doc directory: /usr/local/share/doc/MHonArc Man directory: /usr/local/man Is this correct? ['y']以上で、MHonArc のインストールは終了です。
次に、mlist2html を入手し、上記の質問事項に合わせて、以下の部分を変更します。% wget http://www.y-min.or.jp/~nob/ML/mlist2html 変更箇所 211> $mhonarc = '/usr/local/bin/mhonarc'; 212> $mhlib = '/usr/local/lib/MHonArc'; 今回は、上記の質問でこの記述に合わせたので、変更はしていません。 パーミッションを設定します。 % chmod 755 mlist2htmlまた、mlist2html の中で使っている common.rc や mlist_name.rc で、MHonArc のいろいろな動作を 設定します。
以下のURL
http://www.y-min.or.jp/~nob/ML/mhonarc_rc.html
を参考にして、common.rc ファイルを作成し、MHonArc の Lib Directory (/usr/local/lib/MHonArc) の下に置きます。common.rcを作成 # cp common.rc /usr/local/lib/MHonArcここで、適当なメールを mlist2html に通してみます。例えば以下のように実行します。
mail_file は適当なメールファイル、ml_name は MLの名前です。 % nkf -me < mail_file | ./mlist2html /tmp ml_name Reading resource file: /usr/local/lib/MHonArc/common.rc ... Adding message to tmp/ml_name/200005 Writing mail . Writing tmp/ml_name/200005/index.html ... Writing tmp/ml_name/200005/threads.html ... Writing database ... 1 messages 上記により、/tmp/ml_name 以下に HTML形式のファイルが作成されます。
うまくHTML形式に変換できているようなら、/etc/aliases ファイルを編集します。 mlist2html を /usr/local/bin にコピーし、以下の1行を /etc/aliases に追加します。# cp mlist2html /usr/local/bin/ # vi /etc/aliases 以下の1行を追加 "| /usr/local/bin/nkf -me | /usr/local/bin/mlist2html HTML_archive_derectory ml_name" HTML_archive_directory : HTMLファイルを保存するパス名 ml_name : メーリングリストの名前 # newaliases