Ubuntu rbenvで古いruby(1.9.0)を入れようとした際にmake[1]: *** [ossl_ns_spki.o] Error 1で引っかかったメモ。
Ubuntu 14.04.5 LTS
Ruby1.9.0のインストール失敗。
BUILD FAILED (Ubuntu 14.04 using ruby-build 20171226) Inspect or clean up the working tree at /tmp/ruby-build.20180113163504.1885 Results logged to /tmp/ruby-build.20180113163504.1885.log Last 10 log lines: ^ In file included from /usr/include/openssl/asn1_mac.h:62:0, from ossl.h:53, from ossl_ns_spki.c:11: /usr/include/openssl/x509.h:877:1: note: expected ‘const unsigned char **’ but argument is of type ‘unsigned char ** ’ DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKI) ^ make[1]: *** [ossl_ns_spki.o] Error 1 make[1]: Leaving directory `/tmp/ruby-build.20180113163504.1885/ruby-1.9.0-0/ext/openssl' make: *** [all] Error 1
結論から書くと、
# RUBY_CONFIGURE_OPTS="--without-openssl" rbenv install 1.9.0-0
でインストールできました。
初めはOpenSSLのバージョンのせいかな?と思い1.0.0や0.9.8を入れてみたのですが、どうもうまくいかない。
そんな中、↓のIssueを見つけて解決しました。
古いバージョンのrubyをインストールする際はOpenSSLを無効にする必要があるらしいです。(又は古いOpenSSLをインストールして指定)
でもこちらでも「0.9.8入れたけどエラー出てる」って書き込みがありますね。
一応、以上で解決しているのですが--without-openssl
オプションに辿り着くまでに行った作業は以下に載せておきます。
土日を使い果たした作業の報告を↑だけで終わらせるのはあまりにも寂しいので。
今のOpenSSLのバージョンは↓
$ openssl version OpenSSL 1.0.1f 6 Jan 2014
入れるためにディレクトリ移動。
$ sudo -s # cd /usr/local/src
usr/local以下にダウンロードする理由は↓の/usr/localの項目を参照。
(FHSという決まり事に則って、システム管理者がアプリケーションをインストールする際に/usr/localを指定するという話は最近知ったのですが、常識っぽいですね。)
バージョンごとのディレクトリにインストールしておく手があるという記事*1もあったので、0.9.8をインストールした時は/opt/openssl
を指定しました。
opensslのソースは下記から持ってきます。
とりあえず1.0.0をダウンロード。
https://www.openssl.org/source/old/
一度curl に-Oをつけ忘れて標準出力してしまいましたがダウンロードできました。
# curl -L -O https://www.openssl.org/source/old/1.0.0/openssl-1.0.0s.tar.gz % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 4005k 100 4005k 0 0 559k 0 0:00:07 0:00:07 --:--:-- 893k # ls openssl-1.0.0s.tar.gz
続けて解凍してmake installまで。
prefixオプションははusr/localを指定します。
# tar xf openssl-1.0.0s.tar.gz # cd openssl-1.0.0s # ./config --prefix=/usr/local # make # make install # /usr/local/bin/openssl version OpenSSL 1.0.0s 11 Jun 2015
↑のmake installで下記のようなエラーが出る場合、make install_swしてください。
installing man1/cms.1 cms.pod around line 457: Expected text after =item, not a number cms.pod around line 461: Expected text after =item, not a number cms.pod around line 465: Expected text after =item, not a number cms.pod around line 470: Expected text after =item, not a number cms.pod around line 474: Expected text after =item, not a number POD document had syntax errors at /usr/bin/pod2man line 71. make: *** [install_docs] Error 255
今インストールしたopensslを指定してRuby1.9をインストールします。
# CONFIGURE_OPTS="--with-openssl-dir=/usr/local" rbenv install 1.9.0-0 BUILD FAILED (Ubuntu 14.04 using ruby-build 20171226) Last 10 log lines: make[1]: Entering directory `/tmp/ruby-build.20180113180235.16329/ruby-1.9.0-0/ext/digest/md5' /usr/bin/gcc -I. -I../../../.ext/include/x86_64-linux -I../../.././include -I../../.././ext/digest/md5 -I../../.././ext/digest/md5/.. -DRUBY_EXTCONF_H=\"extconf.h\" -I/usr/local/include -I/home/vagrant/.rbenv/versions/1.9.0-0/include -fPIC -g -O2 -o md5init.o -c md5init.c /usr/bin/gcc -I. -I../../../.ext/include/x86_64-linux -I../../.././include -I../../.././ext/digest/md5 -I../../.././ext/digest/md5/.. -DRUBY_EXTCONF_H=\"extconf.h\" -I/usr/local/include -I/home/vagrant/.rbenv/versions/1.9.0-0/include -fPIC -g -O2 -o md5ossl.o -c md5ossl.c /usr/bin/gcc -shared -o ../../../.ext/x86_64-linux/digest/md5.so md5init.o md5ossl.o -L. -L../../.. -L/usr/local/lib -Wl,-R/usr/local/lib -L. -L/home/vagrant/.rbenv/versions/1.9.0-0/lib -rdynamic -Wl,-export-dynamic -lcrypto -lpthread -lrt -ldl -lcrypt -lm -lc /usr/bin/ld: /usr/local/lib/libcrypto.a(md5_dgst.o): relocation R_X86_64_PC32 against undefined symbol `memcpy@@GLIBC_2.14' can not be used when making a shared object; recompile with -fPIC /usr/bin/ld: final link failed: Bad value collect2: error: ld returned 1 exit status make[1]: *** [../../../.ext/x86_64-linux/digest/md5.so] Error 1 make[1]: Leaving directory `/tmp/ruby-build.20180113180235.16329/ruby-1.9.0-0/ext/digest/md5' make: *** [all] Error 1
ダメでした。(この後0.9.8インストール→失敗→--without-opensslオプションで成功)