はじめに

クラウドインテグレーション事業部の嶋﨑です。

Red Hat Enterprise Linux7のEOL対応でRHEL7からRHEL8、RHEL8からRHEL9のインプレースアップグレート対応を実施したので流れをまとめてみました。

1. アップグレードに必要な要件

RHEL 7から8、そして9へのアップグレードには、いくつかの最低要件を満たす必要があります。まずは、システムのハードウェア要件を確認しましょう。

メモリ要件

RHEL 8: ローカルメディアまたは NFS ネットワークインストールの場合は 1.5 GiB、HTTP(S) および FTP ネットワークインストールの場合は 3 GiB
RHEL 9: 同様に、ローカルメディアまたは NFS ネットワークインストールの場合は 1.5 GiB、HTTP(S) および FTP ネットワークインストールの場合は 3 GiB

ディスク容量

RHEL 8: 最低 10 GB、推奨 20 GB
RHEL 9: 最低 10 GB、推奨 20 GB多くのシステムでは問題なく要件は満たせると思いますが、詳しくは以下のドキュメントに記載されておりますので、目を通しておくことをおすすめします。
https://access.redhat.com/articles/rhel-limits

2. RHEL7系の最終マイナーバージョンへアップグレード

本検証で使用する環境は RHEL 7.4ですので、まずは 最終マイナーバージョンの7.9 まで更新する必要があります。

RHEL 7を最新化します

# yum -y update

以下のリポジトリを有効化します

# yum-config-manager --enable rhui-client-config-server-7
# yum-config-manager --enable rhel-7-server-rhui-extras-rpms

3. RHEL 7 → 8 へのアップグレード

leappツールを使ってアップグレードを進めていきます。
leappツールは、Red Hat が提供するインプレースアップグレード用のツールで、
事前の確認と修正作業を支援してくれます。
https://www.redhat.com/ja/resources/leapp-explained-detail
また、ターゲットOSバージョンとしては、RHEL 8.8がデフォルトでの指定となります。

必要なパッケージをインストールします

# yum -y install rh-amazon-rhui-client leapp-rhui-aws
# yum install leapp-upgrade

次に、Leapp ツールでアップグレードの事前確認を行います。
これにより、アップグレードを妨げる阻害要因がある場合、それを事前に把握できます。

# leapp preupgrade --no-rhsm --target 8.8

事前確認完了後、/var/log/leapp/leapp-report.txtにレポートが出力されます。

============================================================
                      REPORT OVERVIEW
============================================================

Upgrade has been inhibited due to the following problems:
    1. Possible problems with remote login using root account
    2. Leapp detected loaded kernel drivers which have been removed in RHEL 8. Upgrade cannot proceed.
    3. Newest installed kernel not in use
    4. Missing required answers in the answer file

(中略)

Before continuing, review the full report below for details about discovered problems and possible remediation instructions:
    A report has been generated at /var/log/leapp/leapp-report.txt
    A report has been generated at /var/log/leapp/leapp-report.json

============================================================
                   END OF REPORT OVERVIEW
============================================================

こちらを確認し阻害要因となる部分を解消させていきます。

使用している環境によって阻害要因は様々ございますが、いくつか抜粋して記載します。
※Risk Factor: high (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.
Related links:
    - Leapp upgrade fail with error "Inhibitor:Newest installed kernel not in use" Upgrade cannot proceed: https://access.redhat.com/solutions/7014134
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: Leapp detected loaded kernel drivers which have been removed in RHEL 8. Upgrade cannot proceed.
Summary: Support for the following RHEL 7 device drivers has been removed in RHEL 8:
     - pata_acpi

Related links:
    - Leapp preupgrade getting "Inhibitor: Detected loaded kernel drivers which have been removed in RHEL 8. Upgrade cannot proceed." : https://access.redhat.com/solutions/6971716
    - Leapp upgrade fail with error "Inhibitor: Detected loaded kernel drivers which have been removed in RHEL 8. Upgrade cannot proceed.": https://access.redhat.com/solutions/5436131
Key: f08a07da902958defa4f5c2699fae9ec2eb67c5b

阻害要因への対応①Title: Newest installed kernel not in use

システムが最新のカーネルで起動していないため、アップグレードが進行できないといった内容になります。

◾️対処方法

grub2-set-default コマンドで最新のカーネルを選択します。
以下のコマンドを使用して、起動するカーネルのバージョンを指定できます。

grub2-set-default [カーネル番号]

まずはカーネル番号の確認をします。

# cat /boot/grub2/grub.cfg | grep -P 'menuentry.*x86_64.*Maipo'
menuentry 'Red Hat Enterprise Linux Server (3.10.0-957.1.3.el7.x86_64) 7.4 (Maipo)' --class red --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-693.11.6.el7.x86_64-advanced-3e11801e-5277-4d87-be4c-0a9a61fbc3da' {

menuentry 'Red Hat Enterprise Linux Server (3.10.0-862.3.2.el7.x86_64) 7.4 (Maipo)' --class red --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-693.11.6.el7.x86_64-advanced-3e11801e-5277-4d87-be4c-0a9a61fbc3da' {

menuentry 'Red Hat Enterprise Linux Server (3.10.0-693.21.1.el7.x86_64) 7.4 (Maipo)' --class red --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-693.11.6.el7.x86_64-advanced-3e11801e-5277-4d87-be4c-0a9a61fbc3da' {

この場合の番号付けは以下になります。
0番目: Red Hat Enterprise Linux Server (3.10.0-957.1.3.el7.x86_64)
1番目: Red Hat Enterprise Linux Server (3.10.0-862.3.2.el7.x86_64)
2番目: Red Hat Enterprise Linux Server (3.10.0-693.21.1.el7.x86_64)

0番目のエントリ(最新のカーネル)を指定するために、以下のコマンドを使用します。

# grub2-set-default 0

システムの再起動を行う

# reboot

阻害要因への対応②Title: Leapp detected loaded kernel drivers which have been removed in RHEL 8. Upgrade cannot proceed.

RHEL 8では、特定のカーネルドライバー(例えばpata_acpiなど)が削除されており、これがロードされているとアップグレードが進行しないといった内容になります。

◾️対処方法

対象のカーネルモジュールをアンロードします。
※アンロード後、rebootするとカーネルモジュールが復活してしまうので、その他のrebootが必要な阻害要因の対応後に本対応を実施

pata_acpiをアンロード

# rmmod pata_acpi

阻害要因の対応が完了しましたら、再度leapp ツールを使用してアップグレード前の事前確認を行い、先ほどの阻害要因が消えたことを確認します。

再度アップグレード前の事前確認

# leapp preupgrade --no-rhsm --target 8.8

RHEL 8 へのアップグレードを実施

# leapp upgrade --no-rhsm --target 8.8

Reboot the system to continue with the upgrade. This might take a while depending on the system configuration.
Make sure you have console access to view the actual upgrade process.

アップグレードを続行するには、システムを再起動してくださいとのことなので、コマンドでrebootを実施したところ、SSH 接続を試みてもタイムアウトで接続することができなくなってしまいました。

EC2インスタンスのSTOR/STARTを実施することで、再度SSH接続ができるようになりました。

バージョン確認

$ cat /etc/redhat-release
Red Hat Enterprise Linux release 8.8 (Ootpa)

RHEL 8にアップグレードできました!!
続いてRHEL 9にアップグレードしていきます。

4. RHEL 8 → 9 へのアップグレード

まずは、最新の状態に保つためにパッケージを更新します。

RHEL 8を最新化

# dnf -y update

rhui-client-config-server-8リポジトリの有効化

# dnf config-manager --set-enabled rhui-client-config-server-8

次に、RHEL 8 から 9 にアップグレードする際に使用する leapp-upgrade-el8toel9 をインストールしたいのですが、7から8にする際に使用したleapp-upgrade-el7toel8が残っていて競合してエラーとなるので削除します。

# grep -n leapp-upgrade-el7toel8 /etc/yum.conf
# sed -i '7d' /etc/yum.conf
# grep -n leapp-upgrade-el7toel8 /etc/dnf/dnf.conf
# sed -i '7d' /etc/dnf/dnf.conf

RHEL 8 から 9用のleapp-upgrade パッケージをインストールします。

# dnf -y install leapp-rhui-aws

python2-leapp(Leapp ツールの Python 2 版パッケージ) と python3-leapp(Leapp ツールの Python 3 版パッケージ) が競合しているためにエラーとなります。

python2-leapp を削除

# dnf remove python2-leapp

leapp-upgrade のインストール

# dnf install leapp-upgrade

アップグレード前の事前確認コマンドを実施します。

# leapp preupgrade --no-rhsm --target 9.2

ここでまた阻害要因があるとの表示が…

============================================================
                     UPGRADE INHIBITED
============================================================

Upgrade has been inhibited due to the following problems:
    1. Inhibitor: Detected RPMs with RSA/SHA1 signature
Consult the pre-upgrade report for details and possible remediation.

============================================================
                     UPGRADE INHIBITED
============================================================

阻害要因への対応は、7から8へのアップグレードで行ったのですんなりいくと思いましたが
新たな阻害要因が発生しました。

再度レポート(/var/log/leapp/leapp-report.txt)を確認し、阻害要因となる部分を解消させていきます。

----------------------------------------
Risk Factor: high (inhibitor)
Title: Detected RPMs with RSA/SHA1 signature
Summary: Digital signatures using SHA-1 hash algorithm are no longer considered secure and are not allowed to be used on RHEL 9 systems by default. This causes issues when using DNF/RPM to handle packages with RSA/SHA1 signatures as the signature cannot be checked with the default cryptographic policy. Any such packages cannot be installed, removed, or replaced unless the signature check is disabled in dnf/rpm or SHA-1 is enabled using non-default crypto-policies. For more information see the following documents:
  - (パッケージ名一覧が記載されていますが省略します)
----------------------------------------

SHA-1 ハッシュ アルゴリズムを使用したデジタル署名は安全とはみなされなくなり、デフォルトでは RHEL 9 システムでの使用は許可されていません。これにより、DNF/RPM を使用して RSA/SHA1 署名付きパッケージを処理するときに問題が発生します。これは、署名をデフォルトの暗号化ポリシーでチェックできないためです。このようなパッケージは、dnf/rpm で署名チェックを無効にするか、デフォルト以外の暗号化ポリシーを使用して SHA-1 を有効にしない限り、インストール、削除、または置換できません。

対策としては、デフォルト以外の暗号化ポリシーを使用して SHA-1 を有効にする。
もしくは対応済みの新パッケージを入手するか、互換性のないパッケージを削除する必要があります。

阻害要因への対応③Title: Detected RPMs with RSA/SHA1 signature

暗号化ポリシーの設定は、デフォルトでcrypto-policiesによりSHA-1を無効化しています。
以下のコマンドを実施することで、非デフォルト設定へ変更が可能です。

現在の crypto-policies の確認

# update-crypto-policies --show
DEFAULT

LEGACYへ変更

# update-crypto-policies --set LEGACY
Setting system policy to LEGACY
Note: System-wide crypto policies are applied on application start-up.
It is recommended to restart the system for the change of policies
to fully take place.

ポリシーの変更を完全に反映するには、システムを再起動することをお勧めしますとありますので、再起動します。

# reboot

LEGACYになったことを確認します。

# update-crypto-policies --show
LEGACY

※アップグレード後にcrypto-policies を元の設定に戻す方法

以下のコマンドでデフォルトへ戻します。

# update-crypto-policies --set DEFAULT
Setting system policy to DEFAULT
Note: System-wide crypto policies are applied on application start-up.
It is recommended to restart the system for the change of policies
to fully take place.

Risk Factor: high (inhibitor)の項目の対応は完了しましたが、
レポート(/var/log/leapp/leapp-report.txt)の中に気になる項目があったので確認しました。

----------------------------------------
Risk Factor: high
Title: Packages not signed by Red Hat found on the system
Summary: The following packages have not been signed by Red Hat and may be removed during the upgrade process in case Red Hat-signed packages to be removed during the upgrade depend on them:
- (パッケージ名一覧が記載されていますが省略します)
----------------------------------------

一覧に記載されているパッケージは Red Hat によって署名されていないため、アップグレード中に削除される Red Hat 署名済みパッケージがそれらに依存している場合は、アップグレード プロセス中に削除される可能性があります。

Risk Factor: highの項目は、対応しなくてもアップグレード自体は可能ですが、Red Hat社に署名されていないパッケージについては、アップグレード中に削除される可能性があるようです。
アップグレード後に削除されていないか確認し、削除されていたら再インストールが必要です。

再度アップグレード前の事前確認を実施します。

# leapp preupgrade --no-rhsm --target 9.2
Check completed.
==> 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
============================================================

阻害要因が消えたことを確認できたので、いよいよ9へのアップグレードを実施します。

# leapp upgrade --no-rhsm --target 9.2

問題なく9.2へアップグレードすることができました!!

# cat /etc/redhat-release

まとめ

新しくサーバーを立てずにコマンド実行のみでアップグレードできるLeappは非常に魅力的ですが、阻害要因への対応やパッケージ削除、再インストールなど、なかなか簡単にはいかないなという印象でした。
可能であれば、実際のお客様環境のAMIを取得し、検証をしてから本番で実施することをおすすめいたします。

この記事がお役に立てれば幸いです。
最後までご覧頂きまして誠にありがとうございました。