我有一个厨师配方来引导一些我已经使用了很长一段时间的工作节点,并且这是我第一次需要增加我的工作池的大小,但发现由于 yum 错误,新节点无法正确引导:
Error: Package: cyrus-sasl-md5-2.1.26-21.el7.x86_64 (abc-os)
Requires: cyrus-sasl-lib(x86-64) = 2.1.26-21.el7
Installed: cyrus-sasl-lib-2.1.26-20.el7_2.x86_64 (@abc-os)
cyrus-sasl-lib(x86-64) = 2.1.26-20.el7_2
我们的内部仓库在哪里,abc-os
以便我们可以锁定软件包版本。我自然而然地认为这是问题所在,但在检查仓库时,我发现两个软件包的完整集合21.el7
和 20.el7_2
存在。
此外,跑步yum list available cyrus-sasl-md5
还能带来:
cyrus-sasl-md5.i686 2.1.26-20.el7_2 abc-os
cyrus-sasl-md5.x86_64 2.1.26-21.el7 abc-os
并查询 repo 的 sqlite 文件/var/cache/yum/x86_64/7/abc-os/gen
返回:
sqlite> SELECT name, arch, version, epoch, release FROM packages WHERE name LIKE 'cyrus%' ORDER BY arch, version, epoch, release, name;
cyrus-sasl-lib i686 2.1.26 0 17.el7
cyrus-sasl-lib i686 2.1.26 0 20.el7_2
cyrus-sasl-md5 i686 2.1.26 0 20.el7_2
cyrus-sasl-pla i686 2.1.26 0 20.el7_2
cyrus-sasl x86_64 2.1.26 0 17.el7
cyrus-sasl-dev x86_64 2.1.26 0 17.el7
cyrus-sasl-lib x86_64 2.1.26 0 17.el7
cyrus-sasl x86_64 2.1.26 0 20.el7_2
cyrus-sasl-dev x86_64 2.1.26 0 20.el7_2
cyrus-sasl-lib x86_64 2.1.26 0 20.el7_2
cyrus-sasl-md5 x86_64 2.1.26 0 20.el7_2
cyrus-sasl-pla x86_64 2.1.26 0 20.el7_2
cyrus-sasl x86_64 2.1.26 0 21.el7
cyrus-sasl-dev x86_64 2.1.26 0 21.el7
cyrus-sasl-lib x86_64 2.1.26 0 21.el7
cyrus-sasl-md5 x86_64 2.1.26 0 21.el7
cyrus-sasl-pla x86_64 2.1.26 0 21.el7
此刻我很困惑为什么会发生这种情况,以及该如何进一步深入研究这个问题。
作为参考,操作系统是 CentOS 7.2 x86_64。
答案1
cyrus-sasl-md5-2.1.26-21.el7.x86_64 要求 cyrus-sasl-lib 版本为 2.1.26-21,但您有另一个版本(2.1.26-20)。
我认为您应该卸载 cyrus-sasl-lib 并重新安装好的版本。
答案2
问题原来是有人配置了yum 版本锁定仅适用于 cyruscyrus-sasl-lib
包,而不适用于其他 cyrus 包,这似乎导致 yum 无法正确解析版本。
最好的选择可能是添加其他具有匹配版本的软件包,但由于这些特定软件包对于此平台的当前版本影响不大,所以我干脆将cyrus-sasl-lib
版本锁定全部移除。现在 yum 会将所有内容安装/升级到最新版本,并且实例可以自行引导,不会再出现问题。