2014年1月4日土曜日

[mac] MacPortsでパッケージインストール時にバージョンを表すサフィックスを外す方法

MacPortsでは複数のバージョンが存在するパッケージをインストールすると、バージョンのサフィックスがついたファイルが/opt/local/bin/以下に配置されうれしくありません。例えばruby19パッケージをインストールすると、以下のファイルが存在する状態になります。

-rwxr-xr-x  1 root  admin   4402  8 22 21:59 erb1.9*
-rwxr-xr-x  1 root  admin    551  8 22 21:59 gem1.9*
-rwxr-xr-x  1 root  admin    323  8 22 21:59 irb1.9*
-rwxr-xr-x  1 root  admin   1236  8 22 21:59 rake1.9*
-rwxr-xr-x  1 root  admin    793  8 22 21:59 rdoc1.9*
-rwxr-xr-x  1 root  admin    193  8 22 21:59 ri1.9*
-rwxr-xr-x  1 root  admin  13056  8 22 21:57 ruby1.9*
-rwxr-xr-x  1 root  admin    303  8 22 21:59 testrb1.9*

この状態でrubyやirbコマンドを実行しても、以下のように Command not foundというエラーになってしまいます。

$ ruby
ruby: Command not found.

意図したコマンドを実行するためにシンボリックリンクを張りたくなりますがわざわざ手動で設定するのは面倒ですよね。こんなときにはportコマンドで以下の手順を実行すれば、該当のパッケージでインストールされたファイルに対してもれなく自動でシンボリックリンクを設定してくれます。

$ port select --set ruby ruby19
Selecting 'ruby19' for 'ruby' succeeded. 'ruby19' is now active.

上記のコマンド一発で、以下のシンボリックリンクファイルが生成されます。

lrwxr-xr-x  1 root  admin      21  1  4 23:45 erb@ -> /opt/local/bin/erb1.9
lrwxr-xr-x  1 root  admin      21  1  4 23:45 gem@ -> /opt/local/bin/gem1.9
lrwxr-xr-x  1 root  admin      21  1  4 23:45 irb@ -> /opt/local/bin/irb1.9
lrwxr-xr-x  1 root  admin      22  1  4 23:45 rake@ -> /opt/local/bin/rake1.9
lrwxr-xr-x  1 root  admin      22  1  4 23:45 rdoc@ -> /opt/local/bin/rdoc1.9
lrwxr-xr-x  1 root  admin      20  1  4 23:45 ri@ -> /opt/local/bin/ri1.9
lrwxr-xr-x  1 root  admin      22  1  4 23:45 ruby@ -> /opt/local/bin/ruby1.9
lrwxr-xr-x  1 root  admin      24  1  4 23:45 testrb@ -> /opt/local/bin/testrb1.9


この仕組みを利用するとruby20, ruby186といった複数バージョンのrubyのパッケージを全てインストールしておき、サフィックスなしのコマンドで起動するバージョンを選択できるようになります。

$ port select --list ruby
Available versions for ruby:
 none
 ruby19 (active)
 ruby20

で選択可能なバージョン一覧を表示できます。

$ port select --show ruby
The currently selected version for 'ruby' is 'ruby19'.

で、現在選択されているバージョンが表示されます。

ruby19からruby20への切り替えの様子。すばらしい!

$ ruby --version
ruby 1.9.3p448 (2013-06-27 revision 41675) [x86_64-darwin12]
$ port select --set ruby ruby20
Selecting 'ruby20' for 'ruby' succeeded. 'ruby20' is now active.
$ port select --show ruby 
The currently selected version for 'ruby' is 'ruby20'.
$ ruby --version
ruby 2.0.0p353 (2013-11-22 revision 43784) [x86_64-darwin12]


0 件のコメント:

コメントを投稿