Centos

為什麼 rpm –whatrequires 無法報告依賴關係?

  • October 12, 2016

我正在考慮在 CentOS 7 中使用 LibreSSL 而不是 OpenSSL。由於這台機器執行的服務非常有限,我想知道是否可以完全刪除 OpenSSL。

#> rpm -qa | grep ssl
openssl-libs-1.0.1e-42.el7.9.x86_64
openssl-1.0.1e-42.el7.9.x86_64

好的,那就試試

#> rpm -q --whatrequires openssl-libs-1.0.1e-42.el7.9.x86_64
no package requires openssl-libs-1.0.1e-42.el7.9.x86_64
#> rpm -q --whatrequires openssl-1.0.1e-42.el7.9.x86_64
no package requires openssl-1.0.1e-42.el7.9.x86_64

真的嗎?

#> sudo yum remove openssl-libs-1.0.1e-42.el7.9.x86_64

這給出了很多這樣的行:

--> Processing Dependency: perl(IPC::Cmd) >= 0.42 for package: perl-File-Fetch-0.42-2.el7.noarch
--> Running transaction check
---> Package perl-File-Fetch.noarch 0:0.42-2.el7 will be erased

等等令人作嘔,然後

Error: Trying to remove "systemd", which is protected
Error: Trying to remove "yum", which is protected

我沒想到會毫無怨言地刪除 OpenSSL,但為什麼沒有rpm -q --whatrequires報告這些依賴性呢?

如何列出所有直接或間接需要給定包的包?

我的意思是:如果要刪除包 X,如果 X 被刪除,包/文件 Y 將被刪除,並且包 Z 依賴於 Y,我如何列出任何給定 X 的所有此類 Z?

如前所述,其他包可能需要包的“提供”列表中的文件或其他內容:

rpm -q --list openssl openssl-libs
rpm -q --provides openssl openssl-libs

查看是否有一些“whatrequires”(不是全部):

rpm -e --test openssl openssl-libs

IMO 無法直接列出所有rpm內容,但yum以防萬一(未經測試):

yes "N" | yum remove openssl openssl-libs

或者

yum deplist openssl openssl-libs

或者

repoquery --alldeps --whatrequires openssl openssl-libs

這只是意味著沒有人明確要求安裝該軟體包;但是某些軟體包可能依賴於這些軟體包安裝的文件。例如在我的機器上;沒有人依賴包;但有些依賴於包提供的庫:

$ rpm -q libopenssl1_0_0-32bit
libopenssl1_0_0-32bit-1.0.1i-18.1.x86_64 # whence this package is installed
$ rpm -q --whatrequires libopenssl1_0_0-32bit
no package requires libopenssl1_0_0-32bit
$ rpm -ql libopenssl1_0_0-32bit
/lib/engines
/lib/engines/libcapi.so
/lib/engines/libgmp.so
/lib/engines/libgost.so
/lib/engines/libpadlock.so
/lib/libcrypto.so.1.0.0
/lib/libssl.so.1.0.0
$ rpm -q --whatrequires libssl.so.1.0.0
libldap-2_4-2-32bit-2.4.41-14.1.x86_64
cups-libs-32bit-1.7.5-7.1.x86_64

編輯由於編輯的問題:

您可以使用rpm -e --test找出哪些是這些 rpm。通過一些 bash 處理,您可以獲得一個乾淨的列表:

$ rpm -e --test libopenssl1_0_0-32bit 2>&1 | grep needed | awk '{print $6}' | sort | uniq
cups-libs-32bit-1.7.5-7.1.x86_64
libldap-2_4-2-32bit-2.4.41-14.1.x86_64

引用自:https://unix.stackexchange.com/questions/315943