ruby2.0を自力でビルド(コンパイル)してみた(Windows環境)

動機は、Ruby を 1.9.3 p327 から 2.0.0 dev に上げたら Rails の起動時間が2.5倍速、rake spec の速度が1.8倍速になったというツイートとブログ記事を見て、ruby2.0を入れたい!と思ったから。

 

railsをwindowsで開発してると、起動やテストに1分近くかかることがザラで、これ以上耐えられない!

かといって、Microsoft Officeは使いたい。だからWindows環境はやめられない。

 

そんな時、こんなツイートが。

Windows で使う Ruby を自分でビルドする方法

 

ビルドか・・

また大変な目に遭うんだろうと思いつつ、railsの遅さに耐えられないのでちょっとだけと言い聞かせて、ビルドにチャレンジ。

準備

ビルドの前の下準備が必要らしい。

 

gnuwin32のBisonをインストール

Bison for WindowsからComplete package, except sourcesをダウンロード。

保存されたbison-2.4.1-setup.exeを実行しインストールする。

gnuwin32のsedをインストール

sed for WindowsからComplete package, except sourcesをダウンロード。

保存されたsed-4.2.1-setup.exeを実行しインストールする。

rubyのソースを入手

メインはSVNリポジトリ?らしいが、GitHubからも取得できる。

K:\home\tmp14>git clone git://github.com/ruby/ruby.git
Cloning into ‘ruby’…
remote: Counting objects: 237628, done.
remote: Compressing objects: 100% (47432/47432), done.
remote: Total 237628 (delta 188926), reused 235305 (delta 18835R8)eceiving objec
Receiving objects: 100% (237628/237628), 74.10 MiB | 880 KiB/s, done.

Resolving deltas: 100% (188926/188926), done.
Checking out files: 100% (3777/3777), done.

 

ビルド用フォルダ「build-for-hiroko」を作成する。

hirokoさんという方は知らないが、Windows で使う Ruby を自分でビルドする方法で登場されているため、そのまま使わせて頂く。

K:\home\tmp14\ruby>mkdir build-for-hiroko

K:\home\tmp14\ruby>cd build-for-hiroko

 

ここからは、Visual Studio コマンドプロンプトを立ち上げて作業を行う。

[スタート]→[すべてのプログラム]→[Microsoft Visual Studio 2010]→
 [Visual Studio Tools]→[Visual Studio コマンドプロンプト(2010)]

「Visual Studio コマンド プロンプト (2010)」というタイトルのコマンドプロンプトが立ち上がる。configureやnmakeはここで実行しないとdll参照に失敗して、次のようなメッセージが表示される。

cl.exe – コンポーネントが見つかりません

mspdb100.dllが見つからなかったため、このアプリケーションを開始できませんでした。アプリケーションをインストールし直すとこの問題は解決される場合があります。

Visual Studioを修復インストールし直したり、バーチャルマシンにクリーンなOSインストールしてそこにVisual Studioをインストールしてみたりと、色々と悩んだ・・

ここが参考になった。ありがとうございます。)

 

話を戻して、build-for-hirokoフォルダでconfigureする。

–with-ntverの値は、Windows で使う Ruby を自分でビルドする方法を参考にして、対象のOSに合わせる。

(本当にこれって必要?)

K:\home\tmp14\ruby\build-for-hiroko>..\win32\configure.bat –prefix=c:\opt\ruby –target=i686-mswin32 –with-ntver=0x600
Creating Makefile.new
PROCESSOR_LEVEL =
type nmake' to make ruby.

どうやら、うまくいった?

 

K:\home\tmp14\ruby\build-for-hiroko>nmake main
(省略)

エラーも発生せずに、うまくいった!

(openssl等のオプション部分は全くソースを入手していないため、全てスキップされた。)

 

テスト

K:\home\tmp14\ruby\build-for-hiroko>nmake test
(省略)
test succeeded
PASS all 959 tests

これも問題無くパス。

 

続いて、インストール。

K:\home\tmp14\ruby\build-for-hiroko>nmake install-nodoc
.\miniruby.exe -I../lib -I. ../tool/rbinstall.rb --make="nmake" --dest
-dir="" --extout=".ext" --mflags="-l" --make-flags=" " --da
ta-mode=0644 --prog-mode=0755 --installed-list .installed.list --mantype=""
installing binary commands: c:/opt/ruby/bin
installing base libraries: c:/opt/ruby/lib
installing arch files: c:/opt/ruby/lib/ruby/2.0.0/i386-mswin32_100
installing command scripts: c:/opt/ruby/bin
installing library scripts: c:/opt/ruby/lib/ruby/2.0.0
K:/home/tmp14/ruby/lib/fileutils.rb:927:in
utime’: Permission denied – c:/opt/r
uby/lib/ruby/2.0.0/rss/maker/feed.rb (Errno::EACCES)
from K:/home/tmp14/ruby/lib/fileutils.rb:927:in block in install'
from K:/home/tmp14/ruby/lib/fileutils.rb:1604:in
block in fu_each_src_d
est’
from K:/home/tmp14/ruby/lib/fileutils.rb:1619:in fu_each_src_dest0'
from K:/home/tmp14/ruby/lib/fileutils.rb:1602:in
fu_each_src_dest’
from K:/home/tmp14/ruby/lib/fileutils.rb:923:in install'
from ../tool/rbinstall.rb:157:in
install’
from ../tool/rbinstall.rb:250:in block in install_recursive'
from ../tool/rbinstall.rb:242:in
each’
from ../tool/rbinstall.rb:242:in install_recursive'
from ../tool/rbinstall.rb:503:in
block in <main>’
from ../tool/rbinstall.rb:674:in call'
from ../tool/rbinstall.rb:674:in
block (2 levels) in <main>’
from ../tool/rbinstall.rb:671:in each'
from ../tool/rbinstall.rb:671:in
block in <main>’
from ../tool/rbinstall.rb:667:in each'
from ../tool/rbinstall.rb:667:in
<main>’
NMAKE : fatal error U1077: ‘.\miniruby.exe’ : リターン コード ‘0x1’
Stop.

何らかのアクセス権が無いようだ。

 

エラー出力されているrbinstall.rbを変更してみた。

 

再度実行

K:\home\tmp14\ruby\build-for-hiroko>nmake install-nodoc
(省略。エラーなし。)

成功した。
(といっても、一部機能を削ぎ落した状態だけど)

 

動かしてみる。

K:\home\tmp14\ruby\build-for-hiroko>pushd C:\opt\ruby\bin

C:\opt\ruby\bin>ruby -v
ruby 2.0.0dev (2012-11-23 trunk 37818) [i386-mswin32_100]

C:\opt\ruby\bin>irb
irb(main):001:0> def sample_method(name: “nagahoge”)
irb(main):002:1> puts name
irb(main):003:1> end
=> nil
irb(main):004:0> sample_method
nagahoge
=> nil
irb(main):006:0> sample_method(name: “boke”)
boke
=> nil
irb(main):001:0> require ‘psych’
LoadError: cannot load such file — psych
from C:/opt/ruby/lib/ruby/2.0.0/rubygems/custom_require.rb:36:in require'
from C:/opt/ruby/lib/ruby/2.0.0/rubygems/custom_require.rb:36:in
require’
from (irb):1
from C:/opt/ruby/bin/irb.bat:19:in `<main>’

バージョンも2.0.0devと表示されるし、2.0から搭載される、Refinementsの仕様もちゃんと使えるが、’psych’というライブラリが見つからないと言われて、gemコマンド等の使用に支障は残っている。

 

やはりちゃんとオプションライブラリもコンパイルして、rbinstall.rbを小手先で修正していない状態でビルドしないとダメなようだ。。

動作させるためにはLibYAMLをビルドしてインストールする必要があるみたいだが・・・

 

ここで力尽きた

 

でも、あと一息なんだよなぁ・・

引き続き挑戦してみようかな。

コメントを残す

トラックバック: http://pgnote.net/wp-trackback.php?p=896