網上有很多編譯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