パブリッククラウドでのRHELのインプレースアップグレード

Red Hatの小島です。

クラウドベンダーがサポートする従量課金制RHEL(オンデマンドのRHELインスタンス)では、Red Hat Update Infrastructure (RHUI) というクラウド環境専用のRHELリポジトリを使って、RHELパッケージのダウンロード/インストール/アップデートなどができるように予め設定されています。さらに、AWS/Azure/Google Cloudの従量課金制RHELでは、Red Hat Subscription Management (RHSM) ではなくRHUIを利用して、RHEL7以降のRHELやRHEL with SAP HANAをインプレースアップグレードすることができるようになっています。本記事ではRHUIを参照したRHELのインプレースアップグレードの概要について紹介します。

ちなみに、本記事で言及しているRed Hatのナレッジベースについては、Red Hatのサブスクリプションを持たないAWS/Azure/Google CloudのRHELユーザーでも参照できるようにしている仕組みがあります。この仕組みを利用することで、インプレースアップグレードについてRed Hatのナレッジベースで調べながら、不明点をAWS/Microsoft/GoogleのRHELサポート窓口に問い合わせることができます。詳細については本記事末尾の参考情報に記載してある各Webページをご参照ください。

サポート対象となるインプレースアップグレードパス

サポート対象となるインプレースアップグレードパスを確認します。RHEL7は最新マイナーリリースのRHEL7.9、RHEL8はRHEL8.8かRHEL8.10をアップグレード対象にすることができます。RHEL7やRHEL8を使っている場合、yum updatednf updateコマンドを利用して、RHEL7.9やRHEL8.10の最新パッケージに予めアップデートしておく必要があります。AWSやAzureのMarketplaceから作成したRHEL8のEUS(RHEL8.8やRHEL9.4など特定のマイナーリリースの延長サポートアドオン)を利用している場合、RHEL8.8 EUSの最新パッケージにアップデートしてください。2024年12月時点において、Google CloudではRHELのEUSを利用できません。

RHEL7からRHEL9へのインプレースアップグレードを直接実行することはできません。RHEL7をRHEL9にアップグレードしたい場合、RHEL7からRHEL8へ、RHEL8からRHEL9へとアップグレードする必要があります。なお、RHEL7は延長サポートのアドオン(ELS)が提供されていますが、ELSの利用有無に関係なく、RHEL7からRHEL8へのインプレースアップグレードを実行できます。

access.redhat.com

インプレースアップグレードの前準備

RHELの特定のパッケージのバージョンをロックするためにyum-versionlockプラグインを利用している場合、leappによるインプレースアップグレード実行においては無効化する必要がありますので、yumコマンドで無効化しておきます。

$ sudo yum versionlock clear

access.redhat.com

RHUIを使用してインプレースアップグレードを実行するために、必要なRHUIリポジトリを有効にしてパッケージをインストールします。AWS/Azure/Google Cloudにおいて、それぞれ手順が異なります。


AWSの場合

RHEL7からRHEL8へのインプレースアップグレードの場合は、rhui-client-config-server-7rhel-7-server-rhui-extras-rpmsリポジトリ参照を有効化して、leapp関連のパッケージをインストールします。

$ sudo yum-config-manager --enable rhui-client-config-server-7
$ sudo yum-config-manager --enable rhel-7-server-rhui-extras-rpms
$ sudo yum -y install rh-amazon-rhui-client leapp-rhui-aws

RHEL8からRHEL9へのインプレースアップグレードの場合は、rhui-client-config-server-8リポジトリ参照を有効化して、leapp関連のパッケージをインストールします。

$ sudo dnf config-manager --set-enabled rhui-client-config-server-8
$ sudo dnf -y install leapp-rhui-aws
Azureの場合

RHEL7からRHEL8へのインプレースアップグレードの場合は、rhui-microsoft-azure-rhel7rhui-rhel-7-server-rhui-extras-rpmsリポジトリ参照を有効化して、leapp関連のパッケージをインストールします。

$ sudo yum-config-manager --enable rhui-microsoft-azure-rhel7
$ sudo yum-config-manager --enable rhui-rhel-7-server-rhui-extras-rpms
$ sudo yum -y install rhui-azure-rhel7 leapp-rhui-azure

RHEL8からRHEL9へのインプレースアップグレードの場合は、rhui-microsoft-azure-rhel8リポジトリ参照を有効化して、leapp関連のパッケージをインストールします。

$ sudo dnf config-manager --set-enabled rhui-microsoft-azure-rhel8
$ sudo dnf -y install rhui-azure-rhel8 leapp-rhui-azure
Google Cloudの場合

次のナレッジベースを参照して、各システムに対応するtarballをダウンロードしてその中のRPMパッケージをインストールします。これにより、leappによるインプレースアップグレードの実行中に、必要となるRHEL8やRHEL9パッケージをダウンロードするためのリポジトリ情報がインストールされます。

access.redhat.com

RHEL with SAP HANAを利用していないRHEL7からRHEL8へのインプレースアップグレードの場合は、上記のナレッジベースからleapp-rhui-google-X-rhel7.tar.gz(Xは変数です)をダウンロードしてRPMパッケージをインストールします。

$ tar xf leapp-rhui-google-v4-rhel7.tar.gz
$ sudo yum -y localinstall leapp-rhui-google-1.0.0-6.el7.noarch.rpm
$ rpm -ql leapp-rhui-google
...<snip>...
/usr/share/leapp-repository/repositories/system_upgrade/common/files/rhui/google/leapp-google.repo

RHEL with SAP HANAを利用していないRHEL8からRHEL9へのインプレースアップグレードの場合は、上記のナレッジベースからleapp-rhui-google-X-rhel8.tar.gz(Xは変数です)をダウンロードしてRPMパッケージをインストールします。

$ tar xf leapp-rhui-google-v4-rhel8.tar.gz
$ sudo dnf -y install leapp-rhui-google-1.0.0-6.el8.noarch.rpm
$ rpm -ql leapp-rhui-google
...<snip>...
/usr/share/leapp-repository/repositories/system_upgrade/common/files/rhui/google/leapp-google.repo

上記の手順を実施してAWS/Azure/Google Cloudでの必要なRHUIリポジトリの有効化とパッケージインストールをした後は、leapp-upgradeパッケージをインストールして、システムの全てのパッケージを最新版にして再起動します。これらはAWS/Azure/Google CloudのRHEL7とRHEL8で、共通のコマンドとして実行できます。インプレースアップグレード実行時のエラーを回避するために、全パッケージを最新版に更新することを忘れないようにしてください。

$ sudo yum -y install leapp-upgrade
$ sudo yum -y update
$ sudo reboot
インプレースアップグレード前のレポートの確認

RHEL7とRHEL8ではleapp preupgradeコマンドを実行して、アップグレード実行時の潜在的な問題を特定できます。下記はRHEL7.9システムで、RHEL8.10へのアップグレードを実行する際に特定された問題をレポートするコマンドの実行例です。

$ sudo leapp preupgrade --no-rhsm --target 8.10
...<snip>...
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. Missing required answers in the answer file

HIGH and MEDIUM severity reports:
    1. Difference in Python versions and support in RHEL 8
    2. Detected custom leapp actors or files.

Reports summary:
    Errors:                      0
    Inhibitors:                  2
    HIGH severity reports:       2
    MEDIUM severity reports:     0
    LOW severity reports:        4
    INFO severity reports:       3

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                   
============================================================

Answerfile has been generated at /var/log/leapp/answerfile

RHUIを利用してアップグレードを実行するので、--no-rhsmオプションでRHSMを利用しないように指定します。このオプションを指定しないと、RHSMで登録されていないといったエラーが出力されてアップグレードが実行できません。

--targetオプションでアップグレードターゲットのRHELのリリース番号を指定します。例えば、RHEL7.9からRHEL8.10にアップグレードする場合は--target 8.10を、RHEL8.10からRHEL9.4にアップグレードする場合は--target 9.4を指定します。AWSとAzureの従量課金制のRHELではEUSを利用できますので、EUSを利用したい場合はアップグレード完了後にEUSのリポジトリ参照を有効化するようにします。EUSリポジトリの有効化手順については、本記事末尾の参考情報に記載してある各Webページをご参照ください。

上記コマンドの実行結果にあるように、レポートは/var/log/leapp/leapp-report.{txt,json}ファイルに出力されます。ここで見つかった問題を修正していきます。最低限ErrorsInhibitorsで分類された問題を修正しないと、アップグレードを実行できないようになっています。レポートされた問題には解決のヒントとなるレッドハットのナレッジベースのURLが記載されていることが多いので、それらを適宜参照しながら修正していきます。

下記はレポートされた問題の一部を引用した例です。報告された問題の中には下記の例のように「pythonコマンドがRHEL8ではありません」といったものもあるので、アップグレード後の修正も適宜考慮する必要があります。

$ sudo cat /var/log/leapp/leapp-report.txt
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.
Related links:
    - Leapp upgrade fail with error "Inhibitor: Missing required answers in the answer file.": https://access.redhat.com/solutions/7035321
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
----------------------------------------
Risk Factor: high
Title: Difference in Python versions and support in RHEL 8
Summary: In RHEL 8, there is no 'python' command. Python 3 (backward incompatible) is the primary Python version and Python 2 is available with limited support and limited set of packages. If you no longer require Python 2 packages following the upgrade, please remove them. Read more here: https://red.ht/rhel-8-python
Related links:
    - Difference in Python versions and support in RHEL 8: https://red.ht/rhel-8-python
Remediation: [hint] Please run "alternatives --set python /usr/bin/python3" after upgrade
Key: 0c98585b1d8d252eb540bf61560094f3495351f5
----------------------------------------
...<snip>...

このレポートはWebコンソールでも確認できます。RHEL7, RHEL8, RHEL9ではCockpitというWebベースのコンソールを利用してシステム管理が可能です。このCockpitのプラグインを利用してレポートを表示します。そのために、cockpit-leappパッケージをインストールします。Webサービスを実行するcockpit.socketサービスを実行していない場合は、systemctlコマンドで有効にして起動します。

$ sudo yum -y install cockpit-leapp
$ sudo systemctl enable --now cockpit.socket

これでRHELのWebコンソールにアクセスできるようになったので、https://<RHELシステムのIPアドレスまたはホスト名>:9090にWebブラウザでアクセスします。TCPの9090ポートが開いていないとアクセスできないので注意してください。ログイン画面が表示されるので、rootユーザーかsudoで管理コマンドを入力するパーミッションがあるユーザーでログインします。ログインしてナビゲーションメニューからUpgrade Reportを選択すると、下記のようなレポート画面が表示されて、レポートされた各問題の詳細を確認できます。このレポートは/var/log/leapp/leapp-report.json を読み込んでWebコンソールで表示しています。

このWebコンソールから、問題を解決するための修復(Remediation)コマンドを実行できる場合があります。該当の問題をクリックして「Run Remediation」ボタンから修復コマンドを実行できます。

修復コマンドをまとめて実行したい場合は、レポート右上にある「Add all remediations to plan」をクリックして修復コマンドをまとめた後に、同じくレポート右上に表示される「Remediation Plan」から「Execute Remediation Plan」をクリックすることで、一覧表示された全ての修復コマンドを実行できます。

インプレースアップグレードの実行

leapp preupgradeコマンドで出力するレポートで、ErrorsInhibitorsで分類された問題が0件になったことを確認し、その他にレポートされた問題もシステムへの影響度を適宜考慮しながら修正を完了した後に、leapp upgradeコマンドでインプレースアップグレードを実行できます。下記はRHEL7.9からRHEL8.10へのアップグレードを実行するコマンドの例です。コマンドの実行が完了するとシステムの再起動が求められるので、sudo rebootコマンドなどで再起動します。再起動すると、RHEL8パッケージのインストールやRHUIのRHEL8リポジトリ参照の有効化が実施されて、インプレースアップグレードが完了します。

$ sudo leapp upgrade --no-rhsm --target 8.10
...<snip>...
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. Difference in Python versions and support in RHEL 8
    2. Packages not signed by Red Hat found on the system
    3. Detected custom leapp actors or files.
    4. Module pam_pkcs11 will be removed from PAM configuration

Reports summary:
    Errors:                      0
    Inhibitors:                  0
    HIGH severity reports:       3
    MEDIUM severity reports:     1
    LOW severity reports:        7
    INFO severity reports:       3

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                   
============================================================

Answerfile has been generated at /var/log/leapp/answerfile
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.

$ sudo reboot

leapp upgradeコマンドでアップグレードすると、/etc/yum/vars/または/etc/dnf/vars/ディレクトリにあるreleasever--targetオプションで指定したマイナーリリース番号(8.8,8.10,9.4など)が記載されます。これによって、アップグレード後のRHELシステムが、RHEL8.8やRHEL9.4などの特定のマイナーリリースに固定されるようになっています。この状態でRHELのEUSを利用したい場合、後述のEUSリポジトリ有効化手順を参照してください。RHELのEUSを使わずに最新のマイナーリリースを使いたい場合は、/etc/yum/vars/または/etc/dnf/vars/ディレクトリにあるreleaseverファイルを削除することで、最新のマイナーリリースに対応したパッケージをRHUIからインストールできるようになります。

$ cat /etc/yum/vars/releasever
8.10

access.redhat.com

また、アップグレード後のタスクとして、leappで利用したパッケージの削除などがあります。これらの詳細については、本記事末尾の参考情報に記載してある「RHEL7からRHEL8へのアップグレード」「RHEL8からRHEL9へのアップグレード」ドキュメントの「アップグレード後のタスクの実行」をご参照ください。

参考情報
leappを利用したRHELのインプレースアップグレードガイド

本記事では記載しなかった前提条件などの詳細情報が多数ありますので、Red Hatの製品ドキュメントも合わせてご参照ください。

docs.redhat.com

docs.redhat.com

AzureのRHELのインプレースアップグレードについては、Azureドキュメントも参照できます。

learn.microsoft.com

AWS/Azure/Google CloudのRHELユーザーのRed Hatナレッジベースへのアクセスガイド
  • AWS

AWS Systems Managerの機能を利用しますので、RHELのAMIにAWS Systems Managerエージェント(SSM Agent)を手動でインストールする必要があります。

docs.aws.amazon.com

docs.aws.amazon.com

  • Azure

access.redhat.com

  • Google Cloud

cloud.google.com

AWS/AzureでのRHEL EUSの利用ガイド
  • AWS

access.redhat.com

  • Azure

learn.microsoft.com

AzureのRHEL EUSについては、Azureテクニカルサポートチームのブログもご参照ください。

jpaztech.github.io

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。