CentOS6.x到CentOS7.x的在线升级

缘起

相比Debian系的Linux发布版(如DebianUbuntu),都能很好地支持在线大版本升级,RedHat系的Linux发布版(如RedHatCentOS),其大版本升级一直是为人所诟病的问题。

这种情况到了CentOS7,终于有了改观:RedHat放出了UpgradeTool,同样,CentOS自然也有了。

注意:如果已经是CentOS6.7以后的版本了,在线升级到CentOS7可能会有问题,因为CentOS6.7以后版本有些软件的版本已经比CentOS7还高了,升级可能会出问题。

具体步骤

安装软件

1
2
3
4
5
6
7
8
9
10
11
cat <<EOF >/etc/yum.repos.d/upgradetool.repo
[upg]
name=CentOS-$releasever - Upgrade Tool
baseurl=http://dev.centos.org/centos/6/upg/x86_64/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
EOF

yum -y install redhat-upgrade-tool \
preupgrade-assistant-contents;

升级前可行性分析

1
2
3
4
5
preupg -l; # 列出预升级的可用内容,多半是"CentOS6_7"
preupg -s CentOS6_7; # 这里的"CentOS6_7"是上个命令的输出
# 上面这个命令生成的报告需要看看,主要是关于升级的风险的
# 个人经验就是升级前尽量将非官方的rpm安装的软件都删掉
# 安装的第三方的rpm包越少,升级的风险越小

开始升级

1
2
3
4
5
6
7
8
9
10
11
12
rpm --import \
http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-7;
centos-upgrade-tool-cli --network 7 \
--instrepo=http://mirror.centos.org/centos/7/os/x86_64/;
# 上面这个命令的--instrepo参数用的是官方的repo,
# 如果自己搭建的有repo镜像(一般都有吧),用自己的就好
# 需要注意的是,这个镜像目录下需要有文件.treeinfo
# 没有的话就去官方的位置拷贝一个下来,记得版本号要一致哟
reboot; # 最后,重启机器即可
# 注意:这次重启到能ssh登录需要的时间可能比较长,
# 因为第一次重启后系统会自动升级,
# 升级完毕以后会再次自动重启,这次起来后才能ssh登录

收尾工作

机器起来后,登上服务器,需要做一些擦屁股的工作,比如,看还有没有CentOS6的软件残余,用命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 首先看能否删掉这些el6的软件包
for i in $(rpm -qa | grep -i el6)
do
rpm -e $i
done

# 再看还剩哪些el6的软件包
rpm -qa | grep -i el6;
# 再尝试删掉依赖于这些没删掉的el6软件包的软件包
# 再删掉el6的软件包
# 最后,降级剩下的el6的软件包
# 因为最后剩的这些软件包是版本比el7上的新的又不好被删除的
# 所以把最后这部分”降级“到el7的版本即可
for i in $(rpm -qa | grep -i el6 | cut -d'-' -f1)
do
yum downgrade $i
done

有的话要么想办法删掉,要么想办法将其升级到el7的相应的软件包。

可能出的错误

如果preupg -s CentOS6_7;时出了如下的错误:

I/O warning : failed to load external entity “/usr/share/openscap/xsl/security-guide.xsl”
compilation error: file /usr/share/preupgrade/xsl/preup.xsl line 40 element import
xsl:import : unable to load /usr/share/openscap/xsl/security-guide.xsl
I/O warning : failed to load external entity “/usr/share/openscap/xsl/oval-report.xsl”
compilation error: file /usr/share/preupgrade/xsl/preup.xsl line 41 element import
xsl:import : unable to load /usr/share/openscap/xsl/oval-report.xsl
I/O warning : failed to load external entity “/usr/share/openscap/xsl/sce-report.xsl”
compilation error: file /usr/share/preupgrade/xsl/preup.xsl line 42 element import
xsl:import : unable to load /usr/share/openscap/xsl/sce-report.xsl
OpenSCAP Error:: Could not parse XSLT file ‘/usr/share/preupgrade/xsl/preup.xsl’ [oscapxml.c:416]
Unable to open file /root/preupgrade/result.html
Usage: preupg [options]

preupg: error: [Errno 2] No such file or directory: ‘/root/preupgrade/result.html’

那么应该是openscap的版本过高,需要降级到upg里的版本。

1
2
yum downgrade openscap;
# 也许CentOS6的版本太高,需要降级到upg的版本

参考