Centos 7 上的 VPS 附带了非常旧版本的 openssl。我构建并安装了较新版本的 openssl。(详细信息如下)安装此较新的 openssl 只是为了升级到较新版本的 curl。目的是根据位置专门调用此 curl,而不是将其集成到任何其他程序中。
显然,安装导致 exim 出现问题(谁知道还有什么问题)。现在,由于找不到 libssl.so.1.1,更新 exim 失败。
openssl 二进制文件/usr/local/openssl/bin/openssl
可以隐从系统中?(这样 exim 就会更新)我不太清楚 exim 构建中发生了什么,但是当然它以前是有效的。
我认为两种解决方案是将 openssl 安装移至 /opt 或将 openssl 重命名为其他名称。但是,我想知道是否有更简单的解决方案。
欢迎提出任何想法。感谢您的考虑。
一些系统信息:
[root@vps ~]# which openssl
/usr/bin/openssl
[root@vps ~]# whereis openssl
openssl: /usr/bin/openssl /usr/lib64/openssl /usr/include/openssl /usr/local/openssl /usr/share/man/man1/openssl.1ssl.gz /usr/share/man/man1/openssl.1
[root@vps ~]# /usr/bin/openssl version
OpenSSL 1.0.2k-fips 26 Jan 2017
[root@vps ~]# /usr/lib64/openssl version
-bash: /usr/lib64/openssl: Is a directory
[root@vps ~]# /usr/include/openssl version
-bash: /usr/include/openssl: Is a directory
[root@vps ~]# /usr/local/openssl/bin/openssl version
OpenSSL 1.1.1t 7 Feb 2023
---
*** Could not run ./exim -bV -C /dev/null to find version number ***
*** Exim installation failed ***
./exim: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
make: *** [install] Error 1
Moving exim binary.
---
答案1
首先,您没有显示任何内容来真正显示某些“二进制文件被隐藏”。
Exim 可能期望在 /usr/lib(64) 或 /lib(64) 中而不是 /usr/local/lib(64) 中找到库。请查看您的以获取详细信息。您可以使用环境变量/etc/ld.so.conf
指示您的应用程序首选某个路径,例如运行以仅为一个命令定义此变量。这是在较新的系统上运行古老程序的方式(例如,我需要使用旧的 OpenSSL 和特定程序的旧版本,但我不想在整个系统范围内使用旧的 OpenSSL,因此我将足够的旧库放入该程序的自定义目录中并像这样启动它)。LD_LIBRARY_PATH
LD_LIBRARY_PATH=/some/path exim
另外,请注意 soname:如果你构建了较新的 OpenSSL,则必须重建所有依赖软件;不同的 soname 意味着 ABI 可能会改变。新 OpenSSL 会创建libssl3.so
和不创建libssl.so.1.1
您构建应用程序所期望的内容。在某些情况下,您可能会将一个符号链接到另一个,但可能会出现问题;需要重建才能解决此类问题。(这就是为什么长期支持发行版如此难以维护的原因:需要将所有修复程序反向移植到旧版本的应用程序和库中以不更改 ABI 和 soname,这样您就可以升级库包版本而不会给依赖应用程序带来其他问题。)
最后,在使用生产服务器时,切勿使用make
和make install
,否则您的系统将变得一团糟,您将永远无法清理。从 SRPM(或 DEB-SRC,如果我们谈论基于 Debian 的系统)构建您自己的软件包,并使用软件包管理器安装它们。
答案2
当您选择 CentOS 等稳定的发行版时,部分原因是不会出现任何问题。当然,您不会获得新功能,但 RedHat/CentOS 会将安全修复和错误修复移植到旧版本的软件中,这样您看到的更改就会很小。
您没有获得新的 curl。要获得它,您必须更新到较新的版本;CentOS 7 仍停留在它附带的版本。
此外,curl 和 openssl 都是基本的系统库,由很多其他软件。当你开始使用这些软件时,事情就会变得糟糕。不要这样做。
升级到较新的发行版。如果您想要新的闪亮玩具,请考虑发布周期更频繁的发行版。