eximがコンパイルされたバージョンの代わりにシステムのopensslを使用するのはなぜですか?

eximがコンパイルされたバージョンの代わりにシステムのopensslを使用するのはなぜですか?

exim 4.84からexim 4.94にアップグレードしようとしています。

私のeximローカル/ Makefileには以下が含まれています。

SUPPORT_TLS=yes
TLS_LIBS=-L/MYPATH/lib/ -lssl -lcrypto -ldl
TLS_INCLUDE=-I/MYPATH/include/openssl/
USE_OPENSSL=yes

build-Linux-x86_64 ディレクトリでコンパイルされたバイナリを確認すると、次のような結果が得られます。コンパイルされたOpenSSLはランタイムOpenSSLと一致します。

$ build-Linux-x86_64/exim -d-all+acl --version
Exim version 4.94 #2 built 05-Jun-2020 13:15:11
Copyright (c) University of Cambridge, 1995 - 2018
(c) The Exim Maintainers and contributors in ACKNOWLEDGMENTS file, 2007 - 2018
Support for: crypteq iconv() OpenSSL DANE DKIM DNSSEC Event OCSP PIPE_CONNECT PRDR TCP_Fast_Open
Lookups (built-in): lsearch wildlsearch nwildlsearch iplsearch dbm dbmjz dbmnz dnsdb
Authenticators: cram_md5 plaintext
Routers: accept dnslookup ipliteral manualroute queryprogram redirect
Transports: appendfile autoreply pipe smtp
Fixed never_users: 0
Configure owner: 0:0
Size of off_t: 8
Compiler: GCC [4.9.2]
Library version: Glibc: Compile: 2.19
                        Runtime: 2.19
Library version: BDB: Compile: Berkeley DB 4.8.30: (April  9, 2010)
                      Runtime: Berkeley DB 4.8.30: (April  9, 2010)
Library version: OpenSSL: Compile: OpenSSL 1.0.2l  25 May 2017
                          Runtime: OpenSSL 1.0.2l  25 May 2017
                                 : built on: reproducible build, date unspecified
Library version: PCRE: Compile: 8.36
                       Runtime: 8.36 2014-09-26

しかし、make installを使用してインストールし、最終的なバイナリを確認したら、次のような結果を得ます。

$ exim-4.94-2 -d-all+acl --version
Exim version 4.94 #2 built 05-Jun-2020 13:15:11
Copyright (c) University of Cambridge, 1995 - 2018
(c) The Exim Maintainers and contributors in ACKNOWLEDGMENTS file, 2007 - 2018
Support for: crypteq iconv() OpenSSL DANE DKIM DNSSEC Event OCSP PIPE_CONNECT PRDR TCP_Fast_Open
Lookups (built-in): lsearch wildlsearch nwildlsearch iplsearch dbm dbmjz dbmnz dnsdb
Authenticators: cram_md5 plaintext
Routers: accept dnslookup ipliteral manualroute queryprogram redirect
Transports: appendfile autoreply pipe smtp
Fixed never_users: 0
Configure owner: 0:0
Size of off_t: 8
Compiler: GCC [4.9.2]
Library version: Glibc: Compile: 2.19
                        Runtime: 2.19
Library version: BDB: Compile: Berkeley DB 4.8.30: (April  9, 2010)
                      Runtime: Berkeley DB 4.8.30: (April  9, 2010)
Library version: OpenSSL: Compile: OpenSSL 1.0.2l  25 May 2017
                          Runtime: OpenSSL 1.0.1t  3 May 2016
                                 : built on: Fri Mar  1 20:47:13 2019
Library version: PCRE: Compile: 8.36
                       Runtime: 8.36 2014-09-26

ランタイムのOpenSSLバージョンは、私がコンパイルしたものではなく、システムから取得したものです。

ここで何が問題なのかご存知ですか?

編集する:

確認すると、両方のファイルが同じで、eximバイナリを/ tmpなどの任意のディレクトリにコピーすると、正しいランタイムが表示されます。これは私のbinディレクトリでのみ発生します。

ベストアンサー1

Eximはシステムの共有ライブラリを使用します。 Eximではなく実行時にシステムによってロードされます。これがバイナリが同じ理由です。

したがって、デフォルトでコンパイルされたOpenSSLを使用したい場合は、少なくとも3つのオプションがあります(特定の順序はありません)。

  • Eximを実行する前に、LD_LIBRARY_PATHを使用してローカルのOpenSSLバージョンをポイントしてください。その後、システムローダーはまずその場所から共有ライブラリをインポートするように指示します。

  • Eximは静的バイナリにコンパイルされます。これは、バイナリにすでにOpenSSLライブラリが組み込まれていることを意味します。動的ロードはありません。

  • システム全体で使用できるようにコンパイルされたOpenSSLをシステムにインストールします。

OpenSSLは機密ライブラリであるため、いつでも完全に更新できます。ディストリビューションによっては、セキュリティ更新プログラムを入手できるようにパッケージのバージョンをインストールする方が良いかもしれません。

おすすめ記事