redhat - 使用 RPM 卸载包时意外失败的依赖项

标签 redhat rpm

当使用 rpm 检查依赖于特定包(在本例中为 lz4)的包时,它不会列出任何需要 lz4-1.7 的包.5-2.el7.i686lz4-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 的输出是错误的,但真的是这样吗? (我怀疑它实际上是错误的 - 但我不明白为什么它不包含 systemdsystemd-libs

我想如果使用 rpm --erase --test 而不是 rpm --whatrequires 来识别包是否有依赖关系,但还有另一种更可靠的方法吗这个?

感谢您的帮助。

最佳答案

这有点棘手。 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

关于redhat - 使用 RPM 卸载包时意外失败的依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52148625/

相关文章:

dependencies - 如何使 RPM 依赖于包 a 或包 b?

ruby - 无法在redhat上安装ruby版本

linux - 在集群中安装包

linux - 留在另一个文件夹中,我如何从另一个目录中提取特定文件?

linux - 在 Azure 中部署的 RHEL 7.2 中无法使用 Gnome 查看 GUI

python - 使用 setuptools – data_files 创建 deb 或 rpm

linux - 如何让linux patch util在补丁文件中使用env var

docker - 在 Redhat 8 上安装 docker-ce

linux - 防止 rpmbuild 读取 ~/.rpmmacros

ansible - 如何安装旧版本的ansible?