使用Admin [salary=123.0]
检查依赖于特定软件包(在这种情况下为lz4
)的软件包时,它不会列出需要rpm
和lz4-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 --whatrequires
或systemd
?
我想如果要使用systemd-libs
而不是rpm --erase --test
来确定软件包是否具有依赖关系,但是还有另一种更可靠的方式来做到这一点?
感谢您的帮助。
答案 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
#