デフォルトメーリングリスト
kyoma@cosmos.sci.hokudai.ac.jp
現行の EP-all, EP-insei のような地惑メンバー全員がその身分(教官,学生...)に応じて参加すべきメーリングリスト(以下,デフォルトメーリングリスト,と呼ぶ)について,専攻サーバの運用においてどう扱うか,7/2 のミーティングで話がされた.その結果,
- サーバに登録したユーザのリストは,登録システム班からメール班に渡される.メール班が(自動で)登録を行う.
- ユーザによる自動登録・削除は行わせない.誰でも登録できるメーリングリストにはしないということ.よって,blue 以外のメールアカウントでの登録はできない.他のメールアカウントを主に使うユーザは,blue からの転送で対処してもらう.
ということになった.登録システム班から渡されたリストのユーザを,自動でデフォルトメーリングリストに登録する方法を考えたのが,この文書である.
環境
仮定した環境は,以下.
- 登録システム班から渡されるユーザ名のリストは,身分ごとにファイルになっている.
- デフォルトメーリングリストは,ezmlm を用いて運用され,ユーザ alias の権限で,~alias/ 以下にそのディレクトリは置かれている.ここでは,学生デフォルトメーリングリストの名称とディレクトリをそれぞれ,ep-student, ~ep/student/ とする.
準備,デフォルトメーリングリストの作成
# 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 がユーザ名リストのファイル.フォーマットは,
- ユーザ名は1行に1つ.
- 余計な空白はなし.
- 空行はなし.
とする.このスクリプトは,ユーザ名リストのファイル中のユーザ名に,@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