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
のように日付が付いています。また、ミラーサイトの20230825
とlatest
は同じもので、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 7 | 2024/06/30 |
CentOS 8 | 2021/12/31 |
CentOS Stream 8 | 2024/05/31 |
CentOS Stream 9 | 未定(RHEL9と同じになる予定) |
Red Hat Enterprise Linux 7 | 2024/06/30 |
Red Hat Enterprise Linux 8 | 2029/05/31 |
Red Hat Enterprise Linux 9 | 2032/05/31 |
Oracle Linux 7 | 2024/12 |
Oracle Linux 8 | 2029/07 |
Oracle Linux 9 | 2032/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社から複数のドキュメントがリリースされているので、本コラムでは代表的なポイントを抑えつつ一部を深掘りします。
- CentOS 8からOracle Linux 8への切替え
- CentOS LinuxからOracle Linuxへの切替え
- Github: Switch from CentOS/Rocky Linux to Oracle Linux
移行スクリプトの実行手順
移行スクリプトの実行手順は以下の通りです。1から3の事前作業では複数のコマンドを実行する必要があります。しかし、4と5の移行作業は最小限のコマンドで実行できます。
- 制限事項の確認
- システムバックアップ(本文では省略)
- 移行元CentOSの事前準備
- 移行スクリプト実行
- 移行後の確認
制限事項の確認
移行ツールの制限事項は以下の通りです。ここではこれらの制限を把握するだけで、次の「移行元CentOSの事前準備」で確認します。
- 移行元はCentOS 6, 7, 8 もしくは Rocky Linux 8, 9
- CentOSとOracle LinuxのYumリポジトリに直接もしくはプロキシ経由でアクセスできること
- Spacewalkなどのサードパーティパッケージ管理ツールに登録されているインスタンスでないこと
- CentOSの公式リポジトリ以外からインストールしたパッケージがあるときでも互換性はあるが動作保証はしない。いくつかのソフトウェアは
/etc/oracle-release
があると動作に支障を来すことがある - 商用のアンチウイルス製品やハードウェアドライバなど、一部のカーネルモジュールがインストールされているときは、切り替え後に動作しないことがある
- 移行スクリプトはbaseやupdates、BaseOSなどベースリポジトリだけを有効にする。別のリポジトリからパッケージをインストールしているときは、追加でリポジトリを有効にする必要がある可能性がある
- /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
移行後の確認
再起動したあと、システムがどのようになっているか確認します。
- /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
- 移行前はCentOS 8.3でしたが、最新のOracle Linux 8.8になっています。移行スクリプトで移行すると最新バージョンになります。
$ cat /etc/oracle-release
Oracle Linux Server release 8.8
- デフォルトカーネルはRHCKではなくUEKになっています。UEKを使用したくないときはスクリプト実行時に
centos2ol.sh -k
のように指定します。
$ uname -r
5.4.17-2136.322.6.2.el8uek.x86_64
- 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
- さらに一歩進んでカーネル関係のパッケージ一覧を表示します。移行前の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
- 有効になっているリポジトリを確認します。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も開発しているので、このあたりは安心かも知れません。