2016-03-29 86 views
4

我想在我的Synology DS215j它具有的ARMv7处理器安装Ruby 2.2.4或2.3.0。我用optware-ng来安装gcc,make,openssl,openssl-dev和zlib。我根据README中的说明安装了rbenv(版本1.0.0-19-g29b4da7)和ruby-build插件。大厦红宝石rbenv和红宝石构建失败,错误的符号:SSLv2_method

这些是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.4rbenv install 2.3.0安装的软件包及其版本“未定义的符号:SSLv2_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 

这似乎与rubygems中的某些事情有关。

有趣的是,为什么我尝试建立红宝石我是,当我尝试安装宝石使用Synology 6提供的红宝石版本返回一个类似的错误原因:

[email protected]:~/.rbenv/plugins$ /usr/bin/gem install rails 
ERROR: Loading command: install (LoadError) 
     /usr/lib/ruby/2.3.0/armle-linux-gnu/openssl.so: undefined symbol: SSLv2_method - /usr/lib/ruby/2.3.0/armle-linux-gnu/openssl.so 
ERROR: While executing gem ... (NoMethodError) 
    undefined method `invoke_with_build_args' for nil:NilClass 

什么会导致这些问题,以及如何我能解决他们吗?

+0

你有没有尝试过其他帖子上的任何建议,比如[This One](http://stackoverflow.com/questions/12759518/undefined-symbol-sslv2-method-when-running-bundle-install)或[这一个](http://stackoverflow.com/questions/9732591/rails-loaderror-with-openssl-so-undefined-symbol-d2i-ecpkparameters)似乎他们都建议在安装时明确设置open-ssl-dir与'rvm'像[SO](http://stackoverflow.com/questions/12759767/rails-bundle-install-returns-undefined-symbol-sslv2-method) – engineersmnky

+0

我没有使用RVM和你突出显示的解决方案似乎以利用由RVM交付的一些openssl库。不幸的是,如果我尝试安装它(由于缺少getent和其他错误),RVM会失败。我现在试着运行'RUBY_CONFIGURE_OPTS = - with-openssl-dir =/opt/local rbenv install 2.2.4',并且看看这个改变了什么。 –

+0

使用'RUBY_CONFIGURE_OPTS = - with-openssl-dir =/opt/local'没有帮助。我希望问题在别的地方。 –

回答

5

工作对我来说,当我运行rbenv安装2.2 rbenv命令或.4化学rbenv安装在两种情况下,构建失败,出现错误消息"undefined symbol: SSLv2_method" 2.3.0 ...

什么能CAUS Ë这些问题......

的齿轮的SSLv2完全从OpenSSL的三月份,由于CVE-2016-0800DROWN Attack)去除。

我认为完全去除有点刺耳,因为你正在经历的效果。应该有一个警告和过渡期。它应该发生在10年前左右。

而是由于淹没彻底清除,我觉得SSLv2_methodSSLv2_client_methodSSLv2_server_method应该已经建立像ERR_R_REMOVED_INSECURE一个适当的错误代码返回NULL。 <openssl/opensslconf.h>也应该有无条件设置OPENSSL_NO_SSL2也。

OpenSSL的实现他们打破ABI相容性和与Commit 133138569f37d149添加的符号回1.0.2。登记处再次提供了符号SSLv2_methodSSLv2_client_methodSSLv2_server_method,但它们在不设置错误代码的情况下返回NULL。他们也没有定义OPENSSL_NO_SSL2。另见[openssl.org #4398] BUG/1.0.2g breaks CURL extension

SSLv2已经15年或20年不安全了。像Ruby这样的软件包不应该引用这些符号。您应该针对Ruby提交安全错误报告以引用该符号。


...我怎么能解决呢?

要解决这个问题,我相信你需要:(1)等待的OpenSSL 1.0.2h,(2),手动补丁的OpenSSL 1.0.2g,或(3)消除对SSLv2_methodSSLv2_client_method所有红宝石引用和SSLv2_server_method

这里有您需要的(2),手动补丁的OpenSSL 1.0.2g补丁:

diff --git a/ssl/s2_meth.c b/ssl/s2_meth.c 
index b312f17..d46e2f5 100644 
--- a/ssl/s2_meth.c 
+++ b/ssl/s2_meth.c 
@@ -74,8 +74,8 @@ IMPLEMENT_ssl2_meth_func(SSLv2_method, 
          ssl2_accept, ssl2_connect, ssl2_get_method) 
#else       /* !OPENSSL_NO_SSL2 */ 

-# if PEDANTIC 
-static void *dummy = &dummy; 
-# endif 
+SSL_METHOD *SSLv2_method(void) { return NULL; } 
+SSL_METHOD *SSLv2_client_method(void) { return NULL; } 
+SSL_METHOD *SSLv2_server_method(void) { return NULL; } 

#endif 

您还应该配置和至少no-ssl2 no-ssl3 no-comp标志编译OpenSSL的,因为它们是已知的安全问题。配置选项在<openssl/opensslconf.h>中定义了OPENSSL_NO_SSL2,OPENSSL_NO_SSL3OPENSSL_NO_COMP

+0

感谢您的非常详细的答案!因为它现在工作,我会离开它。我将再次使用openssl 1.0.2h重试,并希望它很快发布。 –

2

经过多次尝试和大量搜索,我发现这个ruby-build issue,并重新阅读ruby-build wiki中的指示,这些指导建议其他平台安装autoconf。我用ipkg安装了automaker,autoconf和gdbm(我在ruby-build日志中发现了一些警告),这并没有直接帮助。只有在我的前缀rbenv与RUBY_CONFIGURE_OPTS=--with-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 

这是到底

RUBY_CONFIGURE_OPTS=--with-openssl-dir=/opt rbenv install 2.3.0 -v 
+0

甜,为我工作。 – Derek