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

RHEL 7をRHEL 8にインプレースアップグレードの方式でアップグレードします。

インプレースアップグレードの制約を確認する!

インプレースアップグレードは、新規にサーバを構築しなくて済むので楽そうに思いますが、制約も多々あるので、RHELのページで事前に詳細を確認します。

代表的な制約は、以下になります。

  • ファームウェアをBIOSからUEFIに変更できない。
  • RHELのリポジトリ以外からインストールしたソフトウェアは事前にアンインストールしておいたほうがよい。追加したリポジトリも無効化する。

アップグレードに必要なリポジトリを有効化する!

rhel-7-server-rpmsと、rhel-7-server-extras-rpmsのリポジトリを有効化します。※通常は、rhel-7-server-rpmsのリポジトリは有効化済みと思います。

# subscription-manager repos --enable rhel-7-server-rpms
# subscription-manager repos --enable rhel-7-server-extras-rpms
# yum repolist
Loaded plugins: product-id, search-disabled-repos, subscription-manager
rhel-7-server-extras-rpms                                                                        | 3.4 kB  00:00:00     
rhel-7-server-rpms                                                                               | 3.5 kB  00:00:00     
(1/3): rhel-7-server-extras-rpms/x86_64/group                                                    |  124 B  00:00:00     
(2/3): rhel-7-server-extras-rpms/x86_64/updateinfo                                               | 255 kB  00:00:00     
(3/3): rhel-7-server-extras-rpms/x86_64/primary_db                                               | 706 kB  00:00:00     
repo id                                          repo name                                                        status
rhel-7-server-extras-rpms/x86_64                 Red Hat Enterprise Linux 7 Server - Extras (RPMs)                 1,451
rhel-7-server-rpms/7Server/x86_64                Red Hat Enterprise Linux 7 Server (RPMs)                         33,649
repolist: 35,100

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

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

subscription-manager release
Release not set

「Release no set」と表示されず、バージョンが表示され、マイナーバージョンの固定の設定を行っている場合は、クリアします。

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

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

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

# yum versionlock clear

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

# yum versionlock clear
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager
No such command: versionlock. Please use /bin/yum --help

RHEL 7を最新化する!

RHEL 7を最新のRHEL 7.9にアップデートします。カーネルなどアップデートしている場合があるので、アップデート後、OSを再起動します。

# yum -y update
# reboot

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

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

#  cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.9 (Maipo)
# uname -r
3.10.0-1160.90.1.el7.x86_64
# subscription-manager list --installed
+-------------------------------------------+
    Installed Product Status
+-------------------------------------------+
Product Name:   Red Hat Enterprise Linux Server
Product ID:     69
Version:        7.9
Arch:           x86_64
Status:         Not Subscribed
Status Details:
Starts:
Ends:

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

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

# yum -y install leapp-upgrade

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

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

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

Upgrade has been inhibited due to the following problems:
    1. Inhibitor: Leapp detected loaded kernel drivers which have been removed in RHEL 8. Upgrade cannot proceed.
    2. Inhibitor: Missing required answers in the answer file
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: 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

Key: f08a07da902958defa4f5c2699fae9ec2eb67c5b
----------------------------------------
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://leapp.readthedocs.io/en/latest/dialogs.html
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
----------------------------------------
....

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

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

# rmmod pata_acpi
# leapp answer --section remove_pam_pkcs11_module_check.confirm=True

今回の環境では不要でしたが、rootでのログインを許可していない場合は、以下の対処も必要になります。

# echo PermitRootLogin yes | tee -a /etc/ssh/sshd_config

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

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

# leapp preupgrade --target 8.6
...
Check completed.
====> * local_repos_inhibit
        Inhibits the upgrade if local repositories were found.
====> * 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 8.6
...
Install    212 Packages
Upgrade    285 Packages
Remove      67 Packages
Downgrade    7 Packages

Total size: 640 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

成功です!

RHELを再起動する!

RHELを再起動します。

# reboot

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

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

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

# cat /etc/redhat-release
Red Hat Enterprise Linux release 8.6 (Ootpa)
# uname -r
4.18.0-372.32.1.el8_6.x86_64
# 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
Status:         Not Subscribed
Status Details: 
Starts:         
Ends:           

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

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

# subscription-manager release
Release: 8.6

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

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

# cat /etc/dnf/dnf.conf
[main]
gpgcheck=1
installonly_limit=3
clean_requirements_on_remove=True
best=True
skip_if_unavailable=False
exclude=python2-leapp,snactor,leapp-upgrade-el7toel8,leapp
# 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=

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

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

# cd /lib/modules && ls -d *.el7*
3.10.0-1160.90.1.el7.x86_64  3.10.0-1160.el7.x86_64
# [ -x /usr/sbin/weak-modules ] && /usr/sbin/weak-modules --remove-kernel 3.10.0-1160.90.1.el7.x86_64
# [ -x /usr/sbin/weak-modules ] && /usr/sbin/weak-modules --remove-kernel 3.10.0-1160.el7.x86_64
# /bin/kernel-install remove 3.10.0-1160.90.1.el7.x86_64 /lib/modules/3.10.0-1160.90.1.el7.x86_64/vmlinuz
# /bin/kernel-install remove 3.10.0-1160.el7.x86_64 /lib/modules/3.10.0-1160.el7.x86_64/vmlinuz
# rpm -qa | grep -e '\.el[67]' | grep -vE '^(gpg-pubkey|libmodulemd|katello-ca-consumer)' | sort
kernel-3.10.0-1160.90.1.el7.x86_64
kernel-3.10.0-1160.el7.x86_64
leapp-0.15.0-2.el7_9.noarch
leapp-upgrade-el7toel8-0.17.0-10.el7_9.noarch
python2-leapp-0.15.0-2.el7_9.noarch
ustr-1.0.4-16.el7.x86_64
# rpm -evh kernel-3.10.0-1160.90.1.el7.x86_64
Preparing...                          ################################# [100%]
Cleaning up / removing...
   1:kernel-3.10.0-1160.90.1.el7      ################################# [100%]
# rpm -evh kernel-3.10.0-1160.el7.x86_64
Preparing...                          ################################# [100%]
Cleaning up / removing...
   1:kernel-3.10.0-1160.el7           ################################# [100%]
warning: file /boot/vmlinuz-3.10.0-1160.el7.x86_64: remove failed: No such file or directory
warning: file /boot/symvers-3.10.0-1160.el7.x86_64.gz: remove failed: No such file or directory
warning: file /boot/config-3.10.0-1160.el7.x86_64: remove failed: No such file or directory
warning: file /boot/System.map-3.10.0-1160.el7.x86_64: remove failed: No such file or directory
warning: file /boot/.vmlinuz-3.10.0-1160.el7.x86_64.hmac: remove failed: No such file or directory
# rm -rf /lib/modules/*el7*

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

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

# rpm -evh leapp-upgrade-el7toel8-0.17.0-10.el7_9.noarch leapp-0.15.0-2.el7_9.noarch python2-leapp-0.15.0-2.el7_9.noarch  ustr-1.0.4-16.el7.x86_64
Preparing...                          ################################# [100%]
Cleaning up / removing...
   1:leapp-upgrade-el7toel8-0.17.0-10.################################# [ 25%]
   2:leapp-0.15.0-2.el7_9             ################################# [ 50%]
   3:python2-leapp-0.15.0-2.el7_9     ################################# [ 75%]
   4:ustr-1.0.4-16.el7                ################################# [100%]
# rpm -qa | grep -e '\.el[67]' | grep -vE '^(gpg-pubkey|libmodulemd|katello-ca-consumer)' | sort

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

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

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

Transaction Summary
========================================================================================================================
Remove  2 Packages

Freed space: 0  
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                1/1 
  Erasing          : leapp-repository-deps-el8-5.0.8-100.202208231727Z.29a77886.master.el8.noarch                   1/2 
  Erasing          : leapp-deps-el8-5.0.8-100.202208231727Z.29a77886.master.el8.noarch                              2/2 
  Verifying        : leapp-deps-el8-5.0.8-100.202208231727Z.29a77886.master.el8.noarch                              1/2 
  Verifying        : leapp-repository-deps-el8-5.0.8-100.202208231727Z.29a77886.master.el8.noarch                   2/2 
Installed products updated.

Removed:
  leapp-deps-el8-5.0.8-100.202208231727Z.29a77886.master.el8.noarch                                                     
  leapp-repository-deps-el8-5.0.8-100.202208231727Z.29a77886.master.el8.noarch                                          

Complete!

登録されているリポジトリを確認する!

登録されているリポジトリを確認します。不要なリポジトリがある場合は、無効化します。

# yum repolist
Updating Subscription Management repositories.
repo id                                         repo name
rhel-8-for-x86_64-appstream-rpms                Red Hat Enterprise Linux 8 for x86_64 - AppStream (RPMs)
rhel-8-for-x86_64-baseos-rpms                   Red Hat Enterprise Linux 8 for x86_64 - BaseOS (RPMs)

RHELが最新化されていることを確認する!

RHELが最新化されていることを確認します。

# yum check-update
Updating Subscription Management repositories.
Red Hat Enterprise Linux 8 for x86_64 - BaseOS (RPMs)                                   5.0 MB/s |  53 MB     00:10    
Red Hat Enterprise Linux 8 for x86_64 - AppStream (RPMs)                                5.0 MB/s |  47 MB     00:09    

おわりに

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

関連記事

関連書籍(Amazon)

N/A