デビアンパッケージにパッチを当ててリビルドする
せっかくVMwareにUbuntu入れてるので、たまにファイルをやり取りするのに使ってるFTPサーバをVista上からUbuntu上で走らせることにした。調べてみると、Linux上で走るFTPデーモンはProFTPDを使うのがよさげらしい。で、さっそくapt-get installして設定して使ってみた、けど、日本語のファイル名が文字化けしてしまう。Ubuntuではファイル名の文字コードはUTF-8を使っているのに、WindowsのたいていのFTPクライアントはShift_JISを使ってるせいだろう。しかし、残念ながら、ProFTPDにはファイル名の文字コードを変換してくれる機能は付いてない。
だけどやっぱり需要があるみたいで、ProFTPD用にパッチを書いている人がいた(http://www.hakusan.tsg.ne.jp/tjkawa/software/misc/proftpd-iconv/index.jsp)。このパッチを当てると、どうやらiconv経由でファイル名の文字コードを変更してくれるみたい。あとはProFTPDのソースをtarボールとかで持ってきて当ててビルドしてインストール、してもいいんだけど、せっかくAPT使ってるので、パッケージにしてインストールしよう。
まず、ProFTPDをビルドするための環境をそろえなくてはいけない。そのあと、パッケージのソースを落としてきて、パッチを当てる。
$ sudo apt-get build-dep proftpd $ apt-get source proftpd $ cd proftpd-dfsg-1.3.0 $ wget http://www.hakusan.tsg.ne.jp/tjkawa/software/misc/proftpd-iconv/pack/proftpd-1.3.0-iconv.patch.gz $ gzip -d proftpd-1.3.0-iconv.patch.gz $ patch -p1 < proftpd-1.3.0-iconv.patch
パッチを当てただけじゃだめで、configureに渡すオプションも変えなきゃいけないので、debian/rulesも弄る。
CONF_ARGS := --prefix=/usr \ --with-includes=$(shell pg_config --includedir) \ --mandir=/usr/share/man --sysconfdir=/etc/proftpd --localstatedir=/var/run --libexecdir=/usr/lib/proftpd \ --enable-sendfile --enable-facl --enable-dso --enable-autoshadow --enable-ctrls --with-modules=mod_readme \ # --enable-ipv6 --enable-devel=stacktrace --enable-ipv6 --enable-devel=stacktrace --with-modules=mod_codeconv
後は、ビルドしてパッケージをインストール。
$ sudo dpkg-buildpackage -uc -b $ cd .. $ sudo dpkg -i proftpd_1.3.0-21ubuntu1_amd64.deb
ついでに、勝手にProFTPDがアップデートされないように、/etc/apt/preferencesも弄っておくといいみたい(APT HOWTO 3.7 インストール済パッケージを特定バージョンのまま保持する方法)。そうしたら、ProFTPDの設定ファイルにローカルの文字コードをUTF8、リモートをSJISってことを書けば大丈夫。Windowsから日本語ファイル名を読み書きできるようになる。