どこで、いつOpenSSL::OPENSSL_VERSION_NUMBER
設定されますか? インストールしたばかりの最新の OpenSSL に設定されないのはなぜですか?
最初のエラー:
$ gem install activesupport -v '3.2.13'
Error while executing gem ... (RuntimeError)
Unsupported digest algorithm (SHA512)
irb に直接アクセスすると、Ruby が「古い」openssl を使用していることがわかります。
$ irb
>> require 'openssl'
=> true
>> OpenSSL::Digest.new('sha512')
RuntimeError: Unsupported digest algorithm (sha512)
>> OpenSSL::OPENSSL_VERSION_NUMBER.to_s(16)
"9070cf"
これは、ビルドしたばかりの OpenSSL のローカル バージョン (少なくとも 0x908000 である必要があります) を Ruby が検出していないことを示しています。関連するコード:
# file: usr/lib/ruby/2.0.0/openssl/digest.rb
...
alg = %w(DSS DSS1 MD2 MD4 MD5 MDC2 RIPEMD160 SHA SHA1)
if OPENSSL_VERSION_NUMBER > 0x00908000
alg += %w(SHA224 SHA256 SHA384 SHA512)
end
SHA512 が見つからない理由を説明します。
しかし、Ruby が古いバージョンの OpenSSL を使用している理由がわかりません。を使用して新しいソースから OpenSSL と Ruby を構築しました
SANDBOX=/Users/me/sandboxes/ruby2
PATH=$(SANDBOX)/usr/bin:$(PATH)
# Create a fresh OpenSSL from sources
(downloaded and unpacked http://www.openssl.org/source/openssl-1.0.1e.tar.gz)
$ ./config --prefix=$(SANDBOX)/usr --openssldir=$(SANDBOX)/usr/openssl
$ make ; make install ; make clean
# verify openssl
$ which openssl
/Users/me/sandboxes/ruby2/usr/bin/openssl
$ openssl version
OpenSSL 1.0.1e 11 Feb 2013
# Create a fresh Ruby from sources
(download and unpack http://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p0.tar.gz)
$ ./configure --prefix=$(SANDBOX)/usr --with-open-ssl-dir=$(SANDBOX)/usr/openssl
$ make ; make intalll ; make clean
# verify ruby
$ which ruby
/Users/me/sandboxes/ruby2/usr/bin/ruby
しかし、このルビーは、私がビルドしたばかりの openssl 1.0.1e を見つけられないようです。
--with-open-ssl-dir
Ruby に新しい OpenSSL を使用するように指示するには、 への引数が必要かつ十分であると理解していまし./configure
たが、それはうまくいかないようでした。
私が構築した新しい OpenSSL を Ruby に認識させる方法についてのアイデアはありますか?
ruby extconf.rb ; make ; make install
@Gaurish (以下) の提案に従って実行しようとしましたが、プロジェクトのルート ディレクトリではなく、システムにインストールされている OpenSSL が引き続き検出されます。