Perl界隈でかなり前評判が高かった 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 なんとか を繰り返すより簡単に同じ環境が手に入ります。
例えば 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:パッケージ名 とかして探し、落としてきます。
このあたり、もっと簡単にしたいのだけど知らない。。誰か教えてほしい
追記: コメント欄 参照!
実は、これが超簡単にできちゃうから .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化(そして、その作業マシンにインストール)しておく必要があります。
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用デブで」みたいに一言でリクエストできるのがよいかんじです。
このエントリへのTrackBackアドレス
http://e8y.net/mt/mt-tb.cgi/123
本当に痩せたい方だけ見てください!
簡単らくらくダイエット方法を紹介したいと思います。チョコレートダイエット、豆乳クッキーダイエット、キャベツダイエット、納豆ダイエット、耳つぼダイエット、寒...
aptitude download hogehoge とかどうですか?
依存ファイルは落ちてこないと思うから、そこは手でやんないとダメですが。
apt で一回インスコしたファイルは /var/cache/apt/archives 以下にあるので、ここから持ってくるのも手です。
それでだいぶ楽ですね、ありがとうございます
ご存知かもしれませんが、CPANモジュールの.deb化はCPANPLUSでもできます。
dist_typeをCPANPLUS::Dist::Debにしてあとは cpanp から好きなモジュールをインストールすると勝手に.deb化してからインストールされます。
大変便利。
な、何!しらなかった、ありがとうございます。
で、CPANPLUS::Dist::RPM はないか調べたのですが、昔 Audrey がメンテしていたような形跡はありましたが、今はなし。
CPANPLUS やってみる価値ありますね。