返回

2025/03/25

8. 從 CentOS 轉換到 Oracle Linux

2020 年 12 月,CentOS 官方部落格宣布 CentOS 的開發將結束,並將轉向 CentOS Stream。此前作為 RHEL 相容發行版(RHEL 克隆)擁有壓倒性地位的 CentOS 結束開發的公告令人大為震驚。

自 2020 年宣布 CentOS 結束以來已近三年,出現了多種 CentOS 的替代方案。本文將解釋 CentOS 及其後續發展的當前情況,以及如何轉換到作為有前景遷移目標的 Oracle Linux。

CentOS 的終結與 CentOS Stream

為了理解 CentOS 的當前情況,我們將概述 CentOS 的終結和新推出的 CentOS Stream。

CentOS 生命週期終止公告

CentOS 終結的公告發表於官方 CentOS 部落格「CentOS 專案將焦點轉向 CentOS Stream」。

此部落格的內容可總結如下:

  • CentOS 8 將於 2021 年 12 月 31 日終止支援
  • CentOS 7 將按原計劃支援至 2024 年 6 月 30 日。
  • 未來 CentOS 將轉向 CentOS Stream
  • CentOS Stream 是 RHEL 的上游(開發)分支,定位與傳統重建版本不同。
  • 鼓勵 CentOS 8 使用者遷移到差異較少的 CentOS Stream,或若擔心用於生產環境則轉向 RHEL。

此外,從使用者的角度來看,可以表述如下:

  • CentOS 的支援即將結束,因此需要立即考慮遷移。
  • 目前(2023 年 9 月),CentOS 8 的支援已結束,CentOS 7 的支援將於 2024 年 6 月結束。支援結束後,將不再提供更新套件,Yum 儲存庫也將不可用。
  • 不提供更新套件會增加安全風險
  • CentOS Stream 並非像 CentOS 那樣是 RHEL 的重建版本,而是定位為開發版本。因此,至少在生產環境中使用存在問題。

CentOS 與 CentOS Stream 的區別

CentOS 是與 RHEL 相容的 Linux 發行版,也稱為 RHEL 克隆。因此,它與 RHEL 相容,且在原始碼層面上幾乎相同。順便一提,我在之前的文章「您在使用 Oracle Linux 嗎?(第一部分)」中介紹了下圖。

另一方面,CentOS Stream 是 RHEL 的 Nightly 構建版本,以滾動發布方式發行。Nightly 構建是使用開發專案最新原始碼生成的構建,與官方發布版本不同。

這與我們迄今為止的情況有所不同,因此有點難以理解,但 CentOS 專案發布的以下圖表應該有所幫助。例如,RHEL 8(≓ CentOS 8)是從 Fedora 28 分支出來的。隨後按順序發布了 8.2 和 8.3,並為每個版本創建了勘誤表。根據作業系統設置,還可以從 8.3 更新到最新的 8.8。

來源:CentOS Stream 是持續交付,根據 CC BY-SA 4.0 許可證授權

CentOS Stream 是滾動發布系統,因此沒有像 8.2 或 8.3 這樣的次要版本,只顯示發布日期。如果您查看 鏡像站點 上發布的 ISO 映像,會看到像 20230825 這樣的日期。此外,鏡像站點上的 20230825latest 是相同的,latest 的內容會始終更新。

另外,在單個套件層面上,無法保證 CentOS Stream 與 RHEL 完全相同。由於 CentOS Stream 首先進行更改,比較最新版本時,CentOS Stream 較新,可視為尚未在生產環境中測試的版本。

希望您能理解,儘管 CentOS 和 CentOS Stream 在功能上相似,但它們的定位截然不同。這就是為什麼它在全球引起如此轟動的原因。CentOS 與 CentOS Stream 的區別在 Red Hat 的 「紅帽工程師部落格:Fedora/CentOS Stream/CentOS/RHEL 之間的關係」 中有詳細描述。如果您有興趣,請查看一下。

各 Linux 發行版的支援期限

本文介紹了基於 RHEL 的 Linux 發行版的支援期限。目前唯一受支援的 CentOS 版本是 CentOS 7,將支援至 2024 年 6 月 30 日。沒有 CentOS 9。因此,如果您目前使用的是 CentOS,則需要遷移到其他 Linux 發行版之一。

版本支援結束日期(*1)
CentOS 72024/06/30
CentOS 82021/12/31
CentOS Stream 82024/05/31
CentOS Stream 9未定(預計與 RHEL 9 相同)
Red Hat Enterprise Linux 72024/06/30
Red Hat Enterprise Linux 82029/05/31
Red Hat Enterprise Linux 92032/05/31
Oracle Linux 72024/12
Oracle Linux 82029/07
Oracle Linux 92032/06

*1:Oracle Linux 的支援結束日期為 Premier Support 結束日期。延長支援和持續支援將提供更長的時間。

CentOS 遷移選項

讓我們考慮從 CentOS 遷移的候選 Linux 發行版。考慮到遷移的便利性,RHEL 系列是最佳選擇,主要選項如下:

  • CentOS Stream
  • Red Hat Enterprise Linux
  • Oracle Linux
  • AlmaLinux
  • Rocky Linux
  • MIRACLE LINUX
  • Amazon Linux

AlmaLinux 和 Rocky Linux 是因應 CentOS 終結的反彈而誕生的 Linux 發行版。兩者均由大公司贊助,並在公共雲端上提供。

選擇哪個取決於您的目的和預算等因素,因此很難說哪個無條件更好。下表從企業使用的角度比較它們。對於企業使用,重要的因素包括支援期限長度、是否提供付費支援、是否支援硬體、是否支援商業套件以及成本。

發行版許可證/訂閱付費支援遷移方法缺點和負面點
CentOS Stream不需要替換儲存庫看似高度穩定,但需謹慎。它與傳統 RHEL 不相容,因此無支援硬體且商業套件不受支援。您能說服您的老闆或客戶嗎?
Red Hat Enterprise Linux需要可提供有遷移工具行業領導者,但需要訂閱和 Red Hat 企業協議
Oracle Linux不需要,但部分功能僅限付費支援使用者可提供有遷移工具有長期記錄,用於 Exadata 等關鍵應用。對 Oracle 產品使用者不太知名。
AlmaLinux/Rocky Linux不需要有付費支援(包括第三方支援)有遷移工具是新發行版,因此需要觀察。
Amazon Linux不需要可提供無供應商提供的工具可在本地使用,與 AWS 高度相容。由於基於 Fedora,相容性不高,支援期限約 5 年較短。
MIRACLE LINUX不需要可提供有遷移工具雖然有長期記錄,但在國內供應商中不太知名。

使用遷移工具從 CentOS 轉換到 Oracle Linux

Oracle Linux 提供了一個腳本 centos2ol.sh,可在原地將 CentOS 轉換為 Oracle Linux。這次,我們將使用此腳本將 CentOS 8 轉換為 Oracle Linux 8。轉換到 CentOS 7 的程序幾乎相同。

Oracle 發布了多份文件,因此在本專欄中,我們將深入探討其中一些內容,同時突出重點。

執行遷移腳本:

執行遷移腳本的步驟如下。準備步驟 1 至 3 需要多個命令。然而,遷移步驟 4 和 5 可以用最少的命令執行。

  1. 檢查限制
  2. 系統備份(文中省略)
  3. 準備源 CentOS
  4. 執行遷移腳本
  5. 遷移後驗證

檢查限制

遷移工具的限制如下。目前,您只需了解這些限制,我們將在下一節「準備源 CentOS」中檢查它們。

  1. 源為 CentOS 6、7、8 或 Rocky Linux 8、9
  2. 直接或通過代理存取 CentOS 和 Oracle Linux Yum 儲存庫
  3. 實例未註冊到第三方套件管理工具,如 Spacewalk。
  4. 如果您從官方 CentOS 儲存庫以外的來源安裝了套件,它們可能相容,但我們不保證其運作。某些軟體若安裝在 /etc/oracle-release 可能會出現問題。
  5. 如果安裝了一些核心模組,如商業防毒產品或硬體驅動程式,轉換後可能無法運作。
  6. 遷移腳本僅啟用基本儲存庫,如 base、updates 和 BaseOS。如果您從其他儲存庫安裝了套件,可能需要啟用額外儲存庫。
  7. /var/cache 至少有 5GB 可用空間

準備源 CentOS

這裡我們將確保不違反任何腳本限制。

請注意,準備步驟需要管理員權限,因此您必須在命令前加上 sudo 或使用 su 以 root 使用者身份運行。我省略了 sudo 以強調外觀的簡單性。此外,CentOS 8 推薦使用 dnf 而不是 yum,但我堅持使用 yum,因為它相容。

1. 檢查 CentOS 版本

登入源並檢查 CentOS 版本。如果如下所示為 8,則沒有問題。

# cat /etc/centos-release
CentOS Linux release 8.3.2011

2. 檢查與 CentOS Yum 儲存庫的連接

檢查是否可以連接到 CentOS Yum 儲存庫。CentOS 8 在鏡像站點上不再有儲存庫,因此如果無法連接,您將收到以下錯誤:

# yum check-update
CentOS Linux 8 - AppStream                       51  B/s |  38  B     00:00
エラー: repo 'appstream' のメタデータのダウンロードに失敗しました : Cannot prepare internal mirrorlist: No URLs in mirrorlist

如果發生錯誤,請執行以下命令更改您指向的儲存庫:

# sed -i -e 's/^mirrorlist/#mirrorlist/g' -e 's/^#baseurl=http:\/\/mirror/baseurl=http:\/\/vault/g' /etc/yum.repos.d/CentOS-*repo

如果儲存庫可用,將下載儲存庫元數據並顯示可更新的套件,如下所示。

# yum check-update
CentOS Linux 8 - AppStream                       16 MB/s | 8.4 MB     00:00
CentOS Linux 8 - BaseOS                         9.2 MB/s | 4.6 MB     00:00
CentOS Linux 8 - Extras                          46 kB/s |  10 kB     00:00

NetworkManager.x86_64         1:1.32.10-4.el8       baseos
NetworkManager-libnm.x86_64   1:1.32.10-4.el8       baseos

3. 驗證是否存在問題套件

檢查從基本儲存庫(anaconda、base、baseos、updates、AppStream 等)以外安裝的核心和套件。核心尤其容易出問題,因此如果存在 centosplus 核心,請移除它。

顯示已安裝的核心。最右邊顯示其安裝來源的儲存庫名稱。在這個例子中是沒問題的。

# yum list installed kernel
kernel.x86_64                 4.18.0-240.el8        @anaconda

要檢查不僅是核心,還包括從基本儲存庫以外安裝的套件,請使用以下命令。如果從第三方儲存庫(如 EPEL)安裝了套件,將顯示相關套件。然而,使用者空間套件很少會有問題。

# rpm -qa --qf '%{NAME}-%{VERSION}-%{RELEASE}\t%{VENDOR}\n' | grep -v "CentOS"

4. 檢查基本儲存庫

驗證基本儲存庫是否已啟用。如果它們被禁用,請啟用它們。

# yum repolist
repo id                repo の名前
appstream              CentOS Linux 8 - AppStream
baseos                 CentOS Linux 8 - BaseOS
extras                 CentOS Linux 8 - Extras

如果有任何儲存庫被禁用,請啟用它們。

# dnf config-manager --enable BaseOS AppStream extras

此外,如果開頭顯示以「This system is」開頭的訊息,則系統已註冊到 Spacewalk 等。無法使用遷移腳本,因此要麼將其從管理中移除,要麼放棄使用腳本。

# yum repolist
...
This system is receiving updates from Red Hat Satellite or Spacewalk server
repo id                       repo name

5. 套件更新

將套件更新到最新版本。雖然不要求更新到最新版本,但執行遷移腳本時將會更新,因此最終結果相同。

# yum update -y

6. 檢查可用磁碟空間

驗證 /var/cache 至少有 5GB 可用空間。

# df -h /var/cache
ファイルシス                サイズ  使用  残り 使用% マウント位置
/dev/mapper/cl_centos8-root    47G  1.7G   46G    4% /

7. 禁用自動套件更新

如果在執行遷移腳本時啟動了自動套件更新,它們將無法正常運作,因此必須禁用。CentOS 有兩種類型的自動套件更新:

  • yum-cron(CentOS 7)或 dnf-automatic(CentOS 8)
  • 桌面環境內建的 Packagekit

如果未安裝桌面環境,請檢查 yum-cron 或 dnf-automatic。如果安裝了桌面環境,則應檢查兩者。

7-1. 禁用 dnf-automatic

檢查是否安裝了 dnf-automatic。如果如下所示未顯示任何內容,請繼續進行「7-2. 禁用 Packagekit」。

# rpm -qa | grep dnf-automatic
★何も表示されなければインストールされていません

若已安裝,檢查計時器設置。在以下範例中,自動下載(dnf-automatic-download.timer)已啟用。

# systemctl list-unit-files --type=timer | grep dnf-auto
dnf-automatic-download.timer   enabled
dnf-automatic-install.timer    disabled
dnf-automatic-notifyonly.timer disabled
dnf-automatic.timer            disabled

若其中任一項已啟用,請全部禁用。

# systemctl disable dnf-automatic-download.timer --now
7-2. 禁用 Packagekit

若安裝了 GUI 環境,請檢查 Packagekit。

# systemctl status packagekit

若如下所示顯示「active (running)」(★ 標記處),則表示正在運行。若 Packagekit 服務本身不存在,則會顯示「Unit packagekit.service could not be found.」,此情況與此無關。

● packagekit.service - PackageKit Daemon
   Loaded: loaded (/usr/lib/systemd/system/packagekit.service; static; vendor preset: disabled)
   Active: ★active (running)★ since Tue 2023-08-15 09:31:27 GMT; 59s ago
 Main PID: 21960 (packagekitd)
    Tasks: 3
   CGroup: /system.slice/packagekit.service
           └─21960 /usr/libexec/packagekitd

Dec 15 09:31:26 centos7 systemd[1]: Starting PackageKit Daemon...
Dec 15 09:31:27 centos7 PackageKit[21960]: daemon start
Dec 15 09:31:27 centos7 systemd[1]: Started PackageKit Daemon.

若 Packagekit 正在運行,請停止服務並關閉自動啟動。

# systemctl disable packagekit --now

8. 下載遷移腳本

下載遷移腳本。若需要代理存取網路,請在選項 --proxy 或環境變數 https_proxy 中指定代理伺服器。

# curl -O https://raw.githubusercontent.com/oracle/centos2ol/main/centos2ol.sh

檢查可用選項。

# bash centos2ol.sh -h
Usage: centos2ol.sh [OPTIONS]

OPTIONS
-h
        Display this help and exit
-k
        Do not install the UEK kernel and disable UEK repos
-r
        Reinstall all CentOS RPMs with Oracle Linux RPMs
        Note: This is not necessary for support
-V
        Verify RPM information before and after the switch

執行遷移腳本

一切準備就緒後,執行遷移腳本以轉換到 Oracle Linux。執行時間取決於已安裝套件的數量、線路速度和機器性能。在我測試的環境中,大約需要 10 至 60 分鐘。

# bash centos2ol.sh

若腳本成功運行,將顯示以下訊息:

Sync successful.
Updating the GRUB2 bootloader.
Generating grub configuration file ...
done
Switching default boot kernel to the UEK.
Removing yum cache
Switch complete.
Oracle recommends rebooting this system.

按照訊息重新啟動系統。

# systemctl reboot

遷移後驗證

重新啟動後,檢查您的系統狀況。

  1. /etc/oracle-release 已新增,/etc/centos-release 已移除。
$ ls -l /etc/*-release
-rw-r--r--. 1 root root  32  8月  7 00:03 /etc/oracle-release
-rw-r--r--. 1 root root 489  8月  7 00:03 /etc/os-release
-rw-r--r--. 1 root root  45  8月  7 00:03 /etc/redhat-release
lrwxrwxrwx. 1 root root  14  8月  7 00:03 /etc/system-release -> oracle-release
  1. 遷移前版本為 CentOS 8.3,現在是最新的 Oracle Linux 8.8。若使用遷移腳本進行遷移,將成為最新版本。
$ cat /etc/oracle-release
Oracle Linux Server release 8.8
  1. 預設核心為 UEK,而非 RHCK。若不想使用 UEK,可在執行腳本時指定 centos2ol.sh -k,如下所示:
$ uname -r
5.4.17-2136.322.6.2.el8uek.x86_64
  1. 檢查是否仍有 CentOS 套件殘留。以下核心會顯示出來。這些未使用,因此可以刪除。
$ rpm -qa --qf '%{NAME}-%{VERSION}-%{RELEASE}\t%{VENDOR}\n' | grep CentOS | sort -n
kernel-4.18.0-240.el8   CentOS
kernel-core-4.18.0-240.el8      CentOS
kernel-modules-4.18.0-240.el8   CentOS
  1. 進一步顯示與核心相關的套件列表。我們可以看到之前的 CentOS 核心以及 Oracle Linux 的最新 RHCK 和 UEK 已安裝。
# rpm -qa --qf '%{NAME}-%{VERSION}-%{RELEASE}\t%{VENDOR}\n' | grep kernel- | sort -n
kernel-4.18.0-240.el8   CentOS
kernel-4.18.0-477.21.1.el8_8    Oracle America
kernel-core-4.18.0-240.el8      CentOS
kernel-core-4.18.0-477.21.1.el8_8       Oracle America
kernel-modules-4.18.0-240.el8   CentOS
kernel-modules-4.18.0-477.21.1.el8_8    Oracle America
kernel-tools-4.18.0-477.21.1.el8_8      Oracle America
kernel-tools-libs-4.18.0-477.21.1.el8_8 Oracle America
kernel-uek-5.4.17-2136.322.6.2.el8uek   Oracle America
  1. 檢查啟用的儲存庫,您會看到它們已被 Oracle Linux 的儲存庫替換。
yum repolist
repo id           repo の名前
ol8_UEKR6         Latest 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)

結論

通過使用遷移腳本,您可以看到從 CentOS 轉換到 Oracle Linux 非常簡單。最麻煩的部分是初步檢查工作。此外,雖然正文中未解釋,但在執行前請務必進行備份。

總結

  • CentOS 的支援即將結束,因此需要快速遷移。
  • Oracle Linux 是一個可能的遷移目標
  • 遷移腳本 centos2ol.sh 使從 CentOS 轉換到 Oracle Linux 變得簡單。
  • 每台伺服器的遷移時間約為 10 至 60 分鐘,取決於已安裝套件的數量、伺服器性能和線路速度。
  • 腳本有一些限制,例如必須能連接到網路儲存庫。

自 2020 年底以來,RHEL 克隆行業一直處於動盪之中,但 2023 年又出現了一次騷動。Red Hat 之前發布了 RHEL 原始碼,但已宣布未來將不再公開(見下方連結)。為此,一些供應商宣布了對策。Oracle 不僅多年來一直在開發 Oracle Linux,還開發 Solaris,因此您可能在這方面感到安心。

Publickey!:「Oracle、SUSE 和 Rocky Linux 的主要贊助商 CIQ 成立『開放企業 Linux 協會』,發布與 RHEL 相容的帶錯誤的 Linux」

Publickey!:「Red Hat 抨擊克隆作業系統供應商,稱『如果您只是重建程式碼而不增加價值,這對開源是威脅』」