デフォルトメーリングリスト

kyoma@cosmos.sci.hokudai.ac.jp

現行の EP-all, EP-insei のような地惑メンバー全員がその身分(教官,学生...)に応じて参加すべきメーリングリスト(以下,デフォルトメーリングリスト,と呼ぶ)について,専攻サーバの運用においてどう扱うか,7/2 のミーティングで話がされた.その結果, ということになった.登録システム班から渡されたリストのユーザを,自動でデフォルトメーリングリストに登録する方法を考えたのが,この文書である.

環境

仮定した環境は,以下.

準備,デフォルトメーリングリストの作成

# groupadd ep
# adduser -g ep ep

# vigr      グループ ep に ML 世話人ユーザを加える.
# visudo    グループ ep のユーザがユーザ ep になれるようにする.
すなわち,%ep     ALL=(ep) ALL の一行を加える.

> sudo -u ep -s
Password:
> whoami
ep
> cd ~ep/

> ezmlm-make ~ep/student ~ep/.qmail-student ep-student blue.sci.hokudai.ac.jp
> ezmlm-make ~ep/staff ~ep/.qmail-staff ep-staff blue.sci.hokudai.ac.jp
> ezmlm-make ~ep/all ~ep/.qmail-all ep-all blue.sci.hokudai.ac.jp
...
ezmlm-make のマニュアルは,http://www.jp.qmail.org/ezmlm/idx/ezmlm-make.html にある.

スクリプト

ユーザ名のリストからメーリングリストへの登録・削除を行うスクリプトを書いた.以下.これらは,http://flex.ee.uec.ac.jp/texi/perl-nyuumon/index.html, http://flex.ee.uec.ac.jp/texi/perl-nyuumon/index.html を参考にして書いた.

list-2-ezmlm-sub

ユーザ名リストのファイルを読み出して,メーリングリストに登録するためのスクリプトである.
> list-2-ezmlm-sub ~ep/student/ ~ep/student-list
のように使用する.~ep/student/ は,ezmlm-make で作成したメーリングリストのディレクトリ.~ep/student-list がユーザ名リストのファイル.フォーマットは, とする.このスクリプトは,ユーザ名リストのファイル中のユーザ名に,@blue.sci.hokudai.ac.jp をつけ加えて,メーリングリストに追加する.ezmlm-sub を呼び出しているが,既に登録されているアドレスを登録しようとしても,ezmlm-sub は何らエラーを出さない.
#!/usr/bin/perl
#Kyoma TAKAHASHI 1999.7.4

#      list-2-ezmlm-sub mailinglist_directory listfile

$ezmlmsubbin = '/usr/local/bin/ezmlm/ezmlm-sub';
$domain = '@blue.sci.hokudai.ac.jp';

$mldir = shift;
$list = shift;

open(LIST,"< $list");

while(<LIST>) {

        chop($local = $_);
        $address = $local.$domain;
        system "$ezmlmsubbin $mldir $address";

}

close(LIST);
実行例
> more ~ep/student-list 
kyoma
togari
ame
gomi

> bin/list-2-ezmlm-sub ~ep/student/ ~ep/student-list 

> ezmlm-list ~ep/student
togari@blue.sci.hokudai.ac.jp
ame@blue.sci.hokudai.ac.jp
kyoma@blue.sci.hokudai.ac.jp
gomi@blue.sci.hokudai.ac.jp

all-ezmlm-unsub

全てのアドレスを,メーリングリストから削除するためのスクリプトである.
> all-ezmlm-unsub ~ep/student/
のように使用する.
#!/usr/bin/perl
#Kyoma TAKAHASHI 1999.7.5

#      all-ezmlm-unsub mailinglist_directory

$ezmlmunsubbin = '/usr/local/bin/ezmlm/ezmlm-unsub';
$ezmlmlistbin = '/usr/local/bin/ezmlm/ezmlm-list';

$mldir = shift;

open(CURRENT,"$ezmlmlistbin $mldir|");

while(<CURRENT>) {

        chop($address = $_);
        system "$ezmlmunsubbin $mldir $address";

}

close(CURRENT);
実行例
> ezmlm-list ~ep/student
togari@blue.sci.hokudai.ac.jp
ame@blue.sci.hokudai.ac.jp
kyoma@blue.sci.hokudai.ac.jp
gomi@blue.sci.hokudai.ac.jp

> bin/all-ezmlm-unsub ~ep/student

> ezmlm-list ~ep/student

どうやって使うか

例.登録システム班がユーザ名リストを書き込んだ後に cron で実行する.この例では毎日 2:05 に実行.まず,メールの配送を止め,メーリングリスト登録アドレスを全消去したあとに,アカウントリストからメーリングリストに登録.最後にメール配送再開する.メールの配送を止める理由・方法は,http://www.jp.qmail.org/q103/jman5/dot-qmail.html#edit によった.
> sudo -u ep -s
Password:
> whoami
ep

> vi ~ep/ml_manage
          編集する.編集結果は,
> more ~ep/ml_manage
#!/bin/sh
/bin/chmod +t ~ep/ && \
~ep/bin/all-ezmlm-unsub ~ep/student/ && \
~ep/bin/list-2-ezmlm-sub ~ep/student/ ~ep/student-list && \
~ep/bin/all-ezmlm-unsub ~ep/staff/ && \
~ep/bin/list-2-ezmlm-sub ~ep/staff/ ~ep/staff-list && \
~ep/bin/all-ezmlm-unsub ~ep/all/ && \
~ep/bin/list-2-ezmlm-sub ~ep/all/ ~ep/student-list && \
~ep/bin/list-2-ezmlm-sub ~ep/all/ ~ep/staff-list && \
/bin/chmod -t ~ep/
> chmod 755 ~ep/ml_manage

> crontab -e
          編集する.編集結果は,
> crontab -l
5 2 * * * ~ep/ml_manage
~ep/ml_manage の実行例
> more ~ep/student-list 
kyoma
togari
ame
gomi

> more ~ep/staff-list 
tats
keikei

> ~ep/ml_manage

> ezmlm-list ~ep/student
togari@blue.sci.hokudai.ac.jp
ame@blue.sci.hokudai.ac.jp
kyoma@blue.sci.hokudai.ac.jp
gomi@blue.sci.hokudai.ac.jp

> ezmlm-list ~ep/staff
tats@blue.sci.hokudai.ac.jp
keikei@blue.sci.hokudai.ac.jp

> ezmlm-list ~ep/all/
tats@blue.sci.hokudai.ac.jp
togari@blue.sci.hokudai.ac.jp
keikei@blue.sci.hokudai.ac.jp
ame@blue.sci.hokudai.ac.jp
kyoma@blue.sci.hokudai.ac.jp
gomi@blue.sci.hokudai.ac.jp