我正在我的语法DS215j上安装ruby2.2.4或2.3.0,它有一个ARMv7处理器。我用操作系统-ng安装了gcc、make、openssl、openssl和zlib.我按照自述文件中的说明安装了rbenv (版本1.0.0-19-g29b4da7)和红宝石构建插件。
这些是安装了optware的软件包及其版本。
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时,生成都会失败,错误消息是“未定义符号: 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这似乎与红宝石中的某些东西有关。
有趣的是,我尝试自己构建ruby的原因是,与Synology 6一起交付的ruby版本在我试图安装gems时返回了类似的错误:
florian@synology:~/.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是什么导致了这些问题,我如何解决这些问题?
发布于 2016-03-31 04:12:43
当我运行rbenvinstall2.2.4或rbenvinstall2.3.0时,在这两种情况下,构建都会失败,错误消息是
"undefined symbol: SSLv2_method". 是什么导致这些问题..。
由于SSLv2 ( OpenSSL,溺水攻击),该装置于3月份被完全从OpenSSL上移除。
我认为完全删除是有点苛刻,因为影响就像你正在经历的。应该有一个警告和过渡时期。它应该发生在大约10年前。
我认为SSLv2_method、SSLv2_client_method和SSLv2_server_method不应该因为溺水而完全删除,而应该设置一个适当的错误代码,比如ERR_R_REMOVED_INSECURE并返回NULL。<openssl/opensslconf.h>也应该无条件地设置OPENSSL_NO_SSL2。
OpenSSL意识到他们破坏了ABI的兼容性,并在提交133138569f37d149中将符号添加到1.0.2。签入再次提供了符号SSLv2_method、SSLv2_client_method和SSLv2_server_method,但它们返回NULL而不设置错误代码。他们也没有定义OPENSSL_NO_SSL2。也见[openssl.org #4398] BUG / 1.0.2g中断卷曲扩展。
SSLv2已经不安全了15年或20年。像Ruby这样的包不应该引用符号。您应该针对Ruby提交一个安全bug报告,以引用该符号。
..。我怎么解决这些问题呢?
要解决这个问题,我相信您需要(1)等待OpenSSL 1.0.2h,(2)手动修补OpenSSL 1.0.2g,或者(3)删除对SSLv2_method、SSLv2_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 您还应该至少使用OpenSSL标志配置和编译no-ssl2 no-ssl3 no-comp,因为它们是已知的安全问题。配置选项在OPENSSL_NO_SSL2、OPENSSL_NO_SSL3和OPENSSL_NO_COMP中定义<openssl/opensslconf.h>。
发布于 2016-03-30 17:17:48
经过多次尝试和大量搜索,我找到了这个ruby-构建问题,并重新阅读了ruby-构建wiki中的说明,这些说明建议其他平台安装autoconf。我用ipkg安装了汽车制造商、autoconf和gdbm (我在ruby构建日志中找到了一些警告),但是没有直接帮助。只是在我用RUBY_CONFIGURE_OPTS=--with-openssl-dir=/opt给rbenv加上前缀之后,它才起作用。
作为参考,这些是我已安装的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 -vhttps://stackoverflow.com/questions/36286437
复制相似问题