fmlインストールメモ


  1. メーリングリストの設定

    簡単なメーリングリストを作ってみる。 まず、/etc/aliases を攻略。以下のようなエントリを作ってみた。

    (参考文献:sendmail システム管理)

    dmz1:/etc# cat aliases
    # Put any sendmail aliases in here
    root: hotta@net-newbie.com
    postmaster: hotta@net-newbie.com
    mailer-daemon: postmaster
    ng:    :include:/etc/ng.lst
    owner-ng:  hotta@net-newbie.com
    owner-owner:  postmaster
    ng-request:  hotta@net-newbie.com
    dmz1:/etc# cat ng.lst
    dummy@aa.bb.cc       <--- エラーテスト用
    hotta@net-newbie.com
    dmz1:/etc# newaliases
    /etc/aliases: 7 aliases, longest 25 bytes, 194 bytes total
        

    これで試しに ng.dmz1.hoge.co.jp 宛てにメールを送ってみて、 うまく 2 者に配信され、エラーメールも帰ってくることを確認した。

    ところが、メーリングリストでは一般的に、 応答がさらに全メンバーに配信される必要があるので、 メールヘッダなどを書き換える必要がある。 書籍でも動きが良く分からなかったので、 これを契機に今まで避けていた(^^; メーリングリスト・サーバを構築することにした。

  • fml (メーリングリスト・サーバ)

    1. 初めに

      Web で検索を行ってみると、困った時に役に立つ情報(山田 康さん)というのがあったので、ここをとっかかりにした。山田さん、ありがとうございます。

      なお、以下の作業はすべてユーザ fml で行った。root でやると結構ハマる(^^;。

    2. perl のバージョン確認

      をやったところ、日本語パッチの当たったやつ(いわゆる jperl)だった。これでやったらハマッた(^^;ので、忠告どおりオリジナルの perl を使用した。推奨のperlのバージョンは、4.036か5.003以降とのこと。

      教訓:人の忠告や警告メッセージを無視すると、結局余計に時間がかかる。

    3. 入手

      iij のサーバからとりあえず新しそうな fml-current_98May25_tar.gz というのを取ってきた。

    4. 展開+お約束
      dmz1:~$ tar xvzf /usr/src/fml-current_98May25_tar.gz
      dmz1:~$ cd fml-2.1C-snapshot29/
      dmz1:~/fml-2.1C-snapshot29$ view README.jp 
              

      「おお、作者が日本人だった。ラッキー!」と喜ぶ。深町さん、ありがとうございます。さっそく読んでみる。

    5. 事前準備

      で、インストールを試みるが、ことごとくパーミッション関係で失敗する。選択肢としては、次の 2 つが考えられる。

      • システムディレクトリのパーミッションをいじる。
      • デフォルトの設定を変更し、ホームディレクトリ配下に環境を構築する。

      セキュリティを考慮すれば 2 番目の方法がよいのだろうが、ここは安直に最初の方法を取ることにした。

      dmz1:~/fml-2.1C-snapshot29$ su
      dmz1:~# chmod 777 /usr/local/
      dmz1:~# chmod 777 /var/spool/
      dmz1:~# exit
              

      本来はここで、fml 関連の新しいグループを作った方がよいとのこと。特に将来ユーザ fml 以外の者が新しい ML の管理者になれるようにするには必須だそうである。今回は作らなかった(どうせまたこれで先々ハマるんだろうな....)。

    6. インストール

      INSTALL.jp に従って、ユーザ fml でインストールする。と思ったがうまくいかないので、root でインストールした。

      dmz1:~/fml-2.1C-snapshot29$ su
      Password:
      dmz1:/home/fml/fml-2.1C-snapshot29# export LANG="C"  <-- "ja_JP.ujis" にしていたため。
      dmz1:/home/fml/fml-2.1C-snapshot29# perl makefml install
      ---NOT USING configuration file
      
         THIS HOST (dmz1) IS [i486-pc-linux-gnu]
      
      ---Please Define Your Fml System Configurations
      
      Personal Use or ML-Admin-Group-Shared or fmlserv you use?
      Personal, Group, Fmlserv (personal/group/fmlserv) [personal]
      
      DOMAIN NAME               [dmz1] hoge.co.jp
      FQDN                      [dmz1] dmz1.hoge.co.jp
      EXEC FILES DIRECTORY      [/usr/local/fml]
      TOP LEVEL ML DIRECTORY    [/var/spool/ml]
      
      Language (Japanese or English) [English] Japanese   
      
      
        --- summary ---
            DOMAIN: hoge.co.jp
              FQDN: dmz1.hoge.co.jp
          EXEC_DIR: /usr/local/fml
            ML_DIR: /var/spool/ml
          Language: Japanese
      
      mkdir(/usr/local/fml, 0755);
      mkdir(/usr/local/fml/.fml, 0755);
      
      The Current Config is saved in /usr/local/fml/.fml/system
         mkdir /var/spool/ml
      
      ---Install the Fml system to /usr/local/fml. (y/n) [n] y
      
      Installing fml system to /usr/local/fml
      Fixing Path: src .. libexec  sbin . cf . bin
              Done.
      Installing bin ...
      Installing sbin ...
      Installing libexec ...
      Installing cf ...
      Installing etc ...
      Installing doc ...
      Installing doc/html ...
      Installing perl scripts (fml-source/src/*.pl) files ...
      dmz1:/home/fml/fml-2.1C-snapshot29# exit
      dmz1:~/fml-2.1C-snapshot29$
              

      現在のパーミッションを確認する。

      dmz1:~/fml-2.1C-snapshot29$ ls -l /usr/local/|grep fml
      drwxr-xr-x  11 fml      users        2048 Jun 11 14:29 fml/
      dmz1:~/fml-2.1C-snapshot29$ ls -l /var/spool/|grep ml
      drwxr-sr-x   5 fml      users        1024 Jun 11 14:24 ml/
              
    7. 新しい ML を作ってみる。
      dmz1:~/fml-2.1C-snapshot29$ cd /usr/local/fml/
      dmz1:/usr/local/fml$ ./makefml newml hogehoge
      ---Loading the configuration file /usr/local/fml/.fml/system
      
         THIS HOST (dmz1) IS [i486-pc-linux-gnu]
      
      ---Creating hogehoge mailing list
      ---Make Directory (/var/spool/ml/hogehoge)       (UID=10002)
      ---Make Directory (/var/spool/ml/hogehoge/spool) (UID=10002)
      ---Generting configuration examples.
              /var/spool/ml/hogehoge/cf
              /var/spool/ml/hogehoge/include
              /var/spool/ml/hogehoge/include-ctl
              /var/spool/ml/hogehoge/aliases
              /var/spool/ml/hogehoge/Makefile
              /var/spool/ml/hogehoge/crontab
              /var/spool/ml/hogehoge/fml.c
              /var/spool/ml/hogehoge/config.h
              /var/spool/ml/hogehoge/help
              /var/spool/ml/hogehoge/help-admin
              /var/spool/ml/hogehoge/deny
              /var/spool/ml/hogehoge/guide
              /var/spool/ml/hogehoge/welcome
              /var/spool/ml/hogehoge/confirm
              /var/spool/ml/hogehoge/objective
              /var/spool/ml/etc/qmail/alias/.qmail-hogehoge
              /var/spool/ml/etc/qmail/alias/.qmail-hogehoge-ctl
              /var/spool/ml/etc/qmail/alias/.qmail-hogehoge-admin
              /var/spool/ml/etc/qmail/alias/.qmail-hogehoge-request
      
         crontab: example for all fml's ML's is saved in
              /var/spool/ml/etc/crontab/fml
      
         config.ph(/var/spool/ml/hogehoge/config.ph):
              /var/spool/ml/hogehoge/cf  ->  config.ph ... Done.
              (back-up is saved in /var/spool/ml/hogehoge/config.ph.bak)
      
      ------------------------------------------------------------
      *** Please see several examples in /var/spool/ml/hogehoge
      *** Here is an example of aliases to set.
      (ここを aliases にセットしなさいよと書いてある)
      hogehoge: :include:/var/spool/ml/hogehoge/include
      hogehoge-ctl: :include:/var/spool/ml/hogehoge/include-ctl
      hogehoge-request: hogehoge-admin
      hogehoge-admin: fml
      owner-hogehoge: fml
              

      (実はここに来るまでに紆余曲折があったのだが、詳細は書かない(書けない(^^;)。makefml install を root でやりなおしたらうまくいったということにしておこう。ひょっとしたら、作成しようとした ML と同じユーザがすでにあり、それが sendmail で簡易メーリングリストとして設定されていたから?ちなみにこれらは全部削除した。今となっては根本原因は分からずじまい。)

      メッセージに従って、/etc/aliases を編集する。

      dmz1:/usr/local/fml$ su
      Password:
      dmz1:/usr/local/fml# vi /etc/aliases 
      dmz1:/usr/local/fml# newaliases
      /etc/aliases: 8 aliases, longest 42 bytes, 233 bytes total
      dmz1:/usr/local/fml# exit
      dmz1:/usr/local/fml$ 
              
    8. 作られた ML の内容

      /var/spool/ml/ng 配下には、以下のファイルが作られる。

      作られた ML の内容
      ファイル名 カテゴリ 内容 生成時期 カスタマイズ
      aliases 設定ファイル /etc/aliases に追加すべき内容(makefml newml ML の出力メッセージと同じもの) newml 時 不要
      cf 設定ファイル config.ph 生成の元になるファイル config 時 不要
      config.h 設定ファイル fmc.c のヘッダ newml 時 不要(システムによっては必要かも?)
      config.ph 設定ファイル このメーリングリストの設定ファイル config 時 不要
      config.ph.bak バックアップ (newml する前のバックアップ) config 時 不要
      confirm メール内容のスケルトン subscribe に対して返信されるメールの内容。
      (登録してよいかの確認)
      newml 時 必要
      crontab crontab のサンプル まとめ送り時に使用する newml 時 必要
      deny メール内容のスケルトン メンバー以外からの投稿に対して返信するメールの内容 newml 時 必要
      fml.c 設定ファイル C のラッパー newml 時 不要(システムによっては必要かも?)
      guide メール内容のスケルトン #guide に対して返信されるメールの内容
      (この ML の趣旨、登録方法など)
      newml 時 必要
      help 説明書 #help に対して返信されるメールの内容
      (この ML の使い方)
      newml 時 必要
      help-admin 説明書 ML 管理者用ヘルプ newml 時 不要(読むだけ)
      include 設定ファイルのサンプル 投稿メール配送用フィルタ newml 時 可能
      include-ctl 設定ファイルのサンプル コマンドメール返信用フィルタ newml 時 可能
      log ログファイル ML 設定状況ログ イベント発生時 不要(読むだけ)
      members ログ 登録済みメンバ一覧 #confirm 受信時、
      admin add address 時
      不要(触らない)
      objective メール内容のスケルトン #guide に対して返信されるメールの内容
      (ML の目的、約束事)
      newml 時 必要(私はguide のリンクにした)
      spool/ 投稿保存用 スプール・ディレクトリ 投稿時 不要(触らない)
      summary ログ 投稿タイトルのリスト 投稿時 不要(触らない)
      welcome メール内容のスケルトン confirm に対して返信されるメールの内容
      (登録完了時のウェルカム・メッセージ)
      newml 時 必要

    9. そして

      /usr/local/fml/makefml config hogehoge で好きなようにカスタマイズする。この後で出たエラーについては、自分で解決するしかないな (-_-;)