proftpd + iconv ports


突然、職場のFreeBSDマシンのsamba共有が見えなくなった。正確にはコマン
ドラインでローカルデータをコピーすることはできるけど、エクスプローラで表示が
できない
という症状。sambaのlogを見てみると、ユーザー認証が完了した
後に"INTERNAL ERROR"の文字。エクスプローラで表示するファイルのリストを取得し
ようとした時に落ちている感じ。


sshで入って、sambaで公開しているディレクトリでlsかけると、なんか文字化けした
ファイルが2つ。"ls|jless"として見ると、この化けたファイルが日本語で表示さ
れ、逆にsamba経由で書き込んだ日本語名のファイルが文字化けする。ということ
で、どうもShift JISのファイル名で書き込まれている模様。同じディレクトリを
http/ftpでもアクセスできるようにしてるので、Windows標準のコンソールクライア
ントからftp経由でアップロードしたらしい。


該当ファイルをリネームすると問題は解消。で、今後の方策を考える。とりあえず、
ぐぐってみたらProFTPD iconv() 文字コード変換パッチを発見。GNU libiconvを使えば
FreeBSDでも使えそうな感じ。ということで、FreeBSDports用のad hocなpatch。



diff -crN proftpd/Makefile proftpd-i18n/Makefile

proftpd/Makefile Fri Aug 4 09:12:19 2006

**************

159,164 ****
      • 159,176 ----

MODULES:=${MODULES}:mod_ifsession
.endif

  1. # for mod_codeconv
  2. .if defined(WITH_CODECONV)
  3. USE_ICONV= yes

+
PATCH_SITES= http://www.hakusan.tsg.ne.jp/tjkawa/software/misc/pr
oftpd-iconv/pack/

  1. PATCHFILES= proftpd-1.3.0-iconv.patch.gz
  2. PATCH_DIST_STRIP= -p1
  3. INCLUDEDIRS:=${INCLUDEDIRS}:${LOCALBASE}/include
  4. PROFTPD_LIBS+= -L${LOCALBASE}/lib -liconv
  5. MODULES:=${MODULES}:mod_codeconv
  6. .endif

# Keep this here below, in case similar constructs need to be made
CONFIGURE_ENV+= "LIBS=${PROFTPD_LIBS}"

diff -crN proftpd/distinfo proftpd-i18n/distinfo

proftpd/distinfo Wed May 3 16:49:02 2006

**************

1,3 ****
      • 1,6 ----

MD5 (proftpd-1.3.0.tar.bz2) = fae47d01b52e035eb6b7190e74c17722
SHA256 (proftpd-1.3.0.tar.bz2) =
83f220cba64455a2b1701b97ce9896f66a0020b179c50daf4860cdf362464ffe
SIZE (proftpd-1.3.0.tar.bz2) = 1386086

  1. MD5 (proftpd-1.3.0-iconv.patch.gz) = 9fd8b774ca475eb7f3a46ae14eb7c9be
  2. SHA256 (proftpd-1.3.0-iconv.patch.gz) =

eefba1eb3ae281fa04cb8202160f9cfa4c20b70217caa09f402251d6e7ced713

  1. SIZE (proftpd-1.3.0-iconv.patch.gz) = 3112


上記のpatchをports/ftp/proftpdに当てて、"make WITH_CODECONV=YES install"で、
mod_codeconv対応ProFTPdがインストールされる。


samba3と併用しているなら、WITH_EXTRA_PATCH=YESな状態のGNU libiconvがインス
トールされていると思うので、proftpd.confに



CharsetLocal EUC-JP-MS
CharsetRemote CP932


を追加。あと、ProFTPdのデフォルトだとGMTで表示されるため、samba経由の場合と
時間が違うのが気持ち悪いので、



TimesGMT off


も追加。


後は、元々使ってたFreeBSD標準のftpdを無効にするため、/etc/inetd.confをftp
行をコメントアウトして、inetdを再起動。その後、proftpdを起動して、作業完了。


快適すぎる。いや、もっと早く気付くべきだった。