我尝试从 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 是一个敏感库,您可能会随时对其进行完全更新。根据您的发行版,安装打包版本可能是更好的主意,这样您还可以获得安全更新。