「perlbrew」と「cpanminus」と「local::lib」を使って、さくらのレンタルサーバで任意のバージョンのPerlを使う

この記事では、さくらのレンタルサーバを借り始めてすぐに、ユーザが独自のPerlの環境を構築するまでにやることの例をメモしておきます。

事前にインストールされているPerlを使っていると、運用側の都合による変更で振り回されるかもしれません。極力、自分のホームディレクトリ内だけですべての作業が完了するようにしたいです。

以下メモ。



レンタルを初めたばかりでも環境を用意できそう?


レンタルを初めたばかりでも環境を用意できそうです。

最近のさくらのレンタルサーバは数年前と比べて環境が充実してます。

zshは4.3.9。
% zsh --version
zsh 4.3.9 (i386-portbld-freebsd7.1)


emacsは22.3.1。
% emacs --version
GNU Emacs 22.3.1


なんか、そこそこ頑張れそうです。

「zshrc」と「emacsrc」を最低限だけ書く


$HOMEにzshの設定ファイルである.zshrcを保存し、emacsの設定ファイルである.emacsrcを保存します。そうしないと日本語が化け化けになっちゃいます。

最初に .emacsrc に書いておきたい

emacsの画面表示時の文字コード設定のみ。

(set-language-environment "Japanese")
(set-default-coding-systems 'utf-8-unix)
(set-keyboard-coding-system 'utf-8-unix)
(set-terminal-coding-system 'utf-8-unix)
(set-buffer-file-coding-system 'utf-8-unix)
(setq default-buffer-file-coding-system 'utf-8-unix)


最初に.zshrc に書いておきたい

文字コードの設定、ユーザー領域に一時保存領域を設置、Mailがらみのエラーに対応し、$HOMEにインストールしたbinファイルにパスを通す、の4つを解決。

export LC_ALL=ja_JP.UTF-8
export TMPDIR=$HOME/tmp
export MAILPATH=$HOME/MailBox/postmaster/maildir
export PATH=$HOME/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin


cpanminus のインストール


さくらのレンタルサーバでは、cpan を root 権限で実行できないので、ソースを含むtar.gzファイルをダウンロードして、解凍して、perl Makefile.PL して make して make test して make installして、とめんどくさかったです。

ところが @miyagawa さん作の cpanminus を使うと、cpanを使わずに楽にモジュールをインストールできるようになります。cpan を思ったように実行できないレンタルサーバとの相性は抜群です。

インストール方法はドキュメントに書いてあります。今回は wget する手法を選びます。

- miyagawa's cpanminus at master - GitHub
-- http://github.com/miyagawa/cpanminus
cd ~/bin
wget http://xrl.us/cpanm
chmod +x cpanm


上記を参考に実際には以下のように実行しました。

cd $HOME/bin
wget http://xrl.us/cpanm
chmod +x cpanm


これで cpanminus のインストールは終わったので、今度は shell の設定ファイルに関連する変数の設定を追記します。

cpanm のアップデートは以下のコマンドでできます。

cpanm --sudo --self-upgrade


.zshrc に追記


.zshrc に環境変数の情報を追記します。

基本的には、「local::lib」をインストールしてから「perl -Mlocal::lib」したときに出力される情報です。もろもろ「${HOME}/perl5/」以下にインストールされるようになります。

export MODULEBUILDRC="${HOME}/perl5/.modulebuildrc"
export PERL_MM_OPT="INSTALL_BASE=${HOME}/perl5"
export PERL5LIB="${HOME}/perl5/lib/perl5:${HOME}/perl5/lib/perl5/i386-freebsd-64int:${HOME}/perl5/lib/perl5/i386-freebsd:$PERL5LIB"
export PATH="${HOME}/perl5/bin:$PATH"


さくらのレンタルサーバのアーキテクチャ名を調べます。以下を入力すると出てきます。

perl -MConfig -e 'print $Config{archname}'


今回は「/usr/local/bin/perl」を実行したので「i386-freebsd-64int」と出てきました。また、後で perlbrew でインストールする perl では「i386-freebsd」と出力されます。なので、以下のようなPERL5LIBになります。環境ごとに異なるので良い感じに変えてください。

追記したら「source ~/.zshrc」してください。

.modulebuildrc の記述


さっきの .zshrc の設定では .modulebuildrc というファイルを設定に含めていました。もしも「${HOME}/perl5/.modulebuildrc」が無かったら、以下を作ってください。

- ${HOME}/perl5/.modulebuildrc
install --install_base /home/ユーザ名/perl5


perlbrew のインストール


perlbrew を使えば、任意の複数バージョンのPerlをインストールし、インストール済みPerlの切り替えも可能になります。

perlbrew 自体のインストールは以下を実行するだけなので簡単です。

- App::perlbrew - search.cpan.org
-- http://search.cpan.org/dist/App-perlbrew/lib/App/perlbrew.pm
$ curl -LO http://xrl.us/perlbrew
$ chmod +x perlbrew
$ ./perlbrew install


上記までの設定後、perlbrew install すると $HOME/perl5 以下に perlbrew ディレクトリが作られ、ファイルがインストールされます。

perlbrew は$HOME/bin などに置いておきたいので、mv しました。

mv ./perlbrew $HOME/bin/


その後で、以下を実行して初期化します。

$HOME/perl5/perlbrew/bin/perlbrew init


さらに、init で生成された perlbrew な bin ファイルのパスを環境変数に追加します。
以下のようなrcファイルのパスを、任意のシェルのrcファイルに追記するだけで良いのでお手軽です。

source $HOME/perl5/perlbrew/etc/bashrc


中身は「$HOME/perl5/perlbrew/bin」と「$HOME/perl5/perlbrew/perls/current/bin」をPATH に追加するための記述です。

cshの人用に「chsrc」もあるので安心です。

上記をrcファイルに追記したらsource ~/.任意のrcファイル して、env コマンドで反映されているか確かめましょう。

任意のバージョンの Perl をインストールする


perlbrew がインストールできた状況になったら、任意のバージョンの Perl をインストールできます。僕は 5.10.1 と 5.12.0 をインストールしました。

例えば、5.10.1 をインストールしたい場合には以下を実行します。

perlbrew install perl-5.10.1


もしも install できなかったときには「tail perl5/perlbrew/build.log」すると、インストールできなかった原因が分かります。自分の用途に問題無さそうなエラーだったら「perlbrew --force install perl-5.10.1」をするのも良いでしょう。

複数の Perl のバージョンを切り替える


上記までの設定をしたうえで「perlbrew switch」すると、インストール済みの Perl からバージョンを選べます。

環境変数のPATHの最初の方に「${HOME}/perl5/perlbrew/bin」が含まれていないと、perlコマンドを実行したときに perlbrew で切り替え可能な perl を見つけられないので注意してください。

perlbrew install した直後は上手く切り替えられないかもしれません。何故か switch できない場合はターミナルをexitしたり、ログオフしたりしてみてください。

$ perlbrew installed                
perl-5.10.1
perl-5.12.0(*)
/home/ユーザ名/perl5/perlbrew/perls/current/bin/perl
/usr/local/bin/perl

$ perlbrew switch perl-5.10.1
        
$ which perl                                 
/home/ユーザ名/perl5/perlbrew/bin/perl

$ perl -v                    

This is perl, v5.10.1 (*) built for i386-freebsd

Copyright 1987-2009, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.
$ perlbrew switch perl-5.12.0                

$ which perl                 
/home/ユーザ名/perl5/perlbrew/bin/perl

$ perl -v                    

This is perl 5, version 12, subversion 0 (v5.12.0) built for i386-freebsd

Copyright 1987-2010, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.


自由自在にバージョン選択ができますね。

これは楽しいです。

CPAN モジュールをインストールする


CPAN モジュールのインストールは「${HOME}/perl5/perlbrew/bin」がパスに含まれていれば、perlbrew で選択したバージョンの Perl の cpan を実行できます。

$ which cpan                              
/home/ユーザ名/perl5/perlbrew/bin/cpan
$ cpan '任意のモジュール名'



または、cpanm を実行すれば、perlbrew で選択したバージョンの Perl を使ってモジュールをインストールすることもできます。

$ cpanm '任意のモジュール名'


個人的には cpanm が好きです。

local::lib をインストールしておく


ここまでやると、すでにユーザ領域に好きなように Perl 環境を構築できるようになっていますが、プロジェクトごとに歴史的な経緯から必要な Perl モジュールが出てくる場合や、独自のモジュールが必要な場合があります。そういう場合には local::lib を活用すると良いでしょう。

local::lib は cpanm か cpan でインストールできます。

$ cpanm local::lib


インストールできたら準備完了です。

さくらのレンタルサーバにおいて、上記までを設定した状況で、任意のバージョンの perl を使う CGI ファイルの冒頭はこうなりました。

#!/home/ユーザ名/perl5/perlbrew/bin/perl

use strict;
use warnings;
use utf8;

use lib '/home/ユーザ名/perl5/lib/perl5/';
use local::lib '任意のパス';


local::libのパスに「$FindBin::Bin」を組み合わせて任意のパス以下を読ませるのは、割と便利です。

また、この任意のパスにCPANモジュールをインストールする場合には、以下のコマンドを実行すれば良いです。

cpanm -l '任意のパス' '任意のモジュール名'


任意のモジュールに XS なモジュールが無ければ、任意のパスに必要なモジュールを全部詰め込んでポータブルなプロジェクトにすることができますね。プロジェクトを設置する環境を変える度にモジュールをインストールしなくて済むので便利です。

参考文献


- perlbrew - search.cpan.org
- miyagawa's cpanminus at master - GitHub
- local::lib - search.cpan.org
- cpanminusを使うとメモリ制限のきついレンタルサーバーでもCPANモジュールが楽にインストールできる - otsune's SnakeOil - subtech
- perlbrewで5.12.0の環境構築 - jitsu102の日記
- create pure perl extlib/ with cpanm/local::lib - TokuLog 改メ Perlを極めて起業する日記




しばらくして、また変わったことがあったら編集、追記します。


関連するエントリ

[2010-06-30-1] CentOS 4.8 上で perlbrew install するときは /usr/include/poll.h をリネームしておく
[2010-05-05-2] はてなブックマークの新着記事リストと人気記事リストを取得
[-] 2
投稿者:としのり  日時:23:59:59 | コメント | トラックバック |
blog comments powered by Disqus