dh-make-perlでPerlモジュールが半自動でDebianパッケージに

Sun, Jun 28, 2015 in debian

dh-make-perlを使えばperl moduleのパッケージは容易にできるというのは知ってたけど、どう使うのかな、と。

$ dh-make-perl 
== dh-make-perl 0.86 ==
Trying /home/henrich/src/qa/../qa.tar.gz... not found.
Trying /home/henrich/src/qa/../qa.tar.bz2... not found.
Trying /home/henrich/src/qa/../qa.tar.xz... not found.
Trying /home/henrich/src/qa/../qa.tar.lzma... not found.
WARNING: Neither META.json nor META.yml was found
Unable to determine dist name, no Build.PL, no Makefile.PL
Please use --cpan.

ダウンロードしたtarballに対して使う、と思い込んでたんだけども、–cpanなんてオプションがある。もしかして、モジュール名を指定したら…

$ dh-make-perl --cpan DBIx-Class-OptimisticLocking
== dh-make-perl 0.86 ==

CPAN.pm requires configuration, but most of it can be done automatically.
If you answer 'no' below, you will enter an interactive dialog for each
configuration option instead.

Would you like to configure as much as possible automatically? [yes]

 <install_help>

Warning: You do not have write permission for Perl library directories.

To install modules, you need to configure a local Perl library directory or
escalate your privileges.  CPAN can help you by bootstrapping the local::lib
module or by configuring itself to use 'sudo' (if available).  You may also
resolve this problem manually if you need to customize your setup.

What approach do you want?  (Choose 'local::lib', 'sudo' or 'manual')
 [local::lib] 


Autoconfiguration complete.

Attempting to bootstrap local::lib...
(snip)
PATH="/home/henrich/perl5/bin${PATH+:}${PATH}"; export PATH;
PERL5LIB="/home/henrich/perl5/lib/perl5${PERL5LIB+:}${PERL5LIB}"; export PERL5LIB;
PERL_LOCAL_LIB_ROOT="/home/henrich/perl5${PERL_LOCAL_LIB_ROOT+:}${PERL_LOCAL_LIB_ROOT}"; export PERL_LOCAL_LIB_ROOT;
PERL_MB_OPT="--install_base \"/home/henrich/perl5\""; export PERL_MB_OPT;
PERL_MM_OPT="INSTALL_BASE=/home/henrich/perl5"; export PERL_MM_OPT;

Would you like me to append that to /home/henrich/.bashrc now? [yes] 
(snip)

なんと、cpanからダウンロードしてパッケージを作ってくれる模様。初回だけ色々な設定をするので質問されますが、それも次回以降は不要。DBIx-Class-OptimisticLockingを指定したら、libdbix-class-optimisticlocking-perlパッケージのディレクトリができています。しかもgitで管理されるようになっています。楽だ…

henrich@hp:~/src/qa/libdbix-class-optimisticlocking-perl(master) $ git log
commit a1a9d209742905d33a3ffee587c32b7a5360a521
Author: Hideki Yamane <henrich@debian.org>
Date:   Sun Jun 28 00:12:59 2015 +0900

    Initial packaging by dh-make-perl 0.84

commit 29943cd28971248efb43e0e940957bf5086e118e
Author: Hideki Yamane <henrich@debian.org>
Date:   Sun Jun 28 00:10:38 2015 +0900

    Import original source of DBIx-Class-OptimisticLocking 0.02

面倒なdebian/controlでの依存関係もほぼ自動で出来上がります。descriptionもcpanから取得したものがあります(が、モジュールによっては手動での記述が必要になることも)。手直しは若干必要ですが、楽ですね。

debian/rulesでのビルド記述は素のままですが、Perl moduleなら特にいじることもない、という感じでしょうか。

debian/copyrightもcpanから取ってきて記述されるようです。

Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Source: https://metacpan.org/release/DBIx-Class-OptimisticLocking
Upstream-Contact: Brian Phillips <bphillips@cpan.org>
Upstream-Name: DBIx-Class-OptimisticLocking
DISCLAIMER: This copyright info was automatically extracted
 from the perl module. It may not be accurate, so you better
 check the module sources in order to ensure the module for its
 inclusion in Debian or for general legal information. Please,
 if licensing information is incorrectly generated, file a bug
 on dh-make-perl.
 NOTE: Don't forget to remove this disclaimer once you are happy
 with this file.

とあるので、念を入れて確認を実施し、問題を見つけたらdh-make-perlにBTSするのがいいでしょう。

debian/watchファイルも生成されていましたので、アップデートを追いかけるのも楽ですね。

debian/upstream/metadataなんてファイルも出来てました。中身は

Archive: CPAN
Contact: Brian Phillips <bphillips@cpan.org>
Name: DBIx-Class-OptimisticLocking
Repository: http://github.com/brianphillips/dbix-class-optimisticlocking

ほー。いたれりつくせりですね。

あとはgit-buildpackageでビルドしてしまえばOKです。

ちなみに既にあるモジュールをdh-make-perlでパッケージにしようとすると

**********
WARNING: a package named
              'libsql-abstract-perl'
         is already available in APT repositories
Maintainer: Debian Perl Group <pkg-perl-maintainers@lists.alioth.debian.org>
Description: module to generate SQL from Perl data structures

などと出てきますので、不要なディレクトリとtarballを削除しておきましょう。

モジュールがcpanにない場合には

$ dh-make-perl --cpan selenium-remote-driver-perl
== dh-make-perl 0.86 ==
Reading '/home/henrich/.local/share/.cpan/Metadata'
  Database was generated on Sat, 27 Jun 2015 14:17:02 GMT
Can't find 'selenium::remote::driver::perl' module or distribution on CPAN

のように出てきます。

また、変換の際にモジュールが依存する別のモジュールがない場合には

Needs the following modules for which there are no debian packages available:
 - Time::Mock

と警告が出てきます。しかし、これも万能というわけでもなく、

Needs the following modules for which there are no debian packages available:
 - CSS::Minifier::XS
 - JavaScript::Minifier::XS

と出てきたのでdh-make-perl –cpan CSS-Minifier-XSしたら

**********
WARNING: a package named
              'libcss-minifier-xs-perl'
         is already available in APT repositories
Maintainer: Debian Perl Group <pkg-perl-maintainers@lists.alioth.debian.org>
Description: XS based CSS minifier

と出てきてしまいました。あらら。