redhat 系の OS にデフォルトでついている vsftpd のロギングが EUC-JP にしか対応してなくて、UTF-8 ではログが文字化けるのでどうにかしようっていうお話。
単にソースを拾って来て Build してもいいけどそれだけだとおもしろくないので rpm を作るところまでやりたい。
元々パッケージが提供されてるので srpm もある。
# cd /usr/local/src
# wget ftp://ftp.riken.jp/Linux/fedora/releases/10/Fedora/source/SRPMS/vsftpd-2.0.7-1.fc10.src.rpm
# yumdownload –source vsftpd
# rpm -ivh vsftpd-2.0.7-1.fc10.src.rpm
これで、src.rpm がインストールされる
次にパッチを作成する。
ログの文字化けの対策はFedora JPの掲示板にあった。
# cd ~/rpmbuild/SPECS/
# rpmbuild -bc vsftpd.spec
# cd ~/rpmbuild/BUILD
# cp vsftpd-2.0.7/logging.c vsftpd-2.0.7/logging.c.hack
# vi vsftpd-2.0.7/logging.c
163行目をコメントアウトする。
/* str_replace_unprintable(p_str, '?'); */
# echo “diff -up vsftpd-2.0.7/logging.c.hack vsftpd-2.0.7/logging.c” > vsftpd-2.0.7-logging_charset.patch
# diff -up vsftpd-2.0.7/logging.c.hack vsftpd-2.0.7/logging.c >> vsftpd-2.0.7-logging_charset.patch
# mv vsftpd-2.0.7-logging_charset.patch ~/rpmbuild/SOURCES/
次に spec ファイルの修正をする。
# cd ~/rpmbuild/SPECS
# vi vsftpd.spec
1行目を2行目に置換
Release: 1%{?dist} Release: 2%{?dist}
以下は上の行の下に追加
Patch38: vsftpd-2.0.6-listen.patch Patch39: vsftpd-2.0.7-logging_charset.patch
%patch38 -p1 -b .listen %patch39 -p1 -b .hack
rpm を build する
# rpmbuild -ba vsftpd.spec
あとはできた rpm をインストールすれば完了
# rpm -Uvh ~/rpmbuild/RPMS/i386/vsftpd-2.0.7-2.fc10.i386.rpm
これで、EUC-JP 以外の charset でもログが文字化けすることなく見れます。
ただ、掲示板のほうにも書いてあったように、ログファイルに出力するところで印刷不能文字と判断したものを、? に置き換える処理を無理矢理やらないようにしているだけなので、問題がありそうです。
ただ、? に置き換えなければならないような文字ばファイルネームにも使えないので、そこまで気にする必要はないかも・・・
一応書いておくやつ。
この記事の内容を使用し、作成されたものに関して当方はいかなる責任も負わないものとします。