Feb 23rd, 2013

OSX で rbenv を使って ruby 1.9.3-p392 インストール

今日はRuby20周年パーティ開催ですね。おめでとうございます。 残念ながらruby 2.0的な話題ではなくてruby 1.9.3の食傷気味のタイトルですが、いろいろと 前回 から変わった点もあるのでまとめ的に。

install openssl and readline

まずはシステムに標準で入ってるOpenSSLは古いので最新のものを。 readlineは腐ってるのでこれも最新のモノを入れます。

$ brew install openssl readline

入れたあとに以下の作業をしておくと環境構築する際にデフォルトで使ってくれるようになるのでお薦めです。

$ brew link openssl
$ brew link readline

これらはアップデートの場合に失敗することがあり、その際には brew -f unlink openssl という作業が必要になる場合があります。

install rbenv with ruby-build and rbenv-default-gems

これは brew で行います。同時に ruby-buildrbenv-default-gems も入れます。

$ brew install rbenv ruby-build rbenv-default-gems

初めて入れたあとは忘れずに使ってるシェルの環境設定ファイルに以下の行を入れて下さい。(標準なら .profile 等 )

if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi

rbenv-default-gems

上でruby-buildと一緒に入れたrbenv-default-gemsはrbenvでrubyをインストールした際にフォルトで入れるgemを定義しておくことで、インストールする度に必要になる gem install .... を無くしてくれるものです。是非入れておきましょう。 設定は $HOME/.rbenv/default-gems を作成するだけです。

以下のような感じで記述します。

bundler
bourbon
compass
foreman
haml
html2haml
rails
redcarpet
pygments.rb
sass
tmuxinator
unicorn

ruby install

以下のコマンドで1.9.3-p392が表示されることを確認します。

$ rbenv install -l | grep 1.9.3
  1.9.3-dev
  1.9.3-p0
  1.9.3-p125
  1.9.3-p194
  1.9.3-p286
  1.9.3-p327
  1.9.3-p362
  1.9.3-p374
  1.9.3-p385
  1.9.3-p392
  1.9.3-preview1
  1.9.3-rc1

さてインストールですが、オプションに--enable-sharedを入れています。これは vim で利用するために 入れています。

$ CONFIGURE_OPTS="--enable-shared" rbenv install 1.9.3-p392
Downloading yaml-0.1.4.tar.gz...
-> http://dqw8nmjcqpjn7.cloudfront.net/36c852831d02cf90508c29852361d01b
Installing yaml-0.1.4...
Installed yaml-0.1.4 to /Users/d6rkaiz/.rbenv/versions/1.9.3-p392

Downloading ruby-1.9.3-p392.tar.gz...
-> http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p392.tar.gz
Installing ruby-1.9.3-p392...

BUILD FAILED

Inspect or clean up the working tree at /var/folders/t0/n008mdzj4nz0_cswflz6xwch0000gn/T/ruby-build.20130223143931.52037
Results logged to /var/folders/t0/n008mdzj4nz0_cswflz6xwch0000gn/T/ruby-build.20130223143931.52037.log

Last 10 log lines:
compiling safe.c
compiling signal.c
compiling sprintf.c
compiling st.c
st.c:520:35: error: implicit conversion loses integer precision: 'st_index_t' (aka 'unsigned long') to 'int' [-Werror,-Wshorten-64-to-32]
            i = table->num_entries++;
              ~ ~~~~~~~~~~~~~~~~~~^~
1 error generated.
make: *** [st.o] Error 1
make: *** Waiting for unfinished jobs....

このように何も設定せずに入れると p385 以降エラーが出るようになりましたが、CC=gcc とすることでこれを回避します。(別途インストール等は必要ありません) この gcc の実体は llvm-gcc-4.2 です。

CFLAGSで指定する方が安全とのことなので改めました。

$ CFLAGS=-Wno-error=shorten-64-to-32 CONFIGURE_OPTS="--enable-shared" rbenv install 1.9.3-p392
Downloading yaml-0.1.4.tar.gz...
-> http://dqw8nmjcqpjn7.cloudfront.net/36c852831d02cf90508c29852361d01b
Installing yaml-0.1.4...
Installed yaml-0.1.4 to /Users/d6rkaiz/.rbenv/versions/1.9.3-p392

Downloading ruby-1.9.3-p392.tar.gz...
-> http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p392.tar.gz
Installing ruby-1.9.3-p392...
Installed ruby-1.9.3-p392 to /Users/d6rkaiz/.rbenv/versions/1.9.3-p392

Fetching: bundler-1.2.4.gem (100%)
Successfully installed bundler-1.2.4
1 gem installed
Fetching: sass-3.2.6.gem (100%)
Fetching: thor-0.17.0.gem (100%)
Fetching: bourbon-3.1.1.gem (100%)
Successfully installed sass-3.2.6
Successfully installed thor-0.17.0
(以下略 ※)

※ インストール完了後にrbenv-default-gemsで定義したGemfileがインストールされています。

インストール後の確認

インストールの確認には 0.4.0以降に導入された rbenv shell を使うと一時的にバージョンを変更できるので便利に確認できます。

使い方は rbenv shell <version> とするだけで、解除は rbenv shell --unset とするだけです。

$ rbenv shell 1.9.3-p392
$ ruby -v
ruby 1.9.3p392 (2013-02-22 revision 39386) [x86_64-darwin12.2.1]
$ irb
irb(main):001:0> require 'OpenSSL'
=> true
irb(main):002:0> OpenSSL::OPENSSL_VERSION
=> "OpenSSL 1.0.1e 11 Feb 2013"
irb(main):003:0>
$ rbenv shell --unset
$ ruby -v
ruby 1.9.3p385 (2013-02-06 revision 39114) [x86_64-darwin12.2.1]

2013-02-23 20:13
誤字修正およびgccの項に別途インストール必要がない旨を追記。
2013-02-25 1:28
@nalsh さんに教えていただいてCFLAGSを使う方法へ変更。