[PREVIOUS CHAPTER] [______TOC_______]

6 各種ユーザ用ユーティリティ等 (bin/, lib/Utilities/ ...)

    ここでは bin/ 以下と contrib/Utilities/ 以下の階層で提供しているプログ
    ラムについて解説します。あったら便利かもしれないというプログラムです。
    使い方について理解している必要があるわけではありません。

    6.1	analyze_mail_error.pl (replaced to libexec/mead.pl)

    use libexec/mead.pl.

    6.2	アーカイブの作成 (bin/archive.pl bin/archive.sh)
    ../daily 4.1

    アーカイブの節を参照 (../daily 3.0)

    6.3	base64decode.pl base64encode.pl

    BASE64 encoder and decoder. A part of library uses this.

    6.4	cron (bin/cron.pl)
    ../digest 2.17

    Vixie Cron (4.4BSD の cron) と compatible な cron もどき(../digest 2.17).

    6.5	プログラムをデーモン化して実行 (bin/daemon.pl)
    ../digest 2.17

    例：

    	% bin/daemon.pl cron.pl $PWD

    cron.pl をデーモン化して実行する。ようは次のプログラムの perl version
    です。おそらくBSDでしか動かないだろう。

    #include <stdio.h>
    #include <sys/ioctl.h>
    #include <sgtty.h>
    #include <sys/file.h>

    void usage()
    {
      char *string="USAGE: targetprogram";
      fputs(string,stderr);
      exit(0);
    }

    main(argc, argv)
         int argc;
         char **argv;
    {
      int f;

      f = open( "/dev/tty", O_RDWR, 0);
      if( -1 == ioctl(f ,TIOCNOTTY, NULL))
        exit(1);
      close(f);

      if( argc > 1 )
        execvp(*(++argv), argv);
      else
        usage();

      exit(0);
    }

    6.6	daily (日々のログ解析)

    	% bin/daily.pl -f etc/daily.ignore log

    は log ファイル（複数も可）を解析しログの中で普通じゃない行をOUTPUTし
    ます。どういう行を正常の動作とみなして無視するかは

    	/usr/local/fml/etc/daily.ignore
    	(FMLのインストール先/etc/daily.ignore)

    というファイルに入っています。各行が無視するキーワードです。増やすなら
    足せばいいし減らすなら切ってしまえば良いでしょう。毎朝 cron で実行する
    とよいです。

    	daily.pl [-hd] [-f patfile] [-t trap_patfile] [-p days]

    	-h        this message
    	-d        debug mode

    	-f file   pattern file to ignore
    	-t file   pattern file to trap (evaluated before ignore list)
    	-p days   scan at which day (default is 1, that is "yesterday")

    Example: for elena ML (/var/spool/ml/elena)

    [$HOME/sbin/daily.sh]

    	#!/bin/sh
    	/usr/local/fml/bin/daily.pl -f $HOME/etc/daily.ignore \
    		-t $HOME/etc/daily.trap /var/spool/ml/elena/log

    [crontab]
    0 5 * * * /bin/sh $HOME/sbin/daily.sh

    6.7	DNS のチェック(bin/dns_check.pl)

    DNS のテストをする、ちょっとしたプログラム。パッケージを広げた場所で

    	% make dns_check

    とするとこのプログラムを実行する。

    6.8	emumail.pl

    ヘッダを生成して sendmail から fml.pl への入力をコマンドラインで
    emulation するためのもの。debug に使うだけ(なくてもいいけど、あるとちょっ
    と便利？)。

    "makefml test <ML>" が同じことをしてくれます。こっちの方が便利だと思う。

    6.9	EXPIRE を実行するプログラムの例 (bin/expire.pl)
    ../daily 5.4

    Please see the chapter ../daily 5.0.

    6.10	WIX言語フォーマッタ (bin/fwix.pl)
    ../documentation 2.0

    WIX言語のフォーマッタ

    6.11	gen_summary.pl (summary ファイルを再生成する)

    ML の spool から summary を再生成する。(e.g. summary が壊れた時)

    in fml-support ML's Count: 02393

       gen_summary.pl -I /usr/local/fml めーりんぐりすとのDIR/spool > summary

            -I lib*.pl のある場所（必須）
            -m オプションで MIME Decoding もします。

    6.12	bin/msend_master.sh

    example of control over multiple msending processes.
    See also INSTALL file.

    6.13	bin/more_secure_cf.pl

    a real program of "make secure" operation.

    6.14	Multipart Canceler Filter (bin/multipart.pl)

    Author: Yuao TANIGAWA <yuao@infonia.or.jp>

    なお makefml で作るとサンプルに見本がついています。

    From:    Yuao TANIGAWA <yuao@infonia.or.jp>
    Subject: Multipart Canceler
    To:      fml-support@axion.phys.titech.ac.jp (fml supporting ML)
    Date:    Fri, 10 Jan 1997 21:09:03 +0200
    X-Mail-Count: 01937

      最近、ML に Multipart/Mixed とか Multipart/Alternative とかの
    形式で、メールを送ってくる人がいるので（特にコマンドの処理がで
    きないので）、Multipart Canceler なるフィルタを作ってみました。
      Multipart/Mixed の場合は、# End of Document No.??? でつなげる。
    Multipart/Alternative の場合は、最初の文書以外は捨てる。...と
    いうことをしています。
      使い方は、fml を起動するのに "|/fmlpath/fml.pl ..." と記述し
    ているところを "|/scriptpath/multipart.pl|/fmlpath/fml.pl ..."
    などと記述すれば機能します。

    6.15	NEWSYSLOG SHELL VERSION (bin/newsyslog.sh)
    ../daily 6.4

    libnewsyslog.pl がなかった時代の産物。

    6.16	SMTPライブラリを使った /usr/bin/Mail の emulation (bin/pmail.pl)

    単なる書き方の例

    6.17	パスワードの初期化と変更 (bin/passwd.pl)
    ../remote_control 4.0

    現在では makefml passwd ML を使う方が便利です。

    fml でのパスワードは通常 crypt された形で保存されます(オプションでMD5
    も可能 ../remote_control 4.2)。つまり UNIX の /etc/passwd と同じようにです。

    bin/passwd.pl を使って下さい。使い方は、

     passwd.pl [-i] [-f password-file] user password

        -i で user のパスワードを password で初期化
        -f etc/passwd に代わるパスワードファイルを指定

    例：

    	% passwd.pl -i fukachan@phys.titech.ac.jp

    とユーザ名つきで入れると

    	Address: fukachan@phys.titech.ac.jp
    	Password:

    となるのでパスワードを入れて下さい。

    	fukachan@phys.titech.ac.jp 32ZrV/XvYj1kY

    のように etc/passwd が初期化される。ここの32ZrV/XvYj1kY は入力したパス
    ワードを暗号化した結果です。

    この etc/passwd は

    	ＭＬのリモート管理(admin approve コマンド)
    	moderated モード (TYPE I)

    等で使われます。
    ../remote_control 4.0

    6.18	POP経由でスプールへ、POPを使ってＭＬを実行 (bin/popfml.pl)
    5.0../digest 2.17 2.0

    libexec/popfml.pl がこの目的の専用プログラムです。
    5.0

    注意: inc_via_pop.pl は昔の名前(今はリンク)

    6.19	与えられたファイルを分割して送り出すプログラム (bin/split_and_msend.pl)

    与えられたファイルを分割して送り出すプログラムを太古の昔使ってた名残。
    事実上使ってない。fml 2.x では OBSOLETE のため無保証 or 単なるおまけ。

    6.20	SPOOL -> HTML Hierarchy (bin/spool2html.pl)

    ターゲットとなるdirectory中のメールをHTML化します。MLのホームで
    実行するか、それを-D オプションで指定しなければいけません。

    SYNOPSIS:

      spool2html.pl [-h] [-I INC] [-f cf] [-d HTML_DIR] [-t TYPE] [-D DIR] SPOOL

        -h    this message
        -d    $HTML_DIR
        -f    cf (例えばMLの設定ファイルconfig.phを評価する）
        -t    number of day ($HTML_INDEX_UNIT)
        -D    $DIR (fml の $DIR)
        -I    @INC に INCLUDE PATH を付け加える

        SPOOL $SPOOL_DIR

    Example:
       % cd /var/spool/ml/elena
       % spool2html.pl -I /usr/local/fml -d /htdocs /var/spool/ml/elena/spool

    ターゲット SPOOL 中のメールを HTML化し $HTML_DIR 中に変換します。
    注意: 2.1GAMMA#103 以降はデフォールトでスレッド処理も実行します。

    変換の仕方については SyncHtml (../html_convert 1.1) を参照してください。

    MLなら config.ph を評価して実行するので -f config.ph で呼び出してもOK
    です。

    なお -D で設定していない場合 $DIR には $PWD が設定されています。
    config.ph を評価する場合には気をつけて下さい。

    6.21	MH scan.format (lib/Utilities/scan.format)

    lib/Utilities/scan.format を自分の ~/Mail にいれると

      65 -06/14 Horaki Hikari fml-su Subject uja  <<うじゃ…
    のような表示になります。    ↑ここが X-ML-Name: の部分の６文字

    MHは暗号のようですが、ポイントは今レジスターに何が入っているかと、

    	if	%<
    	elif	%?
    	else	%|
    	fi	%>

    が理解できれば scan.format は書けます。

    X-ML-Name: とかと名前が違うフィールドは ↓この辺を

    %?{X-Mailinglist-Name}%6{X-Mailinglist-Name}\

    X-ML-Name: とかがないＭＬは、この辺↓のマッチングパターンのエントリを
    適当に増やして、適当に増やしてください。
    例:

    %?(match NetBSD.ORG)NetBSD\

    6.22	mgetで得たファイルをmh以外で読む時 (lib/Utilities/packmbox.pl)

    packmbox.pl	(by ukai@hplj.hpl.hp.com)

    	1,2,3,...のように並んでいるファイルをmbox形式のファイ
    	ルにするスクリプト

    	つまり mget してきたファイルたちをMHでない人はmbox
    	にした後で好きなインターフェイスをつかえばよいように

    lib/Utilities/packmbox.pl を使って、

    	(cd spool; packmbox.pl ) > ~/mbox

    として、mbox をつくれば、これにたいして、/bin/Mail なり Rmail なりを使
    うことができて便利でしょう。MH なら例えば mbox を作った後

    	inc -file ~/mbox -truncate

    のようにすれば、mbox から inbox へ入ります。

    6.23	RMAILファイルからfmlへのメッセージの取込み (lib/Utilities/Rmail2fml.pl)

    Rmail2fml.pl	(yamane@ngi.co.jp)

    	RMAILファイルから fmlへのメッセージの取込みプログラム

    6.24	宇宙歴関係

    MHのpost部分をいれかえて、

    	X-Stardate: [-31]8122.12

    のような宇宙歴をヘッダにつける。

    post を入れ換えるべき

    	SHELL VERSION が my-mh-post
    	PERL  VERSION が my-mh-post.pl

    libstardate.pl はコマンドラインで呼ぶと宇宙歴そのものをOUTPUTします。
    これを使って、mh-e レベルで宇宙歴をヘッダにつけるEmacs Lisp が
    stardate.el です。

    注意: 宇宙歴には複数の解釈があります。そのうちの一つを勝手に選んで使っ
    ています。

    6.25	weekend-msend.sh

    設定ファイルを別に持ち msend.pl を一週間に一度起動するようにすれば一週
    間に一度まとめ送りするようになります。
    それを一週間に一度送るための script の例です。

    m=1u みたいに常に送りつけるように設定しておいて送り時間は cron でコン
    トロールするようにします。もっともコマンドでコントロールできません。管
    理者が手で設定すると仮定しています。
    ＃まぁそれ用の別のアドレス作ってしまえばできますけどね

    要点は

            MSEND_RC=$DIR/weekend/msendrc
            ACTIVE_LIST=$DIR/weekend/actives
            MEMBER_LIST=$DIR/weekend/members

    で ACTIVE_LIST に

    	address m=1オプション

    	例:
    	address m=1u

    とか書いておくという部分です。

    6.26	X-Stardate: をつける(mh-e)
    6.24

    contrib/Utilities/stardate.el を load してください
    ＃ emacs 19 でなきゃかきかえないとだめ

    たとえば、.emacs に

    (load-library "stardate")
    (setq startrek-stardate-process "/some-directory-path/libstardate.pl")

    とすると mh-comp の draft buffer をつくるときに X-Stardate: をつけてく
    れます(mule-2.3で確認)。