RHEL 8をRHEL 9にアップグレードする!

RHEL 8をRHEL 9にインプレースアップグレードの方式でアップグレードします。今回は、RHEL 8の最新バージョンが8.7の時点で実施してみました。

過去のアップグレードを確認する!

過去にアップグレードしたことがあるか確認します。

# pwd
/root
# ls -l
total 4
-rw-------. 1 root root 1749 Apr 30 06:30 anaconda-ks.cfg
drwxr-xr-x. 2 root root   33 Apr 30 09:27 tmp_leapp_py3

「tmp_leapp_py3」ディレクトリが存在する場合は、過去にアップグレードしたことがあることを示しています。その場合、「tmp_leapp_py3」ディレクトリを削除します。

# rm -rf /root/tmp_leapp_py3
# ls -l
total 4
-rw-------. 1 root root 1749 Apr 30 06:30 anaconda-ks.cfg
# subscription-manager list --installed
+-------------------------------------------+
    Installed Product Status
+-------------------------------------------+
Product Name: Red Hat Enterprise Linux for x86_64
Product ID:   479
Version:      8.6
Arch:         x86_64

マイナーバージョンの固定の設定をクリアする!

マイナーバージョンの固定を行っているか確認します。

# subscription-manager release
Release: 8.6

マイナーバージョンの固定の設定を行っている場合は、クリアします。

# subscription-manager release --unset
Release preference has been unset

パッケージのバージョンロックをクリアする!

パッケージのバージョンロックを行っている場合は、バージョンロックをクリアします。dnfのバージョンロックのプラグインが必要で、使用していないケースも多いと思います。

# dnf versionlock clear

dnfのバージョンロックのプラグインを使用していない場合は、以下のようなメッセージが出力されます。

# dnf versionlock clear
Updating Subscription Management repositories.
No such command: versionlock. Please use /usr/bin/dnf --help
It could be a DNF plugin command, try: "dnf install 'dnf-command(versionlock)'"

RHEL 8を最新化する!

RHEL 8を最新化します。RHELを最新化後、OSをリブートします。

# dnf -y update
# reboot

RHEL 8のバージョンを確認する!

RHELのバージョンとカーネルのバージョンを確認します。

# cat /etc/redhat-release
Red Hat Enterprise Linux release 8.7 (Ootpa)
# uname -r
4.18.0-425.19.2.el8_7.x86_64
# subscription-manager list --installed
+-------------------------------------------+
    Installed Product Status
+-------------------------------------------+
Product Name: Red Hat Enterprise Linux for x86_64
Product ID:   479
Version:      8.7
Arch:         x86_64
# subscription-manager release
Release: 8.7

インプレースアップグレード用のツールをインストールする!

Leapp ユーティリティーをインストールします。

# dnf -y install leapp-upgrade
Updating Subscription Management repositories.
Red Hat Enterprise Linux 8 for x86_64 - BaseOS (RPMs)                                   630  B/s | 4.1 kB     00:06    
Red Hat Enterprise Linux 8 for x86_64 - AppStream (RPMs)                                683  B/s | 4.5 kB     00:06    
Last metadata expiration check: 0:00:13 ago on Mon 01 May 2023 06:38:37 AM JST.
Dependencies resolved.
========================================================================================================================
 Package                             Architecture   Version              Repository                                Size
========================================================================================================================
Installing:
 leapp-upgrade-el8toel9              noarch         0.17.0-3.el8         rhel-8-for-x86_64-appstream-rpms         692 k
Installing dependencies:
 leapp                               noarch         0.15.0-2.el8         rhel-8-for-x86_64-appstream-rpms          32 k
 leapp-deps                          noarch         0.15.0-2.el8         rhel-8-for-x86_64-appstream-rpms          15 k
 leapp-upgrade-el8toel9-deps         noarch         0.17.0-3.el8         rhel-8-for-x86_64-appstream-rpms          32 k
 python3-leapp                       noarch         0.15.0-2.el8         rhel-8-for-x86_64-appstream-rpms         177 k

Transaction Summary
========================================================================================================================
Install  5 Packages
...
Installed:
  leapp-0.15.0-2.el8.noarch                                leapp-deps-0.15.0-2.el8.noarch                               
  leapp-upgrade-el8toel9-0.17.0-3.el8.noarch               leapp-upgrade-el8toel9-deps-0.17.0-3.el8.noarch              
  python3-leapp-0.15.0-2.el8.noarch                       

Complete!

インプレースアップグレードの分析を行う!

インプレースアップグレードが可能であるかツールで分析します。インプレースアップグレードでサポートされているバージョンを「--target 9.0」のように指定します。

# leapp preupgrade --target 9.0
...
============================================================
                     UPGRADE INHIBITED                      
============================================================

Upgrade has been inhibited due to the following problems:
    1. Inhibitor: Possible problems with remote login using root account
    2. Inhibitor: Firewalld Configuration AllowZoneDrifting Is Unsupported
Consult the pre-upgrade report for details and possible remediation.

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


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

通常、このようなメッセージで対処が必要な項目が表示されます。

対処が必要な項目の詳細を確認する!

今回の場合、対応必須の項目は、以下の2点でした。

# cat /var/log/leapp/leapp-report.txt
Risk Factor: high (inhibitor)
Title: Possible problems with remote login using root account
Summary: OpenSSH configuration file will get updated to RHEL9 version, no longer allowing root login with password. It is a good practice to use non-root administrative user and non-password authentications, but if you rely on the remote root login, this change can lock you out of this system.
Remediation: [hint] If you depend on remote root logins using passwords, consider setting up a different user for remote administration or adding a comment into the sshd_config next to the "PermitRootLogin yes" directive to prevent rpm replacing it during the upgrade.
Key: 3d21e8cc9e1c09dc60429de7716165787e99515f
----------------------------------------
Risk Factor: high (inhibitor)
Title: Firewalld Configuration AllowZoneDrifting Is Unsupported
Summary: Firewalld has enabled configuration option "AllowZoneDrifiting" which has been removed in RHEL-9. New behavior is as if "AllowZoneDrifiting" was set to "no".
Remediation: [hint] Set AllowZoneDrifting=no in /etc/firewalld/firewalld.conf
[command] sed -i "s/^AllowZoneDrifting=.*/AllowZoneDrifting=no/" /etc/firewalld/firewalld.conf
Key: 5b1cf050e1a877b0358b6e8c612277c591d40c13
....

アップグレードを行うための設定変更を行う!

アップグレードを行うための設定変更を行います。

# echo PermitRootLogin yes | tee -a /etc/ssh/sshd_config
# sed -i "s/^AllowZoneDrifting=.*/AllowZoneDrifting=no/" /etc/firewalld/firewalld.conf

再度インプレースアップグレードの分析を行う!

再度、インプレースアップグレードが可能であるかツールで分析します。以下のような表示になれば、OKです。

# leapp preupgrade --target 9.0
...
Check completed.
====> * tmp_actor_to_satisfy_sanity_checks
        The actor does NOTHING but satisfy static sanity checks
====> * 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

インプレースアップグレードを行う!

いよいよ、インプレースアップグレードを行います。

# leapp upgrade --target 9.0
...
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

成功です!

RHELを再起動する!

RHELを再起動します。

# reboot

再起動後にも、アップグレードの処理と再起動が実行され、OSにログインできるまでにはしばらく時間がかかります。

RHELのバージョンを確認する!

RHELとカーネルのバージョンを確認します。

# cat /etc/redhat-release
Red Hat Enterprise Linux release 9.0 (Plow)
# uname -r
5.14.0-70.30.1.el9_0.x86_64
# subscription-manager list --installed
+-------------------------------------------+
    Installed Product Status
+-------------------------------------------+
Product Name:   Red Hat Enterprise Linux for x86_64
Product ID:     479
Version:        9.0
Arch:           x86_64
Status:         Not Subscribed
Status Details: 
Starts:         
Ends:                    

RHELのマイナーバージョンが固定されていることを確認する!

RHELのマイナーバージョンが固定されていることを確認します。

# subscription-manager release
Release: 9.0

アップデートの除外リストをクリアする!

アップデートの除外リストをクリアします。

# cat /etc/dnf/dnf.conf
[main]
gpgcheck=1
installonly_limit=3
clean_requirements_on_remove=True
best=True
skip_if_unavailable=False
exclude=leapp,python3-leapp,leapp-upgrade-el8toel9,snactor
# yum config-manager --save --setopt exclude=''
Updating Subscription Management repositories.
# cat /etc/dnf/dnf.conf
[main]
gpgcheck=1
installonly_limit=3
clean_requirements_on_remove=True
best=True
skip_if_unavailable=False
exclude=

旧カーネルの削除を行う!

旧カーネルを削除します。

# rpm -qa | grep -e '\.el[78]' | grep -vE '^(gpg-pubkey|libmodulemd|katello-ca-consumer)' | sort
jimtcl-0.77-6.el8.x86_64
kernel-4.18.0-372.32.1.el8_6.x86_64
kernel-4.18.0-425.19.2.el8_7.x86_64
kernel-core-4.18.0-372.32.1.el8_6.x86_64
kernel-core-4.18.0-425.19.2.el8_7.x86_64
kernel-modules-4.18.0-372.32.1.el8_6.x86_64
kernel-modules-4.18.0-425.19.2.el8_7.x86_64
kernel-modules-extra-4.18.0-372.32.1.el8_6.x86_64
kernel-modules-extra-4.18.0-425.19.2.el8_7.x86_64
kernel-workaround-0.1-1.el8.noarch
leapp-0.15.0-2.el8.noarch
leapp-upgrade-el8toel9-0.17.0-3.el8.noarch
libatomic_ops-7.6.2-3.el8.x86_64
libmodman-2.0.1-17.el8.x86_64
python3-leapp-0.15.0-2.el8.noarch
# dnf -y remove kernel-4.18.0-372.32.1.el8_6.x86_64 kernel-4.18.0-425.19.2.el8_7.x86_64
...
Complete!
# dnf -y remove kernel-core-4.18.0-372.32.1.el8_6.x86_64 kernel-core-4.18.0-425.19.2.el8_7.x86_64
...
Complete!
# dnf -y remove kernel-workaround-0.1-1.el8.noarch
...
Complete!

アップグレード用のツールを削除する!

アップグレード用のツールを削除します。

# rpm -qa | grep -e '\.el[78]' | grep -vE '^(gpg-pubkey|libmodulemd|katello-ca-consumer)' | sort
jimtcl-0.77-6.el8.x86_64
leapp-0.15.0-2.el8.noarch
leapp-upgrade-el8toel9-0.17.0-3.el8.noarch
libatomic_ops-7.6.2-3.el8.x86_64
libmodman-2.0.1-17.el8.x86_64
python3-leapp-0.15.0-2.el8.noarch
# dnf -y remove jimtcl-0.77-6.el8.x86_64 leapp-0.15.0-2.el8.noarch leapp-upgrade-el8toel9-0.17.0-3.el8.noarch libatomic_ops-7.6.2-3.el8.x86_64 libmodman-2.0.1-17.el8.x86_64 python3-leapp-0.15.0-2.el8.noarch
...
Complete!
# rpm -qa | grep -e '\.el[78]' | grep -vE '^(gpg-pubkey|libmodulemd|katello-ca-consumer)' | sort

アップグレード用のリポジトを削除する!

アップグレード用のリポジトリを削除します。

# dnf -y remove leapp-deps-el9 leapp-repository-deps-el9
Updating Subscription Management repositories.
Dependencies resolved.
=================================================================================================================================================================================================================
 Package                                                Architecture                        Version                                                                   Repository                            Size
=================================================================================================================================================================================================================
Removing:
 leapp-deps-el9                                         noarch                              5.0.9-100.202208231727Z.29a77886.master.el9                               @System                                0  
 leapp-repository-deps-el9                              noarch                              5.0.9-100.202208231727Z.29a77886.master.el9                               @System                                0  

Transaction Summary
=================================================================================================================================================================================================================
Remove  2 Packages
...
Complete!

おわりに

今回は、RHEL 8.6をRHEL 9.0にアップグレードしました。他のソフトウェアをインストールしていないシンプルなRHEL環境で実施したこともあり、問題なく実行できました。

関連記事

関連書籍(Amazon)

N/A