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