使用RPM卸载软件包时出现意外的依赖关系失败

时间:2018-09-03 11:12:55

标签: redhat rpm

使用Admin [salary=123.0] 检查依赖于特定软件包(在这种情况下为lz4)的软件包时,它不会列出需要rpmlz4-1.7.5-2.el7.i686的任何软件包。 ..

lz4-1.7.5-2.el7.x86_64

但是我不能不使用# rpm -q --whatrequires lz4-1.7.5-2.el7.i686 no package requires lz4-1.7.5-2.el7.i686 # rpm -q --whatrequires lz4-1.7.5-2.el7.x86_64 no package requires lz4-1.7.5-2.el7.x86_64 # 来卸载它们,因为rpm --nodeps和/或systemd似乎需要它们。

systemd-libs

看来# rpm --erase --allmatches lz4 error: Failed dependencies: liblz4.so.1()(64bit) is needed by (installed) systemd-libs-219-57.el7_5.1.x86_64 liblz4.so.1()(64bit) is needed by (installed) systemd-219-57.el7_5.1.x86_64 liblz4.so.1 is needed by (installed) systemd-libs-219-57.el7_5.1.i686 # 的输出是错误的,是吗? (我怀疑这实际上是错误的-但是我不明白为什么它不包含rpm --whatrequiressystemd

我想如果要使用systemd-libs而不是rpm --erase --test来确定软件包是否具有依赖关系,但是还有另一种更可靠的方式来做到这一点?

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

这有点棘手。 rpm --whatrequires跟踪功能;不只是包装。

如果再试一次;您会看到:

rpm --whatrequires "liblz4.so.1()(64bit)"

将为您提供结果。

rpm --erase --test似乎是我的好方法。一种替代方法是遍历您要删除的软件包提供的功能。但这会比较慢。这是一个小型的bash脚本,它遍历lz4的功能并打印出依赖于这些功能的软件包:

packageToRemove=lz4
for capability in $(rpm -q $packageToRemove --provides | awk '{print $1}')
do
    echo "packages requiring $capability:"
    rpm -q --whatrequires "$capability"
done

答案 1 :(得分:1)

以下命令给了我期望的结果,尽管我仍然不明白为什么rpm --whatrequires不起作用。 (在构建第一个程序包之前,我可能不会想清楚。)

# repoquery --alldeps --whatrequires --cache --installed lz4
systemd-0:219-57.el7.x86_64
systemd-libs-0:219-57.el7.i686
systemd-libs-0:219-57.el7.x86_64
#

在某些情况下,输出可能是“有趣” ...

# repoquery --alldeps --whatrequires --cache --installed lvm2-libs
lvm2-7:2.02.177-4.el7.x86_64
lvm2-libs-7:2.02.177-4.el7.x86_64
# 

# repoquery --whatrequires --cache --installed lvm2
lvm2-7:2.02.177-4.el7.x86_64
#