RHEL9.6から10.0へのアップグレード検証

## はじめに
先日、RHEL10のBoot isoファイルを使用して、VMware Workstation Pro(最新の17.6.3)に新規インストールを試みましたが、下記の記事で投稿した通り上手くいきませんでした。おそらくは、VMware WorkStation Pro側がRHEL10に対応したディスプレイドライバーをまだ搭載していないものと想像していますが、本当の所はわかりません。

https://qiita.com/duelist2020jp/items/ef12740e98ad31067395

ただ、現在RHEL9.6からRHEL10へはアップグレードパスが用意されてますので、こちらのほうを試してみました。流れは基本的に下記リンク先のアップグレード手順をベースに実施していきます。

https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/10/html/upgrading_from_rhel_9_to_rhel_10/index

結果、問題なくRHEL10をVMware Workstarion Proで使えるようにできましたので、備忘録を兼ねて記事に纏めました。

なお、RHEL8からRHEL10へアップグレードされる場合には、一度RHEL8からRHEL9に中間アップグレードを行う必要があります。RHEL8からRHEL9へのアップグレードは昨年実施しており、その時の内容を記事に纏めていますので、ご参考ください。

https://qiita.com/duelist2020jp/items/929561d1541bcf3672a9

## アップグレードの準備
今回、既存のRHEL9.6環境は残しておきたかったので、RedHat DeveloperサイトからRHEL9.6のBoot isoファイルをダウンロードし、アップグレード用にRHEL9.6環境をもう1つ用意しました。ディスクは20GB、メモリは2GBあれば十分です。パッケージのレベルも事前に最新化しておきます。RHEL製品のサブスクリプションが登録されていることも、下記のコマンドで確認します。
```
[root@localhost ~]# subscription-manager list
+-------------------------------------------+
    インストール済み製品のステータス
+-------------------------------------------+
製品名:           Red Hat Enterprise Linux for x86_64
製品 ID:          479
バージョン:       9.6
アーキテクチャー: x86_64
```
### アップグレード・ユーティリティーのインストール
下記コマンドを実行して、アップグレード作業に必要なleappユーティリティーをインストールします。
```
[root@localhost ~]# dnf install leapp
[root@localhost ~]# dnf install leapp-upgrade
```
上記コマンドを実行して、以下のパッケージがインストールできればOKです。
```
leapp-0.19.0-1.el9.noarch
leapp-deps-0.19.0-1.el9.noarch
python3-leapp-0.19.0-1.el9.noarch
leapp-upgrade-el9toel10-0.22.0-1.el9.noarch
leapp-upgrade-el9toel10-deps-0.22.0-1.el9.noarch
libdb-utils-5.3.28-55.el9.x86_64
```
:::note info
python3-leapp-0.19..0-1.el9.noarchというpython3関連のパッケージも導入されています。これは、RHEL9ではpython3のデフォルトが3.9なのに対し、RHEL10ではデフォルトが3.12に変わるためです。
:::

### アップグレード可能性評価の実施
実際にアップグレードを行う前に、下記のコマンドを実行し、アップグレードが実施可能であるか否かをチェックします。
```
[root@localhost ~]# leapp preupgrade --target 10.0
```
コマンド実行後、下記のようなチェックが次々と実施されていきます。
```
==> Processing phase `configuration_phase`
====> * ipu_workflow_config
        IPU workflow config actor
==> Processing phase `FactsCollection`
====> * scan_grub_device_name
        Find the name of the block devices where GRUB is located
====> * load_device_driver_deprecation_data
        Loads deprecation data for drivers and devices (PCI & CPU)
====> * scan_kernel_cmdline
        No documentation has been provided for the scan_kernel_cmdline actor.
====> * scanmemory
        Scan Memory of the machine.
====> * scan_pkg_manager
        Provides data about package manager (yum/dnf)
～(略)～
```
チェックが終わると、以下のようなレポートが出力されます。
```
==> 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 OVERVIEW
============================================================

HIGH and MEDIUM severity reports:
    1. Leapp detected loaded kernel drivers which are no longer maintained in RHEL 10.
    2. Berkeley DB (libdb) has been detected on your system

Reports summary:
    Errors:                      0
    Inhibitors:                  0
    HIGH severity reports:       1
    MEDIUM severity reports:     1
    LOW severity reports:        2
    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
```
今回はRHEL9.6製品公式のリポジトリから導入したパッケージしかインストールしてしないので、特に何かを事前に対処しておかないといけないことはありません。

:::note alert
もし、RHEL社以外のリポジトリを個別に導入して何かしらのパッケージをインストールしていたり、環境のパラメータをいじっている場合には、「Upgrade has been inhibited due to the following problems:」という項目が表示される可能性があります。その場合には、アップグレード前に必ず対応するようにしてください。さもないと、アップグレードはできませんのでご注意ください。
:::
アップグレード前の事前チェック結果の詳細レポートは、「/var/log/leapp/leapp-report.txt」で確認することができます。今回は要対応の項目はありませんが、参考までに「HIGH and MEDIUM severity reports:」に表示されている内容は以下の通りです。
```
Risk Factor: high 
Title: Leapp detected loaded kernel drivers which are no longer maintained in RHEL 10.
Summary: The following RHEL 9 device drivers are no longer maintained RHEL 10:
     - ip_set

Key: fbb11ae5828d624c4e4c91e73d766c8e27b066d9
----------------------------------------
Risk Factor: medium 
Title: Berkeley DB (libdb) has been detected on your system
Summary: Libdb was marked as deprecated in RHEL-9 and in RHEL-10 is not included anymore. There are a couple of alternatives in RHEL-10; the applications that depend on libdb will not work. Such applications must implement another type of backend storage. And migrate existing data to the new database format.
Related links:
    - Migrating to a RHEL 10 without libdb: https://access.redhat.com/articles/7099256
Remediation: [hint] Back up your data before proceeding with the data upgrade/migration. For the conversion, the tool db_converter from the libdb-utils rpm could be used. This database format conversion must be performed before the system upgrade. The db_converter is not available in RHEL 10 systems. For more information, see the provided article.
Key: fdc8f5b084e95922a4f59485a807a92cae2fc738
```
RHEL9のデバイスドライバはRHEL10以降では保守されない。Berkeley DB(libdb)はRHEL9で廃止されたので、RHEL10には何もない。必要だったらアップグレード前にデータのバックアップをしておいてください。といったものでした。特段対応する必要があるものではないので静観します。

## アップグレード実行
アップグレードの準備は終わったので、下記のコマンドを実行し、アップグレードを開始します。
```
[root@localhost ~]# leapp upgrade --target 10.0
```
コマンド実行後、「システム・チェック」→「V10用のパッケージのインストール」の順にアップグレード処理が進んでいきます。
```
==> Processing phase `configuration_phase
～(略)～
Transaction Summary
=========================================================================================================================================
Install     185 Packages
Upgrade    1273 Packages
Remove      122 Packages
Downgrade    13 Packages

Total size: 1.9 G
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. Leapp detected loaded kernel drivers which are no longer maintained in RHEL 10.
    2. Berkeley DB (libdb) has been detected on your system

Reports summary:
    Errors:                      0
    Inhibitors:                  0
    HIGH severity reports:       1
    MEDIUM severity reports:     1
    LOW severity reports:        2
    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.
```
上記出力において、「A reboot is required to continue. Please reboot your system.」が表示されていたら、システムを再起動します。再起動後、システムはRHEL10ベースの初期RAMディスクイメージinitramfsで起動してきます。起動後、アップグレード・ユーティリティー(leapp)により、全てのパッケージに対するアップグレード処理が行われ、自動的にシステムが再起動します。

## アップグレード後の確認
VMware Workstation Proのディスプレイドライバが対応していないからなのかは不明ですが、リブート後は下記のようにグレー色のままログオン画面が表示されませんでした。ただ、日によっては、起動するとログオン画面がそれっぽく表示されるときもあるので、何とも言えません。
![q1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1567099/6bc7e516-b1fc-4f08-b6c9-0203d79815f6.jpeg)
それでも、TeratermからSSH接続すると、普通にRHEL10環境にログオンすることが可能です。ログオン後、システムがRHEL10になっていることを改めて確認します。
```
[rheluser@localhost ~]$ cat /etc/redhat-release
Red Hat Enterprise Linux release 10.0 (Coughlan)

[rheluser@localhost ~]$ uname -r
6.12.0-55.12.1.el10_0.x86_64

[rheluser@localhost ~]$ sudo subscription-manager list --installed
[sudo] rheluser のパスワード:
+-------------------------------------------+
    インストール済み製品のステータス
+-------------------------------------------+
製品名:           Red Hat Enterprise Linux for x86_64
製品 ID:          479
バージョン:       10.0
アーキテクチャー: x86_64

[root@localhost ~]# subscription-manager release
リリース: 10.0

[rheluser@localhost ~]$ python --version
Python 3.12.9
```
問題なくV10.0にアップグレードされており、サブスクリプション登録も問題ないことが確認できました。また、python3のデフォルトが3.12になっていることも確認できました。

### パーティション構造の確認
下記リンク先のリリースノートを見ると、「RHEL10からは個別の/bootパーティションがなくなった」との記載があります。

https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/10/html/10.0_release_notes/new-features-and-enhancements#new-features-and-enhancements-installer-and-image-creation

しかし、実際にアップグレード後に「df -hT」コマンドで確認すると、/bootパーティションは存在していました。RHEL9からアップグレードすると/bootパーティションはなくなるかと思っていましたが、残っています。
```
[rheluser@localhost ~]$ df -hT
ファイルシス          タイプ   サイズ  使用  残り 使用% マウント位置
/dev/mapper/rhel-root xfs         17G  6.3G   11G   39% /
devtmpfs              devtmpfs   4.0M     0  4.0M    0% /dev
tmpfs                 tmpfs      836M     0  836M    0% /dev/shm
efivarfs              efivarfs   256K   57K  195K   23% /sys/firmware/efi/efivars
tmpfs                 tmpfs      335M  1.4M  333M    1% /run
tmpfs                 tmpfs      1.0M     0  1.0M    0% /run/credentials/systemd-journald.service
/dev/nvme0n1p2        xfs        960M  389M  572M   41% /boot
/dev/nvme0n1p1        vfat       599M  8.4M  591M    2% /boot/efi
tmpfs                 tmpfs      168M   76K  168M    1% /run/user/42
tmpfs                 tmpfs      168M   60K  168M    1% /run/user/1000
```
しかも、RHEL9時代よりも/bootパーティションの使用量が大きいです。
* RHEL9.6環境
```
[root@localhost ~]# df -hT
ファイルシス          タイプ   サイズ  使用  残り 使用% マウント位置
/dev/nvme0n1p2        xfs        960M  326M  635M   34% /boot
```
* RHEL10環境
```
[rheluser@localhost ~]$ df -hT
ファイルシス          タイプ   サイズ  使用  残り 使用% マウント位置
/dev/nvme0n1p2        xfs        960M  389M  572M   41% /boot
```
ただ、「/bootパーティションの削除は機密コンピューティングを対象としています。」とリリースノートには記載があるため、/bootパーティションが存在しているのは、機密コンピューティング対象ではなかったからかもしれません。

## アップグレード後の作業
### SELinuxモードのEnforcingへの変更
アップグレード中、SELinuxのモードはleappにより「Permisive」に変更されています。
```
$ getenforce
Permissive
```
その為、アップグレード完了後は、SELinuxのモードを「enforcing」に変更する必要があります。具体的には、「/etc/selinux/config」構成ファイルにおいて「SELINUX=enforcing」に変更し、システムを再起動します。再起動後、getenforceコマンドで確認します。
```
$ getenforce
Enforcing
```
### その他の後作業
下記リンク先の記載を参考に、不要なパッケージなどを削除します。基本的にオプション以外の所を全て実施すればOKです。

https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/10/html/upgrading_from_rhel_9_to_rhel_10/performing-post-upgrade-tasks-on-the-rhel-10-system#performing-post-upgrade-tasks

## さいごに
今回は、VMware Workstation Pro(最新の17.6.3)にRHEL10のBoot isoファイルを使用した新規インストールができなかったため、アップグレードパスが保証されているRHEL9.6からRHEL10.0へのアップグレードを実施し、内容を備忘録として纏めました。
RHEL10をインストールしたかった目的としては、RHEL10からは下記リンク先の記載にあるように、RedHat LightSpeed(生成AIサービス)が使えるようになったため、これを試してみたいということにあります。(記載を見ると、現在はRHEL9.6でも使用できると書いてあるが。。。)

https://www.redhat.com/ja/technologies/linux-platforms/enterprise-linux-10/lightspeed

後日、こちらも試してみて、使用感を記事に纏めたいと思います。