使用 yum distro-sync 升级 Fedora 发行版失败,并显示错误:受保护的多库版本

使用 yum distro-sync 升级 Fedora 发行版失败,并显示错误:受保护的多库版本

使用这些说明我们正在对 Slicehost 切片 (注意:这不是 Rackspace vhost,如果是的话,我们可能只需要对最新的 Fedora 发行版进行标准安装) 进行 yum 升级,从 Fedora 15 到 16,这是在 yum 从 14 到 15 的升级显然成功之后进行的。

除了 MySQL 5.6 的二进制安装外,安装都是标准的,我们使用以下命令:


yum -y --releasever=16 --disableplugin=presto distro-sync --exclude=mysql-libs --exclude=perl-DBD-MySQL --skip-broken

在出现许多有关将要升级的软件包的消息后,该过程停止并显示以下错误消息:


Error: Protected multilib versions: dracut-013-18.fc16.noarch != dracut-009-12.fc15.noarch
Error: Protected multilib versions: initscripts-9.33-1.fc16.x86_64 != initscripts-9.30.1-1.fc15.x86_64

接下来是建议:


 You could try running: rpm -Va --nofiles --nodigest

使用该建议没有帮助,有人可以建议解决错误的方法吗?

答案1

Fedora 确实不适合以这种方式升级。而且你甚至还没有到达最困难的版本 (16-17)。话虽如此,我已经这样做了几十次,遇到了几乎所有可能出错的事情。以下是我的建议。

如果可能的话,最好的和最快的方法是创建一个带有最新版本的 Fedora (17) 的新云实例,然后将您的数据和配置传输到它。然后销毁旧的云实例。当然,这依赖于 Rackspace 是否拥有 Fedora 17 安装映像,我不知道他们是否有。

我有两个自定义 shell 脚本专门用于此目的,其中一个复制我需要的所有配置文件和从旧系统提供的数据,另一个解压第一个脚本创建的所有数据,然后安装任何必要的包。

如果您打算继续沿着这条疯狂的道路前进,那么请继续阅读。

此错误Protected multilib versions通常发生在您的系统上有两个不同版本的软件包时,有时其中一个属于一种体系结构,另一个属于另一种体系结构(例如,旧软件包是 i686,新软件包是 x86_64)。如果上一次 yum 运行中断,并且您尝试执行另一个 yum 事务而不恢复中断的事务,也会出现此错误。在我看来,这表明您从 Fedora 14 升级到 15 并不像您想象的那么完整。

首先,在解决此问题之前,请停止尝试更新到 16 或更高版本。

运行yum-complete-transaction以完成所有待处理的 yum 更新。这是简单的解决方法。如果此方法可以解决问题,请跳过其余部分。如果没有,请继续...

现在,对于引发此错误的每个包,检查您已安装的内容:

rpm -q dracut initscripts

您应该看到每个软件包都列出了两个或更多软件包。删除其中一个:如果一个是 32 位的,另一个是 64 位的,则删除 32 位软件包,即使它比 64 位软件包更新。否则,删除较旧的软件包。最终,您应该只安装每个软件包中的一个:

rpm -e dracut-00####.fc## initscripts-#.##-#.fc##

如果您只找到一个版本的软件包,则必须将其从 RPM 数据库中删除,而实际上并不将其从文件系统中删除(因为它们是引导和安装所必需的)。例如,如果只有一个版本的 dracut:

rpm -e --nodeps --noscripts --justdb dracut-00####.fc##

此后,您应该可以继续yum --releasever=16 distro-sync

在 distro-sync 完成后,如果您必须从 RPM 数据库中删除软件包的唯一版本,请不要继续执行 Fedora 说明,直到您替换它:

yum --releasever=16 reinstall dracut

此时您应该能够继续遵循 Fedora 说明。

请记住:Fedora 在任何给定时间只保留两个活跃的发行版本。此后,旧发行版可能会从镜像中删除,从而无法以这种方式进行更新。因此,您最多应保留一个版本。或者,考虑使用更稳定的发行版(例如 CentOS),这样您就可以完全避免这种混乱。

答案2

看起来您可能已经从更新测试存储库安装了软件包,但现在它已被禁用。

尝试yum ... --enablerepo=updates-testing

或者,先将更新测试包降级为基础版本。

yum distro-sync

相关内容