VERSION MISMATCH in OpenSSL test program
ちょっとハマったのでメモしておく。
状況
$ cpanm Crypt::OpenSSL::CA (中略) Configuring Crypt-OpenSSL-CA-0.23 Running Build.PL Checking OpenSSL version number... *** VERSION MISMATCH in OpenSSL test program! *** The version number extracted from OpenSSL's header files (0x90812fd) differs from the one returned by a call to OpenSSL's SSLeay() (0x90819fd).
となってしまい、Crypt::OpenSSL::CAがインストールできない問題。
環境
原因究明
「OpenSSLのheaderファイルとOpenSSL SSLeay()の結果が合致しないよ!」と言われてるので、それぞれ調べる。
OpenSSLのversion
ヘッダファイルは/usr/includeにあるので、ここを検索してOpenSSLのversionを確認する。 以下でおk。
# find /usr/include/ | xargs grep -i 'OPENSSL_VERSION_NUMBER' /usr/include//openssl/opensslv.h:#define OPENSSL_VERSION_NUMBER 0x0090812fL
OpenSSL SSLeay()
Net::SSLeay http://search.cpan.org/~mikem/Net-SSLeay-1.61/lib/Net/SSLeay.pod#Low_level_API:_Version_related_functions
$ perl -MNet::SSLeay -le 'printf("%x\n", Net::SSLeay::SSLeay())' 90819f $ perl -MNet::SSLeay -le 'print Net::SSLeay::SSLeay_version(0)' OpenSSL 0.9.8y 5 Feb 2013
確かにversionが異なっており、
The version number extracted from OpenSSL's header files (0x90812fd) => 0.9.8r differs from the one returned by a call to OpenSSL's SSLeay() (0x90819fd). => 0.9.8y
であることが確認できた。
暫定対応
production環境の構築ではなくライブラリをインストールして実験的に動かしたいだけなので、 workroundとして、#/usr/include//openssl/opensslv.hのversionをSSLeay()と一致させてごまかしてしまうことにする。
# diff opensslv.h opensslv.h.orig 28c28 < #define OPENSSL_VERSION_NUMBER 0x0090819fL --- > #define OPENSSL_VERSION_NUMBER 0x0090812fL
なぜこんな状況に陥ったのかは謎。。。