Help us understand the problem. What is going on with this article?

オフラインでCPANを使う方法 (2種類)

More than 5 years have passed since last update.

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
[cpan] > o conf unshift file:///home/user/minicpan
[cpan] > o conf commit
[cpan] > quit
$ cpanm (Installしたいモジュール)

cpanmでインストールしたい場合、--mirror指定が必要です。

cpanmで使う場合
$ cpanm --mirror /home/user/minicpan (モジュール名)

定期的にミラー

CPANミラーを常に最新に保つならcronで、定期的にミラー。

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でインストールする場合、モジュールのアーカイブを~/.cpan/sourcesにダウンロードする特性を利用した方法です。
依存関係にはまらないために、perlbrewを使います。

作業の流れは、

  1. perlbrewをインストール
  2. perlbrewで、オフラインサーバーのperlと同じバージョンをインストール
  3. cpanで必要なモジュールをmake
  4. ~/.cpan/sourceをアーカイブ
  5. インストールしたいサーバーの~/.cpan/sourceにアーカイブを展開
  6. cpanのurllistに~/.cpan/sourceを追加
  7. モジュールのインストール

perlbrewを使うのは、perlを白紙の状態にして、依存モジュールをもれなくダウンロードさせるためです。

作業例

まず、CPANにつながるサーバー、マシンで作業する。

perlbrewのインストール
$ 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
perlのインストール、切り替え
$ 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
[cpan] > make (モジュール)     # 必要なモジュールをmakeする。
                               # たまに聞かれる依存モジュールのmakeもyesと答える。
[cpan] > quit
$ cd ~/.cpan/sources
$ tar czf cpan_sources.tar.gz *        # sources以下のファイルをアーカイブ

これで~/.cpan/source以下に、モジュールのアーカイブが保存されています。
これをアーカイブし、使いたいサーバーにコピー。

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で普通にインストール
[cpan] > install (モジュール名)

cpanmでインストールしたい場合、--mirror指定が必要です。

cpanmで使う場合
$ cpanm --mirror ~/.cpan/sources (モジュール名)

注意点

  • ~/.cpan/CPAN/MyConfig.pmのbuild_cacheの値は100かそれ以上の値にする。(少ないと、モジュールのアーカイブが削除されてしまう)
  • 依存関係ではまる場合があるので、予行演習は十分に。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした