Snow Leopard 10.6.2でlocal::libを使う

Posted by hiroki.kana on March 20, 2010
このエントリーをはてなブックマークに追加

いろいろなPerlモジュールが必要になったときはCPANを使用してインストールを行うと思います。
そんなときにroot権限を持っていない場合やシステムのディレクトリを汚したくない場合などはいろいろと不便になります。
解決策としては、先の記事でも書きましたが、パッケージ管理でRPMを使用できる場合はrpmを作成するのが良いと思います。

とはいえ、クライアントマシンでMacを使用しているのでRPMを使用できず、MacPortsを使用していました。
MacPortsにないモジュールや最新のバージョンを使用したいときなどはやはり不便でした。
そこで、任意のディレクトリにPerlモジュール群をインストールして使用できるlocal:libを使用してみることにしました。
ほとんど参考サイトどおりですが、Mac OS X Snow Leopard 10.6.2環境下で導入してます。

まずは、local-libをダウンロードします。

% curl -L -O http://search.cpan.org/CPAN/authors/id/A/AP/APEIRON/local-lib-1.005001.tar.gz
% tar xzvf local-lib-1.005001.tar.gz
% cd local-lib-1.005001

local::libとは関係ないですが、curlコマンドでリダイレクト先まで追ってダウンロードするときには-Lオプションが必要です。
恥ずかしながらここで10分くらいはまりました…orz

次にMakefileつくってテストしてインストールします。
ここではホームディレクトリ以下のperllocalディレクトリに導入しました。

% perl Makefile.PL --bootstrap=$HOME/perllocal
% make && make test
% make install

最後に必要な環境変数を自動的に設定されるように下記を.zshrcに追加します。
bashやcshの場合は適切な場所に同じことをしてください。

% echo 'eval $(perl -I$HOME/perllocal/lib/perl5 -Mlocal::lib=$HOME/perllocal)' >> ~/.zshrc
% source ~/.zshrc

これで導入は完了です。
あとはcpanコマンドを使用してPerlモジュールをインストールするとperllocal以下に必要なモジュールがインストールされるはずです。
さっそくAnyEventをインストールして確認してみます。

% cpan -i AnyEvent
% perldoc -l AnyEvent
/Users/hiroki/perllocal/lib/perl5/AnyEvent.pm 

きちんとperllocal以下に導入されています。

コマンドラインから使用するのは上記の環境変数を設定しているので特に問題なく使用できますが、CGIなどの場合はスクリプトでuse libでライブラリのパスを指定する必要があります。
例えば、下記のように指定します。

#!/usr/bin/perl
use strict;
use lib ('/Users/hiroki/perllocal/lib/perl5');
use local::lib('/Users/hiroki/perllocal/lib/perl5');
use AnyEvent;

my $cv_timer = AnyEvent->condvar;
my $timer; $timer = AnyEvent->timer(
    after => 0,
    interval => 1,
    cb => sub {
        print AnyEvent->time, "\n";
        $cv_timer->send;
    },
);
$cv_timer->recv;

さらに、perllocalをSubversionなどで共有すればインストール作業は1回ですみそうな気がするのでいずれやってみます。
同じアーキテクチャ同士じゃないとダメそうですが。

参考サイト

このエントリーをはてなブックマークに追加