RVM/rbenv RVM 安装 Ruby 2.0.0 的 OpenSSL 问题

ranmocy · 2013年02月04日 · 最后由 jason3721 回复于 2014年10月10日 · 27923 次阅读

最近尝试安装 Ruby 2.0.0-rc1,结果被 OpenSSL 折腾的要死……

系统环境: 系统:MacOS 10.8.2 Mountain Lion 编译环境:Xcode CommandTools 4.6 xcode46cltools_10_86938131a.dmg

安装方式:

rvm get head
brew install openssl
rvm reinstall 2.0.0 --with-openssl-dir=`brew --prefix openssl`

后来又尝试用 RVM 的 pkg:

rvm pkg install openssl
rvm reinstall 2.0.0 --with-openssl-dir=$HOME/.rvm/usr

但是执行 bundle 都会返回 OpenSSL 错误:

https://gist.github.com/4704589

我 Google 了很久,但是看的 OpenSSL 报错都不是这个错误。

而且我现在 rvm use system 也坏掉了:

─(⚡refactory/test_for_git_server)─( ̄▽ ̄)~*>rvm use system
Now using system ruby.
─(⚡refactory/test_for_git_server)─( ̄▽ ̄)~*>which ruby
/Users/ranmocy/.rvm/rubies/ruby-2.0.0-rc1/bin/ruby

rbenv 的安装版本也有问题:

https://gist.github.com/4704619

但是我系统级的自己编译的 2.0.0-rc1 没有任何问题。

如果可以我还是希望能使用 RVM,脚本化切版本太方便了。

现在这个情况真是太绝望了……Any help?

Updated: 最新版本的 RVM 正常安装,看 #24 楼 。 其他暂时没有测试。

运行rvm requirements,按照提示把它要求的东西都给装上,然后就好使了

#1 楼 @ywjno 除了 apple-gcc42 我都装了。

之前用 1.9.3 的时候只装了编译工具都正常……

p.s. 忘了说我的环境: 系统:MacOS 10.8.2 Mountain Lion 编译环境:Xcode CommandTools xcode46cltools_10_86938131a.dmg

不知道 rvm 从哪个版本开始就需要用 apple-gcc42 这玩意编译才行不然压根安装不上 ruby

如果是 ssl 的问题,我昨天是这样解决的(参照 这个帖子

#to download the cert
wget http://curl.haxx.se/ca/cacert.pem
#to let curl use it for the next calls
export CURL_CA_BUNDLE=~/cacert.pem

或者

echo insecure > ~/.curlrc

#3 楼 @ywjno 应该不是根证书的问题,他的错误是:

SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed`

而我的是:

SSL_connect returned=1 errno=0 state=SSLv3 read server key exchange B: bad ecpoint (OpenSSL::SSL::SSLError)

没有提到 certificate 问题。

要不我再试试 gcc 吧……实在不想装两套编译环境……奇怪,为啥 rvm 就失败,手动就没问题?

#3 楼 @ywjno 啊,原来我的 gcc 已经装了……这个编译的时候需要手动指定么?

#3 楼 @ywjno 不用 apple-gcc42, export CC=clang 即可

#5 楼 @ranmocy 我昨天重装 rvm 的时候倒是没手动指定让 rvm 用哪个环境编译东西

#6 楼 @luikore 指定 clang 了,还是同样的问题…… #7 楼 @ywjno 你是什么版本 ruby 的?

#6 楼 @luikore 这不是按照 wiki 的按照教程来做的么,发现不对劲就按照rvm requirements的提示来做了 #8 楼 @ranmocy 我昨天装的是 1.9.3

#9 楼 @ywjno 我的 rvm requirements 只有:

# For ruby:
brew install autoconf automake apple-gcc42 libtool pkg-config openssl readline libyaml sqlite libxml2 libxslt libksba

我也都装了……

关键是那个错误太奇葩,Google 后只有一个不相关的结果……

@ranmocy 看了一下你的 gist, 错误信息是不支持 inline asm, 但是 rvm 是用 no-asm 去配置 openssl 的应该不会碰到,而且我修改 rvm 开启 asm 安装 openssl 也没出现问题...

如果换了编译器,把 ~/.rvm/src/ruby-2.0.0-rc1 删掉再 reinstall

#10 楼 @ranmocy 上面还有两个,一个是 brew 切换分支,一个是装 bash、curl、git

然后 curl 就重新装了一个版本,不知道用了新的 curl 之后能不能解决你的问题

@ranmocy 好吧那个 make 报 inline asm 错误归根原因是 openssl configure 就出错了,真正原因在 /Users/ranmocy/.rvm/log/ruby-2.0.0-rc1/openssl/configure.log 里

@ranmocy 从日志里看出 openssl configure 出错的直接原因应该就是你在命令行指定的 --with-openssl-dir 参数传递到了 openssl configure 那一步里... 难道是 reinstall 不支持 install 的参数...?

#11 楼 @luikore #12 楼 @ywjno

我把 openssl 强制覆盖系统的了,然后也不记得都折腾什么了,编译就出错了。 我报了 RVM 的 Issue, 然后有人提示我说是 Ruby 上游 Bug

哎,太折腾了这玩意……

你的 bundle 是啥版本?我 rvm 了 ruby 2.0.0-rc2 后,bundler 表示版本太低,不兼容 ruby 2.0

#16 楼 @steveLTN 作者说稳定版有些不兼容,你要用 gem install bundler --pre

不过我测试 dev 版可以正常使用。

this is what i did:

rvm pkg install openssl rvm reinstall 2.0.0 --with-openssl-dir=$rvm_path/usr

最简单快速的方案—— Gemfile 里把 source 改为 'http://rubygems.org'

#19 楼 @fredwu isn't this default?

edit: I see the problem here. Thanks.

这样就不用 https 协议,也就不需要 openssl 了吧

#18 楼 @rickypaipie 还是 rc1 的时候我测试不可以。

#19 楼 @fredwu #20 楼 @blacktulip #21 楼 @ywjno 那段时间貌似 rubygems 会自动重定向到 https。

在 RVM 下安装成功了 rc2 版本,用 homebrew 的 openssl

现在在升级 RVM 到 p0 版本,貌似 RVM 的作者已经加入 openssl 的检测修复到安装脚本中了。

@ranmocy 已经解决了吗?

#23 楼 @s6520643 RVM 默认安装方式 rvm install 2.0.0 就可以正常安装 2.0.0 p0 了。 不过 bundler 的 ca 证书问题还是要手工解决

curl http://curl.haxx.se/ca/cacert.pem -o /usr/local/etc/openssl/cert.pem

@ranmocy openssl 是用 rvm 装的,还是 brew?rvm install 2.0.0 的时候,用--with-openssl-dir 参数了吗?我的 2.0.0 rvm install 2.0.0 可以装上,没问题 git clone https://github.com/rails/rails.git cd rails bundle 装 rails4.0 时报错

按照这里的方法我安装成了,在 mac os x ML 上:

https://coderwall.com/p/tptocq

@pzgz 你是 ruby2.0.0 装成功了,还是 rails4.0 装成功了呢?

已解决:因为手欠多加了在 rvmrc 里把 rvm_configure_flags 打开了,多了几个无效参数,注释掉即可

export rvm_configure_flags="--with-openssl-dir=$rvm_path/usr --with-readline-dir=$rvm_path/usr"

我也掉坑里了,暂时无解,有人遇到过么? 错误信息: .rvm/log/openssl/configure.log

 ./Configure
Usage: Configure [no-<cipher> ...] [enable-<cipher> ...] [experimental-<cipher> ...] [-Dxxx] [-lxxx] [-Lxxx] [-fxxx] [-Kxxx] [no-hw-xxx|no-hw] [[no-]threads] [[no-]shared] [[no-]zlib|zlib-dynamic] [no-asm] [no-dso] [no-krb5] [sctp] [386] [--prefix=DIR] [--openssldir=OPENSSLDIR] [--with-xxx[=vvv]] [--test-sanity] os/compiler[:flags]

.rvm/log/openssl/make.log

cc -I.. -I../.. -I../modes -I../asn1 -I../evp -I../../include  -O   -c -o set_key.o set_key.c
set_key.c:399:17: error: unsupported inline asm: input with type 'unsigned long' matching output with type 'unsigned int'
                *(k++)=ROTATE(t2,30)&0xffffffffL;
                       ~~~~~~~^~~~~~
./des_locl.h:170:19: note: expanded from macro 'ROTATE'
                                        : "I"(n),"0"(a) \
                                                     ^
set_key.c:402:17: error: unsupported inline asm: input with type 'unsigned long' matching output with type 'unsigned int'
                *(k++)=ROTATE(t2,26)&0xffffffffL;
                       ~~~~~~~^~~~~~
./des_locl.h:170:19: note: expanded from macro 'ROTATE'
                                        : "I"(n),"0"(a) \
                                                     ^
2 errors generated.
make[2]: *** [set_key.o] Error 1
make[1]: *** [subdirs] Error 1
make: *** [build_crypto] Error 1

macos 安装 ruby2 rails4 问题解决了 https://github.com/carlhuda/bundler/issues/2318 gem install bundler --pre 是安装 1.3.0.pre.8,删除这个版本安装 1.3.0.pre.7

#27 楼 @s6520643 我是 ruby2.0 成功

#25 楼 @s6520643 我 Homebrew 装了的,然后直接 rvm install 2.0.0,但是我看了下我的 ~/.rvm/usr/include 里有 openssl 文件夹。

#28 楼 @suupic 您这个状况是够坑爹的……怎么能在配置文件里放编译参数呢……

#31 楼 @ranmocy rvmrc 的 example 文件里的参数,之前看到顺手打开了

#29 楼 @s6520643 https://github.com/sstephenson/ruby-build/commit/527e3e35ca880eb9e693c54203ff7597b27a4d0b

搞到最后是,ruby-build 里边的一个 typo。ruby-build 官方已经 fix 这个问题。 简单的 fix 就是,不需要从新编译。 https://gist.github.com/benhoskings/5027023

rvm get head it's ok
brew install libyaml it's ok
rvm pkg install openssl [这里最好翻墙安装,会自动通过 brew 安装一个很重要的 openssl 包:openssl-1.0.1e]
但是最后仍然会出错,rvm 仍然会去下载 openssl-1.0.1c 来编译,但这个包在我的 Mac Lion-x86_64 下面死活会出错,每次都是最后这一步无法编译通过。因此解决办法是,如果通过运行 rvm requirements 发现必要的安装包都已经安装完成后,跳过这一步,直接安装 ruby 2.0 , 同时指定 openssl 的路径为以 e 结尾的那个包:
rvm install 2.0.0 --with-openssl-dir=/usr/local/etc/openssl
[/usr/local/etc/openssl] 这个路径是我系统里面的路径,你可以直接用 rvm requirements 查看 openssl 的路径。
自此无错误安装 ruby 2.0.0 ,之后使用 gem install xxx 也不会出错。

貌似在 Mac 上,Ruby 2.0.0 需要的 openssl 版本与 Mac OS 自带的不匹配了。OpenSSL Errors and Rails – Certificate Verify Failed –

brew link openssl --force 这个很重要

#36 楼 @mobiwolf ,这个副作用非常大,brew install openssl 的时候提醒的很清楚。而且没有必要。 如果用 rbenv, 直接就 rbenv install 2.0.0-p0 就好了。rbenv 已经考虑到 openssl 的问题,它会自己安装一个 openssl。 rvm package install openssl, rvm install 2.0.0 --with-openssl-dir=‘openssl path’

@bwlinux 那么如何解决是最佳方式呢?

#38 楼 @mobiwolf 你说 openssl,还是 ruby2.0 安装? 33L 和 37L,都是答案。 对于 openssl,是 ruby2.0 需要需要比较新的 openssl 的 development file。rbenv 自己安装 ruby2 的时候,已经考虑了这个问题,它会自己附带安装最新的 openssl,就是 rbenv install 2.0.0-p0。当然你需要 rbenv 和 rbenv-build 都需要更新到最新。

#34 楼 @outman 亲测,你这个方法是简单又可行的。

#26 楼 @pzgz 这个方法的确可行,我也是按照本站的 wiki 安装失败之后,用这个方法安装成功的。

wiki 确实应该更新了

#26 楼 @pzgz 这个方法很好使,搞了一个多星期,终于解决了 --!

huacnlee 关闭了讨论。 08月24日 15:00
需要 登录 后方可回复, 如果你还没有账号请 注册新账号