最近在Arch
Linux上进行的OpenSSL更新破坏了
Ruby,因为后者依赖于前者支持的SSLv3.使用OpenSSL的Ruby代码将在终止时出现问题,如下所示:
openssl.so: undefined symbol: SSLv3_method - .../openssl.so (LoadError)
我使用RVM的多个版本的Ruby,这个问题适用于所有版本.
我遇到问题的OpenSSL版本是1.0.2h,但我相信它是用1.0.2g引入的.版本1.0.2f工作正常.
如何克服兼容性问题(没有降级OpenSSL)?
解决方法
问题是由于在没有SSLv3支持的情况下构建的ArchLinux OpenSSL软件包,从
this commit开始.我相信在其他发行版(如Ubuntu)中也做了类似的事情.
RVM环境中的解决方案是重新安装将重建它们的Rubies(您可能还希望更新到最新的rvm):
$rvm get head # optional,if you want to! $rvm reinstall all # or a specifc ruby version instead of 'all'
但是,旧的rubies仍会因为编译错误而失败:
Error running '__rvm_make -j1' ossl_ssl.c:143:27: error: ‘SSLv3_client_method’ undeclared here (not in a function)
这已经是discussed与RVM团队一起建议安装this Ruby patch,允许更旧的ruby构建:
$curl https://github.com/ruby/ruby/commit/801e1fe46d83c856844ba18ae4751478c59af0d1.diff > openssl.patch $rvm install --patch ./openssl.patch 1.9.3-p194
我用这个补丁成功构建了ruby-1.9.3-p194,ruby-2.0.0-p247和ruby-2.2.1.