HOMERSSサイトマッププロフィールお問い合せ

「FTPサーバー」 カテゴリー

1つ前のカテゴリーは、Proxyサー バー です。 次のカテゴリーは、DNS です。

2006年10月10日

FTPサーバー( Apache Ftpserver ) の自動起動スクリプトの修正

自動起動スクリプト /etc/init.d/ftpserver は Apache Ftpserver のパッケージにあった phoenix.sh をベースに作成したものだが、サーバーのブート時に起動したり、しなかったりしていた。

似たような起動スクリプトで正常に動作しているメール・サーバー ( James ) のスクリプトを参考に修正を加えたところ、、、正常に起動するようになった。

投稿者: 管理者 日時: 2006年10月10日 22:31 | | コメント (0) | トラックバック (0)

2006年9月21日

(復興作業)FTP サーバー Apache Ftpserver 拡張機能のメモ

Apache Ftpsever の拡張機能のメモが出てきたので、そのまま記しておく。

せっかくの JAVA で書かれたオープンソースであることから、サーバーの機能拡張にトライした。仕事でもこれを使っていることから、サーバーがファイルを受信した時に、①バッチプログラムを起動する機能、②メール送信するプラグイン機能、を付け加えた。

 

(Ⅰ) 全体の流れ

  1. サーバーはファイルを受信した時の流れを示す制御ファイルを持つ (process.xml)
  2. バッチ起動用ファイルを受信した時、サーバーは制御ファイルに登録されているバッチプログラムを、①FTPユーザー名、②受信ファイルの絶対パス名、を与えて起動する
  3. メール.xml ファイル を受信した時、サーバーはメール.xml にしたがって制御ファイルに登録されている送信MAX容量の範囲であれば送信する (複数宛先、複数添付ファイル可)
  4. ログについては、①FTP関連ログはFTPサーバーをインストールした apps/ftpserver/logs/server-ftp.log に、②プラグイン関連ログは bin/log4j.properties に設定されたファイルに、書く
  5. エラーについては上記2ファイルにログが残されるが、同時にメール.xml に起因するエラーは送信者にその旨を返信する
  6. 最後にFTPサーバーとしての受信完了メッセージを返す (バッチプログラムは別プロセスで起動することから直ちにメッセージを返す)

(Ⅱ) 制御ファイル (process.xml) について

 以下の制御文を bin/process.xml として保存

----- process.xml
<?xml version="1.0" encoding="utf-8" ?>
<process-definition>
  <debug>off</debug>    --> on でメール送信デバッグログが吐き出される
  <hostname>localhost</hostname>     --> SMTPサーバーの指定
  <holders>
    <holder>
      <name>batch/program</name>   --> FTPホーム下のディレクトリー名
      <batch>/etc/bin/test.sh</batch>   --> 起動するバッチプログラム
      <email>
        <exec></exec>
        <size></size>
      </email>
    </holder>
    <holder>
      <name>public/mail</name>
      <batch></batch>
      <email>
        <exec>yes</exec>   --> yes でメール送信
        <size>3000</size>   --> 添付ファイルも含めた最大量(Kバイト)
      </email>
    </holder>
  </holders>
</process-definition>
----- file end

  • プラグインは該当するディレクトリーにファイルを受信したときに働く
  • バッチプログラムとメール送信を併用する用途は、プログラムを起動したことをメールで通知するようなケース
  • process.xml の変更によるFTPサーバーの再起動は不要

(Ⅲ) メール.xml について

以下のようなメール.xml を process.xml で設定されたディレクトリーにFTPアップロードする。

例1)オープン系システムの場合
 
----- aaaaaaa.xml
<?xml version="1.0" encoding="shift_jis" ?>   --> xml 宣言文
<email>

<subject>お知らせ</subject>    --> メールの題名

<from>   --> 送信者
<address>y-taro@yahoo.co.jp</address>
<personal>山田 太郎</personal>
</from>

<to>   --> 宛先(複数可)
<address>y-hanako@google.co.jp</address>
<personal>山田 花子</personal>
</to>

<file>public/test.doc</file>   --> 添付ファイル(複数可、URL可)
<file>http://www.yahoo.co.jp/test2.doc</file>

<text>   --> メール本文
こんにちは。

ワシントン州 山田太郎
</text>

</email>
----- file end


例2)メイン・フレームの場合

----- AAAAAAA.XML
<EMAIL>

<SUBJECT>お知らせ</SUBJECT>

<FROM>
<ADDRESS>y-taro@yahoo.co.jp</ADDRESS>   --> 全角文字
<PERSONAL>山田 太郎</PERSONAL>
</FROM>

<TO>
<ADDRESS>y-hanako@google.co.jp</ADDRESS>   --> 全角文字
<PERSONAL>山田 花子</PERSONAL>
</TO>

<FILE>public/test.doc</FILE>   --> 全角文字
<FILE>http://www.yahoo.co.jp/test2.doc</FILE>   --> 全角文字

<TEXT>
こんにちは。

ワシントン州 山田太郎
</TEXT>

</EMAIL>
----- file end

(注)メイン・フレームの場合は英小文字が使えないことから、①xml宣言文を外し、②英小文字が必要な箇所は全角文字で書く。(サーバーサイドで対応)

投稿者: 管理者 日時: 2006年9月21日 20:31 | | コメント (0) | トラックバック (0)

2006年9月18日

(復興作業)FTP サーバー ( Apache Ftpserver ) のインストール

Apache-FtpServerについて、、、

昨年末にApache Avalonグループが解散(codehaus に移行したようだが)して、Phoenix ベースの FtpServer の行方が分からなくなった。FTP は枯れた技術でもあることから今のバージョンでも十分に使えるが、JDKは1.4 がベースで 1.5 は使用できないので注意が必要。(XML関連が対応できないようでPhoenix本体を手直しする必要がある)

壊れたことから久しぶりに Ftpserver のサイトを覗くと、新しい活動が始まっているようでリリース版ではないがnewバージョンのようなものが開発されているようだった。今回は急ぐこともあり、旧をインストールすることにした。

本来は、下の内容をコツコツとインストールしていくのだが、以前に CVS を使って Eclipse で開発をしていたことから Windows マシンにプロジェクトが残っていたので再コンパイルしてセットアップすることにした。もっとも CVSサーバーも当然壊れてしまっているので PC に残っているものが最新のものなのかどうかは確認のしようがない。

キャッシュなどに残っていたメモ

1) ftpserver-with-phoenix-0.9-src.tar.gz をダウンロードし、適当な場所で展開する。

2) Java開発環境は j2sdk1.4 を 使用し、javaへのパス、JAVA_HOME、antへのパス、ANT_HOME などの環境変数を設定 する。

    antについては jwsdp(Jave Web Services Developer Pack) をインストールしているので、この中にあるantを使用 する。この場合、antの実行スクリプトは起動時に[jwsdpホーム]/jwsdp-sharedbin/setenv.sh を使って環境変数を設定することから j2sdk1.4 を使 用するように書き換える。

3) 環境設定ファイル src/conf/config.xmlを修正

    a) Behind firewall, we need real inet address that from ISPを設定

      <server-host>XXX.XXX.XXX.XXX</server-host>
      ネットワーク 経由の利用をする場合はIPアドレスを定義すること

    b) Adminツール で使うポート番号を変更

      デフォルトのポート番号1099はJBossがデフォルトで 使用しているために10990とした
      <remote-admin-port>10990</remote-admin-port>

    c) 重要 < Ftp server host nameを設定

      FtpServerがリッスンするIPアドレスを指定する (server-hostと同じ)
      <self-host> XXX.XXX.XXX.XXX </self-host>
      ネットワークアダプターが複数(仮想も含め)存在する 時に、この指定がないと思わぬアダプターをリッスンすることがある

4) プログラムソースを修正

    Adminツールで使うポートを変更したことでツールを修正

    src/java/org/apache/ftpserver/gui/FtpAdmin.java の

      168行目あたりの
      mjPortTxt = new JTextField(String.valueOf(Registry.REGISTRY_PORT)); を
      mjPortTxt = new JTextField(String.valueOf(Registry.REGISTRY_PORT) + "0"); に

      275行目あたりの
      mjPortTxt.setText(String.valueOf(Registry.REGISTRY_PORT)); を
      mjPortTxt.setText(String.valueOf(Registry.REGISTRY_PORT) + "0"); に変更

    java.rmi.registry.Registry.REGISTRY_PORTが1099で、このポートは JBoss が使っているので避ける

5) 日本語ファイル名を扱える ように修正

    src/java/org/apache/ftpserver/BaseFtpConnection.java の

      118行 目あたりの
      in = new BufferedReader(new InputStreamReader(mControlSocket.getInput Stream(),
      "ASCII"));を
      in = new BufferedReader(new InputStreamReader(mControlSocket.getInput Stream()));
      とし、デフォルトエンコードを使用するようにする


6) forrest-targets.entを ダウンロードして、ソース展開ディレクトリーに保存する

    なぜ必要なのか、またその役割がよく分からな い?
    build.xmlに記述があり、ないとエラーが出てビルドできないのだが、な ぜプロジェクトにセットされていないのか分からない

7) ソー ス展開ディレクトリーから antを実行してプロジェクトをビルドする

    ソースに日本語の記述がある場合、環境変数 LANG が ja_JP.eucJP のときはマップできないというエラーがかかるので、ja_JP.SJIS に変更してビルドすること

8) 出来上がった dist/ftpserver-1.0 を /usr/local/ にコピーし、シンボリックリンク /etc/init.d/ftpserver を作成

9) /usr/local/bin/ftpserver/bin/setenv.sh に環境変数 JAVA_HOME を設定してバッチ起動できるかテストをしておく

10) 起動ファイルを phoenix-bin/phoenix.sh を参考(修正)に /etc/init.d/ftpserver を作成

11) サービスに登録

    # chkconfig --add ftpserver

(考)

Vine Linux では問題はなく起動できたが、Turbolinux では /etc/service に 'ftp 21/tcp' の記述があり、これをコメントにしないと、address云々のエラーが出た

その後、会社でも使用するに当たって、拡張機能を追加した。

    1) ファイルの受信完了時に受信したファイルを使う外部プロセスを起動する。
    2) 受信したファイルをもとにメール(添付ファイルも可)を送信する。
を作成したが、ドキュメント類は失われてしまったので、後日にでもソフトを解析して作成するつもりでいる。

(エラー)

    設定ツールでリモートログインしようとすると、このエラーが帰ってくる。

    Connection refused to host: 127.0.0.1; nested exception is: java.net.ConnectionException: Connection refused connect

    ローカルマシンからは接続できる。以前はどうもなかったし、会社でもなんら支障なく動いているので不思議。サーバーに到達すらしていないような感じのエラー状況だ。


差し障りがないことだし、あんまり拘っても仕方がないのでそのままのしておいた。新しいバージョンにトライすることのほうがいいような気もする。

投稿者: 管理者 日時: 2006年9月18日 12:05 | | コメント (0) | トラックバック (0)