Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用rbenv和ruby build构建ruby失败,原因是未定义符号:SSLv2\u方法_Ruby_Openssl_Rbenv - Fatal编程技术网

使用rbenv和ruby build构建ruby失败,原因是未定义符号:SSLv2\u方法

使用rbenv和ruby build构建ruby失败,原因是未定义符号:SSLv2\u方法,ruby,openssl,rbenv,Ruby,Openssl,Rbenv,我正在尝试在我的Synology DS215j上安装ruby 2.2.4或2.3.0,它有一个ARMv7处理器。我曾经安装gcc、make、openssl、openssldev和zlib。我根据中的说明安装了rbenv(版本1.0.0-19-g29b4da7)和ruby构建插件 这些是与optware ng一起安装的软件包及其版本 binutils - 2.25.1-1 gcc - 5.3.0-6 gconv-modules - 2.21-3 glibc-opt - 2.21-4 libc-de

我正在尝试在我的Synology DS215j上安装ruby 2.2.4或2.3.0,它有一个ARMv7处理器。我曾经安装gcc、make、openssl、openssldev和zlib。我根据中的说明安装了rbenv(版本1.0.0-19-g29b4da7)和ruby构建插件

这些是与optware ng一起安装的软件包及其版本

binutils - 2.25.1-1
gcc - 5.3.0-6
gconv-modules - 2.21-3
glibc-opt - 2.21-4
libc-dev - 2.21-1
libgmp - 6.0.0a-1
libmpc - 1.0.2-1
libmpfr - 3.1.3-1
libnsl - 2.21-3
libstdc++ - 6.0.21-6
make - 4.1-1
ncurses - 5.7-4
openssl - 1.0.2f-1
openssl-dev - 1.0.2f-1
readline - 6.1-2
ruby - 2.2.0-1
screen - 4.2.1-2
termcap - 1.3.1-3
zlib - 1.2.8-2
当我运行
rbenv install 2.2.4
rbenv install 2.3.0
时,在这两种情况下,生成都会失败,并显示错误消息“undefined symbol:SSLv2\u method”。这是2.2.4版本的错误:

installing bundle gems:       /var/services/homes/florian/.rbenv/versions/2.2.4/lib/ruby/gems/2.2.0 (build_info, cache, doc, extensions, gems, specifications)
/tmp/ruby-build.20160329115213.2672/ruby-2.2.4/lib/rubygems/core_ext/kernel_require.rb:54:in `require': /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/.ext/armv7l-linux-eabihf/openssl.so: undefined symbol: SSLv2_method - /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/.ext/armv7l-linux-eabihf/openssl.so (LoadError)
    from /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/lib/rubygems/core_ext/kernel_require.rb:54:in `require'
    from /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/.ext/common/openssl.rb:17:in `<top (required)>'
    from /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/lib/rubygems/core_ext/kernel_require.rb:54:in `require'
    from /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/lib/rubygems/core_ext/kernel_require.rb:54:in `require'
    from /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/lib/rubygems/security.rb:11:in `<top (required)>'
    from /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/lib/rubygems/core_ext/kernel_require.rb:54:in `require'
    from /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/lib/rubygems/core_ext/kernel_require.rb:54:in `require'
    from /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/lib/rubygems/package.rb:43:in `<top (required)>'
    from /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/lib/rubygems/core_ext/kernel_require.rb:54:in `require'
    from /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/lib/rubygems/core_ext/kernel_require.rb:54:in `require'
    from /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/lib/rubygems/dependency_installer.rb:3:in `<top (required)>'
    from /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/lib/rubygems/core_ext/kernel_require.rb:54:in `require'
    from /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/lib/rubygems/core_ext/kernel_require.rb:54:in `require'
    from /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/lib/rubygems.rb:556:in `install'
    from ./tool/rbinstall.rb:722:in `block (2 levels) in <main>'
    from ./tool/rbinstall.rb:721:in `each'
    from ./tool/rbinstall.rb:721:in `block in <main>'
    from ./tool/rbinstall.rb:757:in `call'
    from ./tool/rbinstall.rb:757:in `block in <main>'
    from ./tool/rbinstall.rb:754:in `each'
    from ./tool/rbinstall.rb:754:in `<main>'
uncommon.mk:246: recipe for target 'do-install-all' failed
make: *** [do-install-all] Error 1

是什么导致了这些问题?我如何解决这些问题?

经过多次尝试和大量搜索,我找到了这些问题,并重新阅读了中的说明,其中建议其他平台安装autoconf。我用ipkg安装了automaker、autoconf和gdbm(我在ruby构建日志中发现了一些警告),但这并没有直接帮助。只有在我在rbenv前面加上
RUBY\u CONFIGURE\u OPTS=--和openssl dir=/opt
之后,它才起作用

作为参考,这些是我随ipkg一起安装的软件包

autoconf - 2.69-1
automake - 1.15-3
binutils - 2.25.1-1
gcc - 5.3.0-6
gconv-modules - 2.21-3
gdbm - 1.8.3-4
glibc-opt - 2.21-4
libc-dev - 2.21-1
libgmp - 6.0.0a-1
libmpc - 1.0.2-1
libmpfr - 3.1.3-1
libnsl - 2.21-3
libstdc++ - 6.0.21-6
m4 - 1.4.17-1
make - 4.1-1
ncurses - 5.7-4
openssl - 1.0.2f-1
openssl-dev - 1.0.2f-1
readline - 6.1-2
ruby - 2.2.0-1
screen - 4.2.1-2
termcap - 1.3.1-3
zlib - 1.2.8-2
这是rbenv命令,它最终为我工作

RUBY_CONFIGURE_OPTS=--with-openssl-dir=/opt rbenv install 2.3.0 -v
当我在这两种情况下运行rbenv install 2.2.4或rbenv install 2.3.0时,生成都会失败,并显示错误消息
“undefined symbol:SSLv2_method”

是什么导致了这些问题

由于()的原因,三月份从OpenSSL中完全删除了SSLv2设备

我认为完全移除有点苛刻,因为像你正在经历的影响。应该有一个警告和过渡期。这应该发生在10年前左右

我认为
SSLv2_方法
SSLv2_客户端方法
SSLv2_服务器方法
应该设置一个适当的错误代码,比如
ERR_REMOVED\u unsecure
,并返回NULL<代码>还应无条件设置
OPENSSL\u NO\u SSL2

OpenSSL意识到他们破坏了ABI兼容性,并使用将符号添加回1.0.2。签入再次提供了符号
SSLv2\u方法
SSLv2\u客户端方法
SSLv2\u服务器方法
,但它们返回NULL而不设置错误代码。它们也不定义
OPENSSL\u NO\u SSL2
。另见

SSLv2已经不安全15或20年了。Ruby之类的包不应该引用这些符号。您应该针对Ruby提交一份安全缺陷报告,以引用该符号


。。。我该如何解决这些问题

要解决这个问题,我认为您需要(1)等待OpenSSL 1.0.2h,(2)手动修补OpenSSL 1.0.2g,或者(3)删除对
SSLv2\u方法
SSLv2\u客户端方法
SSLv2\u服务器方法
的所有Ruby引用

以下是您需要的修补程序(2),手动修补OpenSSL 1.0.2g:

diff--git a/ssl/s2_meth.c b/ssl/s2_meth.c
索引b312f17..d46e2f5 100644
---a/ssl/s2_方法c
+++b/ssl/s2_方法c
@@-74,8+74,8@@实现ssl2方法func(SSLv2方法,
ssl2_接受、ssl2_连接、ssl2_获取方法)
#否则/*!OPENSSL\u NO\u SSL2*/
-#如果迂腐
-静态无效*虚拟=&dummy;
-#恩迪夫
+SSL_方法*SSLv2_方法(void){returnnull;}
+SSL_方法*SSLv2_客户端_方法(void){return NULL;}
+SSL_方法*SSLv2_服务器_方法(void){returnnull;}
#恩迪夫

您还应该使用至少
no-ssl2 no-ssl3 no comp
标志配置和编译OpenSSL,因为它们是已知的安全问题。配置选项定义了
OPENSSL\u NO\u SSL2
OPENSSL\u NO\u SSL3
OPENSSL\u NO\u COMP
中的
您是否尝试过与您的帖子相匹配的其他帖子中的任何建议,他们都建议在安装
rvm
时显式设置OPENSSL dir,就像我没有使用rvm一样,您强调的解决方案似乎使用了一些OPENSSL由RVM交付的库。不幸的是,如果我尝试安装RVM,它就会失败(由于缺少getent和其他错误)。我现在尝试运行
RUBY\u CONFIGURE\u OPTS=--with openssl dir=/opt/local rbenv install 2.2.4
,看看这是否会改变什么。使用
RUBY\u CONFIGURE\u OPTS=--with openssl dir=/opt/local
没有帮助。我认为问题出在其他地方。这是尝试使用
https
的问题。一个简单的解决方法是将gem源代码更改为
http://rubygems.org
但这只是绕过了这个问题,并没有真正解决它。根据
brew取消openssl的链接
为meThanks工作以获得非常详细的答案!既然它现在起作用了,我就到此为止。我将再次使用openssl 1.0.2h重试,并希望它很快发布。
RUBY_CONFIGURE_OPTS=--with-openssl-dir=/opt rbenv install 2.3.0 -v