2006年06月28日

My Favorite .deb

WEB+DB PRESS Vol.33Perl界隈でかなり前評判が高かった WEB+DB PRESS vol.33、読みました。やはり、ライブドアのインフラ設計の話が興味深かった。

特に、さらりと書かれている「新しいサーバーが用意されたときにすでに大量のCPANモジュールが入っている(しかもバージョン指定付き!)」というのがすばらしい。

うちの会社の場合、キャンペーン系の案件が多く、まっさらなサーバーにセットアップしていくことがひんぱんにあるのですが、毎回最初の CPAN祭り がいいかげんめんどうだったりします。しかもそのサーバーのFWがセキュリティポリシー的に http とか ftp で物を取りにいけなかったりすると、とたんにめんどくさくなります。

CPANPLUS を使いこなして、内部のどこかにミラーを作るなどするのが良いかなあと思ってたんですが、Debian パッケージ(.deb)を使うのがすげー楽ということに気づいてからは、もっぱら .deb love. です。当然 Debian じゃないと使えないし、他に何かよい手があるかもしれないけど、しばらくはデブついていこうと思います。

まずはお気に入りのデブ集を作ります。たとえば mfdeb というフォルダに .debファイルを集めたとすると、新しい Debian なサーバーにそれを転送して、

# dpkg -i mfdeb/*.deb

これで全てが完了! cpanシェルでちまちま入れたり、CPAN.pm を使ったスクリプト書いたり(こういうの)、aptitude install なんとか を繰り返すより簡単に同じ環境が手に入ります。

.deb を集めるには?

例えば Imager を入れたいなあと調べる場合、

# aptitude search imager

とか、

# aptitude show libimager-perl

というようにして、目的のブツとその依存パッケージを把握します。とすると libimager-perl libfreetype6 libjpeg62 libpng12-0 libt1-5 libtiff4 libungif4g zlib1g このあたりが一式必要なパッケージだ、というのがわかると思います。

ふつうの `# aptitude install libimager-perl` だと依存の面倒を見てくれるのですが、.deb集めの場合そこは自分でしなきゃなんないのが面倒。

で、そいつを http://ring.hosei.ac.jp/archives/linux/debian/debian/pool/main/ に行ったり、Googleで inline:パッケージ名 とかして探し、落としてきます。

このあたり、もっと簡単にしたいのだけど知らない。。誰か教えてほしい
追記: コメント欄 参照!

すきなCPANモジュールを.deb化する!

実は、これが超簡単にできちゃうから .deb love なのです。dh-make-perl というのを使います。とりあえず、.deb 作りをするサーバーには # aptitude install dh-make-perl で、dh-make-perl を入れ解く必要があります。

ぼくが作業した環境だと、`po-debconf` がないとかいわれて、`aptitude install dh-make-perl` がコケたんで、[ここからpo-debconf落としてきて](http://ring.hosei.ac.jp/archives/linux/debian/debian/pool/main/p/po-debconf/po-debconf_1.0.2_all.deb)、`# dpkg -i po-debconf_1.0.2_all.deb` しました。

dh-make-perl というシェルコマンドがいっしょに入ります。これが任意のCPANモジュールをデブ化してくれます。その CPANモジュールが apt-line にあるない問わず作成できます。

例えば、Text::Markdown なんかは apt-line にありません。で、こうやって作ります。

$ dh-make-perl --build --cpan Text::Markdown

これで、ごにょごにょやってくれて、最終的に libtext-markdown-perl_1.0.3-1_all.deb とゆーのが出来上がります。あとはこれをどっか別の Debianサーバーで #dpkg -i libtext-markdown-perl_1.0.3-1_all.deb すればよいわけです。

注意:さすがの dh-make-perl もCPANモジュールの依存は解決してくれません。 そのモジュールに依存CPANモジュールがあって、それがまだ入っていなかった場合、とちゅうでコケます。最初にそのモジュールを .deb化(そして、その作業マシンにインストール)しておく必要があります。

オリジナルCPANモジュールを .deb化する

dh-make-perl でオリジナルモジュールをデブ化することもできます。応用して、既存CPANモジュールのオリジナルパッチを当てたバージョンをデブ化したいときとか有効です。

例えば DBIx::Simple っていうモジュールがあります。DBIx::Class に登場いただくほどではないようなちょっとしたDB接続をしたい場合、前紹介した DBIx::Abstract より直感的で、最近のお気に入りです。ただしこれには致命的なバグがあって、Want.pm がすでに入っている場合 $db->select() とかが動きません。(1.26現在)

バグレポートは送信済みで、現在修正作業中とのことですが、実はこれって、

--- DBIx/Simple.bad.pm  Wed Jun 28 02:43:05 2006
+++ DBIx/Simple.good.pm Wed Jun 28 02:43:52 2006
@@ -67,7 +67,7 @@

 sub abstract : lvalue {
     require SQL::Abstract;
-    $_[0]->{abstract} ||= SQL::Abstract->new if _want('RVALUE');
+    $_[0]->{abstract} ||= SQL::Abstract->new if _want('LVALUE');
     $_[0]->{abstract}
 }

...単純に右と左の間違え...なトホホ話だったりします。(というかこれだけのために Want 使うなと言いたい)

こういうのを修正したオリジナル.debを作るには、

$ wget http://search.cpan.org/CPAN/authors/id/J/JU/JUERD/DBIx-Simple-1.26.tar.gz
$ tar zxvf DBIx-Simple-1.26.tar.gz
$ vi DBIx-Simple-1.26/lib/DBIx/Simple.pm 好きに修正して...

$ dh-make-perl --build DBIx-Simple-1.26

と、モジュールディレクトリを指定してあげることで作れます。

これ標準搭載?

「このモジュールは標準モジュールだろうか?」みたいな時があると思いますが、Module::Corelist を入れておけば、同梱の corelist が入るので、以下のように標準か非標準か、そしてまた標準になったのはどのバージョンからか、簡単に調べられます。

$ corelist Net::SMTP Data::Swap

Net::SMTP  was first released with perl 5.007003
Data::Swap  was not in CORE (or so I think)
ちゃんと入ったか?

あまりに一瞬でがっつり入るので、心配なときは perldoc -l して、入ったパスを見て確認してます。cpanシェルで入れた時と違って、Debianパッケージぽいところに格納されるのが特徴です。

$ perldoc -l Template

/usr/lib/perl5/Template.pm

だいたいこんなところを押さえていれば快適な.deb生活が送れるのではないかと思います。慣れると、サーバーのセットアップを行うのが別の担当者であっても、「今回は いつものデブ + catalyst用デブで」みたいに一言でリクエストできるのがよいかんじです。


2006-06-28 03:48 | Comments (4) | TrackBack (1) | はてなブックマーク livedoorクリップ Yahoo!ブックマーク del.ico.us

このエントリへのTrackBackアドレス
http://e8y.net/mt/mt-tb.cgi/123

TrackBack

Comments

コメントをどうぞ


冨田尚樹
Naoki Tomita
loading from twitter
人気エントリ
del.icio.us/scrap
今日のCPANモジュール
とみた広報
Syndicate this site
Syndicate this site
あわせて読みたい なかのひと