perl環境の移行について

サーバのリプレースとかで、新環境にモジュールをどうやって入れるか?
ちょっと前までは、自分のサーバぐらい毎回0から入れなおす!と考えていたんですが、、、人様の環境となるとちょっとなぁ〜ということで少し調べた。

○現環境の情報ダンプ
 1.bundle モジュールを使う
 2.perllocalの情報を使う

bundleモジュールは、cpan で使う方法は検索するとすぐHITするので、cpanpで。


# cpanp
CPAN Terminal> b

[MSG] No '/root/.cpanplus/custom-sources' dir, skipping custom sources
[MSG] No '/root/.cpanplus/custom-sources' dir, skipping custom sources
[MSG] No '/root/.cpanplus/custom-sources' dir, skipping custom sources
Wrote autobundle to '/root/.cpanplus/5.10.0/dist/autobundle/Snapshot_2009_04_09_00.pm'

CPAN Terminal> quit
# more /root/.cpanplus/5.10.0/dist/autobundle/Snapshot_2009_04_09_00.pm
package Snapshot_2009_04_09_00

$VERSION = '0.01';

1;

__END__

=head1 NAME

Snapshot_2009_04_09_00 - Snapshot of your installation at Thu Apr 9 23:29:45 2009

=head1 SYNOPSIS

perl -MCPANPLUS -e "install Snapshot_2009_04_09_00"

=head1 CONTENTS

APR 0.009000

APR::Base64 0.009000
...

で、このSnapshotファイルを新環境で動かせば、基本的にはどうにかなるのですがインストールがアルファベット順になるので、面倒らしいです。(依存関係とか)


ざざっと他の人のblogを読んでいくと、2のperllocalを使う場合が今のところよいらしい。


$ perldoc perllocal

User Contributed Perl Documentation PERLLOCAL(1)

Wed Mar 11 01:53:03 2009: "Module" Term::ReadLine

o "installed into: /usr/local/lib/perl5/site_perl/5.10.0"

o "LINKTYPE: dynamic"

o "VERSION: 1.0302"

o "EXE_FILES: "

Wed Mar 11 02:01:36 2009: "Module" Scope::Guard
...

と、今までインストールしたログとなります。
なので、こっちの情報を使って上から install していけば基本的にはよい。
後は、実際に実行してからどういう不満がでるか?


$ /usr/local/bin/perldoc -tT perllocal |grep '"Module"'
Wed Mar 11 01:53:03 2009: "Module" Term::ReadLine
Wed Mar 11 02:01:36 2009: "Module" Scope::Guard
Wed Mar 11 02:03:03 2009: "Module" Params::Util
...