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
を外から指定する方法があるかもしれない。