How to Upgrade CentOS Stream 8 to CentOS Stream 9

This article will show how to update to CentOS Stream 9 from CentOS Stream 8.

main menu
grub entries

If only official repositories are used it is fairly easy to upgrade to the new rolling based CentOS Stream 9 release, which follows the Red Hat Enterprise Linux 9. Using unofficial or users’ repositories CentOS Stream 8 may lead to unstable system or break user’s system following this tutorial. First, check out for CentOS Stream 9 compatibility issues the currently installed repositories if some specific or unofficial are used.
The following article uses a CentOS Stream 9 with only the official default repositories and in addition, the EPEL repository, which has a CentOS Stream 9 support.

STEP 1) All installed packages should be updated to the latest versions.

[root@srv ~]# dnf update -y
Last metadata expiration check: 0:09:08 ago on Tue Oct  4 12:12:07 2022.Dependencies resolved.
Nothing to do.Complete!

The DNF tool reports that all packages are up-to-date, because there is nothing to upgrade.

STEP 2) A cleanup of all packages, which are not required anymore.

Check orphan and leaves packages. Some of the packages here may be used by the user explicitly, so it is important to know the system. Remove the packages if not used by the system and they are showed as an output of the following commands and they are not used by the user of the system.

[root@srv ~]# dnf repoquery --unneeded

Last metadata expiration check: 0:12:56 ago on Tue Oct  4 12:12:07 2022.

NetworkManager-initscripts-updown-1:1.40.0-1.el8.noarch

grub2-tools-efi-1:2.02-129.el8.x86_64

libmetalink-0:0.1.3-7.el8.x86_64

pciutils-0:3.7.0-1.el8.x86_64

python3-configobj-0:5.0.6-11.el8.noarch

python3-schedutils-0:0.6-6.el8.x86_64

rdma-core-0:41.0-1.el8.x86_64

[root@srv ~]# dnf repoquery --extras

Last metadata expiration check: 0:00:12 ago on Tue Oct  4 12:34:17 2022.

Remove the unneeded packages:

[root@srv ~]# dnf remove -y NetworkManager-initscripts-updown-1:1.40.0-1.el8.noarch grub2-tools-efi-1:2.02-129.el8.x86_64  libmetalink-0:0.1.3-7.el8.x86_64 pciutils-0:3.7.0-1.el8.x86_64 python3-configobj-0:5.0.6-11.el8.noarch python3-schedutils-0:0.6-6.el8.x86_64 rdma-core-0:41.0-1.el8.x86_64

Dependencies resolved.

=========================================================================================

 Package                               Arch       Version            Repository     Size

=========================================================================================

Removing:

 NetworkManager-initscripts-updown     noarch     1:1.40.0-1.el8     @baseos       2.1 k

 grub2-tools-efi                       x86_64     1:2.02-129.el8     @baseos       2.0 M

 libmetalink                           x86_64     0.1.3-7.el8        @anaconda      75 k

 pciutils                              x86_64     3.7.0-1.el8        @anaconda     211 k

 python3-configobj                     noarch     5.0.6-11.el8       @anaconda     342 k

 python3-schedutils                    x86_64     0.6-6.el8          @anaconda      46 k

 rdma-core                             x86_64     41.0-1.el8         @baseos       103 k

Transaction Summary

=========================================================================================

Remove  7 Packages

Freed space: 2.8 M

Running transaction check

Transaction check succeeded.

Running transaction test

Transaction testsucceeded.

Running transaction

  Preparing        :                                                                 1/1

  Running scriptlet: python3-configobj-5.0.6-11.el8.noarch                           1/1

  Erasing          : python3-configobj-5.0.6-11.el8.noarch                           1/7

  Running scriptlet: NetworkManager-initscripts-updown-1:1.40.0-1.el8.noarch         2/7

  Erasing          : NetworkManager-initscripts-updown-1:1.40.0-1.el8.noarch         2/7

  Erasing          : rdma-core-41.0-1.el8.x86_64                                     3/7

  Running scriptlet: rdma-core-41.0-1.el8.x86_64                                     3/7

  Erasing          : pciutils-3.7.0-1.el8.x86_64                                     4/7

  Erasing          : python3-schedutils-0.6-6.el8.x86_64                             5/7

  Erasing          : libmetalink-0.1.3-7.el8.x86_64                                  6/7

  Erasing          : grub2-tools-efi-1:2.02-129.el8.x86_64                           7/7

  Running scriptlet: grub2-tools-efi-1:2.02-129.el8.x86_64                           7/7

  Verifying        : NetworkManager-initscripts-updown-1:1.40.0-1.el8.noarch         1/7

  Verifying        : grub2-tools-efi-1:2.02-129.el8.x86_64                           2/7

  Verifying        : libmetalink-0.1.3-7.el8.x86_64                                  3/7

  Verifying        : pciutils-3.7.0-1.el8.x86_64                                     4/7

  Verifying        : python3-configobj-5.0.6-11.el8.noarch                           5/7

  Verifying        : python3-schedutils-0.6-6.el8.x86_64                             6/7

  Verifying        : rdma-core-41.0-1.el8.x86_64                                     7/7

Removed:

  NetworkManager-initscripts-updown-1:1.40.0-1.el8.noarch                               

  grub2-tools-efi-1:2.02-129.el8.x86_64                                                 

  libmetalink-0.1.3-7.el8.x86_64                                                        

  pciutils-3.7.0-1.el8.x86_64                                                           

  python3-configobj-5.0.6-11.el8.noarch                                                 

  python3-schedutils-0.6-6.el8.x86_64                                                   

  rdma-core-41.0-1.el8.x86_64                                                           

Complete!

In fact, some of the above packages may be left on the system, but it is better to remove them and if they are needed to be installed after the upgrade.

STEP 3)Install the CentOS Stream 9 repositories.

Three files should be installed:

  1. http://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/centos-stream-repos-9.0-18.el9.noarch.rpm
  2. http://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/centos-stream-release-9.0-18.el9.noarch.rpm
  3. http://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/centos-gpg-keys-9.0-18.el9.noarch.rpm

These are the latest version at the time of writing this article. Check the URL http://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/ for newer versions.

[root@srv ~]# dnf install -y http://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/centos-stream-repos-9.0-18.el9.noarch.rpm http://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/centos-stream-release-9.0-18.el9.noarch.rpm http://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/centos-gpg-keys-9.0-18.el9.noarch.rpm

Last metadata expiration check: 0:01:37 ago on Tue Oct  4 12:59:52 2022.

centos-stream-repos-9.0-18.el9.noarch.rpm                 47 kB/s|  12 kB     00:00   

centos-stream-release-9.0-18.el9.noarch.rpm               92 kB/s|  26 kB     00:00   

centos-gpg-keys-9.0-18.el9.noarch.rpm                     77 kB/s|  15 kB     00:00   

Dependencies resolved.

=========================================================================================

 Package                      Architecture  Version            Repository           Size

=========================================================================================

Upgrading:

 centos-stream-release        noarch        9.0-18.el9         @commandline         26 k

 centos-stream-repos          noarch        9.0-18.el9         @commandline         12 k

Downgrading:

 centos-gpg-keys              noarch        9.0-18.el9         @commandline         15 k

Transaction Summary

=========================================================================================

Upgrade    2 Packages

Downgrade  1 Package

Total size: 53 k

Downloading Packages:

Running transaction check

Transaction check succeeded.

Running transaction test

Transaction testsucceeded.

Running transaction

  Preparing        :                                                                 1/1

  Running scriptlet: centos-gpg-keys-9.0-18.el9.noarch                               1/1

  Downgrading      : centos-gpg-keys-9.0-18.el9.noarch                               1/6

  Upgrading        : centos-stream-repos-9.0-18.el9.noarch                           2/6

  Upgrading        : centos-stream-release-9.0-18.el9.noarch                         3/6

  Cleanup          : centos-stream-release-8.6-1.el8.noarch                          4/6

  Cleanup          : centos-stream-repos-8-6.el8.noarch                              5/6

  Cleanup          : centos-gpg-keys-1:8-6.el8.noarch                                6/6

  Running scriptlet: centos-gpg-keys-1:8-6.el8.noarch                                6/6

Line is not an assignment at '/usr/lib/sysctl.d/50-redhat.conf:7': (null)

Couldn't write '1' to 'net/ipv4/conf/*/rp_filter', ignoring: No such fileor directory

warning: %transfiletriggerin(systemd-239-67.el8.x86_64) scriptlet failed, exitstatus 1

Error in<unknown> scriptlet inrpm package centos-gpg-keys

  Verifying        : centos-gpg-keys-9.0-18.el9.noarch                               1/6

  Verifying        : centos-gpg-keys-1:8-6.el8.noarch                                2/6

  Verifying        : centos-stream-repos-9.0-18.el9.noarch                           3/6

  Verifying        : centos-stream-repos-8-6.el8.noarch                              4/6

  Verifying        : centos-stream-release-9.0-18.el9.noarch                         5/6

  Verifying        : centos-stream-release-8.6-1.el8.noarch                          6/6

Upgraded:

  centos-stream-release-9.0-18.el9.noarch      centos-stream-repos-9.0-18.el9.noarch    

Downgraded:

  centos-gpg-keys-9.0-18.el9.noarch                                                     

Complete!

Upgrade the distro with

[root@srv ~]# dnf -y --releasever=9-stream --allowerasing --setopt=deltarpm=false distro-sync

CentOS Stream 9-stream - BaseOS                          1.8 MB/s| 5.9 MB     00:03   

CentOS Stream 9-stream - AppStream                       3.2 MB/s|  15 MB     00:04   

CentOS Stream 9-stream - Extras packages                 7.2 kB/s| 8.7 kB     00:01   

Extra Packages forEnterprise Linux 8 - x86_64           2.3 MB/s|  13 MB     00:05   

Extra Packages forEnterprise Linux Modular 8 - x86_64   596 kB/s| 733 kB     00:01   

Extra Packages forEnterprise Linux 8 - Next - x86_64    2.0 MB/s| 1.4 MB     00:00   

Dependencies resolved.

=========================================================================================

 Package                       Arch   Version                        Repository     Size

=========================================================================================

Installing:

 kernel                        x86_64 5.14.0-171.el9                 baseos        1.9 M

 kernel-core                   x86_64 5.14.0-171.el9                 baseos         46 M

 kernel-modules                x86_64 5.14.0-171.el9                 baseos         34 M

Upgrading:

 NetworkManager                x86_64 1:1.40.0-1.el9                 baseos        2.2 M

 NetworkManager-libnm          x86_64 1:1.40.0-1.el9                 baseos        1.7 M

 NetworkManager-team           x86_64 1:1.40.0-1.el9                 baseos         36 k

 NetworkManager-tui            x86_64 1:1.40.0-1.el9                 baseos        231 k

 acl                           x86_64 2.3.1-3.el9                    baseos         73 k

 audit                         x86_64 3.0.7-103.el9                  baseos        272 k

 audit-libs                    x86_64 3.0.7-103.el9                  baseos        118 k

 authselect                    x86_64 1.2.5-1.el9                    baseos        144 k

 authselect-libs               x86_64 1.2.5-1.el9                    baseos        243 k

 basesystem                    noarch 11-13.el9                      baseos        3.9 k

 bashx86_64 5.1.8-5.el9                    baseos        1.7 M

 biosdevname                   x86_64 0.7.3-9.el9                    baseos         36 k

......

......

 subscription-manager          x86_64 1.29.30-1.el9                  baseos        900 k

     replacing  python3-syspurpose.x86_64 1.28.28-1.el8

 subscription-manager-rhsm-certificates

                               noarch 20220623-1.el9                 baseos         21 k

 systemd-rpm-macros            noarch 250-11.el9                     baseos         43 k

 usermode                      x86_64 1.114-4.el9                    baseos        190 k

 userspace-rcu                 x86_64 0.12.1-6.el9                   baseos        110 k

 util-linux-core               x86_64 2.37.4-9.el9                   baseos        461 k

     replacing  hardlink.x86_64 1:1.3-6.el8

Installing weak dependencies:

 gawk-all-langpacks            x86_64 5.1.0-6.el9                    appstream     207 k

 libcap-ng-python3             x86_64 0.8.2-7.el9                    appstream      30 k

 libxcrypt-compat              x86_64 4.4.18-3.el9                   appstream      89 k

 python-unversioned-commandnoarch 3.9.14-1.el9                   appstream      12 k

 rsyslog-logrotate             x86_64 8.2102.0-105.el9               appstream      12 k

 zstd                          x86_64 1.5.1-2.el9                    baseos        548 k

Removing:

 kernel                        x86_64 4.18.0-338.el8                 @baseos         0 

 kernel-core                   x86_64 4.18.0-338.el8                 @baseos        68 M

 kernel-modules                x86_64 4.18.0-338.el8                 @baseos        22 M

Removing dependent packages:

 gdbm                          x86_64 1:1.18-2.el8                   @baseos       381 k

 python3-slip                  noarch 0.6.4-13.el8                   @baseos        60 k

 python3-slip-dbus             noarch 0.6.4-13.el8                   @baseos        70 k

Downgrading:

 ethtoolx86_64 2:5.10-4.el9                   baseos        212 k

 libldb                        x86_64 2.5.2-1.el9                    baseos        187 k

 libtalloc                     x86_64 2.3.3-1.el9                    baseos         32 k

 linux-firmware                noarch 20220708-127.el9               baseos        233 M

 memstrack                     x86_64 0.2.4-1.el9                    appstream      50 k

Transaction Summary

=========================================================================================

Install     53 Packages

Upgrade    333 Packages

Remove       6 Packages

Downgrade    5 Packages

Total download size: 530 M

Downloading Packages:

(1/391): libtalloc-2.3.3-1.el9.x86_64.rpm                 38 kB/s|  32 kB     00:00   

......

......

(391/391): linux-firmware-20220708-127.el9.noarch.rpm    956 kB/s| 233 MB     04:09   

-----------------------------------------------------------------------------------------

Total                                                    2.1 MB/s| 530 MB     04:14    

CentOS Stream 9-stream - Extras packages                 2.1 MB/s| 2.1 kB     00:00   

Importing GPG key 0x1D997668:

 Userid     : "CentOS Extras SIG (https://wiki.centos.org/SpecialInterestGroup) <[email protected]>"

 Fingerprint: 363F C097 2F64 B699 AED3 968E 1FF6 A217 1D99 7668

 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-Extras-SHA512

Key imported successfully

Running transaction check

Transaction check succeeded.

Running transaction test

Transaction testsucceeded.

Running transaction

  Running scriptlet: filesystem-3.16-2.el9.x86_64                                    1/1

  Running scriptlet: selinux-policy-targeted-34.1.43-1.el9.noarch                    1/1

  Running scriptlet: firewalld-1.0.0-2.el9.noarch                                    1/1

  Preparing        :                                                                 1/1

  Running scriptlet: libgcc-11.3.1-2.1.el9.x86_64                                    1/1

  Upgrading        : libgcc-11.3.1-2.1.el9.x86_64                                  1/742

  Running scriptlet: libgcc-11.3.1-2.1.el9.x86_64                                  1/742

  Installing       : linux-firmware-whence-20220708-127.el9.noarch                 2/742

  Upgrading        : crypto-policies-20220815-1.git0fbe86f.el9.noarch              3/742

  Running scriptlet: crypto-policies-20220815-1.git0fbe86f.el9.noarch              3/742

  Upgrading        : setup-2.13.7-7.el9.noarch                                     4/742

warning: /etc/shadowcreated as /etc/shadow.rpmnew

  Running scriptlet: setup-2.13.7-7.el9.noarch                                     4/742

.......

.......

  util-linux-core-2.37.4-9.el9.x86_64                                                   

  zstd-1.5.1-2.el9.x86_64                                                               

Removed:

  gdbm-1:1.18-2.el8.x86_64                  kernel-4.18.0-338.el8.x86_64                

  kernel-core-4.18.0-338.el8.x86_64         kernel-modules-4.18.0-338.el8.x86_64        

  python3-slip-0.6.4-13.el8.noarch          python3-slip-dbus-0.6.4-13.el8.noarch       

Complete!

Rebuild the RPM database.

[root@srv ~]# rpmdb --rebuilddb

warning: Converting database from bdb_ro to sqlite backend

[root@srv ~]#

Clean DNF cache:

[root@srv ~]# dnf clean packages

Updating Subscription Management repositories.

Unable to readconsumer identity

This system is not registered with an entitlement server. You can use subscription-manager to register.

0 files removed

Issue the update command again:

[root@srv ~]# dnf update -y

Updating Subscription Management repositories.

Unable to readconsumer identity

This system is not registered with an entitlement server. You can use subscription-manager to register.

Last metadata expiration check: 3:28:41 ago on Tue Oct  4 13:32:49 2022.

Dependencies resolved.

=========================================================================================

 Package                          Architecture  Version              Repository     Size

=========================================================================================

Upgrading:

 epel-next-release                noarch        9-4.el9              epel          8.2 k

 epel-release                     noarch        9-4.el9              epel           18 k

 initscripts                      x86_64        10.11.5-1.el9        baseos        230 k

 initscripts-service              noarch        10.11.5-1.el9        baseos         14 k

 trousers                         x86_64        0.3.15-5.el9         epel          144 k

 trousers-lib                     x86_64        0.3.15-5.el9         epel          165 k

Installing dependencies:

 initscripts-rename-device        x86_64        10.11.5-1.el9        baseos         17 k

Transaction Summary

=========================================================================================

Install  1 Package

Upgrade  6 Packages

Total size: 598 k

Total download size: 581 k

Downloading Packages:

[SKIPPED] initscripts-rename-device-10.11.5-1.el9.x86_64.rpm: Already downloaded       

(2/7): epel-next-release-9-4.el9.noarch.rpm               41 kB/s| 8.2 kB     00:00   

(3/7): epel-release-9-4.el9.noarch.rpm                   838 kB/s|  18 kB     00:00   

(4/7): initscripts-service-10.11.5-1.el9.noarch.rpm       46 kB/s|  14 kB     00:00   

(5/7): trousers-0.3.15-5.el9.x86_64.rpm                  1.5 MB/s| 144 kB     00:00   

(6/7): trousers-lib-0.3.15-5.el9.x86_64.rpm              1.5 MB/s| 165 kB     00:00   

(7/7): initscripts-10.11.5-1.el9.x86_64.rpm              349 kB/s| 230 kB     00:00   

-----------------------------------------------------------------------------------------

Total                                                    222 kB/s| 581 kB     00:02    

Extra Packages forEnterprise Linux 9 - x86_64           1.6 MB/s| 1.6 kB     00:00   

Importing GPG key 0x3228467C:

 Userid     : "Fedora (epel9) <[email protected]>"

 Fingerprint: FF8A D134 4597 106E CE81 3B91 8A38 72BF 3228 467C

 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-9

Key imported successfully

Running transaction check

Transaction check succeeded.

Running transaction test

Transaction testsucceeded.

Running transaction

  Preparing        :                                                                 1/1

  Upgrading        : epel-release-9-4.el9.noarch                                    1/13

warning: Unable to get systemd shutdowninhibition lock: Failed to activate service 'org.freedesktop.login1': timed out (service_start_timeout=25000ms)

  Running scriptlet: epel-release-9-4.el9.noarch                                    1/13

  Upgrading        : epel-next-release-9-4.el9.noarch                               2/13

  Upgrading        : trousers-lib-0.3.15-5.el9.x86_64                               3/13

  Upgrading        : initscripts-service-10.11.5-1.el9.noarch                       4/13

  Installing       : initscripts-rename-device-10.11.5-1.el9.x86_64                 5/13

  Upgrading        : initscripts-10.11.5-1.el9.x86_64                               6/13

  Running scriptlet: initscripts-10.11.5-1.el9.x86_64                               6/13

  Running scriptlet: trousers-0.3.15-5.el9.x86_64                                   7/13

  Upgrading        : trousers-0.3.15-5.el9.x86_64                                   7/13

  Running scriptlet: trousers-0.3.15-5.el9.x86_64                                   7/13

  Cleanup          : epel-next-release-9-2.el9.noarch                               8/13

  Running scriptlet: trousers-0.3.15-1.el8.x86_64                                   9/13

  Cleanup          : trousers-0.3.15-1.el8.x86_64                                   9/13

  Running scriptlet: trousers-0.3.15-1.el8.x86_64                                   9/13

  Running scriptlet: initscripts-10.11.2-1.el9.x86_64                              10/13

  Cleanup          : initscripts-10.11.2-1.el9.x86_64                              10/13

  Running scriptlet: initscripts-10.11.2-1.el9.x86_64                              10/13

  Cleanup          : initscripts-service-10.11.2-1.el9.noarch                      11/13

  Cleanup          : epel-release-9-2.el9.noarch                                   12/13

  Cleanup          : trousers-lib-0.3.15-1.el8.x86_64                              13/13

  Running scriptlet: trousers-lib-0.3.15-1.el8.x86_64                              13/13

  Verifying        : initscripts-rename-device-10.11.5-1.el9.x86_64                 1/13

  Verifying        : initscripts-10.11.5-1.el9.x86_64                               2/13

  Verifying        : initscripts-10.11.2-1.el9.x86_64                               3/13

  Verifying        : initscripts-service-10.11.5-1.el9.noarch                       4/13

  Verifying        : initscripts-service-10.11.2-1.el9.noarch                       5/13

  Verifying        : epel-next-release-9-4.el9.noarch                               6/13

  Verifying        : epel-next-release-9-2.el9.noarch                               7/13

  Verifying        : epel-release-9-4.el9.noarch                                    8/13

  Verifying        : epel-release-9-2.el9.noarch                                    9/13

  Verifying        : trousers-0.3.15-5.el9.x86_64                                  10/13

  Verifying        : trousers-0.3.15-1.el8.x86_64                                  11/13

  Verifying        : trousers-lib-0.3.15-5.el9.x86_64                              12/13

  Verifying        : trousers-lib-0.3.15-1.el8.x86_64                              13/13

Installed products updated.

Upgraded:

  epel-next-release-9-4.el9.noarch        epel-release-9-4.el9.noarch                   

  initscripts-10.11.5-1.el9.x86_64        initscripts-service-10.11.5-1.el9.noarch      

  trousers-0.3.15-5.el9.x86_64            trousers-lib-0.3.15-5.el9.x86_64              

Installed:

  initscripts-rename-device-10.11.5-1.el9.x86_64                                        

Complete!

Install all packages for “Minimal Install”:

[root@srv ~]# dnf -y groupupdate "Core" "Minimal Install"

Updating Subscription Management repositories.

Unable to readconsumer identity

This system is not registered with an entitlement server. You can use subscription-manager to register.

Last metadata expiration check: 0:01:02 ago on Tue Oct  4 17:02:07 2022.

Dependencies resolved.

=========================================================================================

 Package                  Architecture   Version                    Repository      Size

=========================================================================================

Installing group/modulepackages:

 iproute-tc               x86_64         5.18.0-1.el9               baseos         461 k

 rpm-plugin-audit         x86_64         4.16.1.3-17.el9            baseos          18 k

Installing Environment Groups:

 Minimal Install                                                                       

Installing Groups:

 Core                                                                                  

Transaction Summary

=========================================================================================

Install  2 Packages

Total download size: 478 k

Installed size: 937 k

Downloading Packages:

(1/2): rpm-plugin-audit-4.16.1.3-17.el9.x86_64.rpm        26 kB/s|  18 kB     00:00   

(2/2): iproute-tc-5.18.0-1.el9.x86_64.rpm                469 kB/s| 461 kB     00:00   

-----------------------------------------------------------------------------------------

Total                                                    188 kB/s| 478 kB     00:02    

Running transaction check

Transaction check succeeded.

Running transaction test

Transaction testsucceeded.

Running transaction

  Preparing        :                                                                 1/1

  Installing       : rpm-plugin-audit-4.16.1.3-17.el9.x86_64                         1/2

warning: Unable to get systemd shutdowninhibition lock: Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.

  Installing       : iproute-tc-5.18.0-1.el9.x86_64                                  2/2

  Running scriptlet: iproute-tc-5.18.0-1.el9.x86_64                                  2/2

  Verifying        : iproute-tc-5.18.0-1.el9.x86_64                                  1/2

  Verifying        : rpm-plugin-audit-4.16.1.3-17.el9.x86_64                         2/2

Installed products updated.

Installed:

  iproute-tc-5.18.0-1.el9.x86_64         rpm-plugin-audit-4.16.1.3-17.el9.x86_64       

Complete!

Now the system is upgraded to the CentOS Stream 9. The system should be restarted.

[root@srv ~]# cat /etc/*release

CentOS Stream release 9

NAME="CentOS Stream"

VERSION="9"

ID="centos"

ID_LIKE="rhel fedora"

VERSION_ID="9"

PLATFORM_ID="platform:el9"

PRETTY_NAME="CentOS Stream 9"

ANSI_COLOR="0;31"

LOGO="fedora-logo-icon"

CPE_NAME="cpe:/o:centos:centos:9"

HOME_URL="https://centos.org/"

BUG_REPORT_URL="https://bugzilla.redhat.com/"

REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux 9"

REDHAT_SUPPORT_PRODUCT_VERSION="CentOS Stream"

CentOS Stream release 9

CentOS Stream release 9

STEP 4) Additional cleanups.

Remove the old kernels and all old packages, which have in the version “.el8” for CentOS Stream 8.
First, remove the old kernels:

[root@srv ~]# rpm -q kernel-core

kernel-core-4.18.0-383.el8.x86_64

kernel-core-4.18.0-408.el8.x86_64

kernel-core-5.14.0-171.el9.x86_64

[root@srv ~]# dnf remove -y kernel-core-4.18.0-383.el8.x86_64 kernel-core-4.18.0-408.el8.x86_64

Updating Subscription Management repositories.

Unable to readconsumer identity

This system is not registered with an entitlement server. You can use subscription-manager to register.

Dependencies resolved.

=========================================================================================

 Package                 Architecture    Version                  Repository        Size

=========================================================================================

Removing:

 kernel-core             x86_64          4.18.0-383.el8           @baseos           69 M

 kernel-core             x86_64          4.18.0-408.el8           @baseos           69 M

Removing dependent packages:

 kernel                  x86_64          4.18.0-383.el8           @baseos            0 

 kernel                  x86_64          4.18.0-408.el8           @baseos            0 

 kernel-modules          x86_64          4.18.0-383.el8           @baseos           23 M

 kernel-modules          x86_64          4.18.0-408.el8           @baseos           23 M

Transaction Summary

=========================================================================================

Remove  6 Packages

Freed space: 184 M

Running transaction check

Transaction check succeeded.

Running transaction test

Transaction testsucceeded.

Running transaction

  Preparing        :                                                                 1/1

  Erasing          : kernel-4.18.0-383.el8.x86_64                                    1/6

  Running scriptlet: kernel-4.18.0-383.el8.x86_64                                    1/6

  Erasing          : kernel-4.18.0-408.el8.x86_64                                    2/6

  Running scriptlet: kernel-4.18.0-408.el8.x86_64                                    2/6

  Erasing          : kernel-modules-4.18.0-408.el8.x86_64                            3/6

  Running scriptlet: kernel-modules-4.18.0-408.el8.x86_64                            3/6

  Erasing          : kernel-modules-4.18.0-383.el8.x86_64                            4/6

  Running scriptlet: kernel-modules-4.18.0-383.el8.x86_64                            4/6

  Running scriptlet: kernel-core-4.18.0-383.el8.x86_64                               5/6

  Erasing          : kernel-core-4.18.0-383.el8.x86_64                               5/6

  Running scriptlet: kernel-core-4.18.0-383.el8.x86_64                               5/6

  Running scriptlet: kernel-core-4.18.0-408.el8.x86_64                               6/6

  Erasing          : kernel-core-4.18.0-408.el8.x86_64                               6/6

  Running scriptlet: kernel-core-4.18.0-408.el8.x86_64                               6/6

  Verifying        : kernel-4.18.0-408.el8.x86_64                                    1/6

  Verifying        : kernel-4.18.0-383.el8.x86_64                                    2/6

  Verifying        : kernel-core-4.18.0-383.el8.x86_64                               3/6

  Verifying        : kernel-core-4.18.0-408.el8.x86_64                               4/6

  Verifying        : kernel-modules-4.18.0-408.el8.x86_64                            5/6

  Verifying        : kernel-modules-4.18.0-383.el8.x86_64                            6/6

Installed products updated.

Removed:

  kernel-4.18.0-383.el8.x86_64                kernel-4.18.0-408.el8.x86_64              

  kernel-core-4.18.0-383.el8.x86_64           kernel-core-4.18.0-408.el8.x86_64         

  kernel-modules-4.18.0-383.el8.x86_64        kernel-modules-4.18.0-408.el8.x86_64      

Complete!

Remove the Subscription Manager if you do not have a subscription:

[root@srv ~]# dnf remove -y subscription-manager

Updating Subscription Management repositories.

Unable to readconsumer identity

This system is not registered with an entitlement server. You can use subscription-manager to register.

Dependencies resolved.

=========================================================================================

 Package                                   Arch      Version            Repository  Size

=========================================================================================

Removing:

 subscription-manager                      x86_64    1.29.30-1.el9      @baseos    3.2 M

Removing unused dependencies:

 libdnf-plugin-subscription-manager        x86_64    1.29.30-1.el9      @baseos     63 k

 python3-chardet                           noarch    4.0.0-5.el9        @baseos    1.4 M

 python3-cloud-what                        x86_64    1.29.30-1.el9      @baseos     73 k

 python3-decorator                         noarch    4.4.2-6.el9        @baseos     61 k

 python3-ethtoolx86_64    0.15-2.el9         @baseos     94 k

 python3-idna                              noarch    2.10-7.el9         @baseos    459 k

 python3-iniparse                          noarch    0.4-45.el9         @baseos    106 k

 python3-inotify                           noarch    0.9.6-25.el9       @baseos    244 k

 python3-librepo                           x86_64    1.14.2-3.el9       @baseos    183 k

 python3-pysocks                           noarch    1.7.1-12.el9       @baseos     88 k

 python3-requests                          noarch    2.25.1-6.el9       @baseos    389 k

 python3-setuptools                        noarch    53.0.0-11.el9      @baseos    4.2 M

 python3-subscription-manager-rhsm         x86_64    1.29.30-1.el9      @baseos    431 k

 python3-urllib3                           noarch    1.26.5-3.el9       @baseos    728 k

 subscription-manager-rhsm-certificates    noarch    20220623-1.el9     @baseos     27 k

 usermode                                  x86_64    1.114-4.el9        @baseos    836 k

Transaction Summary

=========================================================================================

Remove  17 Packages

Freed space: 12 M

Running transaction check

Transaction check succeeded.

Running transaction test

Transaction testsucceeded.

Running transaction

  Preparing        :                                                                 1/1

  Running scriptlet: subscription-manager-1.29.30-1.el9.x86_64                      1/17

Removed "/etc/systemd/system/multi-user.target.wants/rhsmcertd.service".

  Erasing          : subscription-manager-1.29.30-1.el9.x86_64                      1/17

  Running scriptlet: subscription-manager-1.29.30-1.el9.x86_64                      1/17

  Erasing          : python3-subscription-manager-rhsm-1.29.30-1.el9.x86_64         2/17

  Erasing          : python3-cloud-what-1.29.30-1.el9.x86_64                        3/17

  Erasing          : python3-requests-2.25.1-6.el9.noarch                           4/17

  Erasing          : python3-urllib3-1.26.5-3.el9.noarch                            5/17

  Erasing          : python3-inotify-0.9.6-25.el9.noarch                            6/17

  Erasing          : python3-setuptools-53.0.0-11.el9.noarch                        7/17

  Erasing          : python3-idna-2.10-7.el9.noarch                                 8/17

  Erasing          : python3-pysocks-1.7.1-12.el9.noarch                            9/17

  Erasing          : python3-chardet-4.0.0-5.el9.noarch                            10/17

  Erasing          : python3-iniparse-0.4-45.el9.noarch                            11/17

  Erasing          : subscription-manager-rhsm-certificates-20220623-1.el9.noarc   12/17

  Erasing          : python3-decorator-4.4.2-6.el9.noarch                          13/17

  Erasing          : libdnf-plugin-subscription-manager-1.29.30-1.el9.x86_64       14/17

  Erasing          : python3-ethtool-0.15-2.el9.x86_64                             15/17

  Erasing          : python3-librepo-1.14.2-3.el9.x86_64                           16/17

  Erasing          : usermode-1.114-4.el9.x86_64                                   17/17

  Running scriptlet: usermode-1.114-4.el9.x86_64                                   17/17

  Verifying        : libdnf-plugin-subscription-manager-1.29.30-1.el9.x86_64        1/17

  Verifying        : python3-chardet-4.0.0-5.el9.noarch                             2/17

  Verifying        : python3-cloud-what-1.29.30-1.el9.x86_64                        3/17

  Verifying        : python3-decorator-4.4.2-6.el9.noarch                           4/17

  Verifying        : python3-ethtool-0.15-2.el9.x86_64                              5/17

  Verifying        : python3-idna-2.10-7.el9.noarch                                 6/17

  Verifying        : python3-iniparse-0.4-45.el9.noarch                             7/17

  Verifying        : python3-inotify-0.9.6-25.el9.noarch                            8/17

  Verifying        : python3-librepo-1.14.2-3.el9.x86_64                            9/17

  Verifying        : python3-pysocks-1.7.1-12.el9.noarch                           10/17

  Verifying        : python3-requests-2.25.1-6.el9.noarch                          11/17

  Verifying        : python3-setuptools-53.0.0-11.el9.noarch                       12/17

  Verifying        : python3-subscription-manager-rhsm-1.29.30-1.el9.x86_64        13/17

  Verifying        : python3-urllib3-1.26.5-3.el9.noarch                           14/17

  Verifying        : subscription-manager-1.29.30-1.el9.x86_64                     15/17

  Verifying        : subscription-manager-rhsm-certificates-20220623-1.el9.noarc   16/17

  Verifying        : usermode-1.114-4.el9.x86_64                                   17/17

Removed:

  libdnf-plugin-subscription-manager-1.29.30-1.el9.x86_64                               

  python3-chardet-4.0.0-5.el9.noarch                                                    

  python3-cloud-what-1.29.30-1.el9.x86_64                                               

  python3-decorator-4.4.2-6.el9.noarch                                                  

  python3-ethtool-0.15-2.el9.x86_64                                                     

  python3-idna-2.10-7.el9.noarch                                                        

  python3-iniparse-0.4-45.el9.noarch                                                    

  python3-inotify-0.9.6-25.el9.noarch                                                   

  python3-librepo-1.14.2-3.el9.x86_64                                                   

  python3-pysocks-1.7.1-12.el9.noarch                                                   

  python3-requests-2.25.1-6.el9.noarch                                                  

  python3-setuptools-53.0.0-11.el9.noarch                                               

  python3-subscription-manager-rhsm-1.29.30-1.el9.x86_64                                

  python3-urllib3-1.26.5-3.el9.noarch                                                   

  subscription-manager-1.29.30-1.el9.x86_64                                             

  subscription-manager-rhsm-certificates-20220623-1.el9.noarch                          

  usermode-1.114-4.el9.x86_64                                                           

Complete!

List all packages with .el8, which means they are from CentOS Stream 8:

[root@srv ~]# dnf list --installed|grep el8
inih.x86_64                        56-1.el8                        @epel       
iwl6000-firmware.noarch            9.221.4.1-110.el8.1             @baseos      libcbor.x86_64                     0.7.0-6.el8                     @epel        libcroco.x86_64                    0.6.12-4.el8_2.1                @anaconda    libfido2.x86_64                    1.11.0-2.el8                    @epel        mozjs60.x86_64                     60.9.0-4.el8                    @anaconda

These are old libraries or modules, which old versions are not included in CentOS Stream 9 release. The best way is to search their equivalents in CentOS Stream 9 and to install those packages. It’s safe to remove them if not used.
For example, inih library is older version in CentOS Stream 9, than the CentOS Stream 8inih in CentOS Stream 8 is from EPEL repo, but in CentOS Stream 9 is from the baseos. In rear cases, it may happen the packages in the new CentOS release to be a little bit older than the EPEL package from the old CentOS release.

[root@srv ~]# dnf info inih

Last metadata expiration check: 0:27:12 ago on Tue 04 Oct 2022 05:02:07 PM UTC.

Installed Packages

Name         : inih

Version      : 56

Release      : 1.el8

Architecture : x86_64

Size         : 47 k

Source       : inih-56-1.el8.src.rpm

Repository   : @System

From repo    : epel

Summary      : Simple INI fileparser library

URL          : https://github.com/benhoyt/inih

License      : BSD

Description  : The inih package provides simple INI fileparser whichis only a couple of

             : pages of code, and it was designed to be small and simple, so it's good

             : forembedded systems.

Available Packages

Name         : inih

Version      : 49

Release      : 6.el9

Architecture : i686

Size         : 18 k

Source       : inih-49-6.el9.src.rpm

Repository   : baseos

Summary      : Simple INI fileparser library

URL          : https://github.com/benhoyt/inih

License      : BSD

Description  : The inih package provides simple INI fileparser whichis only a couple of

             : pages of code, and it was designed to be small and simple, so it's good

             : forembedded systems.

[root@srv ~]# dnf remove -y inih-56-1.el8

Dependencies resolved.

=========================================================================================

 Package                 Architecture     Version                Repository         Size

=========================================================================================

Removing:

 inih                    x86_64           56-1.el8               @epel              47 k

Removing dependent packages:

 xfsprogs                x86_64           5.14.2-1.el9           @baseos           3.3 M

Removing unused dependencies:

 userspace-rcu           x86_64           0.12.1-6.el9           @baseos           408 k

Transaction Summary

=========================================================================================

Remove  3 Packages

Freed space: 3.7 M

Running transaction check

Transaction check succeeded.

Running transaction test

Transaction testsucceeded.

Running transaction

  Preparing        :                                                                 1/1

  Erasing          : xfsprogs-5.14.2-1.el9.x86_64                                    1/3

  Erasing          : inih-56-1.el8.x86_64                                            2/3

  Erasing          : userspace-rcu-0.12.1-6.el9.x86_64                               3/3

  Running scriptlet: userspace-rcu-0.12.1-6.el9.x86_64                               3/3

  Verifying        : inih-56-1.el8.x86_64                                            1/3

  Verifying        : userspace-rcu-0.12.1-6.el9.x86_64                               2/3

  Verifying        : xfsprogs-5.14.2-1.el9.x86_64                                    3/3

Removed:

  inih-56-1.el8.x86_64  userspace-rcu-0.12.1-6.el9.x86_64  xfsprogs-5.14.2-1.el9.x86_64

Complete!

[root@srv ~]# dnf install -y inih

Last metadata expiration check: 0:27:31 ago on Tue 04 Oct 2022 05:02:07 PM UTC.

Dependencies resolved.

=========================================================================================

 Package           Architecture        Version                 Repository           Size

=========================================================================================

Installing:

 inih              x86_64              49-6.el9                baseos               18 k

Transaction Summary

=========================================================================================

Install  1 Package

Total download size: 18 k

Installed size: 26 k

Downloading Packages:

inih-49-6.el9.x86_64.rpm                                  92 kB/s|  18 kB     00:00   

-----------------------------------------------------------------------------------------

Total                                                     26 kB/s|  18 kB     00:00    

Running transaction check

Transaction check succeeded.

Running transaction test

Transaction testsucceeded.

Running transaction

  Preparing        :                                                                 1/1

  Installing       : inih-49-6.el9.x86_64                                            1/1

  Running scriptlet: inih-49-6.el9.x86_64                                            1/1

  Verifying        : inih-49-6.el9.x86_64                                            1/1

Installed:

  inih-49-6.el9.x86_64                                                                  

Complete!

To use the CentOS Stream 9 package just remove the old one and then install it again as above.

In this step, suggested by one of our readers, it is good to check if your logrotate systemd service is started because it is responsible for the periodic log rotation in /var/log. If this service is not running in the system the logs may fill up the root (or the log) partition:

[root@srv ~]# systemctl enable logrotate.timer

[root@srv ~]# systemctl start logrotate.timer

[root@srv ~]# systemctl status logrotate.timer

● logrotate.timer - Daily rotation of log files

     Loaded: loaded (/usr/lib/systemd/system/logrotate.timer; enabled; preset: enabled)

     Active: active (waiting) since Fri 2023-01-27 10:22:57 CET; 6s ago

      Until: Fri 2023-01-27 10:22:57 CET; 6s ago

    Trigger: Sat 2023-01-28 00:00:00 CET; 13h left

   Triggers: ● logrotate.service

       Docs: man:logrotate(8)

             man:logrotate.conf(5)

Jan 27 10:22:57 h2 systemd[1]: Stopped Daily rotation of log files.

Jan 27 10:22:57 h2 systemd[1]: Stopping Daily rotation of log files...

Jan 27 10:22:57 h2 systemd[1]: Started Daily rotation of log files.

STEP 5) Regenerate the rescue kernel boot entry.

. The rescue kernel is the old one (as shown in the screenshot at the start of the article), so it should be generated for the new CentOS release, i.e. the current kernel. Check out the this article on the subject for detailed information – Generate the rescue kernel boot entry in CentOS Stream 9
Here is what should do:

12[root@srv ~]# rm -f /boot/vmlinuz-0-rescue-b2a198ecbfdd451cb905f76f825af01e /boot/initramfs-0-rescue-b2a198ecbfdd451cb905f76f825af01e.img /boot/loader/entries/b2a198ecbfdd451cb905f76f825af01e-0-rescue.conf
[root@srv ~]# /usr/lib/kernel/install.d/51-dracut-rescue.install add $(uname -r) /boot /boot/vmlinuz-$(uname -r)

The command does not print output on a successful rescue kernel generation.

STEP 6) DNF broken modules.

It appears some DNF modules may get broken and the DNF manager reports it. Just resets the modules to their original state with:

[root@srv ~]# dnf module reset -y nodejs perl perl-IO-Socket-SSL perl-libwww-perl php satellite-5-client virt

Last metadata expiration check: 3:41:15 ago on Wed Oct 12 09:36:22 2022.

Modular dependency problems:

 Problem 1: conflicting requests

  - nothing provides module(platform:el8) needed by module nodejs:10:8030020210304194401:30b713e6.x86_64

 Problem 2: conflicting requests

  - nothing provides module(platform:el8) needed by module perl:5.26:8000020190628020724:55190bc5.x86_64

 Problem 3: conflicting requests

  - nothing provides module(platform:el8) needed by module perl-IO-Socket-SSL:2.066:8030020201222215140:1e4bbb35.x86_64

 Problem 4: conflicting requests

  - nothing provides module(platform:el8) needed by module perl-libwww-perl:6.34:8030020201223164340:b967a9a2.x86_64

 Problem 5: conflicting requests

  - nothing provides module(platform:el8) needed by module php:7.2:8020020200507003613:2c7ca891.x86_64

  - nothing provides module(httpd:2.4) needed by module php:7.2:8020020200507003613:2c7ca891.x86_64

  - nothing provides module(nginx) needed by module php:7.2:8020020200507003613:2c7ca891.x86_64

 Problem 6: conflicting requests

  - nothing provides module(platform:el8) needed by module satellite-5-client:1.0:8010020191114035551:cdc1202b.x86_64

 Problem 7: conflicting requests

  - nothing provides module(platform:el8) needed by module virt:rhel:8050020211221192853:b4937e53.x86_64

Dependencies resolved.

==============================================================================================================

 Package                   Architecture             Version                   Repository                 Size

==============================================================================================================

Resetting modules:

 nodejs                                                                                                     

 perl                                                                                                       

 perl-IO-Socket-SSL                                                                                         

 perl-libwww-perl                                                                                           

 php                                                                                                        

 satellite-5-client                                                                                         

 virt                                                                                                       

Transaction Summary

==============================================================================================================

Complete!

The broken modules are shown in every DNF command and after resetting them the output of the problem will disappear. More on the subject – DNF install and conflicting requests – nothing provides module(platform:el8) needed by module

STEP 7) Firewall changes.

When adding a masquerade to the forward packages in an inner interface as bridges, for example, it should be added explicit forward to the zone if the interfaces are in the same zone or explicitly intra-zone forward if the interfaces are in different zones:

12firewall-cmd --permanent --zone=public --add-forwardfirewall-cmd --reload

In simple words, if the Internet to all the virtual servers has stopped after the upgrade, add the “–add-forward” to the zone. If the interfaces are not in the same zone (i.e. public, for example) check the following link – https://bugzilla.redhat.com/show_bug.cgi?id=2016864

Ref: How to upgrade to CentOS Stream 9 from CentOS Stream 8 (ahelpme.com)