local::libを使う

オフライン環境でLWPとか依存関係が複雑なごついモジュールをCPANなしで入れるのは一苦労。かといってCPAN::Miniでローカルミラーを作るほどでもない。容量無駄やし。いるモジュールだけでよいんだという場合にlocal::libを試してみた。
参考このへん↓
http://ash.roova.jp/cipher/2010/09/perl---locallib.html
バージョンがlocal-lib-1.008004だと環境変数が微妙に違ったので補足。

まずはインターネッツがつながる環境でhomeの下にlocal::libをこさえる。
# wget http://search.cpan.org/CPAN/authors/id/A/AP/APEIRON/local-lib-1.008004.tar.gz
# tar zxvf local-lib-1.008004.tar.gz
# cd local-lib-1.008004
# perl Makefile.PL --bootstrap
# make && make install
# cd ~
環境変数は直接.bash_profileに書いてもよいのだけど、コピー先で別ユーザで使えるように、exportは別出しで書いておく。

# vi ~/perl5/setenv.sh

#!/bin/bash
export PERL_LOCAL_LIB_ROOT=$HOME/perl5
export PERL_MM_OPT="INSTALL_BASE=$PERL_LOCAL_LIB_ROOT"
export PERL5LIB=$PERL_LOCAL_LIB_ROOT/lib/perl5/x86_64-linux-thread-multi:$PERL_LOCAL_LIB_ROOT/lib/perl5
export PATH="$PERL_LOCAL_LIB_ROOT/bin:$PATH"

アーキテクチャが変わるとたぶんマルチスレッドのところのパスが変わるので、各自必要なものを以下で確認。
# perl -I$HOME/perl5/lib/perl5 -Mlocal::lib
あー、言うの忘れてたけど、当然ながらオフライン環境と同じアーキテクチャじゃないとmakeが必要なやつはコピーすると動かんので注意。

環境変数読み込んだ状態で次にCPANの初期化。
# source ~/perl5/setenv.sh
# perl -MCPAN -e shell
cpan> o conf init
cpan> o conf init urllist
cpan> o conf commit
cpan> exit

最後に必要なモジュールをCPANから入れる。
# cpan -i LWP

インストールできたら、オフライン環境に~/perl5以下をコピーすればOK。環境変数を読みこめばライブラリを認識して使えるようになる。make環境とダイナミックリンクしてるもののパスが違ったりしてうまくいかん場合は、適宜シンボリックリンク貼るなりしてフォローすればいけると思う。

#追記
cpan> o conf commit
が抜けてきたので追記しておきました。