maehachi08 Anything Blog

2013年06月28日
plenvでperlインストール

What's plenv

plenvとは、@tokuhiromさんが開発されたperlのバージョン管理ツールです。rubyのrbenvと同じようにユーザ環境毎にperlバージョンを管理できます。
perlbrewとは互換性がないので、既にperlbrewがインストール済みの場合は完全に削除してからplenvを入れた方がいいようです。

Environment infrastructure

plenvインストールは以下の環境で試しました。

# cat /etc/redhat-release 
CentOS release 6.4 (Final)

# uname -an
Linux manage001.pachi.local 2.6.32-358.el6.x86_64 #1 SMP Fri Feb 22 00:31:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

Install plenv

基本的にはINSTALLATIONに記載されている通りに進めれば問題ないと思います。

1. Check out plenv into ~/.plenv.

plenvはgithubで公開されているため、git cloneコマンドで取ってきます。

$ git clone git://github.com/tokuhirom/plenv.git ~/.plenv

2. Add ~/.plenv/bin to your $PATH for access to the plenv command-line utility.

plenvコマンドは、~/.plenv/bin/plenvです。~/.plenv/bin/plenvはシンボリックリンクで、実体は~/.plenv/libexec/plenvのようです。

$ ls -l ~/.plenv/bin/plenv 
lrwxrwxrwx 1 maehachi08 worker 16  6月 27 18:15 2013 /home/maehachi08/.plenv/bin/plenv -> ../libexec/plenv

$ ls -l ~/.plenv/libexec/plenv
-rwxr-xr-x 1 maehachi08 worker 1834  6月 27 18:15 2013 /home/maehachi08/.plenv/libexec/plenv

環境変数$PATHに~/.plenv/binへのパスを通しておきましょう。

$ echo 'export PATH="$HOME/.plenv/bin:$PATH"' >> ~/.bash_profile

$ tail -1 ~/.bash_profile 
export PATH="$HOME/.plenv/bin:$PATH"

3. Add plenv init to your shell to enable shims and autocompletion.

ログインした際にplenvの初期化処理が実行されるようにしましょう。

$ echo 'eval "$(plenv init -)"' >> ~/.bash_profile

$ tail -1 ~/.bash_profile 
eval "$(plenv init -)"

4. Restart your shell as a login shell

シェルをログインシェルとして起動させる場合と同じ動作をさせます。これにより~/.bash_profileが読み込まれ、環境変数$PATHへ~/.plenv/binへのパスが設定され、plenvが使用できるようになります。

$ exec $SHELL -l

$ which plenv
~/.plenv/bin/plenv

補足ですが、$SHELLというのは環境変数で、現在使用中のシェル名が代入されています。-lオプションというのは--loginオプションであり、このオプション付きで実行することでログインシェルと同等に振る舞ってくれ、($SHELLが/bin/bashの場合)~/.bash_profileも読み込まれます。

5. Install perl-build, which provides an plenv install command

(少し前はplenv内に組み込まれていたかもですが)plenvユーティリティを使ってperlをビルドしインストールするためのplenv installコマンドを提供するperl builder moduleであるperl-buildをインストールします。

$ git clone git://github.com/tokuhirom/Perl-Build.git ~/.plenv/plugins/perl-build/

これでplenv install/uninstallオプションが使用できます。

これでplenvのインストールは完了しました。

Upgrade plenv

git cloneコマンドでplenvをインストールした場合、git pullコマンドでplenvを最新バージョンにアップグレードできます。

$ cd ~/.plenv
$ git pull

ヘルプの確認

$ plenv help
Usage: plenv <command> [<args>]

Some useful plenv commands are:
   commands            List all available plenv commands
   local               Set or show the local application-specific Perl version
   global              Set or show the global Perl version
   shell               Set or show the shell-specific Perl version
   install             Install a Perl version using the perl-build plugin
   uninstall           Uninstall a specific Perl version
   rehash              Rehash plenv shims (run this after installing executables)
   version             Show the current Perl version and its origin
   versions            List all Perl versions available to plenv
   which               Display the full path to an executable
   whence              List all Perl versions that contain the given executable
   list-modules        List cpan modules in current perl
   migrate-modules     Migrate cpan modules from other version
   install-cpanm       Install cpanm

See `plenv help <command>' for information on a specific command.
For full documentation, see: https://github.com/tokuhirom/plenv#readme

$ plenv help install
Usage: plenv install [-v|--verbose] <version>
       plenv install [-v|--verbose] /path/to/definition
       plenv install -l|--list

  -l/--list        List all available versions
  -v/--verbose     Verbose mode: print compilation status to stdout
  --as=<NAME>      Install the definition as <NAME>

For detailed information on installing Perl versions with
perl-build, including a list of environment variables for adjusting
compilation, see: https://github.com/tokuhirom/perl-build#usage

Install perl

plenvを利用してperlをインストールするのはすごく簡単です。

まず、どのperlバージョンがインストール可能なのかを確認します。

$ plenv install --list
Available versions:
 5.6.0
  .
  .
  .
 5.18.0
 5.19.0
 5.19.1

では、最新バージョンである5.19.1をインストールしてみましょう。

$ plenv install 5.19.1

ビルドに多少時間かかりますが、これで指定バージョンのperlがインストールされます。

新しいperlバージョンをインストールしたら必ず、状態を認識させるために以下コマンドを実行します。

$ plenv rehash

インストール済み(利用可能な)perlバージョンを確認します。

$ plenv versions
* system (set by /home/maehachi08/.plenv/version)
  5.19.1

ちなみに、コメ印が付いているのが、今使用しているバージョンです。
plenvはデフォルトではsystemのperlを見ます。

Setting plenv global

先ほど、
plenv installコマンドでperlをインストールし、plenv rehashコマンドを実行しました。

ここでperlコマンドのバージョン、パスを確認します。

$ which perl
~/.plenv/shims/perl

$ perl -v

This is perl, v5.10.1 (*) built for x86_64-linux-thread-multi

使用しているperlのバージョンはv5.10.1です。plenvでインストールした5.19.1ではありません。これは、plenvはデフォルトではsystemのperlを見るようになっているためです。

## plenv globalに設定されているperlバージョン確認
$ plenv global
system

## 今使用しているperlバージョンの確認
$ plenv version
system (set by /home/maehachi08/.plenv/version)

補足ですが、 "plenv globalに設定されているperlバージョン" と、 "今使用しているperlバージョン"というのは、必ずしも同じではありません。ユーザの使用しているシェルは基本的にはglobalに従うのですが、特定のアプリケーションでのみ他のバージョンを使用したい場合等に対象ディレクトリに.perl-versionファイルを置き、使用したいバージョンを指定することで任意のバージョンを使用できます。
systemのperlではなく、plenvでインストールしたperlを見せたい場合はplenv globalコマンドの引数にバージョンを指定します。

$ plenv global 5.19.1

$ plenv global
5.19.1

$ plenv version
5.19.1 (set by /home/maehachi08/.plenv/version)

$ perl -v

This is perl 5, version 19, subversion 1 (v5.19.1) built for x86_64-linux

plenv local

補足としても先述しましたが、特定のディレクトリ以下ではglobalなperlバージョンとは異なるperlバージョンを使用したい場合は、別途localなバージョンを定義できます。

インストール済みバージョンを確認します。

$ plenv versions
  system
  5.18.0
* 5.19.1 (set by /home/maehachi08/.plenv/version)

~/test_moduleディレクトリ以下では5.18.0を使用する場合、~/test_module/.perl-versionに5.18.0を記述しておく。

$ mkdir ~/test_module
$ cd ~/test_module/

$ plenv version
5.19.1 (set by /home/maehachi08/.plenv/version)

$ echo '5.18.0' > .perl-version

$ plenv version
5.18.0 (set by /home/maehachi08/test_module/.perl-version)

Priority of perl version setting

plenvにおけるperlバージョン情報のセット方法は複数あり、優先順位があります。

まず、環境変数PLENV_VERSIONを参照します。
次に、カレントディレクトリ、もしくは上位ディレクトリにある.perl-versionファイルを参照します
次に、global設定である~/.plenv/versionを参照します。
最後にsystemのperlが参照されます。

$ cat ~/.plenv/version
system

## ~/.plenv/versionがsystemなので、systemのperlを使用
$ plenv version
system (set by /home/maehachi08/.plenv/version)

## plenv local用の.perl-versionを作成
$ echo '5.18.0' > .perl-version

$ plenv version
5.18.0 (set by /home/maehachi08/test_module/.perl-version)

## PLENV_VERSION環境変数のセット
$ export PLENV_VERSION=5.19.1

$ plenv version
5.19.1 (set by PLENV_VERSION environment variable)

Install cpanm utility use plenv

cpanmとはPerlモジュールを取得して解凍しビルドしてインストールするコマンドです。利用している方も多いと思います。cpanmもplenvでインストール可能です。

$ plenv install-cpanm

$ plenv rehash

## systemから見たcpanmコマンドのパス
$ which cpanm
~/.plenv/shims/cpanm

## plenvは実行ファイルのラッパーをshims以下に配置している
## 実行ファイルのフルパスを表示する
$ plenv which cpanm
/home/maehachi08/.plenv/versions/5.19.1/bin/cpanm

List cpan modules in current perl

plenv管理のperl環境でインストールしたcpanモジュールのリストを表示します。

$ plenv list-modules
App::cpanminus
Perl

これでplenv環境でperlを触れるようになりました!