CPANモジュールPlackをDebianパッケージ化

今回はPlackDebianパッケージ化してみる。

とりあえず何も考えずいつもどおり dh-make-perl と debuild を実行して dpkg でインストールしてみる。

$ dh-make-perl --cpan Plack
$ ls
Plack-0.9941 libplack-perl_0.9941.orig.tar.gz
$ cd Plack-0.9941/
$ debuild -rfakeroot -uc -us
$ cd ../
$ ls | grep plack
libplack-perl_0.9941-1.diff.gz
libplack-perl_0.9941-1.dsc
libplack-perl_0.9941-1_all.deb
libplack-perl_0.9941-1_i386.build
libplack-perl_0.9941-1_i386.changes
libplack-perl_0.9941.orig.tar.gz
$ sudo dpkg -i libplack-perl_0.9941-1_all.deb
(libplack-perl_0.9941-1_all.deb から) libplack-perl を展開しています...
dpkg: 依存関係の問題により libplack-perl の設定ができません:
libplack-perl は以下に依存 (depends) します: libparent-perl ...しかし:
パッケージ libparent-perl はまだインストールされていません。
libplack-perl は以下に依存 (depends) します: liburi-perl (>= 1.36) ...しかし:
システム上の liburi-perl のバージョン は 1.35.dfsg.1-1 です。
libplack-perl は以下に依存 (depends) します: libdevel-stacktrace-perl ...しかし:
パッケージ libdevel-stacktrace-perl はまだインストールされていません。
libplack-perl は以下に依存 (depends) します: libhttp-body-perl (>= 1.06) ...しかし:
パッケージ libhttp-body-perl はまだインストールされていません。
libplack-perl は以下に依存 (depends) します: libfile-sharedir-perl (>= 1.00) ...しかし:
パッケージ libfile-sharedir-perl はまだインストールされていません。
libplack-perl は以下に依存 (depends) します: libwww-perl (>= 5.814) ...しかし:
システム上の libwww-perl のバージョン は 5.813-1 です。
dpkg: libplack-perl の処理中にエラーが発生しました (--install):
依存関係の問題 - 設定を見送ります
man-db のトリガを処理しています ...
以下のパッケージの処理中にエラーが発生しました:
libplack-perl

上記のように依存しているパッケージがインストールされていないと怒られます。
Debianではインストールを試みて依存しているパッケージが分かれば下記コマンドで必要パッケージをインストールしてくれます。

$ sudo apt-get -f install
(省略)
以下のパッケージは「削除」されます:
libplack-perl
以下のパッケージが新たにインストールされます:
libdevel-stacktrace-perl libparent-perl
(省略)

そしてもう1度 libplack-perl をインストールしてみる。

$ sudo dpkg -i libplack-perl_0.9941-1_all.deb
(libplack-perl_0.9941-1_all.deb から) libplack-perl を展開しています...
dpkg: 依存関係の問題により libplack-perl の設定ができません:
libplack-perl は以下に依存 (depends) します: liburi-perl (>= 1.36) ...しかし:
システム上の liburi-perl のバージョン は 1.35.dfsg.1-1 です。
libplack-perl は以下に依存 (depends) します: libhttp-body-perl (>= 1.06) ...しかし:
パッケージ libhttp-body-perl はまだインストールされていません。
libplack-perl は以下に依存 (depends) します: libfile-sharedir-perl (>= 1.00) ...しかし:
パッケージ libfile-sharedir-perl はまだインストールされていません。
libplack-perl は以下に依存 (depends) します: libwww-perl (>= 5.814) ...しかし:
システム上の libwww-perl のバージョン は 5.813-1 です。
dpkg: libplack-perl の処理中にエラーが発生しました (--install):
依存関係の問題 - 設定を見送ります
man-db のトリガを処理しています ...
以下のパッケージの処理中にエラーが発生しました:
libplack-perl

今度は依存パッケージのバージョンが古いと怒られました。
しかしlennyにはまだ新しいバージョンのパッケージがありません。
そこで新しいバージョンのパッケージをソールからビルドしたいと思います。

今回、バージョンが古くて依存しているパッケージは下記の4つです。

liburi-perl (>= 1.36)
libhttp-body-perl (>= 1.06)
libfile-sharedir-perl (>= 1.00)
libwww-perl (>= 5.814)

そこで下記のように dh-make-perl, debuild, dpkg を使って最新モジュールをパッケージとしてインストールします。

$ dh-make-perl --cpan URI
$ dh-make-perl --cpan HTTP::Body
$ dh-make-perl --cpan File::ShareDir
$ dh-make-perl --cpan LWP

$ cd URI-1.54/
$ debuild -rfakeroot -uc -us
$ cd ../
$ cd HTTP-Body-1.07/
$ debuild -rfakeroot -uc -us
$ cd ../
$ cd File-ShareDir-1.02/
$ debuild -rfakeroot -uc -us
$ cd ../
$ cd libwww-perl-5.836/
$ debuild -rfakeroot -uc -us
$ cd ../

$ sudo dpkg -i liburi-perl_1.54-1_all.deb libfile-sharedir-perl_1.02-1_all.deb libhttp-body-perl_1.07-1_all.deb libwww-perl_5.836-1_all.deb
(省略)
dpkg: 依存関係の問題により libfile-sharedir-perl の設定ができません:
libfile-sharedir-perl は以下に依存 (depends) します: libclass-inspector-perl (>= 1.12) ...しかし:
パッケージ libclass-inspector-perl はまだインストールされていません。
(省略)

しかし libfile-sharedir-perl の依存パッケージ libclass-inspector-perl がインストールされていないと怒られた。
せっかくなので libclass-inspector-perlCPAN からダウンロードしてビルド・インストールを行う。

$ dh-make-perl --cpan Class::Inspector
$ cd Class-Inspector-1.24
$ debuild -rfakeroot -uc -us
$ cd ../
$ sudo dpkg -i liburi-perl_1.54-1_all.deb libfile-sharedir-perl_1.02-1_all.deb libhttp-body-perl_1.07-1_all.deb libwww-perl_5.836-1_all.deb libclass-inspector-perl_1.24-1_all.deb

最後に目的の libplack-perl をインストールする。

$ sudo dpkg -i libplack-perl_0.9941-1_all.deb

無事に Plackdebパッケージとしてインストールできた。

Debian では dh-make-perl, debuild, dpkg でCPANモジュールをdebパッケージとしてインストールできる。

他にも gdebi というローカルdebファイルの依存パッケージを自動でインストールしてくれるツールもあったりするが、これはまた次回時間のあるときに書こうと思う。

とりあえず今回はここまで。