CentOS Project 生命周期:
CentOS Project 是一个社区驱动的开源项目,旨在提供与红帽企业 Linux (RHEL) 兼容的免费操作系统。然而,CentOS Project 已经停止了对 CentOS Linux 8 和 7的支持:
- 2021 年 12 月 31 日:停止对 CentOS Linux 8 的支持。
- 2024 年 6 月 30 日:停止对 CentOS Linux 7 的支持。
convert2rhel 转换限制:
为了帮助用户从 CentOS 迁移到红帽企业 Linux (RHEL),红帽提供了 convert2rhel 工具。该工具允许用户将 CentOS 系统转换为 RHEL,但有一些重要的限制,convert2rhel 工具只支持从一个主版本的 CentOS 转换到对应版本的 RHEL,不能跨主版本转换。这意味着:
- 从 CentOS 7.x 到 RHEL 7.x:例如,从 CentOS 7.9 只能直接转换到 RHEL 7.9。
- 从 CentOS 8.x 到 RHEL 8.x:例如,从 CentOS 8.4 只能直接转换到 RHEL 8.4。
如果需要从 CentOS 7.9 升级到 RHEL 8,用户需要先将 CentOS 7.9 转换为 RHEL 7.9,然后再进行一次完整的系统升级到 RHEL 8。
convert2rhel 转换步骤:
1.查看 centos 版本
cat /etc/system-release
convert2rhel只允许转换以下版本:
Allowed versions are: ['9.10', '9.9', '9.8', '9.7', '9.6', '9.5', '9.4', '9.3', '9.2', '9.1', '9.0', '9', '8.10', '8.9', '8.8', '8.7', '8.6', '8.5', '8.4', '8', '7.9']
2.安装 convert2rhel 转换工具
CentOS 7下:
yum install https://cdn-public.redhat.com/content/public/addon/dist/convert2rhel/server/7/7Server/x86_64/os/Packages/c/convert2rhel-2.1.0-1.el7.noarch.rpm
===========================================================
CentOS 8下:
yum install https://cdn-public.redhat.com/content/public/addon/dist/convert2rhel8/8/x86_64/os/Packages/c/convert2rhel-2.1.0-1.el8.noarch.rpm
3.配置本地 RHEL YUM 源
CentOS 7下:
1、将rhel-server-7.9-x86_64-dvd.iso 文件传到 CentOS 中
2、创建挂载目录,挂载iso镜像文件到目录
mkdir -p /mnt/rheliso
mount -o loop rhel-server-7.9-x86_64-dvd.iso /mnt/rheliso
虚拟机用:
mount -o loop /dev/cdrom /mnt/rheliso
3、配置本地 RHEL YUM 源
cat > /etc/yum.repos.d/rhel.repo << EOF
[RHEL7]
name=Red Hat Enterprise Linux 7
baseurl=file:///mnt/rheliso
gpgcheck=0
enabled=0
EOF
===========================================================
CentOS 8下:
1、将rhel-8.4-x86_64-dvd.iso 文件传到 CentOS 中
2、创建挂载目录,挂载iso镜像文件到目录
mkdir -p /mnt/rheliso
mount -o loop rhel-8.4-x86_64-dvd.iso /mnt/rheliso
虚拟机用挂载光驱的方式:
mount -o loop /dev/cdrom /mnt/rheliso
3、配置本地 RHEL YUM 源
cat > /etc/yum.repos.d/rhel.repo << EOF
[RHEL8.4-BaseOS]
name=Red Hat Enterprise Linux 8.4 BaseOS
baseurl=file:///mnt/rheliso/BaseOS/
gpgcheck=0
enabled=0
[RHEL8.4-AppStream]
name=Red Hat Enterprise Linux 8.4 AppStream
baseurl=file:///mnt/rheliso/AppStream/
gpgcheck=0
enabled=0
EOF
4.开始转换
CentOS 7转换命令:
# 执行转换(转换有风险需提前测试)
CONVERT2RHEL_INCOMPLETE_ROLLBACK=1 CONVERT2RHEL_SKIP_KERNEL_CURRENCY_CHECK=1 CONVERT2RHEL_OUTDATED_PACKAGE_CHECK_SKIP=1 convert2rhel --no-rhsm --disablerepo=* --enablerepo=RHEL7
CentOS 8转换命令:
# 如/etc/system-release文件末尾带有空格则删除,避免不识别操作系统版本
# 执行转换(转换有风险需提前测试)
CONVERT2RHEL_INCOMPLETE_ROLLBACK=1 CONVERT2RHEL_SKIP_KERNEL_CURRENCY_CHECK=1 CONVERT2RHEL_OUTDATED_PACKAGE_CHECK_SKIP=1 convert2rhel --no-rhsm --disablerepo=* --enablerepo RHEL8.4-BaseOS --enablerepo RHEL8.4-AppStream
查看转换后的系统版本:
cat /etc/redhat-release
最后重启,使 RHEL 内核生效:
reboot
(可选步骤) 转换后的系统没有安装 RHEL 订阅软件 subscription-manager,因此要管理 RHEL 订阅,需要安装以下软件包:
yum install subscription-manager subscription-manager-rhsm-certificates --disablerepo=* --enablerepo RHEL8.4-BaseOS --enablerepo RHEL8.4-AppStream
查看 RHEL 内核版本:
uname -a
系统转换后需修复以下几个重要的漏洞:
- 1、如果RHEL 8内核版本为kernel-core-4.18.0-305.el8.x86_64,则存在CVE-2021-43267漏洞,还需要升级内核版本到 4.18.0-348.2.1.el8_5.x86_64。
https://access.redhat.com/security/cve/CVE-2021-43267
- 2、修复polkit本地权限提升漏洞(CVE-2021-4034),升级polkit版本:
https://access.redhat.com/security/cve/cve-2021-4034
- 3、修复Sudo缓冲区溢出漏洞(CVE-2021-3156),升级sudo版本:
https://access.redhat.com/security/cve/cve-2021-3156
5.解决报错
1、Problem: The operation would result in removing the following protected packages: systemd
原因:
虽然我们跳过了过时软件包的检查(CONVERT2RHEL_OUTDATED_PACKAGE_CHECK_SKIP=1),但是package_updates.py里get_total_packages_to_update()还是会执行,导致检查不通过。
解决办法:
修改/usr/lib/python3.6/site-packages/convert2rhel/actions/system_checks/package_updates.py源码,给packages_to_update变量赋值为空,跳过检查。
packages_to_update = sorted(get_total_packages_to_update())
修改为:
packages_to_update = []
根本原因:
因操作系统运行比较久,陆续安装了很多三方软件包,其中一些软件包会依赖特定的systemd版本,systemd无法进行升级或者替换,导致convert2rhel程序无法解决这些软件依赖问题而报错。