从 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 项目的最新详细信息。

目标

在本教程中,您将:

先决条件

检查 CentOS 版本

  1. 打开终端并连接到您的实例。

  2. 获取 CentOS 的版本。

    sudo cat /etc/redhat-release
    
    sudo cat /etc/os-release
    

    这两个命令都显示实例运行的是 CentOS 7。

检查非标准内核

  1. 使用 yum 获取已安装内核的列表。

    sudo yum list installed kernel
    

    该列表显示了使用 yum 安装的所有内核。强烈建议删除所有非标准内核;例如,基本或更新存储库已安装且未提供的任何内核。包括删除任何 centosplus 内核。

  2. 使用 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,这可能不会影响系统,但稍后启用它可能会使其无法引导。因此,我们强烈建议删除所有非标准内核;例如,baseupdates 存储库中未提供的任何已安装内核,包括 CentOSPlus 内核。

注:如果您的系统没有基于上述说明的非标准内核,请跳过此部分。(如果您的系统仅安装了一个内核,请勿尝试使用 yum 删除内核。删除仅工作内核的内核条目或不正确的内核可能会导致系统无法引导,并且需要引导到单用户模式来修复损坏的服务器。)

  1. 删除任何非标准内核。

    sudo yum remove <KERNEL>
    

    其中 <KERNEL>rpm -q kernel 提供的完整软件包名称。

使用 Grubby 删除非标准 Kernels

grubby 是用于更新和显示有关 grub 引导装载程序配置文件的信息的命令行工具。此工具允许管理员禁用在 yum 外部安装的内核。

注:如果您的系统没有基于上一节中的说明的非标准内核,请跳过本节。(如果您的系统仅安装了一个内核,请勿尝试使用 yum 删除内核。删除仅工作内核的内核条目或不正确的内核可能会导致系统无法引导,并且需要引导到单用户模式来修复损坏的服务器。)

  1. 获取分配给每个已安装内核的引导项的索引。

    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
    
  2. 删除任何非标准内核的引导项。

    grubby --remove-kernel=<MENU_INDEX>
    

    其中 <MENU_INDEX> 是从上一个命令的输出返回的索引值。

检查 YUM 配置

  1. 获取已启用的系统信息库列表。

    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
    
  2. 更新所有已安装的软件包。

    sudo yum -y upgrade
    

删除或禁用非 CentOS 系统信息库

禁用所有非 CentOS 系统信息库。此步骤有助于避免在切换期间与第三方系统信息库发生软件包冲突。可以在切换后重新启用系统信息库。

  1. 禁用非 CentOS 系统信息库。

    sudo yum-config-manager --disable <REPOSITORY_NAME>
    

    <REPOSITORY_NAME> 替换为系统上启用的任何非 CentOS 系统信息库的系统信息库名称。

检查 /var/cache 中的空闲空间

  1. 获取磁盘空间使用情况报告。

    df -h
    

    注:在此示例中,/var/cache 位于 / 挂载点下,并提供 35G。此系统具有 centos2ol 项目建议的免费 5G。

检查 Cron 中的自动更新

管理员可以通过多种方式启用自动更新。本节检查直接执行 yum 或使用脚本的 cron 作业。禁用这些作业(如果找到),以避免它们在切换过程中运行。

  1. 列出 root 的 cron 作业。

    sudo crontab -l
    
  2. 列出用户的 cron 作业。

    sudo crontab -u oracle -l
    
  3. 列出每日、每小时、每周和每月 cron 作业。

    sudo ls -al /etc/cron*
    

    然后,使用 less 或所选编辑器检查各个文件。

    注:名称中包含 yum-cron 的文件由 yum-cron 服务管理。我们将在教程的下一节中解决禁用这些问题。

  4. 列出 /etc/crontab 的内容。

    sudo less /etc/crontab
    

禁用 YUM Cron 更新

自动应用更新的另一种方法是使用 yum-cron

  1. 检查 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 软件包,请跳至下一节。

  2. 检查 yum-cron systemd 服务的状态。

    sudo systemctl is-enabled yum-cron
    sudo systemctl is-active yum-cron
    
  3. 如果 yum-cron systemd 服务处于活动状态且正在运行,则禁用该服务。

    sudo systemctl stop yum-cron
    sudo systemctl disable yum-cron
    

下载并运行转换脚本

  1. 从 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
    
  2. 运行 centos2ol.sh 脚本。

    如果使用 git clone,请将当前工作目录更改为 centos2ol 目录。

    通过传递选项 -h 查看脚本的使用选项。

    sudo bash centos2ol.sh -h
    

    现在,运行脚本并等待其完成。

    sudo bash centos2ol.sh
    

    在此过程中,默认内核将切换到 Oracle Unbreakable Enterprise Kernel (UEK) 的最新发行版,以实现对进程调度器、内存管理、文件系统和网络堆栈的广泛性能和可扩展性改进。我们还将现有的 CentOS 内核替换为等效的 Red Hat 兼容内核 (RHCK),如果特定硬件或应用程序具有严格的内核版本限制,则可能需要该内核。

  3. 重新启动系统。

    sudo reboot
    

确认系统切换到 Oracle Linux

  1. 使用终端再次连接到您的实例。

  2. 检查分发版本和内核详细信息。

    cat /etc/os-release
    cat /etc/redhat-release
    uname -r
    

为 centos2ol GitHub 项目做出贡献

  1. 获取支持。

    对于与安全无关的 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 帮助中心