2014年12月10日

XMailCFGをLinuxで動かしまくる!! for Debian

労した。
文献がぜんぜんないんだもん。


 2014-11-11 18.33.56.jpg


XMailCFGに付属のreadme.htmlの「非 Windows 環境への XMailCFG/K4 の移植について」の項を見ながらとりあえず進めてみました。
いろいろ説明不足な文書ですが、ポイントを抑えて書きます。

1 XMailをインストールして起動が可能な状態へ

 XMailのLinux版はこのブログの前回の記事など参考にしてインストールしてください。

2 ソースを変更する

 XMailCFGのperl指定部分を書き換える

 XMailCFGのCGIファイルの行頭がWindows用のperl指定になっているので、それを#/usr/bin/perl に書き換えます。
 cgiディレクトリーの中の setup.pl を使えば自動でやってくれます。
 cgiディレクトリーへ入って、perlコマンドで指定すればOK。

 例
 # /XMailCFG/cgi# perl setup.pl

 改行コードのチェック

 windowsで編集でもしない限り付属のcgiの改行コードは気にしなくても構いません。
 でも改行コードの調べ方も書いておきます。

 # /XMailCFG/cgi# nkf -g ファイル名

 これで改行コードが LF CR/LF になっているか確認できます。Windwsでしか使わない設定部分はCR/LFになってると思いますがLinuxでは動かないようになっている仕組みなので、無視して大丈夫でしょう。
 もし改行コードが LF でなければperlを使って以下のコマンドで書き換えます。

 # /XMailCFG/cgi# perl -pe 's/\r\n/\n/' ファイル名> ファイル名(変更後ファイル名)

 パス区切り記号のチェック 

 cgiプログラム内部のパスの区切りが¥(バックスラッシュ)でなく、/(スラッシュ)でなければならないそうですので、心当たりのある方は修正してください。たぶんノーチェックで大丈夫でしょう。



3 アクセス権の設定

 cgiディレクトリーのcgiファイルのパーミッションをすべて755にします。システムによっては655などと設定しなければ動かないかもしれません。ここでは読み取り権限と実行権限をすべてのユーザーに与えて755、もしくは655を設定します。(2016年11月17日追加)

 例
 # /XMailCFG/cgi# chmod 755 *.cgi

 非windows環境ではパーミッションの設定が大切と付属文書にはあります。
 ウェブサーバーが動かしているユーザーがアクセスできるようにtabファイルにもパーミッションを設定します。(2016年11月17日更新)
 ということらしいのですが、結局XMailがroot権限で動作し、パーミッション700のように自分しかアクセスできないファイルを作ってしまうので、ウェブサーバーもRoot権限で動くように細工をしなければなりません(後述)。

 最初はパーミッション777などで設定しても、XMailCFGが一見動くように見えるのですが、ユーザーやドメインを追加した場合に新規に作られるtabファイルへアクセスできなくなり、まったく使えないんです。ファイルが増えるごとにパーミッションの設定などできません。

 とりあえず、/var/MailRoot/bin と/var/MailRoot/直下のtabファイル群にアクセスできることが条件です。
 rootでウェブサーバーを動かすんだから、ファイルの所有者をrootにすればこのままで結構です。



4 XMailCFGのファイルをドキュメントルートにコピーする
  Linuxのコピーコマンドで、XMAILCFGのディレクトリーをそのままドキュメントルートにコピーします。
なお、XMailCFGディレクトリーを置くファイルシステムはNTFS(WIndowsのファイルシステム)ではなくLinuxファイルシステムに置いてください。これをしないとパーミッションに問題がでてtabファイル群にアクセスできなくなるようです。


5 root権限でスレッドを起動するウェブサーバー

 いろいろ探したけど結局 Apacheしかないみたいです。
 rootでスレッドを起動させるために以下の環境変数を設定してビルドやらコンパイルなどします。

  Apacheのコンフィグ時の設定
  Apacheの展開したディレクトリーへ入って以下のconfigureを行います。

 # env CFLAGS="-DBIG_SECURITY_HOLE" ./configure --enable-so --enable-shared --enable-ssl

 これで make make install してください。
  オプションの詳細は他のサイトを当たってもらうとして、XMailCFGを動かすにはこれで充分かと思います。

 ちなみにApacheは外用があるなら、今回の中用とでrootで動くやつと動かないやつと2つ立ち上げたほうが安全みたいです。今回の例では、debian標準でインストールされたApache2が外向きサーバーになりますので、ソースからインストールして2つ並列動作させる細工は行っておりません。


追記2105年4月14日
 並列動作させました。
 http.conf ファイルを名前を変えて用意します。
 もうひとつはhttp2.conf とでもしておきましょう。以下に肝心なところを書き出します。

 それぞれの設定ファイルで以下の項目が違うものである必要があります。

  ・実行ユーザーとグループ( User と Group )

  ・待ち受けポート( Listen ) 

  ・ドキュメントルート(ヴァーチャルホストの場合も含む)DocumentRoot

  ・エラーログファイル( ErrorLog )
    
  ・アクセスログファイル( CustomLog )

  ・PidFileの指定(以下の行をServerRoot の次の行にでも挿入してください。

    PidFile /usr/local/apache2/logs/任意のファイル名.pid

  ウェブサーバー起動スクリプトを2つ用意して一方に違う設定ファイルを以下の箇所に指定します。
  (起動スクリプトは、/usr/local/apache2/bin/apachectl を/etc/init.d/にコピーして作ります)

      HTTPD='/usr/local/apache2/bin/httpd'

                             ↓

     HTTPD='/usr/local/apache2/bin/httpd -f /usr/local/apache2/conf/httpd2.conf'
    

    自動起動は以下のように

   # update-rc.d apachectl(名前を変えた場合はその名前で) defaultts



6 Apacheの設定

 /usr/local/apache2/conf/httpd.conf を編集します。

 ポート番号の変更

  Listen 80

 のところは #Listen 80 にしてコメントにして無効にします。
かわりに Listen 8000 等べつのポート番号にして次の行に書きます(ネットで予約されている25や110は避けます)。

 #Listen 80
  Listen 8000


 ユーザーをROOTにする。

 User daemon
  Group daemon

  以上の箇所の部分をコメント化して、User root と Group root を
次の行に書きます。

 #User daemon
 #Group daemon

 User root
 Group root


 ドキュメントルートの変更

 XMalCFGのディレクトリーを指定します。

 # DocumentRoot "/usr/local/apache2/htdocs"
 DocumentRoot "/XMailCFG/" ← 自分が置いた任意の位置を指定。左は / 直下の場合。


 CGIの実行設定 

 CGIが動くように以下の文字列群を追加。
 見やすいようにCGIディレクトリー関係の部分に書いておきましょ。

<Directory "/xmailcfg">
    AllowOverride All
    Options +ExecCGI
    AddHandler cgi-script .cgi .pl
    Order allow,deny
    Allow from 192.168.1. ← 自分の環境で変更してください。この例では192.168.1.に属する192.168.1.0 から 192.168.1.255 までアクセスを許可します。

</Directory>

 Apacheの起動

  以下のコマンドでウェブサーバーを起動します。

 /usr/local/apache2/bin/apachectl start
再起動は start ではなく restart を指定。止めるには stop を指定。


 これで、なんとかCGIが動くようになりましたけど…。まだ終わらない。

7 いろいろな対処

 とりあえずセットアップ的なことを実行していきますが、あれよあれよと文句を言われます。

 XMailCFG 「基本認証をやれよ!!」

 xmaicgiのフォルダーに .htaccess というファイルを作ります。

 AuthUserFile /home/ユーザー名/.htpasswd
  AuthGroupFile /dev/null
  AuthName "XMailCFG 設定"
  AuthType Basic

  require valid-user

 <Files ~ "^.(htpasswd|htaccess)$">
    deny from all
 </Files>


 .htaccess の AuthUserFileで指定した場所に.htpasswdというパスワードファイルを作成

 # vi /home/.htpasswd

  ユーザー名:コード化したパスワード

 で表記して保存します。コード化したパスワードは「htpasswd コード化」などでネット検索すれば、任意のパスワードをコード化した文字列が手に入ることでしょう。.htpasswd ファイルはサーバーの実行ユーザーがアクセスできる場所においてください(今回はrootが実行ユーザーなので気にしないけど)。

 これで基本認証はパスできると思います。

 でもまだ終わらない。

 XMailCFG 「Perlインストールフォルダーへの変更許可くれよ!!」 

 「問題があります。 WWW サーバの実行ユーザに対して Perl インストールフォルダへの "変更" 権限を許可してください」

 この表示も出ると思いますので、@INCという検索パスを格納した変数を調べて、
 検索パスが示しているフォルダーで、実際に存在しないフォルダーを全て作成します。

 perl -e 'print join("\n", @INC);'

 で、検索パスを調べて、足りないフォルダーを作成します。

 /usr/local/lib/perl/5.14.2

  /usr/local/share/perl/5.14.2

  /usr/local/lib/site_perl

 debian 7.7.0 では以上のディレクトリーがありません。
 mkdirコマンドで作成します。

 権限がどうのこうの言われますのでパーミッションのことかと思ったらぜんぜん違いました。

 これで、一見正常に動いている感じにはなりますが・・・XMailのログとか見ますとまだ不完全なところがあります。


 ログファイルを見られるようにする

 /usr/local/apache2/logs/ にある Apache2のエラーログファイルでなにが起こっているのか確認します。

 # vi /usr/local/apache2/logs/error_log

  Archive/Zip.pm がないと言われるので、/usr/share/perl/5.14.2/IO/Compress/にある Zip.pm を 同じ 5.14.2 のフォルダーのArchiveフォルダにコピー。

 # cp /usr/share/perl/5.14.2/IO/Compress/Zip.pm /usr/share/perl/5.14.2/Archive/ 

 さらに続いて

  File/Stat.pm がないと言われますが、stat.pm はありますので、ファイルの表記を直します。

 # grep -ri 'File::Stat' /xmailcfg/cgi

 user_home.cgi
 common_mailbox.cgi
 XMQuotaMonitor.cgi (こちらはFile::stat と表記されており最新版では修正の必要はないかも2016年11月17日追記)
 report.cgi  (XMailCFG2.43C(10月26日最新版)でファイルが増えているのを確認。2016年11月17日追記)
 common_userinfo.cgi

 上記ファイルのうち5つが、 File::Stat となっていますので テキストエディターで大文字の「S」を小文字の「s」に変えてください。

 なお、○○::stat などの○○の部分はフォルダー名を指しています。(2017年1月27日追記)
-------------------------------
追記
 2017年7月10日
 XMailCFGのバージョンによっては、メールボックスの中身を見るときにも、Net/Smtp.pm がないといったエラーがでるかもしれません。
 ソースのエラー発生場所もApacheのログに表示されますので、そちらのソースをSmtp →smtp に修正し、
システムからsmtp.pm を探し出して、@INCに登録されている場所のNetディレクトリーの直下にコピーするかシンボリックリンクを張ってください。

 以下LinuxMintでの例

 # vi /XMailCFGのインストール先/XMailCFG/cgi/common_viewmsg.cgi  
 上記のファイル中の記述 Smtp を smtp に変更して保存する。

 smtp.pm を必要なディレクトリーにコピーする。

 # cp /usr/share/perl5/smtp.pm /usr/share/perl5/Net/ 
-------------------------------
 以上、これで完璧に動くのではないかと思います。

 なにか起こった場合は、Apache2のerror.logで確認してください。


posted by 難波鷹史 at 18:14| 京都 | Comment(0) | TrackBack(0) | マイコン | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック