CPANに接続できなくてもCPANモジュールをインストールする方法を2つ説明。
次のケースで便利。
- 外部から隔離されたサーバー
- 山奥や飛行機の上など、ネットにつながらないとき。
手段は2種類。
-
CPAN::Miniを使ってCPANミラーを作る (オススメ)
CPANにあるものなら何でもインストールできる。
簡単。依存関係に悩まされない。
ストレージの容量が必要。(2013年3月時点では2.4G必要) -
cpanのキャッシュを利用する
一つ目に比べて必要最低限の容量ですむ。持ち運びしやすい。
依存関係ではまる場合もある。
これらの方法は、既にネットにたくさん書かれていますが、自習、確認のためにも投稿。
CPAN::Miniを使ってCPANミラーを作る
流れとして、CPAN::Miniをインストール、CPANミラーを作成、cpanのダウンロード先にローカルのミラーを追加。以上。
##実行例
$ cpanm CPAN::Mini
$ minicpan -r http://ftp.kddilab.jp/lang/CPAN/ -l /home/user/minicpan
ミラーを作れば、あとは煮るなり焼くなり自由。
- コピーを持ち歩く
- NFS経由でアクセスする
- ローカルのhttp,ftpで取得
cpanの向き先はしっかり設定する
$ cpan
[cpan] > o conf unshift file:///home/user/minicpan
[cpan] > o conf commit
[cpan] > quit
$ cpanm (Installしたいモジュール)
cpanmでインストールしたい場合、--mirror指定が必要です。
$ cpanm --mirror /home/user/minicpan (モジュール名)
##定期的にミラー
CPANミラーを常に最新に保つならcronで、定期的にミラー。
$ crontab -e
# 毎日朝5時にミラーリング
0 5 * * * minicpan -qq -r http://ftp/kddilab.jp/lang/CAPN/ -l /home/user/minicpan
##注意点
- ミラー先はhttp一択。ftpは接続拒否される可能性が高い。(kddilabは拒否された)
- ミラー先はCPAN.orgのmirrorから近い場所を選ぶ。
- perlbrewで複数のperlを使い分けている場合、minicpanのcronが失敗する場合もある。
##参考サイト
- CPAN CPAN::Min
- CPAN::Miniでググると先人の記録がたくさんあります。
#cpanのキャッシュを使う
これは、cpanでインストールする場合、モジュールのアーカイブを~/.cpan/sourcesにダウンロードする特性を利用した方法です。
依存関係にはまらないために、perlbrewを使います。
作業の流れは、
- perlbrewをインストール
- perlbrewで、オフラインサーバーのperlと同じバージョンをインストール
- cpanで必要なモジュールをmake
- ~/.cpan/sourceをアーカイブ
- インストールしたいサーバーの~/.cpan/sourceにアーカイブを展開
- cpanのurllistに~/.cpan/sourceを追加
- モジュールのインストール
perlbrewを使うのは、perlを白紙の状態にして、依存モジュールをもれなくダウンロードさせるためです。
##作業例
まず、CPANにつながるサーバー、マシンで作業する。
$ curl -L http://xrl.us/perlbrewinstall | bash
$ cat >>~/.bashrc_profile
source $HOME/perl5/perlbrew/etc/bashrc
$ source $HOME/perl5/perlbrew/etc/bashrc
$ perlbrew self-upgrade
$ perlbrew available
$ perlbrew install perl-5.14.4 # ここでは、perl 5.14にインストールしたいという設定
(インストール作業実行)
$ perlbrew switch perl-5.14.4
~/.cpan/CPAN/MyConfig.pmで、build_cache => q[10]
と少ない場合、100に変更する。(モジュールの数が多いなら、さらに増やす)
$ cpan
[cpan] > make (モジュール) # 必要なモジュールをmakeする。
# たまに聞かれる依存モジュールのmakeもyesと答える。
[cpan] > quit
$ cd ~/.cpan/sources
$ tar czf cpan_sources.tar.gz * # sources以下のファイルをアーカイブ
これで~/.cpan/source以下に、モジュールのアーカイブが保存されています。
これをアーカイブし、使いたいサーバーにコピー。
$ cd ~/.cpan
$ mv sources sources.org # 既にsourcesがある場合、一時退避。
$ mkdir sources
$ cd sources
$ tar zxf ~/cpan_source.tar.gz ./
次に、インストール先のcpanを次のように設定。
```shell:cpan設定
$ cpan
[cpan]> o conf urlist unshift ~/.cpan/sources
[cpan]> o conf commit
これで、モジュールの使用先、1番目が~/.cpan/sourcesになります。
以後、通常のcpanと同じように、(あらかじめ選んだ)モジュールがオフラインでもインストール可能になります。
[cpan] > install (モジュール名)
cpanmでインストールしたい場合、--mirror指定が必要です。
$ cpanm --mirror ~/.cpan/sources (モジュール名)
##注意点
- ~/.cpan/CPAN/MyConfig.pmのbuild_cacheの値は100かそれ以上の値にする。(少ないと、モジュールのアーカイブが削除されてしまう)
- 依存関係ではまる場合があるので、予行演習は十分に。