install ruby on mac

Feb 3, 2013  

Ruby 1.9.3-p374 を Mac にインストールしようとしたら一発でできなかったのでメモ。

  • OS: OSX 10.8.2 (moutain lion)
  • rvm: 1.18.5

3行でまとめると、

  • MacPorts をアンインストール
  • Homebrew に完全移行
  • rm -rf ~/.rvm/usr (不要な rvm pkg をアンインストール)

という事になる。

最新の Ruby のインストールは、Homebrew のライブラリが相性が良いのかなーという印象。正しいかどうかは分からない。

以後、長いけれども、作業メモ。

rvm install ruby したらこんなエラー。

koichi% rvm install ruby
Searching for binary rubies, this might take some time.
No binary rubies available for: osx/10.8/x86_64/ruby-1.9.3-p374.
Continuing with compilation. Please read 'rvm mount' to get more information on binary rubies.
Installing Ruby from source to: /Users/koichi/.rvm/rubies/ruby-1.9.3-p374, this may take a while depending on your cpu(s)...
ruby-1.9.3-p374 - #downloading ruby-1.9.3-p374, this may take a while depending on your connection...
ruby-1.9.3-p374 - #extracted to /Users/koichi/.rvm/src/ruby-1.9.3-p374 (already extracted)
ruby-1.9.3-p374 - #configuring
ruby-1.9.3-p374 - #compiling
Error running 'make', please read /Users/koichi/.rvm/log/ruby-1.9.3-p374/make.log
There has been an error while running make. Halting the installation.

エラー起こしてる make の log はこんな感じ。

compiling openssl_missing.c
In file included from openssl_missing.c:22:
openssl_missing.h:71: error: conflicting types for 'HMAC_CTX_copy'
/opt/local/include/openssl/hmac.h:102: error: previous declaration of 'HMAC_CTX_copy' was here
openssl_missing.h:95: error: conflicting types for 'EVP_CIPHER_CTX_copy'
/opt/local/include/openssl/evp.h:503: error: previous declaration of 'EVP_CIPHER_CTX_copy' was here
openssl_missing.c:27: error: conflicting types for 'HMAC_CTX_copy'
/opt/local/include/openssl/hmac.h:102: error: previous declaration of 'HMAC_CTX_copy' was here
openssl_missing.c:122: error: conflicting types for 'EVP_CIPHER_CTX_copy'
/opt/local/include/openssl/evp.h:503: error: previous declaration of 'EVP_CIPHER_CTX_copy' was here
make[2]: *** [openssl_missing.o] Error 1
make[1]: *** [ext/openssl/all] Error 2
make: *** [build-ext] Error 2

MacOSX v10.6.6でrvmを使ったruby1.9のインストールができない - todomasaの日記

↑を参考。openssl と readline を別に入れる必要があるみたい。ちなみに、今は rvm package install から rvm pkg install に名前が変わったので注意。

とりあえず、rvm の update をする。

koichi% rvm get stable
koichi% rvm --version

rvm 1.18.5 (stable) by Wayne E. Seguin <wayneeseguin@gmail.com>, Michal Papis <mpapis@gmail.com> [https://rvm.io/]

で、openssl と readline をインストールしてみる。 インストールには結構時間がかかる。

koichi% rvm pkg inatall openssl
Fetching openssl-1.0.1c.tar.gz to /Users/koichi/.rvm/archives
######################################################################## 100.0%
Extracting openssl to /Users/koichi/.rvm/src/openssl-1.0.1c
Configuring openssl in /Users/koichi/.rvm/src/openssl-1.0.1c.
Compiling openssl in /Users/koichi/.rvm/src/openssl-1.0.1c.
Installing openssl to /Users/koichi/.rvm/usr

Please note that it's required to reinstall all rubies:

    rvm reinstall all --force

Updating openssl certificates

ここでしばらく止まってて、処理が続いてると思ったけど、エンター押したら進んだ。

続いて readline。

koichi% rvm pkg install readline
Fetching readline-5.2.tar.gz to /Users/koichi/.rvm/archives
######################################################################## 100.0%
Extracting readline to /Users/koichi/.rvm/src/readline-5.2
Applying patch '/Users/koichi/.rvm/patches/readline-5.2/shobj-conf.patch'...
Configuring readline in /Users/koichi/.rvm/src/readline-5.2.
Compiling readline in /Users/koichi/.rvm/src/readline-5.2.
Installing readline to /Users/koichi/.rvm/usr

Please note that it's required to reinstall all rubies:

    rvm reinstall all --force

Fetching readline-6.2.tar.gz to /Users/koichi/.rvm/archives
######################################################################## 100.0%
Extracting readline to /Users/koichi/.rvm/src/readline-6.2
Applying patch '/Users/koichi/.rvm/patches/readline-6.2/patch-shobj-conf.diff'...
Configuring readline in /Users/koichi/.rvm/src/readline-6.2.
Compiling readline in /Users/koichi/.rvm/src/readline-6.2.
Installing readline to /Users/koichi/.rvm/usr

Please note that it's required to reinstall all rubies:

    rvm reinstall all --force

なんで 5.2 と 6.2 をインストールしてるんだろう。Ruby のバージョンによって要求するバージョンが違うのかな。

それでようやっと ruby のインストール。さっきインストールしたパッケージのディレクトリを指定する。

koichi% rvm install ruby --with-openssl-dir=$HOME/.rvm/usr --with-readline-dir=$HOME/.rvm/usr
Installing Ruby from source to: /Users/koichi/.rvm/rubies/ruby-1.9.3-p374, this may take a while depending on your cpu(s)...
ruby-1.9.3-p374 - #downloading ruby-1.9.3-p374, this may take a while depending on your connection...
ruby-1.9.3-p374 - #extracted to /Users/koichi/.rvm/src/ruby-1.9.3-p374 (already extracted)
ruby-1.9.3-p374 - #configuring
ruby-1.9.3-p374 - #compiling
Error running 'make', please read /Users/koichi/.rvm/log/ruby-1.9.3-p374/make.log
There has been an error while running make. Halting the installation.

が… ダメ!!!!

make のエラーもさっきと同じ。うーん、openssl のインストールが怪しい感じだったから、そこが原因かなぁ。

と思って ~/.rvm/log/ らへんを見るけど、特に分からない。とりあえず、install 方法に間違いがあるかも、と思って rvm help | less したら、 rvm insatll の項目に公式へのリンクがはってあったので行ってみた。

RVM: Ruby Version Manager - ‘./install’ - Installing RVM.

そしたらこんな事が書いてあるじゃないですかー。

Find the requirements (follow the instructions):

    $ rvm requirements

Install ruby:

    $ rvm install 1.9.3

で、さっそく rvm requirements からの、brew install しようとしたらエラー。

koichi% brew install autoconf automake apple-gcc42 libtool pkg-config openssl readline libyaml sqlite libxml2 libxslt libksba
Error: No available formula for apple-gcc42

こういう時は黙って brew update してみる。再度 brew insatll したら進んだ(なんかワーニングは出てたけど)。色々と必要なライブラリが足りてなかったみたい。。。

もう一度、ruby のインストール。

やっぱりダメ。さっきと同じ、openssl 周りでのエラー。何がだめなんだろう。とりあえず、関係無いと思うけど、 brew insatll した時に XCode のバージョンが古いって言ってたから AppStore からアップデートする。結構時間かかる。そしたら OS のバージョンアップも…OS再起動する。戻ってきたけど何も変わらない。諸行無常。極楽浄土。小春日和。今までと違ったアプローチをとった記事を発見。

OS X (Lion)へのrvmでのrubyインストール時にopenssl_missing.cでconflictingがでて失敗する問題の解消 | とりあえず残しとくかへのrvmでのrubyインストール時にopenssl_missing.cでconflictingがでて失敗する問題の解消 | とりあえず残しとくか”)

これを試してみる。 /opt/local/include/openssl/hmac.h の102行目と /opt/local/include/openssl/evp.h: の503行目をコメントアウト。

そして再度インストール。

できた。

** コンパイルできた!!!! **

koichi% rvm install ruby --with-openssl-dir=$HOME/.rvm/usr --with-readline-dir=$HOME/.rvm/usr
Installing Ruby from source to: /Users/koichi/.rvm/rubies/ruby-1.9.3-p374, this may take a while depending on your cpu(s)...
ruby-1.9.3-p374 - #downloading ruby-1.9.3-p374, this may take a while depending on your connection...
ruby-1.9.3-p374 - #extracted to /Users/koichi/.rvm/src/ruby-1.9.3-p374 (already extracted)
ruby-1.9.3-p374 - #configuring
ruby-1.9.3-p374 - #compiling
ruby-1.9.3-p374 - #installing 
Retrieving rubygems-1.8.25
######################################################################## 100.0%
Extracting rubygems-1.8.25 ...
Removing old Rubygems files...
Installing rubygems-1.8.25 for ruby-1.9.3-p374 ...
Installation of rubygems completed successfully.
Saving wrappers to '/Users/koichi/.rvm/bin'.
ruby-1.9.3-p374 - #adjusting #shebangs for (gem irb erb ri rdoc testrb rake).
ruby-1.9.3-p374 - #importing default gemsets, this may take time ...
Install of ruby-1.9.3-p374 - #complete 

でもこれでいいのか…な…まぁよしとしておこうか…そもそも、rvm のディレクトリ指定してるのになんで /opt/ 以下を見に行っているのか…うーん…

やっぱりきちんとインストールできてなかったみたい。 gem i bundler でエラー。

koichi% gem i bundler
ERROR:  While executing gem ... (ArgumentError)
    negative string size (or size too big)

これもエラー。

koichi% gem install rubygems-update
ruby(71425,0x7fff7de79180) malloc: *** mmap(size=1152921504606851072) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
ruby(71425,0x7fff7de79180) malloc: *** mmap(size=1152921504606851072) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
/Users/koichi/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/1.9.1/openssl/ssl-internal.rb:91:in `value': failed to allocate memory (NoMemoryError)
        from /Users/koichi/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/1.9.1/openssl/ssl-internal.rb:91:in `block in verify_certificate_identity'
        from /Users/koichi/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/1.9.1/openssl/ssl-internal.rb:89:in `each'
        from /Users/koichi/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/1.9.1/openssl/ssl-internal.rb:89:in `verify_certificate_identity'
        from /Users/koichi/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/1.9.1/openssl/ssl-internal.rb:120:in `post_connection_check'
        from /Users/koichi/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/1.9.1/net/http.rb:801:in `connect'
        from /Users/koichi/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/1.9.1/net/http.rb:755:in `do_start'
        from /Users/koichi/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/1.9.1/net/http.rb:750:in `start'
        from /Users/koichi/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/site_ruby/1.9.1/rubygems/remote_fetcher.rb:329:in `connection_for'
        from /Users/koichi/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/site_ruby/1.9.1/rubygems/remote_fetcher.rb:413:in `request'
        from /Users/koichi/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/site_ruby/1.9.1/rubygems/remote_fetcher.rb:205:in `fetch_http'
        from /Users/koichi/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/site_ruby/1.9.1/rubygems/remote_fetcher.rb:220:in `fetch_http'
        from /Users/koichi/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/site_ruby/1.9.1/rubygems/remote_fetcher.rb:238:in `fetch_path'
        from /Users/koichi/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/site_ruby/1.9.1/rubygems/spec_fetcher.rb:260:in `load_specs'
        from /Users/koichi/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/site_ruby/1.9.1/rubygems/spec_fetcher.rb:231:in `block in list'
        from /Users/koichi/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/site_ruby/1.9.1/rubygems/spec_fetcher.rb:227:in `each'
        from /Users/koichi/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/site_ruby/1.9.1/rubygems/spec_fetcher.rb:227:in `list'
        from /Users/koichi/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/site_ruby/1.9.1/rubygems/spec_fetcher.rb:150:in `find_matching_with_errors'
        from /Users/koichi/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/site_ruby/1.9.1/rubygems/spec_fetcher.rb:89:in `fetch_with_errors'
        from /Users/koichi/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/site_ruby/1.9.1/rubygems/dependency_installer.rb:110:in `find_gems_with_sources'
        from /Users/koichi/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/site_ruby/1.9.1/rubygems/dependency_installer.rb:228:in `find_spec_by_name_and_version'
        from /Users/koichi/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/site_ruby/1.9.1/rubygems/dependency_installer.rb:259:in `install'
        from /Users/koichi/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/site_ruby/1.9.1/rubygems/commands/install_command.rb:121:in `block in execute'
        from /Users/koichi/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/site_ruby/1.9.1/rubygems/commands/install_command.rb:115:in `each'
        from /Users/koichi/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/site_ruby/1.9.1/rubygems/commands/install_command.rb:115:in `execute'
        from /Users/koichi/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/site_ruby/1.9.1/rubygems/command.rb:278:in `invoke'
        from /Users/koichi/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/site_ruby/1.9.1/rubygems/command_manager.rb:147:in `process_args'
        from /Users/koichi/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/site_ruby/1.9.1/rubygems/command_manager.rb:117:in `run'
        from /Users/koichi/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/site_ruby/1.9.1/rubygems/gem_runner.rb:65:in `run'
        from /Users/koichi/.rvm/rubies/ruby-1.9.3-p374/bin/gem:25:in `<main>'

マジで積んだ気がする…

とりあえず、さっきまでのやつを消す

koichi% rvm --force uninstall ruby-1.9.3-p374
Removing /Users/koichi/.rvm/src/ruby-1.9.3-p374...
Removing /Users/koichi/.rvm/rubies/ruby-1.9.3-p374...

再度 rvm install インストールして先ほどと同じエラーが出る事を確認。そしてどうするかなー。とりあえず、MacPorts の openssl をアップデートしてみる…が、ダメ。どこかで、MacPorts で入れた openssl だとかじゃなくて、Homebrew で入れた openssl でインストールしろとか書いてあったので、MacPorts を前削除する方針で動く。以下を参考に。

macportsからhomebrewへ移行 - 一分一秒真剣勝負!

で、さらば MacPorts こんにちは Homebrew したら、再び rvm install 。だけど、今度は configure で落ちている模様。なんか C コンパイラーが無いとか。 ~/.zshrc には MacPorts の為に export していたパスがいくつかあったので削除してログアウト→ログイン、 rvm install する。と、また make で落ちる。いつもの箇所。けど今度は、.rvm 以下のファイルを見て落ちている模様。こうなると、おそらく pkg install したファイル群が良くないと思われるので、 rm -rf ~/.rvm/usr して pkg install したライブラリを消す。そして rvm install

今度こそコンパイルができた。 gem install bundler も動く模様。 ここまで長かった…


追記(2013/2/5)

今まで MacPorts のライブラリや RVM パッケージでインストールしていた Ruby 達は、新たにインストールしなおさないと動かなくなる。

rvm reinstall [target]

で再インストールする必要がある。

また、Ruby 1.8 系をインストールする際にエラーが出る事があるのだが、tk/tcl を先にインストールする必要がある(もしくはリンクしないオプションを指定する)。

rvm - Getting Ruby 1.8.7 installed on Mountain Lion (10.8) - Stack Overflow - Stack Overflow”)

just figured it out! Please reference this question on SO

rvm can no longer install 1.8.7-p352 on Mac OS X Mountain Lion

rvm reinstall 1.8.7 --without-tcl --without-tk`

Alternatively, try this installation order if you have Homebrew.

brew install tcl

brew install tk

rvm reinstall 1.8.7`

で、tk のインストールでエラー。Mountain Lion には、X11 のライブラリが無いらしく、brew にも登録がないらしいから、別途インストールする必要があるっぽい(エラーメッセージにも出てくる)。以下も参照。

X11 (XQuartz 2.7.2)をMac OS X 10.8 Mountain Lionにインストールする - memo.yomukaku.netをMac OS X 10.8 Mountain Lionにインストールする - memo.yomukaku.net”)

で、再度 brew install tk すると、インストールが完了。

で落ち着くと思ったら、なぜか ruby のインストールはうまくいかない。X11/Xlib.h が見つかってないっぽい。こんな記事を見つける。

ruby - Mountain Lion rvm install 1.8.7 x11 error - Stack Overflow

で、上記記事通りやってもうまくいかない。install.log をよくみてみると、

Valid [tclConfig.sh, tkConfig.sh] are found in [["/usr/local/lib", "/usr/local/lib"]]
Use [tclConfig.sh, tkConfig.sh] == ["/usr/local/lib/tclConfig.sh", "/usr/local/lib/tkConfig.sh"]
Use MacOS X Frameworks.
Use X11 libraries (or use TK_XINCLUDES/TK_XLIBSW information on tkConfig.sh).

とかって書いてあるので、 export TK_XINCLUDES='-I/opt/X11/include' として実行してみる。だが、ダメ。しょうがないから、 /usr/local/lib/tkConfig.sh を直接編集したる。以下のような感じ

``` sh /usr/local/lib/tkConfig.sh 45行目辺り

-I switch(es) to use to make all of the X11 include files accessible:

TK_XINCLUDES=”

TK_XINCLUDES=‘-I/opt/X11/include’ ```

そしたらうまくインストールできた。でももしかしたら、 TK_XINCLUDES を外から指定する方法があるかもしれない。