从 CentOS 7 切换到 Oracle Linux 7
简介
注:CentOS 7 于 2024 年 6 月 30 日达到生命周期终止 (EOL)。这种情况意味着 CentOS 背后的 Red Hat 不再为操作系统提供安全更新或 bug 修复。
以下教程提供了通过删除 CentOS 特定软件包或将其替换为 Oracle Linux 等效软件包来自动将 CentOS 7 实例切换到 Oracle Linux 7 的逐步过程。GitHub 上的 Oracle centos2ol
系统信息库中的 README.md 表示本教程中使用的脚本是正在进行的工作,并非用于处理所有可能的配置。
如果脚本无法成功转换系统,请在开始此过程之前确保您具有系统的完整备份。
查看项目 README.md 文件中 centos2ol 项目的最新详细信息。
目标
在本教程中,您将:
- 检查非标准内核
- 确保
yum
配置正常工作 - 禁用或删除过时和非 CentOS 系统信息库
- 确保
/var/cache
中的 5GB 可用空间 - 禁用所有自动更新,包括
yum-cron
先决条件
- 安装了 CentOS 7 的系统。
检查 CentOS 版本
-
打开终端并连接到您的实例。
-
获取 CentOS 的版本。
sudo cat /etc/redhat-release
sudo cat /etc/os-release
这两个命令都显示实例运行的是 CentOS 7。
检查非标准内核
-
使用
yum
获取已安装内核的列表。sudo yum list installed kernel
该列表显示了使用
yum
安装的所有内核。强烈建议删除所有非标准内核;例如,基本或更新存储库已安装且未提供的任何内核。包括删除任何centosplus
内核。 -
使用
grubby
获取其他已安装内核的列表。sudo grubby --info=ALL | grep ^kernel
输出示例:
[oracle@centos-7 ~]$ sudo grubby --info=ALL | grep ^kernel kernel=/boot/vmlinuz-3.10.0-1160.76.1.el7.x86_64 kernel=/boot/vmlinuz-3.10.0-1160.el7.x86_64 kernel=/boot/vmlinuz-0-rescue-281810806a454564906c048d496729db
该列表显示配置使用的所有内核。再次,我们强烈建议删除所有非标准内核。
使用 Yum 删除非标准内核
由于 GRUB2 BootHole 漏洞,Oracle Linux Secure Boot shim 只能引导由 Oracle 签名的内核,并且只能替换默认的 CentOS 内核。虽然如果禁用 SecureBoot,这可能不会影响系统,但稍后启用它可能会使其无法引导。因此,我们强烈建议删除所有非标准内核;例如,base
或 updates
存储库中未提供的任何已安装内核,包括 CentOSPlus 内核。
注:如果您的系统没有基于上述说明的非标准内核,请跳过此部分。(如果您的系统仅安装了一个内核,请勿尝试使用
yum
删除内核。删除仅工作内核的内核条目或不正确的内核可能会导致系统无法引导,并且需要引导到单用户模式来修复损坏的服务器。)
-
删除任何非标准内核。
sudo yum remove <KERNEL>
其中
<KERNEL>
是rpm -q kernel
提供的完整软件包名称。
使用 Grubby 删除非标准 Kernels
grubby
是用于更新和显示有关 grub 引导装载程序配置文件的信息的命令行工具。此工具允许管理员禁用在 yum
外部安装的内核。
注:如果您的系统没有基于上一节中的说明的非标准内核,请跳过本节。(如果您的系统仅安装了一个内核,请勿尝试使用
yum
删除内核。删除仅工作内核的内核条目或不正确的内核可能会导致系统无法引导,并且需要引导到单用户模式来修复损坏的服务器。)
-
获取分配给每个已安装内核的引导项的索引。
sudo grubby --info=ALL | grep -E "^kernel|^index"
输出示例:
[oracle@centos-7 ~]$ sudo grubby --info=ALL | grep -E "^kernel|^index" index=0 kernel=/boot/vmlinuz-3.10.0-1160.76.1.el7.x86_64 index=1 kernel=/boot/vmlinuz-3.10.0-1160.el7.x86_64 index=2 kernel=/boot/vmlinuz-0-rescue-281810806a454564906c048d496729db index=3
-
删除任何非标准内核的引导项。
grubby --remove-kernel=<MENU_INDEX>
其中
<MENU_INDEX>
是从上一个命令的输出返回的索引值。
检查 YUM 配置
-
获取已启用的系统信息库列表。
sudo yum repolist
输出示例:
[oracle@centos-7 ~]$ sudo yum repolist Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: ftp.plusline.net * epel: mirror.imt-systems.com * extras: mirror.imt-systems.com * updates: ftp.plusline.net repo id repo name status base/7/x86_64 CentOS-7 - Base 10072 docker-ce-stable/7/x86_64 Docker CE Stable - x86_64 183 epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 13738 extras/7/x86_64 CentOS-7 - Extras 515 updates/7/x86_64 CentOS-7 - Updates 4383 zfs/7/x86_64 ZFS on Linux for EL7 - dkms 55 repolist: 28946
-
更新所有已安装的软件包。
sudo yum -y upgrade
删除或禁用非 CentOS 系统信息库
禁用所有非 CentOS 系统信息库。此步骤有助于避免在切换期间与第三方系统信息库发生软件包冲突。可以在切换后重新启用系统信息库。
-
禁用非 CentOS 系统信息库。
sudo yum-config-manager --disable <REPOSITORY_NAME>
将
<REPOSITORY_NAME>
替换为系统上启用的任何非 CentOS 系统信息库的系统信息库名称。
检查 /var/cache
中的空闲空间
-
获取磁盘空间使用情况报告。
df -h
注:在此示例中,
/var/cache
位于/
挂载点下,并提供 35G。此系统具有 centos2ol 项目建议的免费 5G。
检查 Cron 中的自动更新
管理员可以通过多种方式启用自动更新。本节检查直接执行 yum
或使用脚本的 cron 作业。禁用这些作业(如果找到),以避免它们在切换过程中运行。
-
列出 root 的 cron 作业。
sudo crontab -l
-
列出用户的 cron 作业。
sudo crontab -u oracle -l
-
列出每日、每小时、每周和每月 cron 作业。
sudo ls -al /etc/cron*
然后,使用
less
或所选编辑器检查各个文件。注:名称中包含
yum-cron
的文件由yum-cron
服务管理。我们将在教程的下一节中解决禁用这些问题。 -
列出
/etc/crontab
的内容。sudo less /etc/crontab
禁用 YUM Cron 更新
自动应用更新的另一种方法是使用 yum-cron
。
-
检查
yum-cron
软件包。sudo yum list installed yum-cron
输出示例:
[oracle@centos-7 ~]$ yum list installed yum-cron Loaded plugins: fastestmirror, langpacks Determining fastest mirrors * base: ftp.plusline.net * epel: ftp.plusline.net * extras: ftp.plusline.net * updates: ftp.rz.uni-frankfurt.de Installed Packages yum-cron.noarch 3.4.3-168.el7.centos @base
如果输出显示了系统上未安装的
yum-cron
软件包,请跳至下一节。 -
检查
yum-cron
systemd 服务的状态。sudo systemctl is-enabled yum-cron sudo systemctl is-active yum-cron
-
如果
yum-cron
systemd 服务处于活动状态且正在运行,则禁用该服务。sudo systemctl stop yum-cron sudo systemctl disable yum-cron
下载并运行转换脚本
-
从 GitHub 下载
centos2ol.sh
脚本。获取脚本的最简单方法是使用 curl:
curl -O https://raw.githubusercontent.com/oracle/centos2ol/main/centos2ol.sh
如果安装了 Git,请使用
clone
选项从 GitHub 中提取系统信息库。git clone https://github.com/oracle/centos2ol.git
-
运行
centos2ol.sh
脚本。如果使用
git clone
,请将当前工作目录更改为 centos2ol 目录。通过传递选项
-h
查看脚本的使用选项。sudo bash centos2ol.sh -h
现在,运行脚本并等待其完成。
sudo bash centos2ol.sh
在此过程中,默认内核将切换到 Oracle Unbreakable Enterprise Kernel (UEK) 的最新发行版,以实现对进程调度器、内存管理、文件系统和网络堆栈的广泛性能和可扩展性改进。我们还将现有的 CentOS 内核替换为等效的 Red Hat 兼容内核 (RHCK),如果特定硬件或应用程序具有严格的内核版本限制,则可能需要该内核。
-
重新启动系统。
sudo reboot
确认系统切换到 Oracle Linux
-
使用终端再次连接到您的实例。
-
检查分发版本和内核详细信息。
cat /etc/os-release cat /etc/redhat-release uname -r
为 centos2ol GitHub 项目做出贡献
-
获取支持。
对于与安全无关的 bug 报告、问题或增强请求,请打开 GitHub 问题。
详细信息
Oracle Linux 文档
Oracle Linux 培训
Oracle Linux 培训站
使用 Leapp 升级 Oracle Linux
更多学习资源
浏览 docs.oracle.com/learn 上的其他实验室,或者访问 Oracle Learning YouTube 渠道上的更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 成为 Oracle Learning Explorer。
有关产品文档,请访问 Oracle 帮助中心。