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程序无法解决这些软件依赖问题而报错。