使用”convert2rhel”工具将CentOS转换为RHEL
首先
本文介绍了使用工具将即将到达终止生命周期(EOL)的CentOS转换为RHEL(Red Hat Enterprise Linux)的方法。虽然不依赖于特定环境,但还会共享在Azure环境中运行的CentOS 7上执行工具的结果进行验证。最后,还提供了相关的URL供参考,请务必一并确认。
1-1. 关于CentOS EOL的复习
2020年末左右发布并引起热议的CentOS的EOL问题,CentOS 8已于2021年12月31日达到EOL,而CentOS 7也计划在明年的2024年6月30日达到EOL。(CentOS 9将不会发布)
取而代之的是新的CentOS Stream项目开始启动,需要注意的是它与传统的CentOS在定位上有一些不同。
就RHEL而言,迄今为止的CentOS可以说是一个下游克隆。换句话说,它在RHEL的发布周期之后提供了重新构建的相同版本的源代码,并且就像RHEL一样,可以相对稳定地长时间运行。
一方面,CentOS Stream作为上游分支,被定位为用于开发的分支。由于会不断进行最新软件包的滚动发布,因此可以将其视为面向常规用户的操作系统,用户可以随时更新到最新软件包(更新不会造成问题)。例如,对于过去在CentOS上运营系统,并在特定次要版本上进行详尽的操作验证后再部署的用户,可能会对发布模式的变更表示担忧,因为这涉及到风险接受的问题。
2. 关于转型的问题
在从CentOS迁移到新的操作系统时,我们需要简单地整理迁移目标操作系统的选择和迁移方式。
2-1. 选择迁移先操作系统
关于CentOS的迁移选择,除了CentOS Stream外,还有根据需求可以有几个选择。
其中之一是RHEL,作为最初的上游选项。在本文中,我们将基于此选择介绍后续实际迁移到RHEL的方法。
除了Alma Linux/Rocky Linux这类社区系Linux,以及RHEL系列以外,还有Ubuntu/Debian等选择。此外,虽然不是简单的迁移,但可以考虑将应用程序容器化,并迁移到docker/k8s等容器环境。
2-2. 选择迁移方式的选项
迁移方式可以大致分为两种,一种是环境重建,另一种是利用工具进行就地迁移。
前者的再部署是一种手动进行操作系统配置和软件包安装等步骤的方式。如果目标操作系统是RHEL系列,由于在操作系统配置方面有很多共同点,因此重新配置相对容易。此外,如果原始迁移操作系统已经通过Ansible等自动配置,则许多步骤可以委托给Ansible,因此这种方法也是相当合理的。
我们还将考虑使用后者进行in-place迁移的工具支持。如果目标操作系统是RHEL系列,那么利用工具进行in-place迁移的方式将涉及下载和配置目标操作系统的软件仓库以及从中提供的软件包,然后切换内核和grub配置以将系统迁移到新的操作系统。在2-1中提到的目标操作系统示例中,Rocky Linux、Alma Linux和RHEL都提供了相应的迁移工具。在本文中,我们还将介绍使用”convert2rhel”工具来执行RHEL的in-place迁移。
2-3. “Convert2RHEL工具是什么?”
通过Red Hat提供的操作系统迁移工具,您可以在运行的原始操作系统上下载并执行该工具,从而完成切换到RHEL存储库、下载软件包、重新配置kernel/grub,并最终在原地的情况下将操作系统转换为RHEL(保持运行中)。该工具适用于不仅仅是CentOS,还适用于Alma Linux、Rocky Linux和Oracle Linux等其他操作系统。
因为我对convert2rhel软件包很感兴趣,所以我轻轻地浏览了一下它的文件结构。主要是由Python程序组成,内部似乎使用了rpm模块等。
请注意,尽管后面将进行说明,但此工具可能无法转换所有内容。举例来说,第三方软件包或用户创建和配置的文件和目录并非此工具的转换对象,将被跳过。在工具运行期间,会要求您确认并同意跳过这些内容。需要特别注意的是,即使在目标操作系统上也不能保证这些内容能够正常运行,因此在迁移后需要进行充分的测试。
3. 工具的使用步骤
我将介绍如何使用convert2rhel工具将CentOS转换为RHEL的步骤。由于目前CentOS8已经到达了EOL,因此我想先在Azure上部署CentOS7.9,并将其迁移到RHEL7.9。
3-1. 规定前提条件和做好事前准备
我会总结几个重要的前提条件。请同时参考convert2rhel工具的文档以获取详细信息。
-
- 移行元OSのマイナーバージョンは固定で、CentOSは7.9もしくは8.5のみが対象
-
- インターネットへの接続環境(ツール本体およびリポジトリからパッケージをダウンロードするため)
- RHELサブスクリプション
以下是有关需要最后一个RHEL订阅的补充说明。
如果迁移目标操作系统是RHEL,那么自然需要使用RHEL的订阅。在执行convert2rhel工具时,需要输入这个订阅信息。
如果是为了开发和验证目的,可以使用评估版订阅或Red Hat Developer订阅,请事先做好准备。关于Developer订阅,我建议您阅读这篇博客,内容很详细。
还有一件事,无需多言,我们要确保及时进行系统备份。俗话说,未雨绸缪,就是这个道理。
3-2. 验证环境的信息。
这次我们在Azure上进行了以下环境的验证。convert2rhel可以在Azure以外的环境中执行,但是由于在Azure环境中执行时有一些特别注意事项,所以我想在后续中提及。
3-3. 工具执行步骤
1. 检查执行前的版本
为了记录,我们将在执行之前确认操作系统/内核的版本信息。
$ cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
$ uname -r
3.10.0-1160.83.1.el7.x86_64
更新 VM
在使用Convert2RHEL工具进行转换时,源CentOS版本必须为7.9或8.5。在工具运行时,还会检查每个版本的内核版本是否是最新的,因此根据需要,请执行yum update和reboot命令。
在下面的示例中,内核版本从3.10.0-1160.83.1更新到了最新版本3.10.0-1160.102.1,通过执行yum update和reboot命令实现了更新。
$ sudo yum clean all
$ sudo yum –y update
$ sudo reboot
...
$ uname -r
3.10.0-1160.102.1.el7.x86_64
安装Red Hat GPG密钥和convert2rhel软件源。
安装用于 convert2rhel 的存储库和 Red Hat GPG 密钥。
$ sudo curl -o /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release https://www.redhat.com/security/data/fd431d51.txt
$ sudo curl -o /etc/yum.repos.d/convert2rhel.repo https://ftp.redhat.com/redhat/convert2rhel/7/convert2rhel.repo
4. 安装convert2rhel并配置ini文件
由于存储库已经设置好了,让我们使用yum install命令来安装工具。
在运行工具之前,我们会将迁移后的RHEL订阅信息配置到ini格式的设置文件中。(在工具运行时也可以通过选项传递信息,但将其记录在ini文件中更为安全。)
$ sudo yum -y install convert2rhel
$ sudo vi /etc/convert2rhel.ini
我将在ini文件中记录订阅管理器的信息。根据帐户的不同,我会选择以下两种情况之一进行记录。
[subscription_manager]
org = <organization_ID>
activation_key = <activation_key>
以下是記錄Red Hat帳戶信息的示例。使用其中一種方法即可。
[subscription_manager]
username = <username>
password = <password>
5. 运行convert2rhel工具之前的诊断分析
在开始执行迁移之前,可以进行原始分析。通过执行测试来判断是否可以将系统转换为RHEL,并生成分析报告。通过确认这一点,可以事先检查迁移失败的可能原因。
$ sudo convert2rhel analyze
执行convert2rhel工具
如果准备工作都完成了,就可以开始执行工具了。
还有一种方法可以在这里直接指定选项,而不必在ini文件中记录订阅管理器的信息,具体请查看”convert2rhel -h”命令的选项信息。
$ sudo convert2rhel
由于中途需要进行几次用户确认,请适时进行输入。此外,工具执行时的日志将被输出到”/var/log/convert2rhel/convert2rhel.log”文件中,您可以另行确认。
以下是在工具开始运行后立即询问有关数据收集的同意的部分。在这里,我输入 “Y” 以继续。
...
[2023-11-14T07:57:01+0000] TASK - [Prepare: Inform about telemetry] **********************************
The convert2rhel utility uploads the following data about the system conversion to Red Hat servers for the purpose of the utility usage analysis:
- The Convert2RHEL command as executed
- The Convert2RHEL RPM version and GPG signature
- Success or failure status of the conversion
- Conversion start and end timestamps
- Source OS vendor and version
- Target RHEL version
- Convert2RHEL related environment variables
To disable the data collection, use the 'CONVERT2RHEL_DISABLE_TELEMETRY=1' environment variable.
Continue with the system conversion? [y/n]:
在Azure环境中运行时,一段时间后会显示有关跳过第三方包的警告。这是因为Azure环境中已经预先安装了一些管理代理。
正如前面所述,这些第三方软件包没有包括在转换范围内(因为它们不是CentOS或RHEL提供的软件包)。在这里,按下y键继续进行转换操作。
...
[2023-11-14T08:49:48+0000] TASK - [Pre-conversion analysis report] ***********************************
========== Warning (Review and fix if needed) ==========
(WARNING) LIST_THIRD_PARTY_PACKAGES::THIRD_PARTY_PACKAGE_DETECTED_MESSAGE - Third party packages detected
Description: Third party packages will not be replaced during the conversion.
Diagnosis: Only packages signed by CentOS Linux are to be replaced. Red Hat support won't be provided for the
following third party packages:
auoms-2.5.2-52.x86_64, omi-1.7.3-0.x86_64, scx-1.7.3-0.x86_64, omsconfig-1.3.0-0.x86_64,
WALinuxAgent-2.7.3.0-1_ol001.el7.noarch, omsagent-1.17.2-0.x86_64, azure-repo-svc-1.0-0.el7.centos.noarch
Remediation: N/A
WARNING - ********************************************************
WARNING - The tool allows rollback of any action until this point.
WARNING - By continuing all further changes on the system will need to be reverted manually by the user, if necessary.
WARNING - ********************************************************
Continue with the system conversion? [y/n]:
当转换工作最终完成时,屏幕将呈现如下所示的界面。
...
[2023-11-14T09:08:37+0000] TASK - [Final: Update GRUB2 configuration] ********************************
Backing up /boot/grub2/grub.cfg.
Backing up /boot/grub2/grubenv.
Successfully updated GRUB2 on the system.
[2023-11-14T09:08:40+0000] TASK - [Final: Remove temporary folder /var/lib/convert2rhel/] ************
Temporary folder /var/lib/convert2rhel/ removed
[2023-11-14T09:08:40+0000] TASK - [Final: Check kernel boot files] ***********************************
Checking if the '/boot/vmlinuz-3.10.0-1160.102.1.el7.x86_64' file exists.
Checking if the '/boot/initramfs-3.10.0-1160.102.1.el7.x86_64.img' file is valid.
The initramfs and vmlinuz files are valid.
Writing breadcrumbs to '/etc/migration-results'.
Writing RHSM custom facts to '/etc/rhsm/facts/convert2rhel.facts'.
[2023-11-14T09:08:42+0000] TASK - [Final: Update RHSM custom facts] **********************************
Updating RHSM custom facts collected during the conversion.
RHSM custom facts uploaded successfully.
Conversion successful!
WARNING - In order to boot the RHEL kernel, restart of the system is needed.
按照指示重新启动操作系统一次。
$ sudo reboot
启动操作系统后,我们可以检查redhat-release文件的内容。确认它正确地显示为RHEL7.9版本。
如果感兴趣的话,我们还可以使用yum命令确认各种软件包是否已经安装为RHEL版本。
$ sudo cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.9 (Maipo)
7. 将Azure的许可模型从BYOS更改为PAYG选项。
这个步骤是Azure独有的。
在Azure中,虚拟机的使用费用通常是按量计费模式(PAYG:按使用付费),但对于使用Windows或RHEL等操作系统的虚拟机,可以将许可费用添加到虚拟机的费用中,并以PAYG的方式付款。
一方面,convert2rhel工具基本上假设用户使用自己拥有(带来的)RHEL订阅(BYOS: Bring Your Own Subscription)来操作迁移至RHEL。
然而,在Azure中,可以在VM部署时或部署之后更改此许可模型选择。这次,我们最终希望将RHEL的订阅费用纳入按使用量计费模式中。为此,我们将按照官方文档中提供的步骤,逐步执行从BYOS到PAYG模型的更改。
为了将其转换为PAYG模型,您需要首先将扩展功能(VM Extension)引入虚拟机。请按照以下步骤将AHBForRHEL扩展功能引入虚拟机。
请注意,您在此处运行的命令操作的是虚拟机本身,而不是RHEL,因此请注意不是在RHEL上执行,而是在外部执行。可以在之前将az CLI安装到Shell执行环境中,但如果仅使用此步骤,则建议使用Azure门户中的Cloud Shell执行,更加简便。
### 本コマンドは移行対象OSの外から実行します
$ resource_group="xxx" ## VMが属するリソースグループ名
$ vm_name="xxx" ## VM名
$ az vm extension set \
--resource-group $resource_group \
--vm-name $vm_name \
--publisher Microsoft.Azure.AzureHybridBenefit \
--name AHBForRHEL
接下来,我们将更改许可模型。请参考此文档以选择许可模型。以下是一个示例,指定了表示基础存储库的”RHEL_BASE”。
### 本コマンドは移行対象OSの外から実行します
$ az vm update \
--resource-group $resource_group \
--name $vm_name \
--license-type RHEL_BASE
在许可证模型更改后不久(在我的环境中大约5分钟),我确认在/etc/yum.repos.d/目录中自动添加了存储库信息。
* 这个添加的存储库是指为Azure上的RHEL PAYG镜像提供的RHUI(Red Hat Update Infrastructure)存储库。
$ ls -l /etc/yum.repos.d
total 416
-rw-r--r--. 1 root root 1900 Mar 7 2023 CentOS-Base.repo.rpmsave
-rw-r--r--. 1 root root 1359 Mar 7 2023 CentOS-CR.repo.rpmsave
-rw-r--r--. 1 root root 699 Mar 7 2023 CentOS-Debuginfo.repo.rpmsave
-rw-r--r--. 1 root root 682 Mar 7 2023 CentOS-Media.repo.rpmsave
-rw-r--r--. 1 root root 1531 Mar 7 2023 CentOS-Sources.repo.rpmsave
-rw-r--r--. 1 root root 10765 Mar 7 2023 CentOS-Vault.repo.rpmsave
-rw-r--r--. 1 root root 364 Mar 7 2023 CentOS-fasttrack.repo.rpmsave
-rw-r--r--. 1 root root 716 Mar 7 2023 CentOS-x86_64-kernel.repo.rpmsave
-rw-r--r--. 1 root root 332 Mar 7 2023 OpenLogic.repo
-rw-r--r--. 1 root root 2030 Mar 7 2023 OpenLogicCentOS.repo
-rw-r--r--. 1 root root 242 Oct 30 06:58 convert2rhel.repo
-rw-r--r--. 1 root root 351476 Nov 8 18:00 redhat.repo
-rw-r--r--. 1 root root 16474 Jul 31 14:47 rh-cloud-base.repo ★追加されたリポジトリファイル
8. 禁用CentOS仓库
切换到RHEL之后,由于不需要CentOS仓库,应禁用它。以下是Rogue Wave(前身为OpenLogic)CentOS的示例,但实际操作时,请参考yum.repos.d目录下的repo文件内容,根据需要适当指定repo_id作为参数。
$ sudo yum-config-manager --disable "openlogic base-openlogic updates-openlogic extras-openlogic"
4. 总结
在CentOS结束生命周期(EOL)之际,我们介绍了一种名为”convert2rhel”的工具,可以实现从CentOS到RHEL的就地迁移。对于Azure环境,还需注意RHEL的BYOS/PAYG许可模式。请随时查阅以下参考信息,希望这篇文章对于遇到EOL困扰的人们能有些参考价值。
附件。参考网址