ftpサーバを立てる(続き)

proftpd(1.3.0)をインストールして日本語変換パッチを当てるという方針でいきます。

proftpd(1.3.0)の取得

Ubuntu hardy(8.04)で普通に apt-get source proftpd-dfsg=1.3.0-24ubuntu1 とかやっても「ソースパッケージが見つかりません」というエラーが出るので、gutsy(7.10)のページから直接ソースを取ってきます。

proftpd-dfsg_1.3.0.orig.tar.gz
proftpd-dfsg_1.3.0-24ubuntu1.diff.gz

落っことしたら home ディレクトリあたりで解凍してパッチを当てます。

$ gzip -dv proftpd-dfsg_1.3.0-24ubuntu1.diff.gz
$ tar zxvf proftpd-dfsg_1.3.0.orig.tar.gz
$ cd proftpd-dfsg-1.3.0
$ cat ../proftpd-dfsg_1.3.0-24ubuntu1.diff | patch -p1
$ chmod -R 755 debian

diff.gz はなぜか tar で解凍できなかったので、gzip で解凍しました(tar 万能と思っていましたが、そうではないのですね)。
debian/rules に実行権限がないとあとでパッケージを作るときにエラーになりますので、chmod で実行権限を与えておきます(apt-get source で入れた 1.3.1 のディレクトリを見ると debian 自体も 755 だったので、こうしましたが、本当は必要なところだけセットするのが正しい)。

日本語変換パッチ

http://www.hakusan.tsg.ne.jp/tjkawa/software/misc/proftpd-iconv/index.jspから日本語変換用のパッチをダウンロードしてきます。ProFTPD 1.3.0 用 iconv() パッチ

$ gzip -dv proftpd-1.3.0-iconv.patch.gz
$ cd proftpd-dfsg-1.3.0
$ cat ../proftpd-1.3.0-iconv.patch | patch -p1
patching file modules/mod_codeconv.c
patching file modules/mod_df.c
patching file modules/mod_ls.c
patching file src/netio.c

4ファイルにパッチが当たれば OKです。
次に debian/rules を編集して mod_codeconv.c がコンパイルされるようにします。(proftpd-dfsg-1.3.0 ディレクトリの中での作業です)

$ e debian/rules

CONF_ARGS := --prefix=/usr \
       --with-includes=$(shell pg_config --includedir) \
       --mandir=/usr/share/man --sysconfdir=/etc/proftpd --localstatedir=/var/run --libexecdir=/usr/li$
       --enable-sendfile --enable-facl --enable-dso --enable-autoshadow --enable-ctrls --with-modules=mod_readme:mod_codeconv \
       --enable-ipv6 --enable-devel=stacktrace

CONF_ARGS の --with-modules に mod_codeconv を追加します。すでに mod_readme が指定されていますので、':'で区切って追加します。(ここ重要:カンマで区切りたいところですがカンマだとエラーになります。コロンです)

パッケージのビルド

dpkg-buildpackage でパッケージをビルドしますが、いろいろと足りないものがあってエラーが出ます。(proftpd-dfsg-1.3.0 ディレクトリの中での作業です)

$ s dpkg-buildpackage -uc -b
dpkg-buildpackage: host architecture amd64
dpkg-checkbuilddeps: Unmet build dependencies: libpam-dev debhelper (>= 5) libwrap0-dev libcap-dev | not+linux-gnu autotools-dev libncurses5-dev dpatch libacl1-dev libattr1-dev
dpkg-buildpackage: warning: Build dependencies/conflicts unsatisfied; aborting.

手当たり次第、入れてみます。

$ s apt-get install libpam0g-dev
$ s apt-get install debhelper
$ s apt-get install libwrap0-dev
$ s apt-get install libcap-dev
$ s apt-get install autotools-dev
$ s apt-get install libncurses5-dev
$ s apt-get install dpatch
$ s apt-get install libacl1-dev

さて、どうでしょうか。

$ s dpkg-buildpackage -uc -b

警告、`debian/proftpd/DEBIAN/control' がユーザ定義のフィールド `Original-Maintainer' を含んでいます
dpkg-deb: `../proftpd_1.3.0-24ubuntu1_amd64.deb' にパッケージ `proftpd' を構築しています。
dpkg-deb: コントロールファイルの 1 個の警告を無視します

途中、警告は出ますが、概ね順調に進んでいるようです。最後までうまくいくと、画面が変わって「パッケージの設定」で proftpd を standalone(daemon 起動)で動かすか inetd(xinetd で起動)で動かすかを聞いてきます。
standalone だと1つの proftpd プロセスがずっと常駐していて、inetd だと ftp の要求があるたびに proftpd プロセスが1つずつ起動される方式です。standalone だとメモリは食うけど起動が速い、inetd だとメモリは食わないけど起動が遅いということです。うちのサーバはメモリだけはたっぷり積んでいるので、standalone でいくことにしました。
これが終わったらパッケージの作成です。

$ dpkg -i proftpd_1.3.0-24ubuntu1_amd64.deb

うちのサーバは64ビット版なので amd64 になってますが、そうでない方は i386 にしてやってみてください。
うまくいったらこのパッケージを固定しておきます。そうしないと upgrade したときに最新版に置き換えられちゃって涙しますから。

echo proftpd hold | sudo dpkg --set-selections

またまた長くなったので設定は明日へ続く。

参考

  1. gutsy(7.10)の proftpd-dfsg のページはこちら(→ Ubuntu – Error )
  2. proftpd の日本語変換パッチのページはこちら(→ http://www.hakusan.tsg.ne.jp/tjkawa/software/misc/proftpd-iconv/index.jsp )。ありがとうございます。
  3. 今回の作業で全般的に参考にさせていただいたページはこちら(→ http://blog.marupara.dyndns.org/2008/01/ubuntuproftpd.html )。ありがとうございました。