自鯖LinuxにFTP機能をつける

基本的にGUI。
Webminがインストールされている前提です。

左のフレームより、サーバ>ProFTPD Server
インスコされていなければ「Click here」でインストール

Installing package(s) with command yum -y install proftpd ..

Loading "fastestmirror" plugin
Loading mirror speeds from cached hostfile
 * base: ftp.oss.eznetsols.org
 * updates: ftp.oss.eznetsols.org
 * addons: ftp.hostrino.com
 * extras: ftp.oss.eznetsols.org
Setting up Install Process
Parsing package install arguments
No package proftpd available.
Nothing to do

.. install complete.

インスコ完了か・・・と思うとハマる。
よくよくみるとno package

しかたがないのでrpmを探しに出る
が、rpmは用意されていないので、
・・・なんだっけ?
インスコしたときは切羽詰まっててできたけど、
いまど忘れ。

思い出した。
http://dag.wieers.com/rpm/packages/proftpd/
ここでrpmを作って配布してくれているのでお借りする。

CentOS5なので、proftpd-1.3.1-1.el5.rf.i386.rpm でいいはず。

# rpm -ihv proftpd-1.3.1-1.el5.rf.i386.rpm
警告: proftpd-1.3.1-1.el5.rf.i386.rpm: ヘッダ V3 DSA signature: NOKEY, key ID 6b8d79e6
準備中...                ########################################### [100%]
   1:proftpd                ########################################### [100%]

なんか警告されいてるけどしらんぷり。
再度WebminでProFTPDを開くと、めでたく画面が表示されます。
ためしにサーバを起動すると問題なく起動

service proftpd start
proftpd を起動中:                                          [  OK  ]

後細かい設定は勢いで済ませた覚えてない・・・やばいな。

Net::FTP(PerlでFTPによるファイル送信を行う)

PerlFTPを利用したい場合、Net::FTPモジュールを利用することになるでしょう。
Net::FTPモジュールについて、説明や翻訳ページは検索すれば沢山見つかります。
しかし、送信するときに重要な「転送モード」について、説明してあるところは多くありません。
なぜかというと、Net::FTPモジュールのドキュメントには転送モードについては記述されていないからです。
ということで、このページでは、転送モードについてご紹介したいと思います。
使用したNet::FTPモジュールのバージョンは2.77でした。
Perlのバージョンが5.8であれば、インストールされています。

使い方

何はともあれ、次のコードを見てください。
Net::FTPモジュールを使おうという方にとっては、コードを見たほうが簡潔だと思います。

use strict;
use Net::FTP;
# FTP設定
my %ftp = (
	addr => 'exsample.com', # FTPアドレス
	user => 'user_name',    # ユーザー名
	pass => 'pass_word',    # パスワード
	dir  => '/public_html', # 送信先ディレクトリ
);
my $ftp = Net::FTP -> new( $ftp{'addr'}, Debug => 0 ) or die;
$ftp -> login( $ftp{'user'}, $ftp{'pass'} ) or die;
# カレントディレクトリの変更
$ftp -> cwd( $ftp{'dir'} );
# アスキーモード
$ftp -> type( 'A' );
# ファイルの送信
$ftp -> put( 'string.txt' );
# バイナリモード
$ftp -> type( 'I' );
# ファイルの送信
$ftp -> put( 'image.jpg' );
# 接続切断
$ftp -> quit();
exit;

転送モードアスキーを指定する場合は、typeに「A」を指定します。

$ftp -> type( 'A' );

転送モードバイナリを指定する場合は、typeに「I」を指定します。

$ftp -> type( 'I' );

備考

ドキュメントに記載されていないという意味では、今後変更になるかもしれません。
また、ソースコードを読めば判りますが、バイナリを指定する「I」以外に「E」や「L」も用意されているようです。

おわりに

翻訳サイトだけを読んで満足してはいけないということです。
実際に使っているからこそ、気がつくこともあるのです。
疑問に思った事について検索はもちろんのこと、
実際に動作しているモジュールのソースコードに目を通してみましょう。

更新履歴

2008-06-03
公開