perlbrew - ユーザー環境にPerlをインストールする
ユーザー環境に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" >> ~/.bashrc
「.bashrc」を読み込みなおします。
source ~/.bashrc
ユーザー環境へのPerlのインストール
ユーザー環境にPerlをインストールします。5.28.2のPerlをインストールしてみましょう。時間がかかるので待ちます(約30分程度)。
perlbrew install perl-5.28.2
インストールできない場合は、Perlのコンパイルに必要なツールが、まだインストールされていない可能性があります。以下のツールが必要になりますので、各環境に応じて、インストールしてください。
- make
- gcc
- patch
試験を強制的に飛ばして強制的にインストールしたい場合は「-n」オプションを使用します。
perlbrew install -n perl-5.28.2
利用できるPerlの一覧を見てみましょう。perlbrewのlistコマンドを使用します。
perlbrew list
以下のように利用できるPerlが表示されます。アスタリスクのあるものが現在利用しているPerlです。
perl-5.28.2 * /usr/bin/perl (5.8.8)
Perlを切り替えるにはperlbrewのswitchコマンドを使用します。
perlbrew switch perl-5.28.2
Perlのバージョンを実際に確認してみましょう。
perl -v
以下のように5.28.2のバージョンになっています。
This is perl 5, version 16, subversion 3 (v5.28.2) built for i686-linux
cpanmのインストール
モジュールをインストールするのに便利なcpanmもインストールしておきましょう。
perlbrew install-cpanm
これで以下のコマンドでモジュールがインストールできるようになります。
cpanm JSON
モジュールは以下のディレクトリなどにインストールされます。
/home/kimoto/perl5/perlbrew/perls/perl-5.28.2/lib/site_perl/5.28.2/
元のPerlに戻す
元のPerlに戻すには以下のようにします。
perlbrew off
perlbrewで指定したバージョンのPerlをcrontabで使う方法
perlbrewのはまりどころのひとつは、perlbrewで指定したバージョンのPerlがcronからは利用されないということでしょう。これはcronから実行するときは、シェルが起動されないので.bash_profileが読み込まれないことが原因です。perlbrewによる設定は、.bash_profileの中に記述したからですね。
一番簡単な解決策は、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を検出してくれます。
この方法は、見てのとおり、PATHをベタ書きしますので、crontabの移植性がまったくないです。ユーザー名のadminsが直接埋め込まれていますし、perlのバージョン番号がそのまま記述されているので、perlbrewでバージョンを変更したときは、動かなくなります。
でもこの方法が一番よいと思います。その理由はcrontab内では、環境変数の変数展開ができないという制限があるので、うまく移植性を持たせることが難しいということが理由です。移植性を持たせると、記述量が多くなったり、追加のスクリプトが必要になったり、管理が煩雑になってしまいます。
それとどんなにがんばっても、crontabって環境ごとに、何らかの差分があることがほとんどなので、移植性を保たせてもあんまりメリットがないということもあります。