Ruby 2.2.0をrbenvとruby-buildでインストール

More than 3 years have passed since last update.


クリスマスにRuby 2.2.0リリース

はい、メリクリメリクリ。

Ruby2.1から恒例のクリスマス行事になったRubyの新バージョンリリース、今年も無事に2.2.0がリリースされましたね。

ということで、ここではおなじみのrbenvとruby-buildを使ってインストールしてみます。


rbenvとruby-buildのインストール

Qiitaにも他にたくさんのエントリーがアップされてるので省略。

まだ入れていない方は、各自の環境にあったエントリーを見つけてインストールしてください。


ruby-buildをアップデート

すでに入れている人はruby-buildのアップデートをしましょう。ruby-buildのディレクトリで

% git pull origin master

と叩いて更新。

% rbenv rehash

してから

% rbenv install -l

でインストール可能バージョンに2.2.0が含まれていることを確認します。


rbenvでruby-2.2.0をインストール

あとは

$ rbenv install 2.2.0

とやればOK。


Ubuntu14.04およびUbuntu14.10の場合

・・・のはずだったのですが、自分の環境(Ubuntu14.04及びUbuntu14.10)では下記のようなエラーが出てビルドに失敗しました。

% rbenv install 2.2.0

Downloading ruby-2.2.0.tar.gz...
-> http://dqw8nmjcqpjn7.cloudfront.net/7671e394abfb5d262fbcd3b27a71bf78737c7e9347fa21c39e58b0bb9c4840fc
Installing ruby-2.2.0...

BUILD FAILED (Ubuntu 14.04 using ruby-build 20140524-150-gbe7d096)

Inspect or clean up the working tree at /tmp/ruby-build.20141226005210.7528
Results logged to /tmp/ruby-build.20141226005210.7528.log

Last 10 log lines:
make[1]: *** 未完了のジョブを待っています....
installing default date_core libraries
installing default nkf libraries
make[2]: ディレクトリ `/tmp/ruby-build.20141226005210.7528/ruby-2.2.0/ext/objspace' から出ます
linking shared-object nkf.so
make[2]: ディレクトリ `/tmp/ruby-build.20141226005210.7528/ruby-2.2.0/ext/nkf' から出ます
linking shared-object date_core.so
make[2]: ディレクトリ `/tmp/ruby-build.20141226005210.7528/ruby-2.2.0/ext/date' から出ます
make[1]: ディレクトリ `/tmp/ruby-build.20141226005210.7528/ruby-2.2.0' から出ます
make: *** [build-ext] エラー 2

logの中身を見てみます。

(前略)

linking shared-object objspace.so
/usr/bin/ld: ./libffi-3.2.1/.libs/libffi.a(raw_api.o): 再配置 R_X86_64_32S (`.rodata' に対する) は共有オブジェクト作成時には使用できません。-fPIC を付けて再コンパイルしてください。
./libffi-3.2.1/.libs/libffi.a: error adding symbols: 不正な値です
collect2: error: ld returned 1 exit status
make[2]: *** [../../.ext/x86_64-linux/fiddle.so] エラー 1
make[2]: ディレクトリ `/tmp/ruby-build.20141226005210.7528/ruby-2.2.0/ext/fiddle' から出ます
make[1]: *** [ext/fiddle/all] エラー 2
make[1]: *** 未完了のジョブを待っています....
installing default date_core libraries
installing default nkf libraries
make[2]: ディレクトリ `/tmp/ruby-build.20141226005210.7528/ruby-2.2.0/ext/objspace' から出ます
linking shared-object nkf.so
make[2]: ディレクトリ `/tmp/ruby-build.20141226005210.7528/ruby-2.2.0/ext/nkf' から出ます
linking shared-object date_core.so
make[2]: ディレクトリ `/tmp/ruby-build.20141226005210.7528/ruby-2.2.0/ext/date' から出ます
make[1]: ディレクトリ `/tmp/ruby-build.20141226005210.7528/ruby-2.2.0' から出ます
make: *** [build-ext] エラー 2

どうも libffi というのが怪しそう。

ということで以下のパッケージをインストールしてみました。

% sudo apt-get install libffi-dev

再度インストールを実行。

% rbenv install 2.2.0

今度は正常にインストールされました。

% rbenv versions

...
...
2.2.0

rubyのバージョンを2.2.0に切り替えます。

% rbenv global 2.2.0

% ruby -v
ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-linux]

これで最新のruby2.2.0が使えるようになりました。