![解决 rpm 冲突的正确方法是什么? (错误:p11-kit-trust 与 nss-3.13.3-6.el6.x86_64 冲突)](https://linux22.com/image/59440/%E8%A7%A3%E5%86%B3%20rpm%20%E5%86%B2%E7%AA%81%E7%9A%84%E6%AD%A3%E7%A1%AE%E6%96%B9%E6%B3%95%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F%20%EF%BC%88%E9%94%99%E8%AF%AF%EF%BC%9Ap11-kit-trust%20%E4%B8%8E%20nss-3.13.3-6.el6.x86_64%20%E5%86%B2%E7%AA%81%EF%BC%89.png)
我已经有一段时间没有更新我的一台 RHEL6 机器了(除了偶尔更新具有已知漏洞的特定软件包)。
因此,我有一个旧ca-certificates
包:
- ca-证书-2010.63-3.el6_1.5.noarch。
新的ca-certificates
包取决于
- p11-kit-trust >= 0.18.4-2,
这又与
- nss < 3.14.3-33,
当前已安装(如nss-3.13.3-6.el6.x86_64
)。结果,我不知道如何正确更新ca-certificates
.
我已经p11-kit
安装了,但没有安装p11-kit-trust
,因为nss
阻止了它。yum update nss
说“没有标记为更新的软件包”。
yum erase nss
拒绝,因为它yum
也意味着擦除。
完整的输出yum update
如下所示:
加载的插件:product-id、rhnplugin、security、subscription-manager 该系统正在接收来自 RHN Classic 或 RHN Satellite 的更新。 设置更新流程 解决依赖关系 --> 运行事务检查 ---> 包 ca-certificates.noarch 0:2010.63-3.el6_1.5 将更新 ---> 包 ca-certificates.noarch 0:2014.1.98-65.1.el6 将是更新 --> 处理依赖项:p11-kit-trust >= 0.18.4-2 软件包:ca-certificates-2014.1.98-65.1.el6.noarch --> 运行事务检查 ---> 将安装软件包 p11-kit-trust.x86_64 0:0.18.5-2.el6_5.2 --> 处理冲突:p11-kit-trust-0.18.5-2.el6_5.2.x86_64 冲突 nss 完成依赖解析 错误:p11-kit-trust 与 nss-3.13.3-6.el6.x86_64 冲突 您可以尝试使用 --skip-broken 来解决该问题 您可以尝试运行: rpm -Va --nofiles --nodigest
package-cleanup --problems
没有发现问题,也package-cleanup --cleandupes
没有发现重复。
ca-certificates
无法卸载,因为openssl
依赖于它。
有没有一种方法可以解决此问题,而无需使用诸如--dbonly
、或类似参数--force
之类的覆盖参数--nodeps
,并且无需从网上手动下载旧的 RPM?
答案1
下载所有这些软件包(我从 rpmfind.net 获取了 CentOS 6.6 版本)
nss-3.16.1-14.el6.x86_64.rpm nss-util-3.16.1-3.el6.x86_64.rpm nss-softokn-3.14.3-17.el6.x86_64.rpm nss-softokn-freebl-3.14.3-17.el6.x86_64.rpm nss-tools-3.16.1-14.el6.x86_64.rpm nss-sysinit-3.16.1-14.el6.x86_64.rpm
并一次性安装它们rpm -Uvh nss-*.rpm
。
p11-kit-trust
这满足了yum 无法自行解决的依赖关系。
之后,yum update
可以更新ca-certificates
和安装p11-kit-trust
(对于依赖项)。
答案2
尝试:
rpm -e ca-certificates
rpm -ivh nss
从 中读取包后NSS 错误修复和增强更新页面。将您的架构的包名称复制到 Google 中并最终位于RPM 查找上的 NSS 列表- 继续
yum update
这应该重新检查所有依赖项。如果全部通过,请重新安装新的ca-certificates
.不要试图下载比安全公告中的版本更高的版本,因为yum update
步骤 3 中的应该将从 RPM Find 下载的版本替换为 RHEL 存储库中的当前版本。
更新
这里大多数人忘记了 CentOS 是 RedHat Enterprise Linux 的子版本,而 RedHat Enterprise Linux 又是 RedHat(现在的 Fedora)的子版本。这使得 CentOS 成为 Fedora 的孙子。考虑到这一点,我引用:
Yum 是 rpm 系统的自动更新程序和软件包安装程序/删除程序。它会自动计算依赖关系并找出安装软件包时应该发生的事情。它可以更轻松地维护一组机器,而无需使用 rpm 手动更新每台机器。 Yum 有一个用于添加简单功能的插件界面。 Yum 还可以通过其模块接口从其他 Python 程序中使用。
以及由此得出的总结网上书:
总而言之,包管理系统使用计算机来跟踪构成应用程序或整个操作系统的所有各个部分。大多数包管理系统使用特殊格式的文件将所有内容保存在一个易于管理的实体或包中。此外,包管理系统往往提供以下一项或多项功能:
- 安装新软件包。
- 删除旧包。
- 从旧包升级到新包。
- 获取有关已安装软件包的信息。
请注意,它没有提及任何有关依赖关系解析的内容。换句话说:
可以通过发出以下命令来删除 yum:
rpm -e yum
在短时间内,您失去的只是依赖关系解析,然后删除所有其他 openssl 软件包,或使用 rpm 的 --force 选项。唯一的包裹你不应删除是 rpm 本身,如果实际上 rpm 依赖于 OpenSSL。