scramble cadenza

技術ネタのガラクタ置き場

ruby-build で、好きな version の ruby を入れるお話

イントロ

毎度おなじみ ruby-build ですが、入れることができる ruby の version と rubygems の version は制限があります。
とはいえ普通に ruby を使う分には、提供されているもので何の問題も無いのですが。

rbenv を使って、ちょっとマニアックな ruby の version を試したい、という貴方の為に。

手順

1. source ファイルを作成する
touch ~/.rbenv/plugins/ruby-build/share/ruby-build/1.8.7-p248

何と言えばいいかわかりませんが(仮に source ファイルと呼ぶ)、ruby-build の download 元となるファイルを作成します。
「1.8.7-p248」 の部分は自分で自在に定義可能です。

2. source ファイルを書く

先ほど touch したファイルの中身を書いていきます。

require_gcc
install_package "ruby-1.8.7-p248" "http://cache.ruby-lang.org/pub/ruby/ruby-1.8.7-p248.tar.gz#60a65374689ac8b90be54ca9c61c48e" auto_tcltk standard
install_package "rubygems-1.6.2" "http://production.cf.rubygems.org/rubygems/rubygems-1.6.2.tgz#0c95a9869914ba1a45bf71d3b8048420" ruby

ファイルにどのような事を書けばよいかわからなければ、install したい version に一番近いファイルを見ながら、それっぽく書いていきましょう。

なんとなく自分が把握しているのは以下のとおり

  • 基本は install_package 関数に、ruby の version 名と、tar.gz ファイルの URL を書く
    • URL からソースを引っ張ってきて、展開して install してくれる
    • 肝心のURL は他の version のURLを参考にし、目当てのブツを見つけ出す
  • require_gcc はゴニョゴニョして、環境変数 CC に値をセットしてくれるもの
  • auto_tcltk は何も考えず付けておけば良い
    • OS を自動判別して、build に必要な環境変数を付与してくれる(もしくは付与しなかったり)
  • 1.9.3 以降は require_gcc は不要
    • 代わりに 1.9.3 からは libyaml が必要になっている
    • 1.9.3 以降の source ファイルを読む
  • "http://cache.ruby-lang.org/pub/ruby/ruby-1.8.7-p248.tar.gz#60a65374689ac8b90be54ca9c61c48e" の # 以降の値は ruby-1.8.7-p248.tar.gz の md5 checksum 値(必須)
    • md5 を予め算出しておく
    • 記事の一番下の参考を見てください
  • よくわからない記述があったら、~/.rbenv/plugins/ruby-build/bin/ruby-build で関数が定義されているので探して、読むべし。
3. install する

後は普通に install するだけ。意外とあっさりできました。
場合によっては、openssl や readline の path を環境変数で指定しないと install 出来ないかもしれません。

$ rbenv install 1.8.7-p248 

#=>
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Downloading ruby-1.8.7-p248.tar.gz...
-> http://cache.ruby-lang.org/pub/ruby/ruby-1.8.7-p248.tar.gz
Installing ruby-1.8.7-p248...
Installed ruby-1.8.7-p248 to /Users/horowitz/.rbenv/versions/1.8.7-p248

Downloading rubygems-1.6.2.tar.gz...
-> http://dqw8nmjcqpjn7.cloudfront.net/0c95a9869914ba1a45bf71d3b8048420
Installing rubygems-1.6.2...
Installed rubygems-1.6.2 to /Users/horowitz/.rbenv/versions/1.8.7-p248

$ ruby -v
ruby 1.8.7 (2009-12-24 patchlevel 248) [i686-darwin12.5.0]

参考