Fedora 的跨版本升级
众所周知,除去 rawhide 之外,Fedora 的版本是不能滚动的。但是我们仍可以通过启用不同版本的源,直接由 YUM 实现跨版本升级。跨版本升级的好处是显而易见的,如同滚动升级一样,系统上常用的包,除了需要更新之外,不必像装新系统那样一次次地从头安装。这里以 Fedora 18 升级到 Fedora 20(Branched Release) 为例,说明一下大概的步骤。至于上面提到的 Branched Release 的相关信息以及它的生存周期,请参考 https://fedoraproject.org/wiki/Releases/Branched。
在开始升级系统之前,先清理一下系统中的孤包、残留包以及没有合并的配置文件。为此,先安装
$ sudo yum install yum-utils
随后执行
$ sudo package-cleanup --orphans
查看孤包列表,根据需要删除孤包列表中的某些软件。注意,要小心列表中的包,因为里面的包并不一定都是没用的包。再来执行
$ sudo package-cleanup --leaves
查看残余包列表,根据需要删除其中的某些包。作为准备工作的最后一步,记得合并一下所有变更过的配置文件:
$ sudo yum install rpmconf $ sudo rpmconf -a
根据提示查看更改细节,然后决定合并的方式。
现在可以开始跨版本升级 Fedora 了,为了防止系统更新过程中 X Window 不能正常工作,请切换到控制台完成以下操作(即 Alt-F1~F6)。先升级 YUM 工具:
$ sudo yum update yum --releasever=20 --disablerepo=* --enablerepo=fedora --enablerepo=updates-testing --disableplugin=presto
注意上述命令中禁用了 yum-presto 插件,以防版本差距较大的 delta 包破坏系统的更新过程。另外,此过程中还可能会出现 GPG 公匙验证错误,可用下面的方式暂时忽略它
$ sudo yum update yum --releasever=20 --disablerepo=* --enablerepo=fedora --enablerepo=updates-testing --nogpgcheck --disableplugin=presto
当然,也可以参看 https://fedoraproject.org/keys 页面中的信息,然后根据提示注入 GPG 公匙,例如 Fedora 20(Branched Release) 的公匙注入方法:
$ sudo rpm --import https://fedoraproject.org/static/246110C1.txt
包管理器 YUM 升级成功之后,可以升级系统了(这是一件相对冒险的事情,记得备份好系统):
$ sudo yum distro-sync --releasever=20 --disablerepo=* --enablerepo=fedora --enablerepo=updates-testing --nogpgcheck --disableplugin=presto
这一步将会经过漫长的时间处理包之间的依赖关系,如果一切顺利的话,便可直接更新系统版本了。倘若这一步仍有依赖性无法解决,那么有三个方法可以解决:一、根据提示暂时删除那些破坏依赖关系的包,不过对我们工作有用的那些包,最好不要用这招,以免日后忘了重新安装它;二、与升级 YUM 的方法一样,单独升级某几个破坏依赖的包,例如
$ sudo yum update python-pexec --releasever=20 --disablerepo=* --enablerepo=fedora --enablerepo=updates-testing --nogpgcheck --disableplugin=presto
三、利用 --skip-broken 暂时跳过无法解决依赖的那些包:例如
$ sudo yum distro-sync --releasever=20 --disablerepo=* --enablerepo=fedora --enablerepo=updates-testing --nogpgcheck --disableplugin=presto --skip-broken
如果开始执行上面这一行命令的话,会有大面积的包需要下载与更新,这就需要我们耐心等待。
长时间等待之后,Fedora 18 系统顺利更新到了 Fedora 20(Branched Release)。不过版本更新过程还没有结束,下面开始做必要的检查工作。首先,确认 Fedora 18 中的第三方源中哪些源还能正常工作:
$ sudo yum repolist
根据提示信息,手动禁用那些无法工作的源,例如
$ sudo yum-config-manager --disable livna
接着再来确认 Fedora 20(Branched Release) 的最小系统是否已经更新完成:
$ sudo yum update "Minimal Install"
重新安装 Fedora 系统的引导程序,目前 grub2 是 Fedora 20 中的引导程序,因此
$ sudo grub2-install /dev/sda $ su -c 'grub2-mkconfig -o /boot/grub2/grub.cfg'
修复一下初始话脚本的启动次序
$ su # cd /etc/rc.d/init.d; for f in *; do [ -x $f ] && /sbin/chkconfig $f resetpriorities; done
最后,大范围的版本升级可能造成系统配置的更改,请再次运行下述命令合并配置文件
$ sudo rpmconf -a
好了,基本上重启之前的准备工作已经完成了。重启系统吧:
$ sudo reboot
尽管 Fedora 20 的系统能够启动起来,不过,由于目前刚进入 Branched Release 不久,系统里面的包还不是很完整。例如,通过下述方式可查看系统中残留的 Fedora 18 的软件包:
$ sudo package-cleanup --leaves
这个列表中有一部分包来自于原先 Fedora 18 系统的第三方源。对于这些包,我们不必急着删除它们,可以等到第三方源更新到 Fedora 20 的时候再升级它们。