网上有很多编译OpenSSL源码(3.x版本)为RPM包的文章,这些文章在安装RPM包时都是执行rpm -ivh openssl-xxx.rpm --nodeps --force
这个命令能在缺少依赖包的情况下能强行执行安装
其实根据Centos的文档,安装RPM包一般是执行yum install
或dnf install
。后者是Centos 9 stream
的安装命令,是替换yum
命令的。
以Centos 9上生成的OpenSSH 3.5
的RPM包为例:生成了3个RPM包,分别是 :
openssl-3.5.0-2.el9.x86_64.rpm
openssl-libs-3.5.0-2.el9.x86_64.rpm
openssl-devel-3.5.0-2.el9.x86_64.rpm
执行安装的命令为 :
dnf install ./openssl-libs-3.5.0-2.el9.x86_64.rpm ./openssl-3.5.0-2.el9.x86_64.rpm
报错信息类似如下:
Problem 1: problem with installed package crypto-policies-20240828-2.git626aa59.el9.noarch- package crypto-policies-20240828-2.git626aa59.el9.noarch from @System conflicts with openssl-libs < 1:3.0.1-10 provided by openssl-libs-1:3.5.0-2.el9.x86_64 from @commandline- package crypto-policies-20240304-1.gitb1c706d.el9.noarch from baseos conflicts with openssl-libs < 1:3.0.1-10 provided by openssl-libs-1:3.5.0-2.el9.x86_64 from @commandline- package crypto-policies-20240815-1.gite217f03.el9.noarch from baseos conflicts with openssl-libs < 1:3.0.1-10 provided by openssl-libs-1:3.5.0-2.el9.x86_64 from @commandline- package crypto-policies-20240822-1.gitbaf3e06.el9.noarch from baseos conflicts with openssl-libs < 1:3.0.1-10 provided by openssl-libs-1:3.5.0-2.el9.x86_64 from @commandline- package crypto-policies-20240828-2.git626aa59.el9.noarch from baseos conflicts with openssl-libs < 1:3.0.1-10 provided by openssl-libs-1:3.5.0-2.el9.x86_64 from @commandline- package crypto-policies-20250128-1.git5269e22.el9.noarch from baseos conflicts with openssl-libs < 1:3.0.1-10 provided by openssl-libs-1:3.5.0-2.el9.x86_64 from @commandline- conflicting requestsProblem 2: problem with installed package crypto-policies-scripts-20240828-2.git626aa59.el9.noarch- package crypto-policies-scripts-20240828-2.git626aa59.el9.noarch from @System requires crypto-policies = 20240828-2.git626aa59.el9, but none of the providers can be installed- package crypto-policies-scripts-20240828-2.git626aa59.el9.noarch from baseos requires crypto-policies = 20240828-2.git626aa59.el9, but none of the providers can be installed- package crypto-policies-scripts-20240304-1.gitb1c706d.el9.noarch from baseos requires crypto-policies = 20240304-1.gitb1c706d.el9, but none of the providers can be installed- package crypto-policies-scripts-20240815-1.gite217f03.el9.noarch from baseos requires crypto-policies = 20240815-1.gite217f03.el9, but none of the providers can be installed- package crypto-policies-scripts-20240822-1.gitbaf3e06.el9.noarch from baseos requires crypto-policies = 20240822-1.gitbaf3e06.el9, but none of the providers can be installed- package crypto-policies-scripts-20250128-1.git5269e22.el9.noarch from baseos requires crypto-policies = 20250128-1.git5269e22.el9, but none of the providers can be installed- package crypto-policies-20240828-2.git626aa59.el9.noarch from @System conflicts with openssl-libs < 1:3.0.1-10 provided by openssl-libs-1:3.5.0-2.el9.x86_64 from @commandline- package crypto-policies-20240304-1.gitb1c706d.el9.noarch from baseos conflicts with openssl-libs < 1:3.0.1-10 provided by openssl-libs-1:3.5.0-2.el9.x86_64 from @commandline- package crypto-policies-20240815-1.gite217f03.el9.noarch from baseos conflicts with openssl-libs < 1:3.0.1-10 provided by openssl-libs-1:3.5.0-2.el9.x86_64 from @commandline- package crypto-policies-20240822-1.gitbaf3e06.el9.noarch from baseos conflicts with openssl-libs < 1:3.0.1-10 provided by openssl-libs-1:3.5.0-2.el9.x86_64 from @commandline- package crypto-policies-20240828-2.git626aa59.el9.noarch from baseos conflicts with openssl-libs < 1:3.0.1-10 provided by openssl-libs-1:3.5.0-2.el9.x86_64 from @commandline- package crypto-policies-20250128-1.git5269e22.el9.noarch from baseos conflicts with openssl-libs < 1:3.0.1-10 provided by openssl-libs-1:3.5.0-2.el9.x86_64 from @commandline- package openssl-1:3.5.0-2.el9.x86_64 from @commandline requires openssl-libs = 3.5.0-2.el9, but none of the providers can be installed- package openssl-1:3.5.0-2.el9.x86_64 from @commandline requires libcrypto.so.3(OPENSSL_3.3.0)(64bit), but none of the providers can be installed- package openssl-1:3.5.0-2.el9.x86_64 from @commandline requires libcrypto.so.3(OPENSSL_3.4.0)(64bit), but none of the providers can be installed- package openssl-1:3.5.0-2.el9.x86_64 from @commandline requires libcrypto.so.3(OPENSSL_3.5.0)(64bit), but none of the providers can be installed- package openssl-1:3.5.0-2.el9.x86_64 from @commandline requires libssl.so.3(OPENSSL_3.4.0)(64bit), but none of the providers can be installed- conflicting requests
(try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)
上述报错的意思是crypto-policies-20240828-2.git626aa59.el9.noarch
包与低于1:3.0.1-10
版本的openssl-libs
的包有冲突.这里的版本号1:3.0.1-10
中的1:
意思是EPOCH的值,3.0.1
才是我们常说的版本号。
现在安装的是openssl-libs-3.5.0
,即版本是3.5.0
,是大于3.0.1
的,按理应该不冲突才对,而实际上却发生冲突了。
我尝试重新编译和打包crypto-policies
,目的就是修改对OpenSSL
版本的限制。
第一次我设置为Conflicts: openssl < 1:2.9.1-10
,即crypto-policies包对OpenSSL 2.9即以下版本有冲突,但测试发现限制条件没有生效
第二次我直接取消了对OpenSSL的版本限制,测试发现能成功使用dnf install
命令安装OpenSSL
.
下面是我分别安装crypto-policies
和OpenSSL 3.5.0
的输出
1.更新crypto-policies
dnf install ~/tool/crypto-policies/crypto-policies-scripts-20251215-1.git9a18988.el9.noarch.rpm \
~/tool/crypto-policies/crypto-policies-20251215-1.git9a18988.el9.noarch.rpm
输出如下 :
=============================================================================================================================================================================================Package Architecture Version Repository Size
=============================================================================================================================================================================================
Upgrading:crypto-policies noarch 20251215-1.git9a18988.el9 @commandline 55 kcrypto-policies-scripts noarch 20251215-1.git9a18988.el9 @commandline 84 kTransaction Summary
=============================================================================================================================================================================================
Upgrade 2 PackagesTotal size: 140 k
说明 :
- 使用的源码是
fedora-crypto-policies-rhel9.tar.gz
,来自https://gitlab.com/redhat-crypto/fedora-crypto-policies/-/tree/rhel9?ref_type=heads
的 rhel9 分支 - crypto-policies的版本号
20251215-1
是随便设置的,目的是比原版本号高就可以了
2.安装Openssl 3.5.0
dnf install /root/tool/openssl/openssl-libs-3.5.0-2.el9.x86_64.rpm /root/tool/openssl/openssl-3.5.0-2.el9.x86_64.rpm
输出如下 :
=============================================================================================================================================================================================Package Architecture Version Repository Size
=============================================================================================================================================================================================
Upgrading:openssl x86_64 1:3.5.0-2.el9 @commandline 983 kopenssl-libs x86_64 1:3.5.0-2.el9 @commandline 4.2 M
Installing dependencies:perl-AutoLoader noarch 5.74-481.el9 baseos 21 kperl-B x86_64 1.80-481.el9 baseos 180 kperl-Carp noarch 1.50-460.el9 baseos 30 kperl-Class-Struct noarch 0.66-481.el9 baseos 22 kperl-Data-Dumper x86_64 2.174-462.el9 baseos 56 kperl-Digest noarch 1.19-4.el9 baseos 26 kperl-Digest-MD5 x86_64 2.58-4.el9 baseos 37 kperl-Encode x86_64 4:3.08-462.el9 baseos 1.7 Mperl-Errno x86_64 1.30-481.el9 baseos 14 kperl-Exporter noarch 5.74-461.el9 baseos 32 kperl-Fcntl x86_64 1.13-481.el9 baseos 20 kperl-File-Basename noarch 2.85-481.el9 baseos 17 kperl-File-Path noarch 2.18-4.el9 baseos 36 kperl-File-Temp noarch 1:0.231.100-4.el9 baseos 60 kperl-File-stat noarch 1.09-481.el9 baseos 17 kperl-FileHandle noarch 2.03-481.el9 baseos 15 kperl-Getopt-Long noarch 1:2.52-4.el9 baseos 61 kperl-Getopt-Std noarch 1.12-481.el9 baseos 15 kperl-HTTP-Tiny noarch 0.076-462.el9 baseos 54 kperl-IO x86_64 1.43-481.el9 baseos 88 kperl-IO-Socket-IP noarch 0.41-5.el9 baseos 43 kperl-IO-Socket-SSL noarch 2.073-2.el9 baseos 217 kperl-IPC-Open3 noarch 1.21-481.el9 baseos 22 kperl-MIME-Base64 x86_64 3.16-4.el9 baseos 31 kperl-Mozilla-CA noarch 20200520-6.el9 baseos 13 kperl-Net-SSLeay x86_64 1.94-1.el9 baseos 414 kperl-POSIX x86_64 1.94-481.el9 baseos 96 kperl-PathTools x86_64 3.78-461.el9 baseos 88 kperl-Pod-Escapes noarch 1:1.07-460.el9 baseos 21 kperl-Pod-Perldoc noarch 3.28.01-461.el9 baseos 87 kperl-Pod-Simple noarch 1:3.42-4.el9 baseos 225 kperl-Pod-Usage noarch 4:2.01-4.el9 baseos 41 kperl-Scalar-List-Utils x86_64 4:1.56-462.el9 baseos 71 kperl-SelectSaver noarch 1.02-481.el9 baseos 11 kperl-Socket x86_64 4:2.031-4.el9 baseos 56 kperl-Storable x86_64 1:3.21-460.el9 baseos 96 kperl-Symbol noarch 1.08-481.el9 baseos 14 kperl-Term-ANSIColor noarch 5.01-461.el9 baseos 49 kperl-Term-Cap noarch 1.17-460.el9 baseos 23 kperl-Text-ParseWords noarch 3.30-460.el9 baseos 17 kperl-Text-Tabs+Wrap noarch 2013.0523-460.el9 baseos 24 kperl-Time-Local noarch 2:1.300-7.el9 baseos 34 kperl-URI noarch 5.09-3.el9 baseos 121 kperl-WWW-Curl x86_64 4.17-29.el9 epel 62 kperl-base noarch 2.27-481.el9 baseos 16 kperl-constant noarch 1.33-461.el9 baseos 24 kperl-if noarch 0.60.800-481.el9 baseos 14 kperl-interpreter x86_64 4:5.32.1-481.el9 baseos 71 kperl-libnet noarch 3.13-4.el9 baseos 130 kperl-libs x86_64 4:5.32.1-481.el9 baseos 2.2 Mperl-mro x86_64 1.23-481.el9 baseos 28 kperl-overload noarch 1.31-481.el9 baseos 45 kperl-overloading noarch 0.02-481.el9 baseos 12 kperl-parent noarch 1:0.238-460.el9 baseos 15 kperl-podlators noarch 1:4.14-460.el9 baseos 114 kperl-subs noarch 1.03-481.el9 baseos 11 kperl-vars noarch 1.05-481.el9 baseos 13 k
Installing weak dependencies:perl-NDBM_File x86_64 1.15-481.el9 appstream 22 kTransaction Summary
=============================================================================================================================================================================================
Install 58 Packages
Upgrade 2 PackagesTotal size: 12 M
特别说明 :
- 考虑到
crypto-policies
是整个系统的加密基础,因此不建议安装自己打包的RPM - 从安装OpenSSL的输出也可以知道在执行
rpm -ivh
安装OpenSSL时,需要自行安装哪些依赖包 - 由于
OpenSSL
也是系统的基础包之一,因此不建议在生产环境安装
附 : crypto-policies和OpenSSL的RPM包的下载地址 :
https://github.com/mosaicwang/myrpm/releases/tag/openssl-3.5.0