How to Upgrade CentOS 7 to CentOS 8

Note – CentOS 8 reached its End of Life (EOL) on December 31, 2021.

!Warning!

  1. "yum" will be uninstalled after this update, you will need to use dnf to update your VPS further.
  2. Run the commands listed below only after taking a backup of your data!

First, install the EPEL repository,

yum install epel-release -y

Sample output:

Importing GPG key 0xF4A80EB5:
 Userid     : "CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>"
 Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
 Package    : centos-release-7-6.1810.2.el7.centos.x86_64 (@anaconda)
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : epel-release-7-11.noarch                                     1/1
  Verifying  : epel-release-7-11.noarch                                     1/1

Installed:
  epel-release.noarch 0:7-11

Complete!

To install yum utils.

yum install yum-utils

Sample output:

Total download size: 862 k
Installed size: 4.3 M
Is this ok [y/d/N]: y
Downloading packages:
(1/4): python-chardet-2.2.1-3.el7.noarch.rpm               | 227 kB   00:00
(2/4): libxml2-python-2.9.1-6.el7_2.3.x86_64.rpm           | 247 kB   00:00
(3/4): python-kitchen-1.1.1-5.el7.noarch.rpm               | 267 kB   00:00
(4/4): yum-utils-1.1.31-52.el7.noarch.rpm                  | 121 kB   00:00
--------------------------------------------------------------------------------
Total                                              5.4 MB/s | 862 kB  00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : python-chardet-2.2.1-3.el7.noarch                            1/4
  Installing : python-kitchen-1.1.1-5.el7.noarch                            2/4
  Installing : libxml2-python-2.9.1-6.el7_2.3.x86_64                        3/4
  Installing : yum-utils-1.1.31-52.el7.noarch                               4/4
  Verifying  : python-kitchen-1.1.1-5.el7.noarch                            1/4
  Verifying  : yum-utils-1.1.31-52.el7.noarch                               2/4
  Verifying  : libxml2-python-2.9.1-6.el7_2.3.x86_64                        3/4
  Verifying  : python-chardet-2.2.1-3.el7.noarch                            4/4

Installed:
  yum-utils.noarch 0:1.1.31-52.el7

Dependency Installed:
  libxml2-python.x86_64 0:2.9.1-6.el7_2.3  python-chardet.noarch 0:2.2.1-3.el7
  python-kitchen.noarch 0:1.1.1-5.el7

Complete!

To configure RPM packages.

yum install rpmconf
rpmconf -a

Sample output:

Total download size: 21 k
Installed size: 45 k
Is this ok [y/d/N]: y
Downloading packages:
warning: /var/cache/yum/x86_64/7/epel/packages/rpmconf-0.3.4-1.el7.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID 352c64e5: NOKEY
Public key for rpmconf-0.3.4-1.el7.noarch.rpm is not installed
rpmconf-0.3.4-1.el7.noarch.rpm                             |  21 kB   00:00
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
Importing GPG key 0x352C64E5:
 Userid     : "Fedora EPEL (7) <epel@fedoraproject.org>"
 Fingerprint: 91e9 7d7c 4a5e 96f1 7f3e 888f 6a2f aea2 352c 64e5
 Package    : epel-release-7-11.noarch (@extras)
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
Is this ok [y/N]: y
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : rpmconf-0.3.4-1.el7.noarch                                   1/1
  Verifying  : rpmconf-0.3.4-1.el7.noarch                                   1/1

Installed:
  rpmconf.noarch 0:0.3.4-1.el7

Complete!

After clean all packages which is not require.

package-cleanup --leaves

Sample output:

Loaded plugins: fastestmirror
libsysfs-2.1.0-16.el7.x86_64
package-cleanup --orphans

Sample output:

Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.23media.com
 * epel: mirror.de.leaseweb.net
 * extras: ftp.rz.uni-frankfurt.de
 * updates: mirror.fra10.de.leaseweb.net
GeoIP-1.5.0-13.el7.x86_64
NetworkManager-1.12.0-6.el7.x86_64
NetworkManager-libnm-1.12.0-6.el7.x86_64
NetworkManager-team-1.12.0-6.el7.x86_64
NetworkManager-tui-1.12.0-6.el7.x86_64
alsa-lib-1.1.6-2.el7.x86_64
audit-2.8.4-4.el7.x86_64
audit-libs-2.8.4-4.el7.x86_64
bash-4.2.46-31.el7.x86_64
bind-libs-lite-9.9.4-72.el7.x86_64
bind-license-9.9.4-72.el7.noarch
binutils-2.27-34.base.el7.x86_64
biosdevname-0.7.3-1.el7.x86_64
centos-release-7-6.1810.2.el7.centos.x86_64
coreutils-8.22-23.el7.x86_64
cronie-1.4.11-19.el7.x86_64
cronie-anacron-1.4.11-19.el7.x86_64
cryptsetup-libs-2.0.3-3.el7.x86_64
curl-7.29.0-51.el7.x86_64
dbus-1.10.24-12.el7.x86_64
dbus-libs-1.10.24-12.el7.x86_64
device-mapper-1.02.149-8.el7.x86_64
device-mapper-libs-1.02.149-8.el7.x86_64
dhclient-4.2.5-68.el7.centos.1.x86_64
dhcp-common-4.2.5-68.el7.centos.1.x86_64
dhcp-libs-4.2.5-68.el7.centos.1.x86_64
selinux-policy-targeted-3.13.1-229.el7.noarch
sg3_utils-1.37-17.el7.x86_64
sg3_utils-libs-1.37-17.el7.x86_64
shadow-utils-4.1.5.1-25.el7.x86_64
sudo-1.8.23-3.el7.x86_64
systemd-219-62.el7.x86_64
systemd-libs-219-62.el7.x86_64
systemd-sysv-219-62.el7.x86_64
teamd-1.27-5.el7.x86_64
tuned-2.10.0-6.el7.noarch
tzdata-2018e-3.el7.noarch
util-linux-2.23.2-59.el7.x86_64
vim-minimal-7.4.160-5.el7.x86_64
xfsprogs-4.5.0-18.el7.x86_64
yum-3.4.3-161.el7.centos.noarch
yum-plugin-fastestmirror-1.1.31-50.el7.noarch

To install dnf in CentOS 7.

yum install dnf

Sample output:

Installed:
  dnf.noarch 0:4.0.9.2-1.el7_6

Dependency Installed:
  deltarpm.x86_64 0:3.6-3.el7
  dnf-data.noarch 0:4.0.9.2-1.el7_6
  libcomps.x86_64 0:0.1.8-12.el7
  libdnf.x86_64 0:0.22.5-1.el7_6
  libmodulemd.x86_64 0:1.6.3-1.el7
  librepo.x86_64 0:1.8.1-7.el7
  libreport-filesystem.x86_64 0:2.1.11-43.el7.centos
  libsolv.x86_64 0:0.6.34-4.el7
  libyaml.x86_64 0:0.1.4-11.el7_0
  python-enum34.noarch 0:1.0.4-1.el7
  python2-dnf.noarch 0:4.0.9.2-1.el7_6
  python2-hawkey.x86_64 0:0.22.5-1.el7_6
  python2-libcomps.x86_64 0:0.1.8-12.el7
  python2-libdnf.x86_64 0:0.22.5-1.el7_6

Complete!

To remove yum package.

dnf -y remove yum yum-metadata-parser
rm -Rf /etc/yum

Sample output:

Remove  4 Packages

Freed space: 6.0 M
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                        1/1
  Erasing          : yum-utils-1.1.31-52.el7.noarch                         1/4
  Erasing          : yum-plugin-fastestmirror-1.1.31-50.el7.noarch          2/4
  Erasing          : yum-3.4.3-161.el7.centos.noarch                        3/4
  Erasing          : yum-metadata-parser-1.1.4-10.el7.x86_64                4/4
  Verifying        : yum-3.4.3-161.el7.centos.noarch                        1/4
  Verifying        : yum-metadata-parser-1.1.4-10.el7.x86_64                2/4
  Verifying        : yum-plugin-fastestmirror-1.1.31-50.el7.noarch          3/4
  Verifying        : yum-utils-1.1.31-52.el7.noarch                         4/4

Removed:
  yum-3.4.3-161.el7.centos.noarch
  yum-metadata-parser-1.1.4-10.el7.x86_64
  yum-plugin-fastestmirror-1.1.31-50.el7.noarch
  yum-utils-1.1.31-52.el7.noarch

Complete!

To upgrade CentOS 7 to CentOS 8

To Upgrade dnf package. [This will take while to upgrade]

dnf upgrade

Sample output:

Installed:
  bind-export-libs-32:9.11.4-9.P2.el7.x86_64   geoipupdate-2.5.0-1.el7.x86_64
  kernel-3.10.0-1062.4.3.el7.x86_64

Complete!

To install CentOS 8 Package.

dnf -y upgrade http://mirror.bytemark.co.uk/centos/8/BaseOS/x86_64/os/Packages/centos-release-8.0-0.1905.0.9.el8.x86_64.rpm

Sample Output:

Extra Packages for Enterprise Linux 7 - x86_64   46 MB/s |  16 MB     00:00
centos-release-8.0-0.1905.0.9.el8.x86_64.rpm    300 kB/s |  26 kB     00:00
Dependencies resolved.
================================================================================
 Package            Arch       Version                   Repository        Size
================================================================================
Upgrading:
 centos-release     x86_64     8.0-0.1905.0.9.el8        @commandline      26 k

Transaction Summary
================================================================================
Upgrade  1 Package

Total size: 26 k
Downloading Packages:
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                        1/1
  Upgrading        : centos-release-8.0-0.1905.0.9.el8.x86_64               1/2
  Cleanup          : centos-release-7-7.1908.0.el7.centos.x86_64            2/2
  Verifying        : centos-release-8.0-0.1905.0.9.el8.x86_64               1/2
  Verifying        : centos-release-7-7.1908.0.el7.centos.x86_64            2/2

Upgraded:
  centos-release-8.0-0.1905.0.9.el8.x86_64

Complete!

To upgrade the EPEL repository.

dnf -y upgrade https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

Sample output:

Transaction Summary
================================================================================
Upgrade  1 Package

Total size: 21 k
Downloading Packages:
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                        1/1
  Upgrading        : epel-release-8-7.el8.noarch                            1/2
  Cleanup          : epel-release-7-12.noarch                               2/2
  Verifying        : epel-release-8-7.el8.noarch                            1/2
  Verifying        : epel-release-7-12.noarch                               2/2

Upgraded:
  epel-release-8-7.el8.noarch

Complete!

To remove temporary files.

dnf clean all

Sample output:

62 files removed

To remove CentOS 7 kernel Core.

rpm -e `rpm -q kernel`

To remove conflict packages incase.

rpm -e --nodeps sysvinit-tools

Launch CentOS 8 Syatem upgrade. [It will take while to upgrade]

dnf -y --releasever=8 --allowerasing --setopt=deltarpm=false distro-sync

Sample output:

Upgrading        : lzo-2.08-14.el8.x86_64                              90/676
  Upgrading        : pciutils-libs-3.5.6-4.el8.x86_64                    91/676
  Running scriptlet: pciutils-libs-3.5.6-4.el8.x86_64                    91/676
  Upgrading        : pcre-8.42-4.el8.x86_64                              92/676
  Running scriptlet: pcre-8.42-4.el8.x86_64                              92/676
semodule: relocation error: semodule: symbol semanage_module_info_get_version version LIBSEMANAGE_1.1 not defined in file libsemanage.so.1 with link time reference

  Upgrading        : grep-3.1-6.el8.x86_64                               93/676
  Running scriptlet: grep-3.1-6.el8.x86_64                               93/676
  Upgrading        : xz-5.2.4-3.el8.x86_64                               94/676
  Installing       : squashfs-tools-4.3-17.el8.x86_64                    95/676
  Upgrading        : libnetfilter_conntrack-1.0.6-5.el8.x86_64           96/676
  Running scriptlet: libnetfilter_conntrack-1.0.6-5.el8.x86_64           96/676
  Upgrading        : libteam-1.27-10.el8.x86_64                          97/676
  Running scriptlet: libteam-1.27-10.el8.x86_64                          97/676
  Upgrading        : groff-base-1.22.3-18.el8.x86_64                     98/676
  Upgrading        : acl-2.2.53-1.el8.x86_64                             99/676
  Upgrading        : vim-minimal-2:8.0.1763-10.el8.x86_64               100/676
  Installing       : libpsl-0.20.2-5.el8.x86_64                         101/676

  Complete!

To install Kernel core for CentOS 8.

dnf -y install kernel-core

Sample output:

Last metadata expiration check: 0:07:29 ago on Fri 15 Nov 2019 03:17:24 PM EST.
Package kernel-core-4.18.0-80.11.2.el8_0.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!

To install minimal package for CentOS 8.

dnf -y groupupdate "Core" "Minimal Install"

Sample output:

Last metadata expiration check: 0:08:19 ago on Fri 15 Nov 2019 03:17:24 PM EST.
Dependencies resolved.
========================================================================================================
 Package                         Arch      Version                                   Repository    Size
========================================================================================================
Installing group/module packages:
 dnf-plugin-spacewalk            noarch    2.8.5-11.module_el8.0.0+180+337688dc      AppStream     24 k
 dnf-plugins-core                noarch    4.0.2.2-3.el8                             BaseOS        59 k
 prefixdevname                   x86_64    0.1.0-6.el8                               BaseOS       466 k
 rng-tools                       x86_64    6.6-2.el8                                 BaseOS        57 k
 sssd-common                     x86_64    2.0.0-43.el8_0.3                          BaseOS       1.4 M
 sssd-kcm                        x86_64    2.0.0-43.el8_0.3                          BaseOS       207 k
 yum                             noarch    4.0.9.2-5.el8                             BaseOS       173 k
Installing dependencies:
 python3-dnf-plugin-spacewalk    noarch    2.8.5-11.module_el8.0.0+180+337688dc      AppStream     30 k
 python3-hwdata                  noarch    2.3.6-3.el8                               AppStream     39 k
 python3-netifaces               x86_64    0.10.6-4.el8                              AppStream     25 k
 python3-newt                    x86_64    0.52.20-9.el8                             AppStream     63 k
 python3-pyOpenSSL               noarch    18.0.0-1.el8                              AppStream    103 k
 python3-rhn-client-tools        x86_64    2.8.16-13.module_el8.0.0+180+337688dc     AppStream    109 k
 python3-rhnlib                  noarch    2.8.6-8.module_el8.0.0+180+337688dc       AppStream     77 k

Reboot Your system.

 reboot

To check CentOS Version installed.

 cat /etc/redhat-release

Sample output:

 CentOS Linux release 8.1.1905 (core)

CrownCloud - Get a SSD powered KVM VPS at $4.5/month!
Use the code WELCOME for 10% off!

1 GB RAM / 25 GB SSD / 1 CPU Core / 1 TB Bandwidth per month

Available Locations: LAX | MIA | ATL | FRA | AMS