使用yum distro-sync升级Fedora发行版会失败,错误:受保护的multilib版本

使用这些指令,我们正在Slicehost slice上进行yum升级(注意,这不是一个Rackspace虚拟主机,如果是Fedora 15到16,我们可能只是做一个最新的Fedora发行版的标准安装)明显成功的百胜从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 

其次是build议:

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

使用build议没有帮助,任何人都可以提出一个解决错误的方法?

Fedora实际上并不是要这样升级。 你甚至还没有遇到困难(16-17)。 也就是说,我已经做了几十次,碰到几乎所有可能出现的错误。 这是我的build议。

如果可能的话,最好的和最快的方法是用最新的Fedora(17)创build一个新的云实例,然后将数据和configuration传输给它。 然后销毁旧的云实例。 当然,这依赖于Rackspace有一个Fedora 17的安装镜像,我不知道他们是否这样做。

我有两个自定义shell脚本只是为了这个目的,其中一个复制我需要的所有configuration文件和从旧系统提供的数据,另一个解包所有由第一个脚本创build的数据,然后安装任何必要的包裹。

如果你打算继续走下这条疯狂的路,那就继续读吧。

Protected multilib versions通常在系统上有两个不同版本的软件包时发生,有时其中一个是一个体系结构,另一个是另一个体系结构(例如,旧包是i686,而新包是x86_64)。 如果以前的yum运行中断,并且您尝试执行另一个yum事务而不恢复中断的事务,也会发生这种情况。 这表明你从Fedora 14升级到15并不像你想的那样完整。

首先,停止尝试更新到16或更高,直到您解决此问题。

运行yum-complete-transaction来完成任何未决的yum更新。 这是简单的修复。 如果解决了这个问题,请跳过其余部分。 如果没有,继续…

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

 rpm -q dracut initscripts 

你应该得到两个或更多的软件包列出每个这些。 删除其中的一个:如果一个是32位而另一个是64位,即使它比64位软件包新,也要删除这个32位软件包。 否则,删除旧的软件包。 最终你应该只安装每个软件包中的一个:

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

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

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

之后,你应该可以继续yum --releasever=16 distro-sync

发行版同步完成后,如果必须从RPM数据库中删除软件包的唯一版本,请不要继续使用Fedora说明,直到您将其replace为:

 yum --releasever=16 reinstall dracut 

在这一点上,你应该可以继续使用Fedora指令。

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

看起来你可能已经从更新中安装了软件包 – testing软件库,现在它已经被禁用了。

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

或者,首先将更新 – testing包降级到基本版本。

yum distro-sync