ProFTPD 1.3.1 iconv 文字コード変換パッチ

ProFTPD iconv パッチをProFTPD 1.3.1に対応させてみています。

と、いうのも、ProFTPD 1.3.1にもオリジナルのパッチをあてても動作は一応するのですが、
OPTS UTF8 ONを送るクライアントの場合、問題が生じます。
というか、ProFTPDが異常終了してます…terminating (signal 11) で。

>OPTS UTF8 ON
>200 OPTS UTF8 on Command OK.

この時点から、クライアントが送るファイル名はUTF-8になりますが、
iconvパッチはこれを無視したまま、CharsetRemoteの設定に従い、強制変換します。
(CharsetRemoteがCP932ならば、UTF-8をCP932として変換してしまいます)

まぁ、ProFTPDのUTF-8オプションを切ってしまっても良いのですが、
できれば共存したいですしね…。

と、いうわけで。

ProFTPD 1.3.1 iconv 文字コード変換パッチ v2.00(ぷろとたいぷ)

特徴
・ローカルとリモート間の文字コード変換を行います。
・OPTS UTF8オプションを認識します。有効の場合、リモートをUTF-8としてコード変換します。

コンパイル方法
・オリジナルのProFTPD 1.3.1にパッチをあててください。
・configure 時に –with-modules=mod_codeconv を指定してください。
・–enable-nls は同時に指定できません。

設定
・従来通り、下記のディレクティブを設定します。
 CharsetLocal UTF-8
 CharsetRemote CP932

動作確認
・ローカル側は Fedora 8 i386, Fedora 8 armv5tel で確認。ともにUTF-8環境。
・リモート側は Windows Vista Explorer FTP(UTF-8), FFFTP(Shift-JIS) で確認。

NLSは使用できません。OPTS UTF8の処理が重複するからです。
この処理は当 mod_codeconv が行うようになります。

まだまだ開発途中ですので、(というかこの土日で作ったw)プロトタイプとして公開します。
デバッグも簡単に走らせたぐらいですので、ご利用の際は十分にご注意くださいませ。

なお、当方で認識している既知の問題点は、
・Windows Vista Explorer FTPクライアントからファイルの削除ができない
・Windows Vista Explorer FTPクライアントで大量のファイルを転送すると、文字化けを起こす

FFFTPからは特に問題はなさそうな感じです。

ダウンロードはこちらからどうぞ。

最後に、元の開発者であるT.Tsujikawaさんにお礼申し上げます。

コメントなし

コメントを残す

fedora8化した玄箱PROにuShareを導入する

uShare 1.1aに必要なものは最終的にこうなりました。
libdlnaは特に必ず必要ではないのものの、とりあえずいれてあります。

・pkg-config 0.23
・libupnp 1.6.4
・libdlna 0.2.3
・ffmpeg

まず、libupnpの導入は簡単。yumで配信されているので、これをインストールするだけでOK。

$ su -
# yum install libupnp libupnp-devel

libdlnaをコンパイルするのに、ffmpegのライブラリ群が必要なので、
ffmpegをmakeします。

コンフィグを共有ライブラリ設定で実行します。

$ cd ffmpeg
$ ./configure --enable-shared
$ make
$ su -
# make install

ようやく、libdlnaをmakeします。

$ cd libdlna-0.2.3
$ ./configure

Error, can't find libavformat !

エラーになりました...
調べてみると、ffmpegのバージョンが新しい為か、ヘッダーファイルの構成配置が変更されているようです。

libdlnaの想定
 - ffmpeg/avformat.h
ffmpegの配置
 - libavformat/avformat.h

そこで、コピーするか、シンボリックリンクで対処しましょう。
私は単純にコピーしました。

$ su -
# cd /usr/local/include
# mkdir ffmpeg
# cp livavcodec/* ffmpeg/
# cp livavdevice/* ffmpeg/
# cp livavformat/* ffmpeg/
# cp livavutil/* ffmpeg/

さて、通るでしょうか?

$ cd libdlna-0.2.3
$ ./configure

通りしましたので、makeします。

$ make

あら、makeの最後のシンボリックリンクで失敗します。

ln -sf libdlna.so. libdlna.so.
ln: `libdlna.so.' と `libdlna.so.' は同じファイルです

libdlna-0.2.3/src/Makefileの19行目を書き換えます。

- LIBNAME_MAJOR = $(LIBNAME_SHARED).$(shell echo $(VERSION) | cut -f1 -d.)
+ LIBNAME_MAJOR = $(LIBNAME_SHARED).0.2.3

$ make
$ su -
# make install

これで、ようやくuShare本体のコンパイル作業に入ります。

$ cd ushare-1.1a
$ ./configure --enable-dlna

Checking for libupnp >= 1.4.2
Error, libupnp < 1.4.2 !

と言われます。
どうやら、ヘッダーは見つかるのに、pkg-configで見つからないようです。
以下のような配置になっているためかと思われます。

/usr/lib/
	libupnp → yumでインストールした為

/usr/local/lib
	libdlna → 自分でmakeした為

そこで、環境変数で両方のライブラリパスを探すように設定します。

$ PKG_CONFIG_PATH="/usr/lib/pkgconfig/:/usr/local/lib/pkgconfig/"
$ export PKG_CONFIG_PATH
$ cd ushare-1.1a
$ ./configure --enable-dlna

Checking for libdlna >= 0.2.1 ...
Error, libdlna < 0.2.1 !

/usr/local/lib/pkgconfig/libdlna.pcをみてみると、Versionの項目が空でした。
これも8行目を直接設定してあげます。

- Version:
+ Version: 0.2.3

あとはすんなりとmakeできました。

$ cd ushare-1.1a
$ ./configure --enable-dlna
$ make
$ su -
# make install

試しに起動してみます。
(私はだいたい--helpを打ち込んでみます)

$ ushare --help

共有ライブラリが見つからないというエラーになります。
共有関係をみてみましょう。

$ ldd /usr/local/bin/ushare
        libixml.so.2 => /usr/lib/libixml.so.2 (0x40025000)
        libthreadutil.so.2 => /usr/lib/libthreadutil.so.2 (0x4002e000)
        libpthread.so.0 => /lib/libpthread.so.0 (0x4003b000)
        libupnp.so.3 => /usr/lib/libupnp.so.3 (0x40059000)
        libdlna.so.0.2.3 => not found
        libavformat.so.52 => not found
        libavcodec.so.51 => not found
        libz.so.1 => /lib/libz.so.1 (0x40663000)
        libm.so.6 => /lib/libm.so.6 (0x4067c000)
        libavutil.so.49 => not found
        libc.so.6 => /lib/libc.so.6 (0x40741000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x40876000)
        /lib/ld-linux.so.3 (0x40000000)
        libdl.so.2 => /lib/libdl.so.2 (0x40889000)

あらら、見事にffmpegとlibdlnaが見つかっていませんね。
そこで、/usr/local/lib/ にライブラリパスを通します。
シンボリックリンクでも良いのですが、今後も /usr/local/lib/ に
何かとライブラリを置きそうなので、こちらにしました。

$ su -
# vi /etc/ld.so.conf

で、

/usr/local/lib

という行を追加し、保存したら設定を適用します。

# ldconfig
# exit
$ ushare --help
uShare (version 1.1a), a lightweight UPnP A/V and DLNA Media Server.
Benjamin Zores (C) 2005-2007, for GeeXboX Team.
See http://ushare.geexbox.org/ for updates.

Usage: ushare [-n name] [-i interface] [-p port] [-c directory] [[-c directory]...]
Options:
 -n, --name=NAME        Set UPnP Friendly Name (default is 'uShare')
 -i, --interface=IFACE  Use IFACE Network Interface (default is 'eth0')
 -f, --cfg=FILE         Config file to be used
 -p, --port=PORT        Forces the HTTP server to run on PORT
 -q, --telnet-port=PORT Forces the TELNET server to run on PORT
 -c, --content=DIR      Share the content of DIR directory
 -w, --no-web           Disable the control web page (enabled by default)
 -t, --no-telnet        Disable the TELNET control (enabled by default)
 -o, --override-iconv-err       If iconv fails parsing name, still add to media contents (hoping the renderer can handle it)
 -v, --verbose          Set verbose display
 -x, --xbox             Use XboX 360 compliant profile
 -d, --dlna             Use DLNA compliant profile (PlayStation3 needs this)
 -D, --daemon           Run as a daemon
 -V, --version          Display the version of uShare and exit
 -h, --help             Display this help

どうやら、成功のようです。

*/

コメントなし

コメントを残す