第8回 CentOSをOracle Linuxへ切り替える

2020年12月のCentOS公式ブログで、CentOSの開発は終了し、CentOS Streamへ移行することがアナウンスされました。これまでRHEL互換ディストリビューション(RHELクローン)として圧倒的な存在感を示していたCentOS終了の発表は大きな驚きをもたらしました。

2020年のCentOS終了のアナウンスから3年近くがたち、CentOSに変わるさまざま代替手段が登場しています。そこで今回は、CentOSやアフターCentOSの状況と、有力な移行先候補であるOracle Linuxへの切り替え方法を説明します。

CentOS終了とCentOS Stream

CentOSの状況を理解するために、CentOS終了の概要や、新たなCentOS Streamについて説明します。

CentOS終了のアナウンス

CentOS終了のアナウンスは、CentOS公式ブログ「CentOS Project shifts focus to CentOS Stream」で公開されました。

このブログの内容をまとめると次の通りです。

  • CentOS 8は2021/12/31でサポートが終了する
  • CentOS 7のサポート期間は従来通り2024/06/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クローンとも言われるRHEL互換Linuxディストリビューションでした。そのためRHELと互換性があり、ソースコードレベルでもほぼ一致しています。そういえば、以前「第1回 Oracle Linux使っていますか?(前編)」で次の図を紹介しましたね。

それに対してCentOS Streamは、ローリングリリース方式でリリースされるRHELのNightlyビルドです。Nightlyビルドとは、開発プロジェクトの最新のソースコードを用いて生成されたビルドで正式リリース版とは異なります。

いままでと違うのでわかりづらいのですが、CentOSプロジェクトが公開している次の図がわかりやすいでしょう。例えばRHEL 8(≓CentOS 8)はFedora 28から分岐して作成されています。そして8.2、8.3と順に公開され、それぞれに対してエラータが作成されます。また、OSの設定次第では、8.3から最新の8.8へアップデートすることも可能です。

引用元: CentOS Stream is Continuous Delivery licensed 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/06/30までです。CentOS 9はありません。そのため現在使用しているCentOSは、いずれかのLinuxディストリビューションに移行する必要があります。

バージョンサポート終了(*1)
CentOS 72024/06/30
CentOS 82021/12/31
CentOS Stream 82024/05/31
CentOS Stream 9未定(RHEL9と同じになる予定)
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 Spportの終了期間。Extended SupportやSustaing 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では、CentOSをインプレースでOracle Linuxに切り替えるcentos2ol.shというスクリプトを提供しています。今回はこのスクリプトを使って、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の推奨はyumではなくdnfですが、互換性があるので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の自動アップデート機能には次の2種類があります。

  • 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

一つでもenabledになっているときは、すべて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. デフォルトカーネルはRHCKではなくUEKになっています。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へ簡単に切り替えできる
  • 移行にかかる時間はサーバ1台当たり10分から60分程度。インストール済みパッケージ数やサーバー性能、回線速度に依存する
  • インターネットのリポジトリに接続可能なことなど、スクリプトにはいくつかの制限事項がある

2020年末から騒がしいRHELクローン業界ですが、2023年になってまた騒動が発生しています。これまでRed Hat社はRHELのソースコードを公開していたのですが、今後一般公開しないと発表しています(下記リンクを参照のこと)。それに対して、いくつかのベンダは対抗措置を発表しています。Oracle社はOracle Linuxを長年開発しているだけでなくSolarisも開発しているので、このあたりは安心かも知れません。

関連サービス

Oracle Linux

オラクル製品の開発は、Oracle Linux( Unbreakable Enterprise Kernel )に基づいて進められているため、オラクル製品に最適化されたOS環境をご利用いただけます。Kspliceによるゼロダウンタイムパッチを適用することが可能です。