デビアンパッケージにパッチを当ててリビルドする

せっかくVMwareUbuntu入れてるので、たまにファイルをやり取りするのに使ってる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から日本語ファイル名を読み書きできるようになる。