perlbrew - ユーザー環境にPerlをインストールする



  1. Perl




  2. モジュール



  3. here

 ユーザー環境にPerlをインストールするにはperlbrewというツールを使用します。システム標準のPerlを利用したくない場合や新しいバージョンのPerlを利用したい場合は便利です。またperlbrewを使うと複数のバージョンのPerlの切り替えを行うことができます。

perlbrewのインストール

 以下のコマンドを実行します。

curl -L http://install.perlbrew.pl | bash

 もしcurlコマンドがなければ、以下のコマンドを実行してみてください。

# Linux
wget -O - http://install.perlbrew.pl | bash

# FreeBSD
fetch -o- http://install.perlbrew.pl | sh

 cpanから二つの手順でインストールすることもできます。

sudo cpan App::perlbrew
perlbrew init

 次にperlbrewのパスを通しましょう。perlbrewで用意されているbash用の設定ファイルを「.bashrc」に追加します(bashの場合)。

echo "source ~/perl5/perlbrew/etc/bashrc" >> ~/.bash_profile

 そして、シェルを立ち上げなおします。

ユーザー環境へのPerlのインストール

 ユーザー環境にPerlをインストールします。5.16.3のPerlをインストールしてみましょう。時間がかかるので待ちます(約40分程度)。

perlbrew install perl-5.16.3

 インストールできない場合で試験を飛ばして強制的にインストールしたい場合は「-n」オプションを使用します。

perlbrew install -n perl-5.16.3

 利用できるPerlの一覧を見てみましょう。perlbrewのlistコマンドを使用します。

perlbrew list

 以下のように利用できるPerlが表示されます。アスタリスクのあるものが現在利用しているPerlです。

  perl-5.16.3
* /usr/bin/perl (5.8.8)

 Perlを切り替えるにはperlbrewのswitchコマンドを使用します。

perlbrew switch perl-5.16.3

 Perlのバージョンを実際に確認してみましょう。

perl -v

 以下のように5.16.3のバージョンになっています。

This is perl 5, version 16, subversion 3 (v5.16.3) built for i686-linux

cpanmのインストール

 モジュールをインストールするのに便利なcpanmもインストールしておきましょう。

perlbrew install-cpanm

 これで以下のコマンドでモジュールがインストールできるようになります。

cpanm JSON

 モジュールは以下のディレクトリなどにインストールされます。

/home/kimoto/perl5/perlbrew/perls/perl-5.16.3/lib/site_perl/5.16.3/

元のPerlに戻す

 元のPerlに戻すには以下のようにします。

perlbrew off

perlbrewで指定したバージョンのPerlをcrontabで使う方法

 perlbrewのはまりどころのひとつは、perlbrewで指定したバージョンのPerlがcronからは利用されないということでしょう。これはcronから実行するときは、シェルが起動されないので.bashrcが読み込まれないことが原因です。perlbrewによる設定は、.bashrcの中に記述したからですね。

 一番簡単な解決策は、crontabの中でPATHを、そのユーザーが持っている環境変数PATHの値に書き換えてあげることです。

 まずperlbrewをインストールしたユーザーで、PATH環境変数の値を表示します。

env | grep PATH

 PATHを含んだ環境変数がいくつか表示されるので、PATHというものを探します。(ユーザー名がadminsの場合の例です。)

PATH=/home/admins/perl5/perlbrew/bin:/home/admins/perl5/perlbrew/perls/perl-5.16.2/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/admins/bin

 以下のコマンドでcrontabを編集します。

crontab -e

 そして上記のPATHの値をcrontabの一番上に書き込みます。

PATH=/home/admins/perl5/perlbrew/bin:/home/admins/perl5/perlbrew/perls/perl-5.16.2/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/admins/bin

# cronの設定が続く...

 これでcronが指定したバージョンのPerlを利用してくれるようになります。

Perlスクリプトの一行目の記述

 Perlスクリプトの一行目の記述は以下のようenvコマンドを使った記述をしましょう。

#!/usr/bin/env perl

 こうすると設定したPATHの値から自動的にperlを検出してくれます。

 この方法は、見てのとおり、crontabの移植性がまったくないです。ユーザー名のadminsが直接埋め込まれていますし、perlのバージョン番号がそのまま記述されているので、perlbrewでバージョンを変更したときは、動かなくなります。

 でもこの方法が一番よいと思います。その理由はcrontab内では、環境変数の変数展開ができないという制限があるので、うまく移植性を持たせることが難しいということが理由です。移植性を持たせると、記述量が多くなったり、追加のスクリプトが必要になったり、管理が煩雑になってしまいます。

 それとどんなにがんばっても、crontabって環境ごとに、何らかの差分があることがほとんどなので、移植性を保たせてもあんまりメリットがないということもあります。