動かざることバグの如し

近づきたいよ 君の理想に

UbuntuでOpenSSLをソースからビルド

環境

Ubuntu 18.04

概要

色々あって最新のOpenSSLの環境を作る必要があり、そのためにソースからOpenSSLをビルドした手順のメモ

依存ライブラリのインストール

入ってないことないと思うけど

apt install build-essential

手順

まずはソースのダウンロードしないと始まらない

wget https://www.openssl.org/source/openssl-1.1.1h.tar.gz

最新版のURLは常に変わる。 https://www.openssl.org/source/ から一番新しいURLに読み直すこと

解凍

tar zxf openssl-1.1.1h.tar.gz
cd openssl-1.1.1h

ビルド設定

./config --prefix=/usr/local --openssldir=/usr/local/ssl shared
  • sharedはつけた方が良さげ
  • --prefixは任意だが デフォルトだと/usr/local/sslになってしまうので明示的に/usr/localにした
  • --openssldir はデフォルトも /usr/local/ssl ではある。binとかlib以外のファイルたちがここに入る。

いざビルド

make

チェック PASSが出なければなんらかエラーってこと

make test

成功時には以下のようなメッセージが最後に表示される。

All tests successful.
Files=158, Tests=2634, 87 wallclock secs ( 1.42 usr  0.28 sys + 73.47 cusr 11.21 csys = 86.38 CPU)
Result: PASS

インストール ファイルが多いのか結構時間かかる印象

make install

確認

どれどれ

# /usr/local/bin/openssl version -a
/usr/local/bin/openssl: relocation error: /usr/local/bin/openssl: symbol EVP_mdc2 version OPENSSL_1_1_0 not defined in file libcrypto.so.1.1 with link time reference

は????

どうやら上手くインストールできてない。ライブラリを読めてないっぽい

ライブラリ再読み込み

ldconfig

今度はうまくできた

# /usr/local/bin/openssl version -a
OpenSSL 1.1.1h  22 Sep 2020
built on: Sat Nov 14 16:59:41 2020 UTC
platform: linux-x86_64
options:  bn(64,64) rc4(16x,int) des(int) idea(int) blowfish(ptr)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAESNI_ASM -DVPAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPOLY1305_ASM -DNDEBUG
OPENSSLDIR: "/usr/local/ssl"
ENGINESDIR: "/usr/local/lib/engines-1.1"
Seeding source: os-specific

もしldconfigしてもうまくいかない場合は lddコマンドで依存ライブラリの確認

# ldd /usr/local/bin/openssl
    linux-vdso.so.1 (0x00007ffc62488000)
    libssl.so.1.1 => /usr/local/lib/libssl.so.1.1 (0x00007fea638d1000)
    libcrypto.so.1.1 => /usr/local/lib/libcrypto.so.1.1 (0x00007fea633e0000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fea631c1000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fea62dd0000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fea62bcc000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fea63e20000)

で、

ldconfig -v|grep '/'

とかで探索されるライブラリのパス一覧を取得

もしなければ

echo /usr/specify/lib/path/here  > /etc/ld.so.conf.d/openssl111.conf

とかで追記して再度

ldconfig

すればおk

変更

実行ファイルは2つなので

mv /usr/bin/c_rehash /usr/bin/c_rehash.backup
mv /usr/bin/openssl /usr/bin/openssl.backup

すればインストールしたmy opensslが優先される。やったね

参考リンク