サーバ管理のためのメーリングリスト


以下は,epnetfan-ml に流れたメール(一部抜粋).

 Delivered-To: mailing list epnetfan_ml
 To: epnetfan-ml
 Subject: Re: inttech semi 7/2
 From: HAYASHI Yoshi-Yuki
 Date: Tue, 06 Jul 1999 09:17:21 +0900

 林です

 サーバー管理側として必要な ML は

         ・サーバーアカウント持っている人全員へのメールが送れるリスト
         ・IP 登録関係者(管理者)全員へのメールが送れるリスト

 の 2 つでしょう. 
 

これを作る.登録するアドレスは grey 上のもののみとし,gate-system から受け渡してもらう.
メーリングリストからの削除・登録アドレスの変更には応じない.

準備,メーリングリストの作成

 $ sudo -u alias -s

 $ whoami
 alias

 $ cd ~alias/

 $ ezmlm-make -gsu ~alias/accountholder ~alias/.qmail-accountholder accountholder ep.sci.hokudai.ac.jp
 $ ezmlm-make -gsu ~alias/hostmanager ~alias/.qmail-hostmanager hostmanager ep.sci.hokudai.ac.jp
 

ezmlm-make のマニュアルは, http://mlm.qmail.jp/idx/ezmlm-make.htmlにある.
-s オプションによって,ユーザによるメーリングリストへの 自動登録が審査されるが,
審査員に誰も登録されていないと審査を受けられずに全て却下される.
なお,-P オプションを使うと自動登録・退会のほかに アーカイブ取りだしなども不許可になってしまうため,このようにする.

また,~alias/{accountholder,hostmanager}/text/ 以下には, ezmlm-manage がユーザーに対して送るメッセージが置かれている.

ここには自動登録・抹消・受け取りアドレス変更に関する部分があるので 削除しておかなくてはいけない.
ユーザにこれらの機能が有効であるとの誤解を与えないためである.

~alias/accountholder/text/bottom の中身
(~alias/hostmanager/text/bottom も同様)

 --- mailing list <#l#> で利用可能な command 一覧です ---

 ezmlm は以下の command を自動で実行します。

        [[[ 絶対に mailing list 本体に command を送らないで下さい ]]]

(mailing list 本体に送られた command は、ezmlm には見えず、
  購読者全員に送られてしまいます。結果として購読者全員を困惑させる
  ことになるでしょう)

  command は以下の address 宛に空の message を送ることで実行されます。

        <自動登録・削除に関する記述を削除>

  * この mailing list に関する情報を取り出す。
    (Get information)

        <accountholder-info@ep.sci.hokudai.ac.jp>

  * この mailing list で、しばしば尋ねられる質問 (FAQ) に関する
    情報を取り出す。
    (Get FAQ)

        <accountholder-faq@ep.sci.hokudai.ac.jp>

  * 123番から 145番迄の message を archive から取り出す。
    (Retrieve messages from #123 to #145)

        <accountholder-get.123_145@ep.sci.hokudai.ac.jp>

  * 123番から 456番迄の Subject: 行と投稿者の一覧を archive から取り出す。
    (Retrieve subject/author list from #123 to #456)

        <accountholder-index.123_456@ep.sci.hokudai.ac.jp>

    一度の request で最大 2000個取り出せます。
    また、番号は 100個単位で丸められます。
    (この例の場合は 100番から 499番迄になります)

  * 12345 番から始まる一連の message を archive から取り出します。
    (Retrieve `thread' from message #12345)

        <accountholder-thread.123@ep.sci.hokudai.ac.jp>

  command address 宛の message は空である必要はありません。
 (ezmlm は内容を一切見ていません、address のみが重要です)

        <受け取りアドレス変更に関する記述を削除>

 --- 以下に送られてきた request message を添付しておきます ---


 ~alias/accountholder/text/{sub-confirm,unsub-confirm}:

 この mailing list <#l#>@ep.sci.hokudai.ac.jp では,
 自動登録・削除を受け付けていません.
 

メーリングリスト管理スクリプト

ユーザ名のリストからメーリングリストへの登録・削除を行うスクリプト・ 全てのアドレスをメーリングリストから削除するスクリプトを以下で示す.
これらは/usr/local/bin/ に置くこと.
http://flex.ee.uec.ac.jp/texi/perl-nyuumon/index.html,
http://flex.ee.uec.ac.jp/texi/perl/perl_toc.html
を参考にした.

list-2-ezmlm-sub

標準入力に与えられたユーザ名リストを, メーリングリストに登録するためのスクリプトである.

$ gate-user-list stable | list-2-ezmlm-sub ~alias/accountholder/
$ list-2-ezmlm-sub ~alias/accountholder/ < listfile

のように使用する.~alias/accountholder/ は, ezmlm-make で作成したメーリングリストのディレクトリ.
listfile がユーザ名リストのファイル. gate-user-list は gate 班作成のプログラム.
これらのフォーマットは,

とする.このスクリプトは,ユーザ名リストのファイル中のユーザ名に,@ep.sci.hokudai.ac.jp をつけ加えて,メーリングリストに追加する.ezmlm-sub を呼び出しているが,既に登録されているアドレスを登録しようとしても,ezmlm-sub は何らエラーを出さない.
#!/usr/bin/perl
#Kyoma TAKAHASHI 1999.7.4
#                1999.7.10
#                1999.7.12

#      list-2-ezmlm-sub mailinglist_directory

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

$mldir = shift;

while(<>) {

        chop($local = $_);
        if($local ne '') {
                if(/@/) { $address = $local; }
                else { $address = $local.$domain; }
                system "$ezmlmsubbin $mldir $address";
        }

}

list-2-ezmlm-unsub

標準入力に与えられたユーザ名リストを,メーリングリストから削除するためのスクリプトである.
> gate-user-list defunct | list-2-ezmlm-unsub ~alias/accountholder/
> list-2-ezmlm-unsub ~alias/accountholder/ < listfile
のように使用する.~alias/accountholder/ は,ezmlm-make で作成したメーリングリストのディレクトリ.listfile がユーザ名リストのファイル.フォーマットは,list-2-ezmlm-sub で扱うものと同様.このスクリプトは,ユーザ名リストのファイル中のユーザ名に @ep.sci.hokudai.ac.jp をつけ加えたアドレスを,メーリングリストから削除する.ezmlm-unsub を呼び出しているが,登録されていないアドレスを削除しようとしても,ezmlm-unsub は何らエラーを出さない.
 #!/usr/bin/perl
 #Kyoma TAKAHASHI 1999.9.4

 #      list-2-ezmlm-unsub mailinglist_directory

 $ezmlmunsubbin = '/usr/local/bin/ezmlm/ezmlm-unsub';
 $domain = '@ep.sci.hokudai.ac.jp';

 $mldir = shift;

 while(<>) {

        chop($local = $_);
        if($local ne '') {
                if(/@/) { $address = $local; }
                else { $address = $local.$domain; }
                system "$ezmlmunsubbin $mldir $address";
        }

 }

all-ezmlm-unsub

全てのアドレスを,メーリングリストから削除するためのスクリプトである.
> all-ezmlm-unsub ~alias/accountholder/
のように使用する.
  #!/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);

ML の定期更新

$ sudo -u alias -s
Password:
$ whoami
alias

$ vi ~alias/bin/ml_manage.accountholder
$ vi ~alias/bin/ml_manage.hostmanager
          編集する.編集結果は,
$ more ~alias/bin/ml_manage.accountholder
   #!/usr/bin/perl
   #   Kyoma TAKAHASHI  1999.09.30

   $domain = '@ep.sci.hokudai.ac.jp';

   open (GATEUL,"/usr/local/bin/gate-user-list stable |");

   while (<GATEUL>) {
   chop ( $user = $_ );

   if ( $user ne '' ) {
        open (GATEUS,"/usr/local/bin/gate-user-show $user |");
        while (<GATEUS>) { if (/type/) { ($typeq) = /type: (.*)/; } }
        close (GATEUS);

        if ( $typeq eq 'person' ) {
        $address = $user.$domain;
        system "/usr/local/bin/ezmlm/ezmlm-sub ~alias/accountholder/ $address";
        }
   }
   }
   close (GATEUL);
system "/usr/local/bin/gate-user-list defunct | /usr/local/bin/list-2-ezmlm-unsub ~alias/accountholder/";

$ more ~alias/bin/ml_manage.hostmanager
    #!/usr/bin/perl
    #   Kyoma TAKAHASHI  1999.09.22

    system "/usr/local/bin/all-ezmlm-unsub ~alias/hostmanager/";

    open (NUM,"/usr/local/bin/gate-ip-list stable | wc -l|");
    $num = $_ while(<NUM>);
    close (NUM);
    chop ($num);

    if ( $num > 0 ){
    system "/usr/local/bin/gate-ip-show -f owner `/usr/local/bin/gate-ip-list stable` | /usr/local/bin/list-2-ezmlm-sub ~alias/hostmanager/";
    system "/usr/local/bin/gate-ip-show -f root `/usr/local/bin/gate-ip-list stable` | /usr/local/bin/list-2-ezmlm-sub ~alias/hostmanager/";
    }
accountholder ML と hostmanager ML とで,更新の手順が異なる. 後者では,いったん全てのアドレスを削除した後,必要なアドレス を登録する. これは,登録抹消ホストの管理者・所有者と 登録承認済みホストの管理者・所有者は 重複する可能性があるからである. 一方 accountholder ML の更新においては, 利用停止ユーザと承認済みユーザは重複しない.
$ chmod 744 ~alias/bin/ml_manage.*

# crontab -e
          編集する.編集結果は,
# crontab -l

      MAILTO="epmail"
      
      5 2 * * *       /var/qmail/alias/bin/ml_manage.accountholder

      15 2 * * *      /var/qmail/alias/bin/ml_manage.hostmanager

          この例では,毎日 02:05 に実行.
          alias はメールを受け取らない設定になっているので,
          MAILTO で受取人を明示する.

最終更新履歴:2003/01/09 (島沢竜平)