rbenv install 1.9.2-p180
すると、rubyのビルド時にエラーが出てしまった。
ossl_ssl.c:110:1: error: ‘SSLv2_method’ undeclared here (not in a function)
ossl_ssl.c:111:1: error: ‘SSLv2_server_method’ undeclared here (not in a function)
ossl_ssl.c:112:1: error: ‘SSLv2_client_method’ undeclared here (not in a function)
どうせaptitude install openssl
するんだろ、と思いきや、実は脆弱性のあるSSLv2は最近opensslライブラリから消されてしまっているらしい。
http://ja.wikipedia.org/wiki/Transport_Layer_Security#SSL_2.0
つまり文字通り、undeclaredというエラーでした。
どうせ脆弱性があるならそんなものはいらん、というわけでソースにパッチを当ててしまう。
--- ruby-1.9.2-p180/ext/openssl/ossl_ssl.c 2010-12-23 22:24:00.000000000 -0500
+++ ruby-1.9.2-p180/ext/openssl/ossl_ssl_fixed.c 2011-10-28 11:39:30.265970001 -0400
@@ -107,9 +107,9 @@
OSSL_SSL_METHOD_ENTRY(TLSv1),
OSSL_SSL_METHOD_ENTRY(TLSv1_server),
OSSL_SSL_METHOD_ENTRY(TLSv1_client),
- OSSL_SSL_METHOD_ENTRY(SSLv2),
- OSSL_SSL_METHOD_ENTRY(SSLv2_server),
- OSSL_SSL_METHOD_ENTRY(SSLv2_client),
+ // OSSL_SSL_METHOD_ENTRY(SSLv2),
+ // OSSL_SSL_METHOD_ENTRY(SSLv2_server),
+ // OSSL_SSL_METHOD_ENTRY(SSLv2_client),
OSSL_SSL_METHOD_ENTRY(SSLv3),
OSSL_SSL_METHOD_ENTRY(SSLv3_server),
OSSL_SSL_METHOD_ENTRY(SSLv3_client),
をopenssl.patchなどで保存し、
rbenv install --patch 1.9.2-p180 < ./openssl.patch
とする。
途中、ruby-1.9.2-p180/ext/openssl/ossl_ssl.cの場所を聞かれるが、ruby-buildはダウンロードしたソースファイルを/tmp/ruby-build.(DateTime).(pid)下に置くので、/tmp/ruby-build.hogehoge.brabra/ruby-1.9.2-p180/ext/openssl/ossl_ssl.cとか答えると、パッチが自動的に当たり、ビルドが通る。