Debian 9,rbenv和ruby 1.9.3:openssl不可用

时间:2018-08-23 13:28:23

标签: ruby openssl rbenv debian-stretch

我安装了rbenv并尝试按照https://github.com/rbenv/ruby-build/wiki的指示在Debian 9上安装ruby 1.9.3。

  

Debian上的OpenSSL绑定
  由于Debian(7.5及更高版本)中的OpenSSL不兼容,因此Ruby可能无法在不先对其进行修补的情况下进行编译:

curl -fsSL https://github.com/ruby/ruby/commit/1e7a929c1d44d7a368fbe379211183ac6c972920.patch | \
rbenv install --patch 1.9.3-p484

我得到的答复是

Installing ruby-1.9.3-p484...
patching file ChangeLog
Hunk #1 FAILED at 1.
1 out of 1 hunk FAILED -- saving rejects to file ChangeLog.rej
patching file ext/openssl/ossl_ssl.c
Hunk #1 succeeded at 1985 (offset -244 lines).

BUILD FAILED (Debian 9.4 using ruby-build 20160913)

好吧,Ruby正常工作或运行时,不需要ChangeChange中的更改。然后我发现了这个https://github.com/mathbruyen/computers/blob/master/computers/AspireOne.md

curl -fsSL https://github.com/ruby/ruby/commit/1e7a929c1d44d7a368fbe379211183ac6c972920.patch | filterdiff --strip=1 -i a/ext/openssl/ossl_ssl.c | rbenv install -p 1.9.3-p484

,从中我找到了一种仅将大块文件应用于OpenSSL相关文件的方法。 Filterdiff可以安装在Debian:apt install patchutils上。
安装Ruby 1.9.3-p484

的结果
BUILD FAILED (Debian 9.4 using ruby-build 20160913)

Inspect or clean up the working tree at /tmp/ruby-build.4890
Results logged to /tmp/ruby-build.4890.log

Last 10 log lines:
     ossl_ssl_def_const(OP_ALL);
     ^~~~~~~~~~~~~~~~~~
Makefile:269: recipe for target 'ossl_ssl.o' failed
make[2]: *** [ossl_ssl.o] Error 1
make[2]: Leaving directory '/tmp/ruby-build.4890/ruby-1.9.3-p484/ext/openssl'
exts.mk:126: recipe for target 'ext/openssl/all' failed
make[1]: *** [ext/openssl/all] Error 2
make[1]: Leaving directory '/tmp/ruby-build.4890/ruby-1.9.3-p484'
uncommon.mk:178: recipe for target 'build-ext' failed
make: *** [build-ext] Error 2

现在我注意到仍然存在一个与openssl相关的错误。所以我尝试了另一个libssl-dev-package:

sudo apt install libssl-dev

现在安装ruby 1.9.3-p484没有任何错误,太棒了!但是,即使现在安装没有错误,openssl仍无法在ruby中使用。

user@debian:~$ rbenv rehash
user@debian:~$ rbenv versions
  system
  1.9.3-p484
user@debian:~$ rbenv local 1.9.3-p484
user@debian:~$ irb
irb(main):001:0> require 'openssl'
LoadError: cannot load such file -- openssl
        from /home/user/.rbenv/versions/1.9.3-p484/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
        from /home/user/.rbenv/versions/1.9.3-p484/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
        from (irb):1
        from /home/user/.rbenv/versions/1.9.3-p484/bin/irb:12:in `<main>'
irb(main):002:0>

编辑: 对于Ruby 1.9.3-p484,它在日志中表示:

Failed to configure openssl. It will not be installed.

这就是为什么安装成功,但是openssl无法正常工作的原因。在日志中寻找“错误”一词,我还发现“错误:未声明SSLv3_method”,该错误已在单独的补丁程序中修复。

Wiki还说明了以下所有内容:

  

2.4之前的Ruby版本的openssl扩展与OpenSSL 1.1.x不兼容。目前,大多数OpenSSL 1.1.0附带的Linux发行版都有一个单独的OpenSSL 1.0.x软件包。

     

在Debian 9(拉伸)上,它是libssl1.0-dev(注意,安装它会删除libssl-dev)。

  

OpenSSL“未声明SSLv3_method”错误
  对于较旧的Ruby版本(如1.9.3),上述补丁将无法使用,请改用以下方法:

curl -fsSL https://gist.github.com/FiveYellowMice/c50490693d47577cfe7e6ac9fc3bf6cf.txt | \
 rbenv install --patch 1.9.3-p551

因此,在我的设置中,有效步骤是:
1. sudo apt install libssl1.0-dev
2. curl -fsSL https://gist.github.com/FiveYellowMice/c50490693d47577cfe7e6ac9fc3bf6cf.txt | rbenv install --patch 1.9.3-p551

现在可以正常使用了:

user@debian:~$ rbenv rehash
user@debian:~$ rbenv versions
  system
* 1.9.3-p484 (set by /home/user/.ruby-version)
  1.9.3-p551
user@debian:~$ rbenv local 1.9.3-p551
user@debian:~$ irb
irb(main):001:0> require 'openssl'
=> true
irb(main):002:0>

希望这会对某人有所帮助!

0 个答案:

没有答案