随着 CentOS Project 宣布将分别于 2021 年 12 月 31 日和 2024 年 6 月 30 日停止对 CentOS Linux® 版本 8 和版本 7 更新与发布新版本,许多机构开始重新评估自身的 IT 环境, 并开始规划迁移事宜,2024 年已经到来,那么距离 终止日期 2024年6月30日已经不远了。
近 20 年来,CentOS Linux 一直是许多人心中服务器工作负载的首选系统。然而随着 CentOS Linux 7最后一个实时版本终止其生命周期,这也意味着相关存储库将会关闭,不再有新版本面世,也不会有新的更新发布。对于长期依赖 CentOS 的企业来说,这无疑是一个转折点,考虑后续替代方案已经成为很多企业面临的问题。
01 应对策略
如何应对 CentOS 的生命周期终结?
1. 评估现有环境在考虑迁移方案之前,首先要对现有的服务器环境进行彻底的评估和盘点。这包括了解每台服务器的用途、配置和兼容性等。
2. 考虑使用 CentOS Stream对于某些特定场景,比如硬件或软件供应商测试其产品的兼容性,CentOS Stream 是一个不错的选择。但对于生产环境,特别是关键业务应用,CentOS Stream 可能并不是最佳选择,因为它的支持周期较短,且缺乏就地升级机制。
3. 选择 RHEL:更多的不仅仅是支持转向 RHEL,意味着您将获得一个全面的业务合作伙伴。RHEL 不仅提供长达 10 年的支持周期,还有每 6 个月的可预测版本发布节奏、延长支持选项等。此外,RHEL 还提供了专业的技术分析和全天候的支持服务。
4. 从免费到收费虽然 CentOS 是一个免费的社区支持系统,但从长远来看,企业可能需要为其付出更多的时间和资源成本。而 RHEL 虽然是付费的,但提供了更全面的支持和保障。
5. 迁移路径. 使用 Convert2RHEL 工具进行就地转换这是一种简便快捷的转换方式,可以直接将 CentOS 系统转换为 RHEL 系统,而不会对现有应用造成太大的影响。
本文通过红帽官方提供的Convert2RHEL工具演示怎么将centos7转成redhat系统,红帽支持从 CentOS Linux 和 Oracle Linux 转换到 RHEL 7 和 8。
02 转换说明
centos停更时间表
确定现有 CentOS和升级的RHEL目标版本
- convert2rhel 工具支持对 CentOS 7/8 进行转换(由于 CentOS 6 已经停更,因此已不再被支持,centos6需要先升级)。
- convert2rhel 只支持从一个主版本的 CentOS 转换到对应版本的 RHEL,不能跨主版本转换。例如从 CentOS 7.9 只能直接转换到 RHEL 7.9,而不能直接转换到 RHEL 8
- convert2rhel 只支持直接将最后一个次要版本的 CentOS 7/8 转换到对等版本的 RHEL 7/8,目前分别是 CentOS 7.9 和 CentOS 8.5。如果被转换的 CentOS 7/8 低于以上版本,则需要先进行升级。例如你的系统为centos7.4系统,需要先升级到centos7.9,然后再转成redhat7.9.
- 由于每个特定次要版本的 CentOS 7/8 所包含的内核版本也会定期更新(见 CentOS 内核版本 、RHEL 内核版本),因此即便是相同次要版本的 CentOS 7.9 和 RHEL 7.9,他们使用的内核版本也会有微小差异。转换过程不能对内核版本进行降级,即无法对内核已经升级到 3.10.0-1160.105.1.el7 的 CentOS 7.9 转换到内核为 3.10.0-1160.el7 的 RHEL 7.9。因此在转换时需要控制好 CentOS 和RHEL使用的Yum 源,一般 ISO 中包含的是稍早版本的介质,而官方在线 Yum Repo一般都是最新版本介质。
转换限制
- 有以下情况的 CentOS 无法直接将其转换到 RHEL
- 不支持对使用 FIPS 模式运行的 CentOS 进行转换。
- 不支持对带有 RHEL内核模块之外的运行环境进行直接转换(例如专用应用程序、设备动程序的内核模块)。可以先将这些内核模块禁用,在转换后再启动。
操作系统转换是如何进行的?
自动转换过程在运行的系统上执行。Convert2RHEL 工具将原始 Linux 发行版本中的所有 RPM 软件包替换为其对应的 RHEL 版本。在转换过程结束时,需要重启系统来引导到 RHEL 内核。
备注:对于只存在于原始发行版本中、且在 RHEL 软件仓库中没有对应软件包的软件包,或在原始发现版本中存在的、不是来自原始 Linux 发行版本或 RHEL 的第三方软件包,都不会受到转换的影响。
支持的转换和不支持的转换的区别?
红帽允许从多个不同的基于 RHEL 的操作系统转换到 RHEL。但是,如果是红帽不支持的转换,则代表转换过程没有经过红帽测试,您需要自己承担转换可能会带来的风险。对于红帽支持的转换,代表红帽已对转换过程进行了全面的测试,下面是支持的转换列表
03 实操阶段
CentOS 转换 RHEL 示例 转换示例环境 本示例模拟以下环境,使用 RHEL 7.9 ISO 文件作为转换使用的 yum repository 源,因此需要以下环境即可:
当前可运行的 CentOS 7.9 操作系统 RHEL 7.9 ISO 文件(rhel-server-7.9-x86_64-dvd.iso) 从CentOS 至 RHEL 转换过程 查看当前 CentOS版本
$ cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
在 CentOS 中安装 convert2rhel 方法1:在 CentOS 中执行命令,分别下载 convert2rhel.reop、Red Hat GPG 密钥、SSL 证书,然后安装 convert2rhel 工具。
$ curl -o /etc/yum.repos.d/convert2rhel.repo https://ftp.redhat.com/redhat/convert2rhel/7/convert2rhel.repo
$ curl -o /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release https://www.redhat.com/security/data/fd431d51.txt
$ curl --create-dirs -o /etc/rhsm/ca/redhat-uep.pem https://ftp.redhat.com/redhat/convert2rhel/redhat-uep.pem
$ yum -y install convert2rhel
方法2:在 CentOS 中执行命令,基于https://github.com/oamg/convert2rhel安装convert2rhel
$ yum install -y https://github.com/oamg/convert2rhel/releases/download/v1.6.0/convert2rhel-1.6.0-1.el7.noarch.rpm
配置本地RHEL YUM Repository 将 rhel-server-7.9-x86_64-dvd.iso 文件传到 CentOS 中。
$ scp rhel-server-7.9-x86_64-dvd.iso root@<CENTOS-HOST>:/root/
在CentOS 中执行命令,挂载RHEL的ISO文件
$ mkdir -p /mnt/rhiso
$ mount -o loop rhel-server-7.9-x86_64-dvd.iso /mnt/rhiso
在 CentOS 中执行命令,用挂载的RHEL文件配置 yum repository。
$ cat > /etc/yum.repos.d/rhel.repo << EOF
[RHEL7]
name=Red Hat Enterprise Linux 7
baseurl=file:///mnt/rhiso
enabled=1
EOF
如果是CentOS 8,需要执行以下命令。
$ cat > /etc/yum.repos.d/rhel.repo << EOF
[RHEL8-BaseOS]
name=Red Hat Enterprise Linux 8.0 BaseOS
baseurl=file:///mnt/rhiso/BaseOS/
enabled=1
[RHEL8-AppStream]
name=Red Hat Enterprise Linux 8.0 AppStream
baseurl=file:///mnt/rhiso/AppStream/
enabled=1
EOF
执行转换过程,执行以下命令,如果没有问题,convert2rhel 工具将自动完成转换 RHEL 7.9 的所有过程。
$ convert2rhel --disable-submgr --disablerepo=* --enablerepo=RHEL7 -y
。。。
[12/04/2021 04:38:52] TASK - [Prepare: Gather system information] *******************************
Name: CentOS Linux
OS version: 7.9
Architecture: x86_64
Config filename: centos-7-x86_64.cfg
Skipping the execution of 'rpm -Va'.
。。。
[12/04/2021 04:39:05] TASK - [Convert: Prepare kernel] ******************************************
Installing RHEL kernel ...
Loaded plugins: fastestmirror, product-id, search-disabled-repos, subscription-
: manager
。。。
Successfully downloaded the kernel-3.10.0-1160.el7 package.
Replacing CentOS Linux kernel-3.10.0-1160.el7 with RHEL kernel with the same NEVRA ...
RHEL kernel-3.10.0-1160.el7 installed.
Verifying that RHEL kernel has been installed
RHEL kernel has been installed.
Searching for non-RHEL kernels ...
Removing non-RHEL kernels
Package Vendor/Packager Repository
------- --------------- ----------
kernel-tools-3.10.0-1160.el7.x86_64 CentOS anaconda
kernel-tools-libs-3.10.0-1160.el7.x86_64 CentOS anaconda
Removing package: kernel-tools-3.10.0-1160.el7.x86_64
Removing package: kernel-tools-libs-3.10.0-1160.el7.x86_64
。。。
。。。
Removed:
basesystem.noarch 0:10.0-7.el7.centos
dhclient.x86_64 12:4.2.5-82.el7.centos
dhcp-common.x86_64 12:4.2.5-82.el7.centos
dhcp-libs.x86_64 12:4.2.5-82.el7.centos
libxml2.x86_64 0:2.9.1-6.el7_9.6
libxml2-python.x86_64 0:2.9.1-6.el7_9.6
plymouth.x86_64 0:0.8.9-0.34.20140113.el7.centos
plymouth-core-libs.x86_64 0:0.8.9-0.34.20140113.el7.centos
plymouth-scripts.x86_64 0:0.8.9-0.34.20140113.el7.centos
yum.noarch 0:3.4.3-168.el7.centos
Installed:
basesystem.noarch 0:10.0-7.el7
dhclient.x86_64 12:4.2.5-82.el7
dhcp-common.x86_64 12:4.2.5-82.el7
dhcp-libs.x86_64 12:4.2.5-82.el7
libxml2.x86_64 0:2.9.1-6.el7.5
libxml2-python.x86_64 0:2.9.1-6.el7.5
plymouth.x86_64 0:0.8.9-0.34.20140113.el7
plymouth-core-libs.x86_64 0:0.8.9-0.34.20140113.el7
plymouth-scripts.x86_64 0:0.8.9-0.34.20140113.el7
yum.noarch 0:3.4.3-168.el7
Dependency Installed:
redhat-logos.noarch 0:70.7.0-1.el7
Complete!
Received return code: 0
如果是 CentOS 8,执行以下命令:
$ convert2rhel --disable-submgr --disablerepo=* --enablerepo RHEL8-BaseOS --enablerepo RHEL8-AppStream -y --no-rpm-va
执行成功,查看系统版本,确认已经转换到 RHEL 7.9了
$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.9 (Maipo)
最后重启及完成转换。
$ reboot
转换后由于CentOS没有安装 subscription-manager,因此要注册RHEL订阅,需要运行以下命令安装相关软件包
$ yum -y install subscription-manager subscription-manager-rhsm-certificates
04 FAQ
问题一、centos7.9以下执行转换步骤会有如下错误,需要先升级到指定版本才能转换
问题二、第三方模块导致转换失败
官方给出的解决方式参考:https://access.redhat.com/solutions/41278
此处解决方法
#step1、卸载报错的模块
modprobe -r virtio_balloon
# step2、将模块加入给名单
echo "blacklist virtio_balloon" >> /etc/modprobe.d/local-dontload.conf
#step3、重启不再加载此模块
echo "install virtio_balloon /bin/false" >> /etc/modprobe.d/local-dontload.conf
问题三、内核不匹配问题
安装了rpm包后,需要重启一次操作系统,重启后会切换内核版本为1160,然后再执行一遍命令转换即可