我们的 Red Hat 7.6 机器安装了 64 位和 32 位库。
我正在为我们所有的机器编写一个更新脚本,以便与我们的安装后脚本一起运行,以升级所有已安装的软件包。
yum -y upgrade
返回许多这样的错误:
printers.pyc conflicts between libstdc++.i686 and libstdc++.x86_64
我在每台机器上都遇到了许多这样的错误。每台机器都不一样。我不能只卸载 32 位冲突的软件包,升级然后重新安装 32 位软件包。实在是太多了。
我已尝试过:
yum upgrade -x '*.i686'
但没有成功。
我怎样才能克服这些错误集体?
更新:
这是其中一条错误消息。
事务检查错误:
文件 */path/to/file/*printers.pyc 在尝试安装 libstdc++-4.8.5-36.el7_6.2.i686 和 libstdc++-4.8.5-36.el7_6.2.x86_64 时发生冲突
请注意,我为 32 位和 64 位软件包提供了相同的版本。
yum provides printers.pyc
返回已安装的 32 位和 64 位软件包:
libstdc++-4.8.5-36.el7.i686 和 libstdc++-4.8.5-36.el7.x86_64
每台机器都不同。我不能只卸载 32 位 libstdc++ 就万事大吉了。另一台机器会有不同的冲突。
我需要编写脚本。我必须处理整个已安装的 RPM 集,然后卸载一些 onsie-twosie 软件包。
是否可以先只升级 64 位软件包,然后再升级 32 位软件包?这样有帮助吗?
答案1
yum
希望这些库版本匹配。libstdc++
例如,必须为 32 位和 64 位安装完全相同的版本号。
您建议删除 32 位版本然后重新安装它们,这个建议行不通;yum
如果它们的版本号不完全相同,将不允许您重新安装这些 32 位版本。
发生的情况是,您的存储库中可能有可用的更新libstdc++.x86_64
,但又没有。libstdc++.i686
有多种策略可以解决这个问题:
- 尝试卸载你的 32 位软件包(按照@MichaelHampton 的建议)
- 调查为什么没有两个版本的升级可用(启用/禁用存储库)
- 告诉
yum
在更新时忽略一些包...
答案2
这太糟糕了。我不得不列出所有有冲突的软件包。通过强制删除 32 位软件包,并且不删除依赖项。
接下来,我必须升级所有 64 位软件包。
之后,我可以重新安装 32 位软件包。
不知何故,我们的 kickstart 过程搞砸了这一切。当我们升级到下一个版本的 Red Hat 时,我们使用了不同的 kickstart 映像和安装后脚本。这解决了以后的问题。
我们仍然不知道它一开始是怎么搞砸的。