为什么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,您至少有以下三个选项(无特殊顺序):

  • 在运行 Exim 之前,使用 LD_LIBRARY_PATH 指向本地 OpenSSL 版本。这将指示系统加载程序首先尝试从该位置获取共享库。

  • 将 Exim 编译为静态二进制文件,这意味着该二进制文件已经内置了 OpenSSL 库。无动态加载。

  • 将您编译的 OpenSSL 安装到系统中,以便它在系统范围内可用。

请注意,OpenSSL 是一个敏感库,您可能会随时对其进行完全更新。根据您的发行版,安装打包版本可能是更好的主意,这样您还可以获得安全更新。

相关内容