perl-5.32上でfml4を動作させる。ついでにWebUIを設定する。(再投稿)

Linux

FML8にインストールしたが、設定が不明な点が有り動作させられなかった。
FML4を動作させるために、perl-5.8.9をコンパイルするがエラーとなった。
対応をwebで検索していたら、デフォルトインストールされているperl-5.32上でFML4を動作させる修正情報を発見した。修正パッチも見つけたが、間違っている部分が当たっためCGIが正常に動作しなった。
WEBで検索した情報は、makefmlファイルのみを修正するためMLの作成削除やユーザの登録削除が正常に動作するか不明であるため、修正箇所をすべて修正する事にした。

  1. ファイルを修正する。
    1. パッチを当てるファイル
    2. パッチを入手する。
    3. パッチを当てる。
  2. fmlをインストールする。
  3. perlコマンドのシンボリック・リンクを作成する。
  4. fmlユーザを登録してfmlユーザにfml関連コマンドのパスを追加する。
  5. postfixにfmlのaliases定義を追加する。
  6. FML用のaliasesを作成する。
  7. fmlで使用するファイルの所有権をfmlに変更する。
  8. MLを作成する。
    1. 新しいメーリングリストを作成する。
    2. メーリングリストのヘッダ情報を設定する。
  9. MLにユーザを登録する。
  10. GUI操作のnginxユーザが操作できる様に、拡張aclを設定する。
  11. GUIを利用する設定を行う。
  12. nginxにWebUIを設定する。
  13. nginxを再起動する。
  14. fmlのGUIサイトにアクセスでる。
  15. GUIによる操作とmakefmlコマンドによる操作の住み分け
  16. バーチャルドメインでFMLを利用する。
    1. バーチャル・ドメイン用のfmlをインストールする。
    2. バーチャル・ドメインのMLを操作するfml2ユーザを作成し、fml関連コマンドのパスを追加する。
    3. postfixにバーチャル・ドメイン用ののfmlのaliases定義を追加する。
    4. バーチャル・ドメイン用のaliasesを作成する。
    5. バーチャル・ドメイン用のfmlで使用するファイルの所有権をfml2に変更する。
    6. バーチャル・ドメインで使用するMLを作成する。
      1. 新しいメーリングリストを作成する。
      2. バーチャル・ドメイン用のMLのヘッダ情報を設定する。
    7. バーチャル・ドメイン用のユーザを内部配送設定をpostfixに設定する。
      1. ローカル転送用のドメインを確認する。
      2. 新規作成したメーリングリストのaliasesファイルの定義を確認する。
      3. バーチャル・ドメインの内部転送を設定する。
    8. MLにユーザを登録する。
    9. バーチャル・ドメインをnginxユーザが操作できる様に、拡張aclを設定する。
    10. バーチャル・ドメイン用のWebUIをnginxに設定する。
    11. nginxを再起動する。
    12. バーチャル・ドメイン用のGUIサイトにアクセスでる。
  17. まとめ
  18. 閑話休題

ファイルを修正する。

ファイルを修正利用は、fmlが古いバージョンのperlで作成されているため、新しいバージョンのperlでは修正しないと動作しないためである。
修正する内容は、以下の様な内容であれる。

旧perlの記述 新perlの記述 備考
require ‘getopts.pl’;
&Getopts(“dhf:A:O:p:D:vwV:mi:u:UF”);
use Getopt::Std;
getopts(‘dhf:A:O:p:D:vwV:mi:u:UF’);
getopts.plが利用できなくなった
if (defined @entry) { if (@entry) { definedで配列が空かどうか調べることや、ハッシュが空かどうか調べるのに使うことが非推奨になった

 

パッチを当てるファイル

以下のファイルに対して修正が必要である。WEBでの利用の考えているのでcgiに関するファイルも修正する。

 

パッチを入手する。

修正するファイルが多いためパッチファイルを作成しました。
以下のURLからパッチ(fml-4.0-stable-20040215_patch)を入手する。

https://lnxdvr.com/fml-4.0-stable-20040215_patch

 

パッチを当てる。

fmlの圧縮ファイルを解凍し、fmlのソースファイルディレクトリに移動して、上位ディレクトリにあるパッチファイルを適用する。

 

fmlをインストールする。

 

perlコマンドのシンボリック・リンクを作成する。

fmlで使用するシェルはperlコマンドが/usr/local/binディレクトリあることを想定しているため、シンボリック・リンクを作成して/usr/local/binからでもperlコマンドが実行できるようにする。

 

fmlユーザを登録してfmlユーザにfml関連コマンドのパスを追加する。

メーリングリストを操作するfmlのグループとユーザを作成して、fmlのインストールパスを「.bashrc」のPATH設定に追加する。

 

postfixにfmlのaliases定義を追加する。

fmlで使用する「/var/spool/ml/etc/aliases」をposfixの設定ファイルに追加する。
また、fmlでaliasesファイルに設定されるinclude定義を処理できる様にallow_mail_to_commands設定を追加する。

FML用のaliasesを作成する。

aliasesファイルは存在しないため、touchコマンドでファイルを作成し、postaliasコマンドでDBを作成する。

 

fmlで使用するファイルの所有権をfmlに変更する。

/var/spool/mlと/usr/local/fmlの所有権をfmlユーザに変更する。

 

MLを作成する。

新しいメーリングリストを作成する。

 

メーリングリストのヘッダ情報を設定する。

Subjcctに表示に以下の情報を付加する。
「HEADER CONFIGURATIONS」でSubjectにMLの情報を追加する。
   [test:0001]テストメール

 

MLにユーザを登録する。

 

GUI操作のnginxユーザが操作できる様に、拡張aclを設定する。

通常のアクセス権では、fmlユーザとnginxユーザの2人にアクセス権を設定できない。
chmodコマンドでotherのアクセス権を設定すれば利用可能となるが、誰でも操作できる状態になってしまう。
よって、拡張aclアクセス権でnginxユーザも所有者となるような設定する。

 

GUIを利用する設定を行う。

「makefml admin.cgi config」コマンドで管理用cgiプログラムをインストールする情報がインターネットで検索できるが、標準のインストールでcgiが利用できることを確認したので、作業不要である。

 

nginxにWebUIを設定する。

nginxにfml用の設定を追加する。

 

nginxを再起動する。

 

fmlのGUIサイトにアクセスでる。

以下のURLでGUIの画面が表示されることを確認する。
https://<IPアドレス|ホスト名>/fml/

GUIなので、操作は想像がつくと思います。
MLの作成・削除、ユーザの登録は確認しました。

 

 

GUIによる操作とmakefmlコマンドによる操作の住み分け

当たり前であるが以下特性がある。
・makefmlコマンドでメーリングリストを作成するとfmlユーザの権限でMLが作成されtため、GUIで操作できない。
・CGIでメーリンリストを作成するとnginxユーザ権限のMLが作成されれるため、CUIで操作できない。
よって、CUIとGUIで操作する線引きが必要になる。

一つの解決方法として以下の方法が考えられる。
CUIでの操作:
 ①新しいMLを作成する。
 ②newaliasesコマンドを作成したMLを登録する。
 ③/var/spool/mlディレクトリ配下に新しく作成したMLをGUIでのアクセス権を与える。
GUIでの操作:
 ①MLへのユーザ登録・削除の操作に限定する。

 

バーチャルドメインでFMLを利用する。

aliasesファイルにMLの設定を記述するが、aliasesファイルはローカル配送専用のためバーチャル・ドメインのユーザでは直接利用できない。
よって、バーチャル・ドメインのユーザで受信したメールをmydestinationに定義されいるデフォルト・ドメイン名のユーザに転送して、MLを送信を行う。
動作の概要:
① virtual_alias_maps定義に記述されたバーチャル・ドメインのユーザのメールを受信する。
② virtual_alias_maps定義に記述された第二引数のローカル・ドメインのメールアドレスに転送する。
③ バーチャルドメイン用fmlのaliasesファイルに記述されたユーザのMLの処理を行う。

 

バーチャル・ドメイン用のfmlをインストールする。

/usr/local/fmlディレクトリ以外の場所にバーチャル・ドメイン用のfmlをインストールする必要があるため、/usr/local/hoge.jpにインストールする。
「-U」を付けけてインストールする。理由は忘れました。すみません。

 

バーチャル・ドメインのMLを操作するfml2ユーザを作成し、fml関連コマンドのパスを追加する。

バーチャル・ドメインで利用するfml2ユーザを作成して、fmlのインストールパスを「.bashrc」のPATH設定に追加する。
fml2にログインスすると、バーチャル・ドメインのMLが操作できるようにする。

 

postfixにバーチャル・ドメイン用ののfmlのaliases定義を追加する。

バーチャル・ドメインで使用する「/var/spool/hoge.jp/etc/aliases」をposfixに追加する。

 

バーチャル・ドメイン用のaliasesを作成する。

ファイルは存在しないため、touchコマンドでファイルを作成し、postaliasコマンドでDBを作成する。

 

バーチャル・ドメイン用のfmlで使用するファイルの所有権をfml2に変更する。

/var/spool/test.jpと/usr/local/test.jpの所有権をfml2ユーザに変更する。

バーチャル・ドメインで使用するMLを作成する。

新しいメーリングリストを作成する。

 

バーチャル・ドメイン用のMLのヘッダ情報を設定する。

Subjcctに表示に以下の情報を付加する。
「HEADER CONFIGURATIONS」でSubjectにMLの情報を追加する。
   [hoge:0001]テストメール

 

バーチャル・ドメイン用のユーザを内部配送設定をpostfixに設定する。

バーチャル・ドメインのユーザをローカル配送用のドメインに転送する設定を行う。

ローカル転送用のドメインを確認する。

mydestinationに記述されたローカル配送用のドメインを確認する。

上記例では以下のローカル転送のドメインが有効である。
 ・$myhostname
 ・localhost.$mydomain
   ・localhost
 ・$mydomain
ここでの記述では、「localhost.$mydomain」を採用しました。

 

新規作成したメーリングリストのaliasesファイルの定義を確認する。

以下のaliasに対してローカル配送の記述を検討する。
すべて定義すべきと思うが、必要なaliasのみにしたい思いもある。
・hoge ・・・・・メーリングリストの本体なのでローカル転送を記述する。
・hoge-admin・・送信したメールのReturn-Path(送信先メールサーバの障害や、送信先メールアドレスが削除された時のえたーメールを受信するメールアドレス)がhoge-adminのためローカル転送を記述する。
・hoge-ctrl ・・・過去メールの受信や管理者へのメール送信などを行う。
・その他は、保留とする。

 

バーチャル・ドメインの内部転送を設定する。

postfixに定義されている「virtual_alias_maps」に定義されているファイルの名前を確認して、ファイルに定義を追加する。

 

MLにユーザを登録する。

 

バーチャル・ドメインをnginxユーザが操作できる様に、拡張aclを設定する。

拡張aclアクセス権でnginxユーザも所有者となるような設定する。

 

バーチャル・ドメイン用のWebUIをnginxに設定する。

バーチャル・ドメイン用のnginxにfmlの設定を追加する。

 

nginxを再起動する。

 

バーチャル・ドメイン用のGUIサイトにアクセスでる。

以下のURLでGUIの画面が表示されることを確認する。
https://<IPアドレス|ホスト名>/fml2/

ユーザを追加登録し、登録したユーザでメールを受信できることを確認しました。

 

 

まとめ

WEBでは利用していたMLがperlのバージョンが上がったために動作しなくなった対応のみを記載しているだけのため、GUIで操作を含めた修正が無いように思われる。
今回、全体的な修正が行えたことが良かったと思われる。

閑話休題

以下のコマンドでパッチを作成する。