Upgrade CentOS 7 to CentOS 8
Warning: CentOS 8 has reached End of Life (EOL) and is no longer supported. You should really consider moving to a supported OS such as CentOS 8 Stream.
I was looking at some virtual machines earlier today and I realized that they were not running the most current version of CentOS. Since I am going to upgrade them, I figured it’d be the perfect time to document the process of how to do it.
The first thing I do is make a backup of my virtual machine. You can’t recover from an accident if you don’t have a recovery point. At the very least, make sure you have taken a snapshot of your virtual machine.
Next, I verify what version of CentOS I’m on by running the following command.
cat /etc/centos-release
From the screenshot below you can see that I am currently on version 7.9.2009.
At this point, I’m going to enter “sudo su” on my VM and then enter my credentials, so that I can continue as ‘root’ and I don’t have to type “sudo” before every single command.
First step is to install the EPEL repository.
yum -y install epel-release
Next, install both ‘yum-utils’ and ‘rpmconf’ by using this command.
yum -y install yum-utils rpmconf
Next, use ‘rpmconf’ to resolve the RPM packages that are in use on your VM.
rpmconf -a
Then clean up any packages that are not required by your system.
package-cleanup --leaves
package-cleanup --orphans
Go ahead and reboot the system.
init 6
Log back in and do “sudo su” again.
CentOS uses the dnf package manager as its new default package manager, so time to install it.
yum -y install dnf
With dnf installed, it is time to remove the yum package manager.
dnf -y remove yum yum-metadata-parser
rm -Rf /etc/yum
Update all of the dnf packages.
dnf -y update
The next step is to install the CentOS 8 release package.
dnf -y install http://vault.centos.org/8.5.2111/BaseOS/x86_64/os/Packages/{centos-linux-repos-8-3.el8.noarch.rpm,centos-linux-release-8.5-1.2111.el8.noarch.rpm,centos-gpg-keys-8-3.el8.noarch.rpm}
Then upgrade the EPEL repository.
dnf -y upgrade https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
rpm --import http://download.fedoraproject.org/pub/eprl/RPM-GPG-KEY-EPEL-8
Next, clean up the dnf cached files.
dnf clean all
rm -rf /var/cache/dnf
CentOS Linux 8 had actually reached the End Of Life (EOL) as of December 31st, 2021. Which means that CentOS 8 will no longer receive development from the official CentOS project. After that EOL date, if you need to update your CentOS (yes, that means us right now), you need to change the mirrors to point to vault.centos.org where they are archived. So a better option would actually be to upgrade to CentOS Stream instead, but we’ll save that for another post…
Here is how to change the mirrors.
cd /etc/yum.repos.d/
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
dnf update
cd
There are two packages, dracut-network and rpmconf, that conflict with upgradingand need to be removed.
dnf remove dracut-network rpmconf
Remove the old CentOS 7 kernel
rpm -e `rpm -q kernel`
Remove any conflicting packages that are not needed any longer
rpm -e --nodeps sysvinit-tools
Now run the upgrade for CentOS 8
dnf -y --releasever=8 --allowerasing --setopt=deltarpm=false distro-sync
Next it is time to install a new kernel on your VM.
dnf -y install kernel-core
The final step to perform is to install CentOS 8 minimal packages
dnf -y groupupdate "Core" "Minimal Install"
Now if you recheck you can see that both the CentOS version and the kernel version have been updated.