はじめに
Red Hat社が AWS 上で配布するコミュニティ AMI を使用し、EC2 上に起動した Red Hat Enterprise Linux 7系を8系または9系までインプレースアップグレードしたい、というのが本記事の趣旨になります。
アップグレードパス
アップグレードパスがあらかじめ決められており、7 から 8 を飛び越して 9 に一気に上げることはできず、7.9 から 8.8 へ、8.8 から 9.2 へアップグレードしていきます。
なぜ RHEL 8.9 ではなく 8.8 なのかは、Extended Update Support (EUS) が設けられているバージョン 8.8 から EUS が設けられている 9.2 へ移動できる、ということだと思われます。
RHEL 7を 8 にインプレースアップグレード
RHEL のバージョン確認
本検証ではバージョン 7.9 を使用します。
AMI名 | AMI ID |
RHEL-7.9_HVM-20221027-x86_64-0-Hourly2-GP2 | ami-05016d58118cb4881 |
$ cat /etc/redhat-release Red Hat Enterprise Linux Server release 7.9 (Maipo)
RHEL 7.9 を最新化
本検証では7系の最終マイナーリリースバージョン 7.9 を使用していますが、稼働しているバージョンが 7.9 未満であれば 7.9 まで更新されます。
# yum -y update 読み込んだプラグイン:amazon-id, product-id, search-disabled-repos, subscription-manager This system is not registered with an entitlement server. You can use subscription-manager to register. rhel-7-server-rhui-rh-common-rpms | 3.8 kB 00:00:00 rhel-7-server-rhui-rpms | 3.5 kB 00:00:00 rhui-client-config-server-7 | 1.5 kB 00:00:00 (1/7): rhel-7-server-rhui-rh-common-rpms/7Server/x86_64/group | 124 B 00:00:00 (2/7): rhel-7-server-rhui-rh-common-rpms/7Server/x86_64/primary_db | 119 kB 00:00:00 (3/7): rhel-7-server-rhui-rh-common-rpms/7Server/x86_64/updateinfo | 34 kB 00:00:00 (4/7): rhel-7-server-rhui-rpms/7Server/x86_64/updateinfo | 4.3 MB 00:00:00 (5/7): rhel-7-server-rhui-rpms/7Server/x86_64/group | 631 kB 00:00:00 (6/7): rhui-client-config-server-7/x86_64/primary | 2.7 kB 00:00:00 (7/7): rhel-7-server-rhui-rpms/7Server/x86_64/primary_db | 94 MB 00:00:01 rhui-client-config-server-7 15/15 依存性の解決をしています --> トランザクションの確認を実行しています。 (中略) | 2.1 kB 00:00:00 インストール: kernel.x86_64 0:3.10.0-1160.108.1.el7 依存性関連をインストールしました: linux-firmware.noarch 0:20200421-81.git78c0348.el7_9 更新: bind-export-libs.x86_64 32:9.11.4-26.P2.el7_9.15 ca-certificates.noarch 0:2023.2.60_v7.0.306-72.el7_9 cronie.x86_64 0:1.4.11-25.el7_9 cronie-anacron.x86_64 0:1.4.11-25.el7_9 curl.x86_64 0:7.29.0-59.el7_9.2 diffutils.x86_64 0:3.3-6.el7_9 emacs-filesystem.noarch 1:24.3-23.el7_9.1 grub2.x86_64 1:2.02-0.87.el7_9.11 grub2-common.noarch 1:2.02-0.87.el7_9.11 grub2-pc.x86_64 1:2.02-0.87.el7_9.11 grub2-pc-modules.noarch 1:2.02-0.87.el7_9.11 grub2-tools.x86_64 1:2.02-0.87.el7_9.11 grub2-tools-extra.x86_64 1:2.02-0.87.el7_9.11 grub2-tools-minimal.x86_64 1:2.02-0.87.el7_9.11 insights-client.noarch 0:3.1.9-1.el7_9 kernel-tools.x86_64 0:3.10.0-1160.108.1.el7 kernel-tools-libs.x86_64 0:3.10.0-1160.108.1.el7 krb5-libs.x86_64 0:1.15.1-55.el7_9 libcurl.x86_64 0:7.29.0-59.el7_9.2 libgudev1.x86_64 0:219-78.el7_9.9 libssh2.x86_64 0:1.8.0-4.el7_9.1 microcode_ctl.x86_64 2:2.1-73.20.el7_9 nspr.x86_64 0:4.35.0-1.el7_9 nss.x86_64 0:3.90.0-2.el7_9 nss-pem.x86_64 0:1.0.3-7.el7_9.1 nss-softokn.x86_64 0:3.90.0-6.el7_9 nss-softokn-freebl.x86_64 0:3.90.0-6.el7_9 nss-sysinit.x86_64 0:3.90.0-2.el7_9 nss-tools.x86_64 0:3.90.0-2.el7_9 nss-util.x86_64 0:3.90.0-1.el7_9 openssh.x86_64 0:7.4p1-23.el7_9 openssh-clients.x86_64 0:7.4p1-23.el7_9 openssh-server.x86_64 0:7.4p1-23.el7_9 openssl.x86_64 1:1.0.2k-26.el7_9 openssl-libs.x86_64 1:1.0.2k-26.el7_9 python.x86_64 0:2.7.5-94.el7_9 python-libs.x86_64 0:2.7.5-94.el7_9 python-perf.x86_64 0:3.10.0-1160.108.1.el7 python-syspurpose.x86_64 0:1.24.53-1.el7_9 redhat-release-server.x86_64 0:7.9-9.el7_9 rh-amazon-rhui-client.noarch 0:4.0.14-1.el7 rhc.x86_64 1:0.2.4-1.el7_9 rsync.x86_64 0:3.1.2-12.el7_9 subscription-manager.x86_64 0:1.24.53-1.el7_9 subscription-manager-rhsm.x86_64 0:1.24.53-1.el7_9 subscription-manager-rhsm-certificates.x86_64 0:1.24.53-1.el7_9 sudo.x86_64 0:1.8.23-10.el7_9.3 systemd.x86_64 0:219-78.el7_9.9 systemd-libs.x86_64 0:219-78.el7_9.9 systemd-sysv.x86_64 0:219-78.el7_9.9 tzdata.noarch 0:2023d-1.el7 zlib.x86_64 0:1.2.7-21.el7_9 完了しました!
リポジトリの有効化
# yum-config-manager --enable rhui-client-config-server-7 # yum-config-manager --enable rhel-7-server-rhui-extras-rpms
必要な RHUI パッケージのインストール
# yum -y install rh-amazon-rhui-client leapp-rhui-aws 読み込んだプラグイン:amazon-id, product-id, search-disabled-repos, subscription-manager This system is not registered with an entitlement server. You can use subscription-manager to register. rhel-7-server-rhui-extras-rpms | 3.4 kB 00:00:00 rhel-7-server-rhui-rh-common-rpms | 3.8 kB 00:00:00 rhel-7-server-rhui-rpms | 3.5 kB 00:00:00 rhui-client-config-server-7 | 1.5 kB 00:00:00 (1/3): rhel-7-server-rhui-extras-rpms/x86_64/group | 124 B 00:00:00 (2/3): rhel-7-server-rhui-extras-rpms/x86_64/updateinfo | 259 kB 00:00:00 (3/3): rhel-7-server-rhui-extras-rpms/x86_64/primary_db | 632 kB 00:00:00 パッケージ rh-amazon-rhui-client-4.0.14-1.el7.noarch はインストール済みか最新バージョンです 依存性の解決をしています (中略) インストール: leapp-rhui-aws.noarch 0:1.0.7-1.el7 依存性関連をインストールしました: dnf.noarch 0:4.0.9.2-2.el7_9 dnf-data.noarch 0:4.0.9.2-2.el7_9 json-glib.x86_64 0:1.4.2-2.el7 leapp.noarch 0:0.16.0-1.el7_9 leapp-deps.noarch 0:0.16.0-1.el7_9 leapp-upgrade-el7toel8.noarch 0:0.19.0-1.el7_9 leapp-upgrade-el7toel8-deps.noarch 0:0.19.0-1.el7_9 libcomps.x86_64 0:0.1.8-14.el7 libdnf.x86_64 0:0.22.5-2.el7_9 libmodulemd.x86_64 0:1.6.3-1.el7 librepo.x86_64 0:1.8.1-8.el7_9 libreport-filesystem.x86_64 0:2.1.11-53.el7 librhsm.x86_64 0:0.0.3-3.el7_9 libsolv.x86_64 0:0.6.34-4.el7 python-enum34.noarch 0:1.0.4-1.el7 python2-dnf.noarch 0:4.0.9.2-2.el7_9 python2-hawkey.x86_64 0:0.22.5-2.el7_9 python2-leapp.noarch 0:0.16.0-1.el7_9 python2-libcomps.x86_64 0:0.1.8-14.el7 python2-libdnf.x86_64 0:0.22.5-2.el7_9 完了しました!
Leapp ユーティリティーをインストールする
インストール済みであれば、その旨メッセージが表示されるため確認します。
# yum install leapp-upgrade 読み込んだプラグイン:amazon-id, product-id, search-disabled-repos, subscription-manager This system is not registered with an entitlement server. You can use subscription-manager to register. パッケージ leapp-upgrade-el7toel8-0.19.0-1.el7_9.noarch はインストール済みか最新バージョンです 何もしません
アップグレード前の事前確認
# leapp preupgrade --no-rhsm --target 8.8 (中略) Debug output written to /var/log/leapp/leapp-preupgrade.log ============================================================ REPORT OVERVIEW ============================================================ Upgrade has been inhibited due to the following problems: 1. Possible problems with remote login using root account 2. Newest installed kernel not in use 3. Missing required answers in the answer file HIGH and MEDIUM severity reports: 1. Packages available in excluded repositories will not be installed 2. Difference in Python versions and support in RHEL 8 3. GRUB2 core will be automatically updated during the upgrade 4. Usage of deprecated Model "RequiredTargetUserspacePackages" at /usr/share/leapp-repository/repositories/system_upgrade/common/actors/cloud/checkrhui/actor.py:123 Reports summary: Errors: 0 Inhibitors: 3 HIGH severity reports: 4 MEDIUM severity reports: 0 LOW severity reports: 4 INFO severity reports: 4 Before continuing consult the full report: A report has been generated at /var/log/leapp/leapp-report.json A report has been generated at /var/log/leapp/leapp-report.txt ============================================================ END OF REPORT OVERVIEW ============================================================ Answerfile has been generated at /var/log/leapp/answerfile
事前確認結果
レポートとして /var/log/leapp/leapp-report.txt に出力され、inhibitor (阻害要素)となっている項目を対処する必要があります。
Risk Factor: high (inhibitor) Title: Newest installed kernel not in use Summary: To ensure a stable upgrade, the machine needs to be booted into the latest installed kernel. Remediation: [hint] Boot into the most up-to-date kernel installed on the machine before running Leapp again. Key: ebb478cfa5443f83a8c9a78ba510eb40e6e9d117 ---------------------------------------- Risk Factor: high (inhibitor) Title: Possible problems with remote login using root account Summary: OpenSSH configuration file does not explicitly state the option PermitRootLogin in sshd_config file, which will default in RHEL8 to "prohibit-password". Remediation: [hint] If you depend on remote root logins using passwords, consider setting up a different user for remote administration or adding "PermitRootLogin yes" to sshd_config. If this change is ok for you, add explicit "PermitRootLogin prohibit-password" to your sshd_config to ignore this inhibitor Key: 3d21e8cc9e1c09dc60429de7716165787e99515f ---------------------------------------- Risk Factor: high (inhibitor) Title: Missing required answers in the answer file Summary: One or more sections in answerfile are missing user choices: remove_pam_pkcs11_module_check.confirm For more information consult https://red.ht/leapp-dialogs. Remediation: [hint] Please register user choices with leapp answer cli command or by manually editing the answerfile. [command] leapp answer --section remove_pam_pkcs11_module_check.confirm=True Key: d35f6c6b1b1fa6924ef442e3670d90fa92f0d54b ---------------------------------------- (以下略)
阻害要因への対処1
そのままの通りなのですが、安定したアップグレードを確実に行うには、マシンを最新のインストール済みカーネルで起動する必要があります。
Risk Factor: high (inhibitor) Title: Newest installed kernel not in use Summary: To ensure a stable upgrade, the machine needs to be booted into the latest installed kernel. Remediation: [hint] Boot into the most up-to-date kernel installed on the machine before running Leapp again. Key: ebb478cfa5443f83a8c9a78ba510eb40e6e9d117
以下、対処2 および対処3 を行った後で、OS を再起動します。
# reboot
阻害要因への対処2
root ユーザーでの SSH 接続に対する内容です。
sshd_config 内で明示的に root ユーザーの直ログインに関する挙動を記述する必要があります。
Risk Factor: high (inhibitor) Title: Possible problems with remote login using root account Summary: OpenSSH configuration file does not explicitly state the option PermitRootLogin in sshd_config file, which will default in RHEL8 to "prohibit-password". Remediation: [hint] If you depend on remote root logins using passwords, consider setting up a different user for remote administration or adding "PermitRootLogin yes" to sshd_config. If this change is ok for you, add explicit "PermitRootLogin prohibit-password" to your sshd_config to ignore this inhibitor Key: 3d21e8cc9e1c09dc60429de7716165787e99515f
/etc/ssh/sshd_config の末尾に以下 PermitRootLogin no を追記します。
(元々 sshd_config に項目 PermitRootLogin yes 自体は書いてあり、コメントアウトになっていることもある模様)
# tail -n 1 /etc/ssh/sshd_config PermitRootLogin no
ちなみにインターネット上ではそのままコメントアウトを外して PermitRootLogin yes にしましょう、という記事を多々目にします。
セキュリティリスクが高まるため、Amazon Linux 2 においてはデフォルト状態で root ユーザーによる直接の SSH 接続はできないようになっています。
今回は RHEL ではありますが、root ユーザーでの直ログインが真に必要でない場合を除いて、安易に yes に設定しないようにしたいですね。
阻害要因への対処3
/var/log/leapp/answerfile への回答がないことに対する内容で、confirm = のコメントアウトを外し、True を追記します。
# tail -n 2 /var/log/leapp/answerfile confirm = True
RHEL 8 へのアップグレードを実施
先の阻害要因が解消できたので、leapp upgrade コマンドでアップグレードを実施します。
# leapp upgrade --no-rhsm --target 8.8 ==> Processing phase `configuration_phase` (中略) Transaction Summary ======================================================================================================================================== Install 223 Packages Upgrade 257 Packages Remove 72 Packages Downgrade 9 Packages Total size: 665 M DNF will only download packages, install gpg keys, and check the transaction. Downloading Packages: Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Complete! ====> * add_upgrade_boot_entry Add new boot entry for Leapp provided initramfs. A reboot is required to continue. Please reboot your system. Debug output written to /var/log/leapp/leapp-upgrade.log ============================================================ REPORT OVERVIEW ============================================================ HIGH and MEDIUM severity reports: 1. Packages available in excluded repositories will not be installed 2. Difference in Python versions and support in RHEL 8 3. GRUB2 core will be automatically updated during the upgrade 4. Usage of deprecated Model "RequiredTargetUserspacePackages" at /usr/share/leapp-repository/repositories/system_upgrade/common/actors/cloud/checkrhui/actor.py:123 5. Module pam_pkcs11 will be removed from PAM configuration Reports summary: Errors: 0 Inhibitors: 0 HIGH severity reports: 4 MEDIUM severity reports: 1 LOW severity reports: 5 INFO severity reports: 4 Before continuing consult the full report: A report has been generated at /var/log/leapp/leapp-report.json A report has been generated at /var/log/leapp/leapp-report.txt ============================================================ END OF REPORT OVERVIEW ============================================================ Answerfile has been generated at /var/log/leapp/answerfile
本検証に使用した環境は Red Hat社のコミュニティ AMI から起動した直後、プレーンな状態の EC2 で、約8分間で完了しました。
A reboot is required to continue. Please reboot your system.
とのことなので再起動します。
# reboot
なのですが、コマンドで reboot をかけた後どうやらクラッシュしている?のか、単に時間がかかっている?のか、再度 SSH 接続を試みてもタイムアウトで接続することができませんでした。
stop-instances & start-instances をかけることで SSH 接続できるようになりました。
$ aws ec2 stop-instances --instance-ids i-xxxxxxxxxxxxxxxx $ aws ec2 start-instances --instance-ids i-xxxxxxxxxxxxxxxx
start 時のステータスチェック「初期化しています」が珍しく7分もかかっていたので、SSH 接続がタイムアウトしてしまったように見えました。
改めて RHEL のバージョン確認
RHEL 7.9 から 8.8 へアップグレードされたことが確認できました。
# cat /etc/redhat-release Red Hat Enterprise Linux release 8.8 (Ootpa)
RHEL 8 を 9 にインプレースアップグレード
RHEL 8.8 を最新化
冒頭のアップグレードパスを確認しながら事前に最新化しておきます。
# dnf -y update サブスクリプション管理リポジトリーを更新しています。 コンシューマー識別子を読み込めません このシステムは、エンタイトルメントサーバーに登録されていません。subscription-manager で登録できます。 メタデータの期限切れの最終確認: 0:00:52 前の 2024年02月09日 08時06分34秒 に実施しました。 依存関係が解決しました。 行うべきことはありません。 完了しました!
リポジトリの有効化
dnf config-manager --set-enabled rhui-client-config-server-8
RHEL 8 から 9 にアップグレードする際に使用する leapp-upgrade-el8toel9 をインストールしますが、
RHEL 7 から 8 にアップグレードする際の leapp-upgrade-el7toel8 が残っており、競合するため削除します。
# grep -n leapp-upgrade-el7toel8 /etc/yum.conf 7:exclude=python2-leapp,snactor,leapp-upgrade-el7toel8,leapp # sed -i '7d' /etc/yum.conf # grep -n leapp-upgrade-el7toel8 /etc/yum.conf
# grep leapp /etc/dnf/dnf.conf -n 7:exclude=python2-leapp,snactor,leapp-upgrade-el7toel8,leapp # sed -i '7d' /etc/dnf/dnf.conf # grep leapp /etc/dnf/dnf.conf -n
# yum -y remove leapp-upgrade-el7toel8 サブスクリプション管理リポジトリーを更新しています。 コンシューマー識別子を読み込めません このシステムは、エンタイトルメントサーバーに登録されていません。subscription-manager で登録できます。 依存関係が解決しました。 ============================================================================================================================================================================================================================================ パッケージ アーキテクチャー バージョン リポジトリー サイズ ============================================================================================================================================================================================================================================ 削除中: leapp-upgrade-el7toel8 noarch 0.19.0-1.el7_9 @System 9.3 M 依存関係パッケージの削除: leapp noarch 0.16.0-1.el7_9 @System 62 k トランザクションの概要 ============================================================================================================================================================================================================================================ 削除 2 パッケージ 解放された容量: 9.4 M トランザクションの確認を実行中 トランザクションの確認に成功しました。 トランザクションのテストを実行中 トランザクションのテストに成功しました。 トランザクションを実行中 準備 : 1/1 削除 : leapp-0.16.0-1.el7_9.noarch 1/2 削除 : leapp-upgrade-el7toel8-0.19.0-1.el7_9.noarch 2/2 scriptletの実行中: leapp-upgrade-el7toel8-0.19.0-1.el7_9.noarch 2/2 検証 : leapp-0.16.0-1.el7_9.noarch 1/2 検証 : leapp-upgrade-el7toel8-0.19.0-1.el7_9.noarch 2/2 インストール済みの製品が更新されています。 削除しました: leapp-0.16.0-1.el7_9.noarch leapp-upgrade-el7toel8-0.19.0-1.el7_9.noarch 完了しました!
# rpm -q python2-leapp-0.16.0-1.el7_9.noarch python2-leapp-0.16.0-1.el7_9.noarch # dnf -y remove python2-leapp-0.16.0-1.el7_9.noarch サブスクリプション管理リポジトリーを更新しています。 コンシューマー識別子を読み込めません このシステムは、エンタイトルメントサーバーに登録されていません。subscription-manager で登録できます。 依存関係が解決しました。 ============================================================================================================================================================================================================================================ パッケージ アーキテクチャー バージョン リポジトリー サイズ ============================================================================================================================================================================================================================================ 削除中: python2-leapp noarch 0.16.0-1.el7_9 @System 655 k トランザクションの概要 ============================================================================================================================================================================================================================================ 削除 1 パッケージ 解放された容量: 655 k トランザクションの確認を実行中 トランザクションの確認に成功しました。 トランザクションのテストを実行中 トランザクションのテストに成功しました。 トランザクションを実行中 準備 : 1/1 削除 : python2-leapp-0.16.0-1.el7_9.noarch 1/1 検証 : python2-leapp-0.16.0-1.el7_9.noarch 1/1 インストール済みの製品が更新されています。 削除しました: python2-leapp-0.16.0-1.el7_9.noarch 完了しました!
改めて新しい leapp-upgrade パッケージをインストールします。
# dnf -y install leapp-rhui-aws サブスクリプション管理リポジトリーを更新しています。 コンシューマー識別子を読み込めません このシステムは、エンタイトルメントサーバーに登録されていません。subscription-manager で登録できます。 メタデータの期限切れの最終確認: 0:16:32 前の 2024年02月09日 08時18分39秒 に実施しました。 依存関係が解決しました。 ============================================================================================================================================================================================================================================ パッケージ アーキテクチャー バージョン リポジトリー サイズ ============================================================================================================================================================================================================================================ インストール: leapp-rhui-aws noarch 1.0.7-1.el8 rhui-client-config-server-8 25 k 依存関係のインストール: leapp noarch 0.15.1-1.el8 rhel-8-appstream-rhui-rpms 33 k leapp-upgrade-el8toel9 noarch 0.18.0-1.el8_8.2 rhel-8-appstream-rhui-rpms 1.0 M python3-leapp noarch 0.15.1-1.el8 rhel-8-appstream-rhui-rpms 178 k トランザクションの概要 ============================================================================================================================================================================================================================================ インストール 4 パッケージ ダウンロードサイズの合計: 1.2 M インストール後のサイズ: 9.1 M パッケージのダウンロード: (1/4): leapp-0.15.1-1.el8.noarch.rpm 305 kB/s | 33 kB 00:00 (2/4): python3-leapp-0.15.1-1.el8.noarch.rpm 1.4 MB/s | 178 kB 00:00 (3/4): leapp-upgrade-el8toel9-0.18.0-1.el8_8.2.noarch.rpm 7.5 MB/s | 1.0 MB 00:00 (4/4): leapp-rhui-aws-1.0.7-1.el8.noarch.rpm 780 kB/s | 25 kB 00:00 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 合計 6.6 MB/s | 1.2 MB 00:00 トランザクションの確認を実行中 トランザクションの確認に成功しました。 トランザクションのテストを実行中 トランザクションのテストに成功しました。 トランザクションを実行中 準備 : 1/1 インストール中 : python3-leapp-0.15.1-1.el8.noarch 1/4 インストール中 : leapp-0.15.1-1.el8.noarch 2/4 インストール中 : leapp-upgrade-el8toel9-0.18.0-1.el8_8.2.noarch 3/4 インストール中 : leapp-rhui-aws-1.0.7-1.el8.noarch 4/4 scriptletの実行中: leapp-rhui-aws-1.0.7-1.el8.noarch 4/4 検証 : leapp-0.15.1-1.el8.noarch 1/4 検証 : python3-leapp-0.15.1-1.el8.noarch 2/4 検証 : leapp-upgrade-el8toel9-0.18.0-1.el8_8.2.noarch 3/4 検証 : leapp-rhui-aws-1.0.7-1.el8.noarch 4/4 インストール済みの製品が更新されています。 インストール済み: leapp-0.15.1-1.el8.noarch leapp-rhui-aws-1.0.7-1.el8.noarch leapp-upgrade-el8toel9-0.18.0-1.el8_8.2.noarch python3-leapp-0.15.1-1.el8.noarch 完了しました!
アップグレード前の事前確認
7.9 から 8.8 へのアップグレード時と同様に、8.8 から 9.2 でも同様に阻害要因の確認を行いますが、本検証環境では阻害要因はありませんでした。
# leapp preupgrade --no-rhsm --target 9.2 (中略) Transaction Summary ================================================================================================================================ Install 57 Packages Upgrade 406 Packages Remove 62 Packages Downgrade 7 Packages Total size: 648 M Total download size: 573 M Downloading Packages: Check completed. ====> * target_userspace_crypto_policies Set crypto policies inside the target userspace container. ====> * check_initramfs_tasks Inhibit the upgrade if conflicting "initramfs" tasks are detected ==> Processing phase `Reports` ====> * verify_check_results Check all dialogs and notify that user needs to make some choices. ====> * verify_check_results Check all generated results messages and notify user about them. Debug output written to /var/log/leapp/leapp-preupgrade.log ============================================================ REPORT ============================================================ A report has been generated at /var/log/leapp/leapp-report.json A report has been generated at /var/log/leapp/leapp-report.txt ============================================================ END OF REPORT ============================================================ Answerfile has been generated at /var/log/leapp/answerfile
RHEL 9 へのアップグレードを実施
leapp upgrade コマンドでアップグレードを実施します。
# leapp upgrade --no-rhsm --target 9.2 (中略) Transaction Summary ================================================================================================================================ Install 57 Packages Upgrade 406 Packages Remove 62 Packages Downgrade 7 Packages Total size: 648 M DNF will only download packages, install gpg keys, and check the transaction. Downloading Packages: Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Complete! ====> * add_upgrade_boot_entry Add new boot entry for Leapp provided initramfs. A reboot is required to continue. Please reboot your system. Debug output written to /var/log/leapp/leapp-upgrade.log ============================================================ REPORT ============================================================ A report has been generated at /var/log/leapp/leapp-report.json A report has been generated at /var/log/leapp/leapp-report.txt ============================================================ END OF REPORT ============================================================ Answerfile has been generated at /var/log/leapp/answerfile
こちらも約8分間で完了しました。
例によってまた A reboot is required to continue. Please reboot your system.
と出ていますが、reboot だと EC2 インスタンスチェックのステータス遷移が見えないので stop-instances & start-instances 後に再度 SSH 接続します。
改めて RHEL のバージョン確認
RHEL 8.8 から 9.2 へアップグレードされたことが確認できました。
# cat /etc/redhat-release Red Hat Enterprise Linux release 9.2 (Plow)
番外編 Extended Update Support 有効化
冒頭、アップグレードパスで記載した、Extended Update Support (EUS) について再掲します。
元来、RHEL の pay-as-you-go EC2 インスタンスには EUS のサポートを受けるオプションが提供されており、AMI を使用して起動している EC2 の利用料金に含まれています。
サポートを受けるには明示的に EUS リポジトリをサブスクライブする必要があるので以下で実施します。
有効なリポジトリを確認
# dnf repolist サブスクリプション管理リポジトリーを更新しています。 コンシューマー識別子を読み込めません このシステムは、エンタイトルメントサーバーに登録されていません。subscription-manager で登録できます。 repo id repo の名前 rhel-9-appstream-rhui-rpms Red Hat Enterprise Linux 9 for x86_64 - AppStream from RHUI (RPMs) rhel-9-baseos-rhui-rpms Red Hat Enterprise Linux 9 for x86_64 - BaseOS from RHUI (RPMs) rhui-client-config-server-9 Red Hat Enterprise Linux 9 Client Configuration
EUS へスイッチ
EUS にスイッチするコマンドが存在するか、確認します。
# which rhui-eus-switch /bin/rhui-eus-switch # rpm -qa | grep rh-amazon-rhui-client rh-amazon-rhui-client-4.0.14-1.el9.noarch
RHEL 9.2 の EUS を指定し、スイッチします。
# rhui-eus-switch 9.2 Your RHEL product version is eligible for switch to EUS. Switching to EUS version 9.2 [INFO:choose_repo] choose_repo:33 2024-02-09 09:31:00,848: Enabling binary repos in redhat-rhui-eus.repo サブスクリプション管理リポジトリーを更新しています。 コンシューマー識別子を読み込めません このシステムは、エンタイトルメントサーバーに登録されていません。subscription-manager で登録できます。 59 ファイルが削除されました
EUS にスイッチしたことを確認します。
# cat /var/run/rhui-eus-switch Switch to EUS done.
有効なリポジトリを再確認
先ほど有効であった rhel-9-appstream-rhui-rpms が rhel-9-appstream-eus-rhui-rpms へ、rhel-9-baseos-rhui-rpms が rhel-9-baseos-eus-rhui-rpms へ切り替わったことがわかります。
# dnf repolist サブスクリプション管理リポジトリーを更新しています。 コンシューマー識別子を読み込めません このシステムは、エンタイトルメントサーバーに登録されていません。subscription-manager で登録できます。 repo id repo の名前 rhel-9-appstream-eus-rhui-rpms Red Hat Enterprise Linux 9 - AppStream - Extended Update Support from RHUI (RPMs) rhel-9-baseos-eus-rhui-rpms Red Hat Enterprise Linux 9 - BaseOS - Extended Update Support from RHUI (RPMs) rhui-client-config-server-9 Red Hat Enterprise Linux 9 Client Configuration
アップデートおよびインストール可能なパッケージを確認
el9_2 または el9_2.2 とマイナーバージョンの数字が振られ、EUS のリポジトリを参照していることがわかります。
# dnf check-update サブスクリプション管理リポジトリーを更新しています。 コンシューマー識別子を読み込めません このシステムは、エンタイトルメントサーバーに登録されていません。subscription-manager で登録できます。 Red Hat Enterprise Linux 9 Client Configuration 48 kB/s | 4.0 kB 00:00 Red Hat Enterprise Linux 9 - AppStream - Extended Update Support from RHUI (RPMs) 29 MB/s | 25 MB 00:00 Red Hat Enterprise Linux 9 - BaseOS - Extended Update Support from RHUI (RPMs) 30 MB/s | 16 MB 00:00 NetworkManager.x86_64 1:1.42.2-12.el9_2 rhel-9-baseos-eus-rhui-rpms NetworkManager-config-server.noarch 1:1.42.2-12.el9_2 rhel-9-baseos-eus-rhui-rpms NetworkManager-initscripts-updown.noarch 1:1.42.2-12.el9_2 rhel-9-baseos-eus-rhui-rpms NetworkManager-libnm.x86_64 1:1.42.2-12.el9_2 rhel-9-baseos-eus-rhui-rpms NetworkManager-team.x86_64 1:1.42.2-12.el9_2 rhel-9-baseos-eus-rhui-rpms NetworkManager-tui.x86_64 1:1.42.2-12.el9_2 rhel-9-baseos-eus-rhui-rpms crypto-policies.noarch 20221215-1.git9a18988.el9_2.2 rhel-9-baseos-eus-rhui-rpms crypto-policies-scripts.noarch 20221215-1.git9a18988.el9_2.2 rhel-9-baseos-eus-rhui-rpms curl.x86_64 7.76.1-23.el9_2.6 rhel-9-baseos-eus-rhui-rpms dracut.x86_64 057-22.git20230214.el9_2 rhel-9-baseos-eus-rhui-rpms dracut-config-generic.x86_64 057-22.git20230214.el9_2 rhel-9-baseos-eus-rhui-rpms dracut-config-rescue.x86_64 057-22.git20230214.el9_2 rhel-9-baseos-eus-rhui-rpms dracut-live.x86_64 057-22.git20230214.el9_2 rhel-9-appstream-eus-rhui-rpms dracut-network.x86_64 057-22.git20230214.el9_2 rhel-9-baseos-eus-rhui-rpms dracut-squash.x86_64 057-22.git20230214.el9_2 rhel-9-baseos-eus-rhui-rpms gnutls.x86_64 3.7.6-21.el9_2.1 rhel-9-baseos-eus-rhui-rpms grub2-common.noarch 1:2.06-61.el9_2.2 rhel-9-baseos-eus-rhui-rpms grub2-pc.x86_64 1:2.06-61.el9_2.2 rhel-9-baseos-eus-rhui-rpms grub2-pc-modules.noarch 1:2.06-61.el9_2.2 rhel-9-baseos-eus-rhui-rpms grub2-tools.x86_64 1:2.06-61.el9_2.2 rhel-9-baseos-eus-rhui-rpms grub2-tools-efi.x86_64 1:2.06-61.el9_2.2 rhel-9-baseos-eus-rhui-rpms grub2-tools-extra.x86_64 1:2.06-61.el9_2.2 rhel-9-baseos-eus-rhui-rpms grub2-tools-minimal.x86_64 1:2.06-61.el9_2.2 rhel-9-baseos-eus-rhui-rpms kernel.x86_64 5.14.0-284.52.1.el9_2 rhel-9-baseos-eus-rhui-rpms kernel-core.x86_64 5.14.0-284.52.1.el9_2 rhel-9-baseos-eus-rhui-rpms kernel-modules.x86_64 5.14.0-284.52.1.el9_2 rhel-9-baseos-eus-rhui-rpms kernel-modules-core.x86_64 5.14.0-284.52.1.el9_2 rhel-9-baseos-eus-rhui-rpms kernel-modules-extra.x86_64 5.14.0-284.52.1.el9_2 rhel-9-baseos-eus-rhui-rpms kernel-tools.x86_64 5.14.0-284.52.1.el9_2 rhel-9-baseos-eus-rhui-rpms kernel-tools-libs.x86_64 5.14.0-284.52.1.el9_2 rhel-9-baseos-eus-rhui-rpms kexec-tools.x86_64 2.0.25-13.el9_2.3 rhel-9-baseos-eus-rhui-rpms libcurl.x86_64 7.76.1-23.el9_2.6 rhel-9-baseos-eus-rhui-rpms libdnf-plugin-subscription-manager.x86_64 1.29.33.2-1.el9_2 rhel-9-baseos-eus-rhui-rpms librhsm.x86_64 0.0.3-7.el9_2.1 rhel-9-baseos-eus-rhui-rpms libssh.x86_64 0.10.4-9.el9_2 rhel-9-baseos-eus-rhui-rpms libssh-config.noarch 0.10.4-9.el9_2 rhel-9-baseos-eus-rhui-rpms linux-firmware.noarch 20230310-138.el9_2 rhel-9-baseos-eus-rhui-rpms linux-firmware-whence.noarch 20230310-138.el9_2 rhel-9-baseos-eus-rhui-rpms microcode_ctl.noarch 4:20220809-2.20231009.1.el9_2 rhel-9-baseos-eus-rhui-rpms ncurses.x86_64 6.2-8.20210508.el9_2.1 rhel-9-baseos-eus-rhui-rpms ncurses-base.noarch 6.2-8.20210508.el9_2.1 rhel-9-baseos-eus-rhui-rpms ncurses-c++-libs.x86_64 6.2-8.20210508.el9_2.1 rhel-9-appstream-eus-rhui-rpms ncurses-libs.x86_64 6.2-8.20210508.el9_2.1 rhel-9-baseos-eus-rhui-rpms nspr.x86_64 4.35.0-4.el9_2 rhel-9-appstream-eus-rhui-rpms nss.x86_64 3.90.0-4.el9_2 rhel-9-appstream-eus-rhui-rpms nss-softokn.x86_64 3.90.0-4.el9_2 rhel-9-appstream-eus-rhui-rpms nss-softokn-freebl.x86_64 3.90.0-4.el9_2 rhel-9-appstream-eus-rhui-rpms nss-sysinit.x86_64 3.90.0-4.el9_2 rhel-9-appstream-eus-rhui-rpms nss-tools.x86_64 3.90.0-4.el9_2 rhel-9-appstream-eus-rhui-rpms nss-util.x86_64 3.90.0-4.el9_2 rhel-9-appstream-eus-rhui-rpms openssh.x86_64 8.7p1-30.el9_2.3 rhel-9-baseos-eus-rhui-rpms openssh-clients.x86_64 8.7p1-30.el9_2.3 rhel-9-baseos-eus-rhui-rpms openssh-server.x86_64 8.7p1-30.el9_2.3 rhel-9-baseos-eus-rhui-rpms openssl.x86_64 1:3.0.7-18.el9_2 rhel-9-baseos-eus-rhui-rpms openssl-libs.x86_64 1:3.0.7-18.el9_2 rhel-9-baseos-eus-rhui-rpms pixman.x86_64 0.40.0-6.el9_2 rhel-9-appstream-eus-rhui-rpms python-unversioned-command.noarch 3.9.16-1.el9_2.3 rhel-9-appstream-eus-rhui-rpms python3.x86_64 3.9.16-1.el9_2.3 rhel-9-baseos-eus-rhui-rpms python3-cloud-what.x86_64 1.29.33.2-1.el9_2 rhel-9-baseos-eus-rhui-rpms python3-libs.x86_64 3.9.16-1.el9_2.3 rhel-9-baseos-eus-rhui-rpms python3-perf.x86_64 5.14.0-284.52.1.el9_2 rhel-9-baseos-eus-rhui-rpms python3-rpm.x86_64 4.16.1.3-24.el9_2 rhel-9-baseos-eus-rhui-rpms python3-subscription-manager-rhsm.x86_64 1.29.33.2-1.el9_2 rhel-9-baseos-eus-rhui-rpms rpm.x86_64 4.16.1.3-24.el9_2 rhel-9-baseos-eus-rhui-rpms rpm-build-libs.x86_64 4.16.1.3-24.el9_2 rhel-9-baseos-eus-rhui-rpms rpm-libs.x86_64 4.16.1.3-24.el9_2 rhel-9-baseos-eus-rhui-rpms rpm-plugin-audit.x86_64 4.16.1.3-24.el9_2 rhel-9-baseos-eus-rhui-rpms rpm-plugin-selinux.x86_64 4.16.1.3-24.el9_2 rhel-9-baseos-eus-rhui-rpms rpm-plugin-systemd-inhibit.x86_64 4.16.1.3-24.el9_2 rhel-9-appstream-eus-rhui-rpms rpm-sign-libs.x86_64 4.16.1.3-24.el9_2 rhel-9-baseos-eus-rhui-rpms selinux-policy.noarch 38.1.11-2.el9_2.6 rhel-9-baseos-eus-rhui-rpms selinux-policy-targeted.noarch 38.1.11-2.el9_2.6 rhel-9-baseos-eus-rhui-rpms subscription-manager.x86_64 1.29.33.2-1.el9_2 rhel-9-baseos-eus-rhui-rpms systemd.x86_64 252-14.el9_2.5 rhel-9-baseos-eus-rhui-rpms systemd-container.x86_64 252-14.el9_2.5 rhel-9-baseos-eus-rhui-rpms systemd-libs.x86_64 252-14.el9_2.5 rhel-9-baseos-eus-rhui-rpms systemd-pam.x86_64 252-14.el9_2.5 rhel-9-baseos-eus-rhui-rpms systemd-rpm-macros.noarch 252-14.el9_2.5 rhel-9-baseos-eus-rhui-rpms systemd-udev.x86_64 252-14.el9_2.5 rhel-9-baseos-eus-rhui-rpms tzdata.noarch 2024a-1.el9 rhel-9-baseos-eus-rhui-rpms パッケージの廃止 grub2-tools.x86_64 1:2.06-61.el9_2.2 rhel-9-baseos-eus-rhui-rpms grub2-tools.x86_64 1:2.06-61.el9_2.1 @System grub2-tools-efi.x86_64 1:2.06-61.el9_2.2 rhel-9-baseos-eus-rhui-rpms grub2-tools.x86_64 1:2.06-61.el9_2.1 @System grub2-tools-extra.x86_64 1:2.06-61.el9_2.2 rhel-9-baseos-eus-rhui-rpms grub2-tools.x86_64 1:2.06-61.el9_2.1 @System grub2-tools-minimal.x86_64 1:2.06-61.el9_2.2 rhel-9-baseos-eus-rhui-rpms grub2-tools.x86_64 1:2.06-61.el9_2.1 @System
最後に
本検証では RHEL 7.9 AMI から起動した直後の EC2 を使ってインプレースアップグレードを行ってきました。
leapp preupgrade で事前に確認した阻害要因は、結果的に3つで済みましたが、アップグレード元の RHEL バージョンがいくつであるか、どのような利用の仕方をしてきたか、によって増減することが想像できます。
プレーンな AMI を使った検証とは違い、運用中の環境では土壇場で阻害要因の解消を行わなければならないため、もし可能であるならば実際の環境の AMI を取得し、クローン環境で事前検証を行うと安心材料になるかと考えます。