为什么 rpm --whatrequires 无法报告依赖关系?

为什么 rpm --whatrequires 无法报告依赖关系?

我正在考虑使用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?

答案1

正如已经提到的,其他包可能需要包的“提供”列表中的文件或其他内容:

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

看看有没有一些“需要什么”(不是全部):

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

答案2

这只是意味着没有人明确要求安装该软件包;但某些软件包可能依赖于这些软件包安装的文件。例如在我的机器上;没有人依赖这个包;但有些依赖于包提供的库:

$ 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它来找出这些转速。通过一些 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

相关内容