返回

2025/03/19

3. 使用 Oracle Linux 并发现差异

之前,我们解释了什么是 RHEL 兼容发行版以及 Oracle Linux 的特点。这次,我们将实际操作 Oracle Linux,说明它与 RHEL 和 CentOS 的差异。

1. 如何尝试 Oracle Linux

您可以通过以下方式轻松尝试 Oracle Linux。这次,我们将主要使用方法 1,并部分使用方法 2。

  1. 在 VirtualBox 或类似软件上安装 Oracle Linux。
  2. 使用 Oracle Cloud Infrastructure Always Free
  3. 在 AWS 或 Azure 中使用 Oracle Linux 镜像

此外,Oracle Linux 介质可以从以下网站免费获取:

有关安装说明,请参阅“安装 Oracle Linux 8 Oracle Linux”手册。它与 RHEL、CentOS Stream 和 AlmaLinux 几乎相同。此外,我们推荐“OCI 文档:Oracle Linux”用于 Oracle Cloud Infrastructure。

2. 发现 Oracle Linux 的差异

让我们来看看 Oracle Linux 的实际操作。这次我们将使用 Oracle Linux 8 Update 6。即使次要版本不同,也几乎相同,因此无需担心这一点。Oracle Linux 7 基本上也相同。这次,我们将使用以下 Linux 发行版进行比较:

  • Red Hat Enterprise Linux 8
  • CentOS Stream

CentOS Stream 不是纯 RHEL 兼容发行版。因此,AlmaLinux 和 MIRACLE LINUX 更适合比较,但这次我们将使用更易上手的 CentOS Stream。

2.1. 检查发行版类型

检查 Linux 发行版类型。Linux 有一个名为 /etc/*-release 的文件,可以用来确定发行版。如果您检查,会发现有四个名为 /etc/*-release 的文件。

$ ls -l /etc/*release
-rw-r--r--. 1 root root  32 May 13 10:14 /etc/oracle-release
-rw-r--r--. 1 root root 479 May 13 10:14 /etc/os-release
-rw-r--r--. 1 root root  45 May 13 10:14 /etc/redhat-release
lrwxrwxrwx. 1 root root  14 May 13 10:14 /etc/system-release -> oracle-release

如果查看文件内容,可以看到它是 Oracle Linux 8.6。

$ cat /etc/oracle-release
Oracle Linux Server release 8.6

然而,您无需担心 Linux 中小数点后的次要版本。这是因为,根据存储库设置,运行 yum update 会导致次要版本自动上升。

有趣的是 /etc/redhat-release 的内容。它显示的是 Red Hat Enterprise Linux 版本,而不是 Oracle Linux。

$ cat /etc/redhat-release
Red Hat Enterprise Linux release 8.6 (Ootpa)

但是 CentOS Stream 呢?/etc/redhat-release 是指向 /etc/centos-release 的符号链接。当然,内容是相同的。

$ ls -l /etc/*release
-rw-r--r--. 1 root root 24 Sep 14  2021 /etc/centos-release
lrwxrwxrwx. 1 root root 21 Sep 14  2021 /etc/os-release -> ../usr/lib/os-release
lrwxrwxrwx. 1 root root 14 Sep 14  2021 /etc/redhat-release -> centos-release
lrwxrwxrwx. 1 root root 14 Sep 14  2021 /etc/system-release -> centos-release

$ cat /etc/centos-release
CentOS Stream release 8

$ cat /etc/redhat-release ★内容相同
CentOS Stream release 8

看起来这种规范是为了应对检查发行版类型的程序。硬件供应商提供的商业软件和驱动程序通常使用 /etc/*-release 来确定发行版的类型和版本。这可能是因为他们希望通过保留原始的 /etc/redhat-release 来绕过检查。

2.2. 检查内核

检查内核。由于末尾是 el8uek,它不是 RHEL 兼容内核,而是 Oracle Linux 独特的 Unbreakable Enterprise Kernel(UEK)。

$ uname -r
5.4.17-2136.307.3.1.el8uek.x86_64

如果查看已安装的内核,可以看到除了 UEK 外,还安装了 RHEL 兼容内核(RHCK:Red Hat Compatible Kernel)。

$ rpm -qa | grep kernel
kernel-uek-5.4.17-2136.307.3.1.el8uek.x86_64 ★UEK
kernel-modules-4.18.0-372.9.1.el8.x86_64
kernel-tools-libs-4.18.0-372.9.1.el8.x86_64
kernel-4.18.0-372.9.1.el8.x86_64             ★RHEL 兼容内核
kernel-tools-4.18.0-372.9.1.el8.x86_64
kernel-core-4.18.0-372.9.1.el8.x86_64
kernel-headers-4.18.0-372.9.1.el8.x86_64

对于 UEK 和 RHCK,您会发现版本号差异很大。

  • UEK:kernel-uek-5.4
  • RHCK:kernel-4.18

版本差异显著的原因在于它们所基于的 Linux 内核不同。UEK 基于更上游的 Linux 内核 5.4,并带有 Oracle Linux 特定的定制以及与 RHCK 的应用程序兼容性。

UEK 和 RHCK 在应用程序级别上是兼容的,因此通常情况下它们都可以正常使用。当您使用的软件、设备驱动程序等不支持 UEK 时,您可能需要考虑切换。

2.3. 发现 RHEL 兼容内核

下表显示了 RHEL 兼容发行版与内核版本之间的关系。如果是相同的主版本,“版本号”不会改变。改变的是内核版本后的“发布号”。

发行版 内核版本
基于 RHEL8 kernel-4.18.0
基于 RHEL7 kernel-3.10.0
基于 RHEL6 kernel-2.6.32

下图显示了内核包命名规则。如果是相同的主版本,“版本号”将保持不变,“发布号”会增加。对于 Oracle Linux 中的 RHEL 兼容内核,会发布与 RHEL 相同的内核,直到发布号为止。

让我们参考一下 RHEL 兼容内核的变更日志(变更历史)。版本 4.18.0-372.9.1.el8 似乎应用了一些兼容性补丁,例如密钥,而未发生变化。如果您感兴趣,请查看源包(SRPM)。

# rpm -q --changelog kernel-4.18.0-372.9.1.el8.x86_64|head
* Wed May 11 2022 Natalya Naumova  [4.18.0-372.9.1.el8.OL8]
- 更新 Oracle Linux 证书 (Kevin Lyons)
- 禁用 aarch64 的签名 (Ilya Okomin)
- Oracle Linux RHCK 模块签名密钥已添加到内核受信任密钥列表 (olkmod_signing_key.pem) [Orabug: 29539237]
- 更新 x509.genkey [Orabug: 24817676]
- 与 shim-ia32 和 shim-x64 <= 15-11.0.5.el8 冲突

* Fri Apr 15 2022 Augusto Caringi  [4.18.0-372.9.1.el8]
- scsi: qedi: 修复断开连接处理失败 (Chris Leech) [2071519]
- scsi: iscsi: 修复未绑定端点错误处理 (Chris Leech) [2071519]

2.4. 检查 Yum 存储库

检查 Yum 存储库。与 RHEL 不同,使用 Oracle Linux,您无需支持合同(RH 是订阅合同)即可获取更新包。但是,如果您签订了支持合同,还可以使用支持合同用户的包,例如 Ksplice。

默认情况下,以下存储库是启用的。此外,从 Oracle Linux 8 开始,已从 yum 更改为 dnf,但由于兼容性,我们故意使用 yum

$ yum repolist
repo id           repo name
ol8_UEKR6         最新的 Unbreakable Enterprise Kernel Release 6 for Oracle Linux 8 (x86_64)
ol8_appstream     Oracle Linux 8 Application Stream (x86_64)
ol8_baseos_latest Oracle Linux 8 BaseOS Latest (x86_64)

每个存储库的内容如下:

存储库 说明
ol8_baseos_latest 操作系统的核心包
ol8_appstream 应用程序、开发语言等
ol8_UEKR6 UEK R6

Oracle Cloud Infrastructure 的 Oracle Linux 8 配置如下。启用了 OCI 特定和 Ksplice 存储库。


ol8_UEKR6         最新的 Unbreakable Enterprise Kernel Release 6 for Oracle Linux 8 (x86_64)
ol8_addons        Oracle Linux 8 Addons (x86_64)
ol8_appstream     Oracle Linux 8 Application Stream (x86_64)
ol8_baseos_latest Oracle Linux 8 BaseOS Latest (x86_64)
ol8_ksplice       Ksplice for Oracle Linux 8 (x86_64)
ol8_oci           Oracle Linux 8 OCI Packages (x86_64)
ol8_oci_included  Oracle Linux 8 上 OCI 用户的 Oracle 软件 (x86_64)

让我们也与其他发行版进行检查。默认启用的存储库数量不同,但通常的 baseosappstream 是相同的。

RHEL8

repo id                          repo name
rhel-8-for-x86_64-appstream-rpms Red Hat Enterprise Linux 8 for x86_64 - AppStream (RPMs)
rhel-8-for-x86_64-baseos-rpms    Red Hat Enterprise Linux 8 for x86_64 - BaseOS (RPMs)

CentOS Stream

repo id             repo name
appstream           CentOS Stream 8 - AppStream
baseos              CentOS Stream 8 - BaseOS
epel                Extra Packages for Enterprise Linux 8 - x86_64
epel-modular        Extra Packages for Enterprise Linux Modular 8 - x86_64
extras              CentOS Stream 8 - Extras
extras-common       CentOS Stream 8 - Extras common packages

Oracle Linux 与其他发行版的存储库 ID 差异

Oracle Linux RHEL CentOS Stream
ol8_baseos_latest rhel-8-for-x86_64-baseos-rpms baseos
ol8_appstream rhel-8-for-x86_64-appstream-rpms appstream

以下显示了包括已禁用存储库在内的内容:

$ yum repolist all
repo id                    repo name                                    status
ol8_UEKR6                  最新的 Unbreakable Enterprise Kernel Release enabled
ol8_UEKR6_RDMA             Oracle Linux 8 UEK6 RDMA (x86_64)            disabled
ol8_addons                 Oracle Linux 8 Addons (x86_64)               disabled
ol8_appstream              Oracle Linux 8 Application Stream (x86_64)   enabled
ol8_baseos_latest          Oracle Linux 8 BaseOS Latest (x86_64)        enabled
ol8_codeready_builder      Oracle Linux 8 CodeReady Builder (x86_64) -  disabled
ol8_distro_builder         Oracle Linux 8 Distro Builder (x86_64) - Uns disabled
ol8_kvm_appstream          Oracle Linux 8 KVM Application Stream (x86_6 disabled
ol8_u0_baseos_base         Oracle Linux 8 BaseOS GA (x86_64)            disabled
ol8_u1_baseos_base         Oracle Linux 8.1 BaseOS (x86_64)             disabled
ol8_u2_baseos_base         Oracle Linux 8.2 BaseOS (x86_64)             disabled
ol8_u3_baseos_base         Oracle Linux 8.3 BaseOS (x86_64)             disabled
ol8_u4_baseos_base         Oracle Linux 8.4 BaseOS (x86_64)             disabled
ol8_u4_security_validation Oracle Linux 8 Update 4 (x86_64) Security Va disabled
ol8_u5_baseos_base         Oracle Linux 8.5 BaseOS (x86_64)             disabled
ol8_u6_baseos_base         Oracle Linux 8.6 BaseOS (x86_64)             disabled

此外,一些存储库默认未安装。yum list available 命令显示包含存储库定义的包列表。例如,oracle-epel-release-el8 是 RHEL 系发行版中常用的“EPEL”存储库。只需运行 yum install oracle-epel-release-el8 即可使用 EPEL 包。

$ yum list available *release-el8.x86_64
Available Packages
mysql-release-el8.x86_64                         1.0-3.el8     ol8_baseos_latest
oracle-epel-release-el8.x86_64                   1.0-5.el8     ol8_baseos_latest
oracle-gluster-release-el8.x86_64                1.0-2.el8     ol8_baseos_latest
oracle-instantclient-release-el8.x86_64          1.0-1.el8     ol8_baseos_latest
oracle-linux-manager-client-release-el8.x86_64   1.0-1.el8     ol8_baseos_latest
oracle-olcne-release-el8.x86_64                  1.0-6.el8     ol8_baseos_latest
oracle-ovirt-release-el8.x86_64                  1.0-1.0.3.el8 ol8_baseos_latest
oracle-release-el8.x86_64                        1.0-1.el8     ol8_baseos_latest
oracle-software-release-el8.x86_64               1.0-1.el8     ol8_baseos_latest
oracle-spacewalk-client-release-el8.x86_64       1.0-1.el8     ol8_baseos_latest
oraclelinux-automation-manager-release-el8.x86_64
                                                 1.0-1.el8     ol8_baseos_latest
oraclelinux-developer-release-el8.x86_64         1.0-7.el8     ol8_baseos_latest
oraclelinux-release-el8.x86_64                   1.0-24.el8    ol8_baseos_latest

了解更多关于 Oracle Linux 上 Yum 存储库的信息,请访问 https://yum.oracle.com/

除了可以下载更新包外,我们建议您查看它,因为它包含各种信息。

2.5. 检查 Oracle Linux 特定包

一些包仅由 Oracle Linux 提供,但默认安装基本上是相同的。为供参考,这里列出了以 oracle 命名的包。我们将省略细节,但它们是必须更改的部分,例如标志、许可证、存储库、GPG 密钥等。

# rpm -qa | grep oracle
oraclelinux-release-8.6-1.0.5.el8.x86_64
oraclelinux-release-el8-1.0-23.el8.x86_64
oracle-logos-84.5-1.0.1.el8.x86_64

3. 将内核更改为 RHCK

供您参考,以下是如何将默认内核 UEK 更改为 RHCK 的方法。使用 grubby 进行更改。

1. 检查默认内核。您可以看到它是 /boot/vmlinuz-5.4.17-2136.307.3.1.el8uek.x86_64,索引号为“0”。

# grubby --default-index
0

# grubby --default-kernel
/boot/vmlinuz-5.4.17-2136.307.3.1.el8uek.x86_64

2. 接下来,显示已安装内核的列表。index = 1 是 RHCK。

# grubby --info=ALL | grep -A 1 ^index
index=0
kernel="/boot/vmlinuz-5.4.17-2136.307.3.1.el8uek.x86_64"
--
index=1
kernel="/boot/vmlinuz-4.18.0-372.9.1.el8.x86_64"
--
index=2
kernel="/boot/vmlinuz-0-rescue-5b64998859b34f7884afea6dd27a9390"

3. 可以通过指定内核路径或索引号进行更改。您可以使用任一方法,但应指定内核路径以防止错误。

★指定内核路径
# grubby --set-default=/boot/vmlinuz-4.18.0-372.9.1.el8.x86_64
★指定索引号
# grubby --set-default-index=1 

4. 确保默认内核已更改为 RHCK。

# grubby --default-kernel
/boot/vmlinuz-4.18.0-372.9.1.el8.x86_64

5. 接下来,使用 /etc/sysconfig/kernel 将默认内核更改为 RH 兼容内核。如果不修复这一点,更新 yum 时将返回到 UEK。

/etc/sysconfig/kernel 内容

# UPDATEDEFAULT 指定 kernel-install 是否应将新内核设为默认值
UPDATEDEFAULT=yes

# DEFAULTKERNEL 指定默认内核包类型
DEFAULTKERNEL=kernel
#DEFAULTKERNEL=kernel-uek ★注释掉并添加上面的行

您可以手动更改,但也可以使用以下命令更改。

# sed -i -e 's/DEFAULTKERNEL=kernel-uek/DEFAULTKERNEL=kernel/' /etc/sysconfig/kernel

6. 重启以启用修改后的内核。

# shutdown -r

7. 重启后登录时,已更改为 RH 兼容内核。此过程即完成。

# uname -r
4.18.0-372.9.1.el8.x86_64

4. 结论

在本文中,我们重点介绍了 CentOS 和 RHEL 之间的差异。事实上,它们在正常使用中几乎相同。如果有人告诉您安装的环境是 CentOS,您可能不会注意到。

然而,尽管作为 RHEL 兼容发行版的基本部分相同,Oracle Linux 拥有多种面向企业的周边工具。它还具有独特的功能,例如 Ksplice,允许您无需重启即可应用补丁。现在 CentOS 已更改为 CentOS Stream,Oracle Linux 是最值得信赖的 RHEL 兼容发行版之一。为什么不试试呢?