返回

2025/03/25

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 更新 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-based kernel-4.18.0
RHEL7-based kernel-3.10.0
RHEL6-based 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 應用程式串流 (x86_64)
ol8_baseos_latest Oracle Linux 8 BaseOS 最新版 (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 附加組件 (x86_64)
ol8_appstream     Oracle Linux 8 應用程式串流 (x86_64)
ol8_baseos_latest Oracle Linux 8 BaseOS 最新版 (x86_64)
ol8_ksplice       Ksplice for Oracle Linux 8 (x86_64)
ol8_oci           Oracle Linux 8 OCI 套件 (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 - 應用程式串流 (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 - 應用程式串流
baseos              CentOS Stream 8 - BaseOS
epel                企業 Linux 額外套件 8 - x86_64
epel-modular        企業 Linux 模組化額外套件 8 - x86_64
extras              CentOS Stream 8 - 額外套件
extras-common       CentOS Stream 8 - 通用額外套件

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 附加組件 (x86_64)              disabled
ol8_appstream              Oracle Linux 8 應用程式串流 (x86_64)         enabled
ol8_baseos_latest          Oracle Linux 8 BaseOS 最新版 (x86_64)        enabled
ol8_codeready_builder      Oracle Linux 8 CodeReady Builder (x86_64) -  disabled
ol8_distro_builder         Oracle Linux 8 發行版構建器 (x86_64) - 未同步 disabled
ol8_kvm_appstream          Oracle Linux 8 KVM 應用程式串流 (x86_64)     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 更新 4 (x86_64) 安全驗證     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

https://yum.oracle.com/ 上了解更多關於 Oracle Linux 的 Yum 儲存庫資訊。

除了可以下載更新套件外,我們建議您查看它,因為它包含各種資訊。

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 相容發行版之一。何不試試看呢?