In this article, you will learn how to upgrade CentOS 7 to CentOS 8.5 release. The steps described herein do not depict the official upgrade and this should not be applied to a production server yet.
Step 1: Install the EPEL Repository
To start off, install the EPL repository by running:
# yum install epel-release -y

Step 2: Install yum-utils Tools
After successfully installing EPEL, install yum-utils by running the command below.
# yum install yum-utils

Thereafter, you need to resolve RPM packages by executing the command.
# yum install rpmconf # rpmconf -a

Next, perform a clean-up of all the packages you don’t require.
# package-cleanup --leaves # package-cleanup --orphans

Step 3: Install the dnf in CentOS 7
Now install the dnf package manager which is the default package manager for CentOS 8.
# yum install dnf

You also need to remove the yum package manager using the command.
# dnf -y remove yum yum-metadata-parser # rm -Rf /etc/yum

Step 4: Upgrading CentOS 7 to CentOS 8
We are now ready to upgrade CentOS 7 to CentOS 8, but before we do so, upgrade the system using the newly install dnf package manager.
# dnf upgrade

Next, install CentOS 8 release package using dnf as shown below. This will take a while.
# dnf 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}
Note: CentOS 8 is dead and all the repos have been moved to vault.centos.org.

Next, upgrade the EPEL repository.
dnf -y upgrade https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

After successfully upgrading the EPEL repository, remove all the temporary files.
# dnf clean all
Remove the old kernel core for CentOS 7.
# rpm -e `rpm -q kernel`

Next, be sure to remove conflicting packages.
# rpm -e --nodeps sysvinit-tools
Thereafter, launch the CentOS 8 system upgrade as shown.
# dnf -y --releasever=8 --allowerasing --setopt=deltarpm=false distro-sync

Note: If you get errors about conflicting packages, for example in my case there were conflicts about the existing python36-rpmconf package. I removed this package, similarly if you get any conflicts just remove those packages and try running the above upgrade command.
Step 5: Install the New Kernel Core for CentOS 8
To install a new kernel for CentOS 8, run the command.
# dnf -y install kernel-core

Finally, install CentOS 8 minimal package.
# dnf -y groupupdate "Core" "Minimal Install"
Now you can check the version of CentOS installed by running.
# cat /etc/redhat-release

If you see the above output, I have successfully upgraded from CentOS 7 to CentOS 8.5 release.
Read Also: How to Set Up Automatic Updates for CentOS 8
Conclusion
This article concludes on how you can upgrade from CentOS 7 to CentOS 8. We hope you found this insightful.
Before
yum install rpmconf
doyum update
, that will allow you to fix the issue with the error: import error: no module named _conf on step 3 ending.Good evening how to create a virtual workstation with Ulteo under Centos 8?
Just FYI, I followed this blueprint to do an in-place upgrade from CentOS 8-Stream to 9-Stream. The biggest difference is that the CentOS 9-Stream mirrors are in a different place (you can find them on Mirror Manager). Otherwise, the above process worked pretty well and I had surprisingly few issues getting CentOS 9 up and running.
Could you please show what links and how you did it?
The command
# dnf -y --releasever=8 --allowerasing --setopt=deltarpm=false distro-sync
fails. It will try to remove the protected dnf package.Adding
--setopt=protected_packages=
is a really bad idea, because dnf is removed by itself.Then you have a system without dnf, yum, or rpm. Not recommended!
How to upgrade CentOS 7.9 to CentOS 8.5
Type all the commands as root.
Answer the questions using the default. Usuallly it is N, in httpd case it is Y.
Check during the boot process is everything ok. Should be OK.
———————– this is not fixed by me yet ———————————————
libssh2.x86_64 – this is not possible to be upgraded just because the problem is that it will not let the dnf package be removed
Dependencies described here:
http://rpm.pbone.net/info_idpl_75792859_distro_redhatel8_com_libssh2-1.9.0-5.el8.x86_64.rpm.html
Seems this is a huge dependencies issue, just because all those four libraries are not enough
If you will try to download this one for CentOS 8 that contains all four libraries.
And then if you will try to install it with this command:
It will show these dependencies for example below. So a big surprise.
crypto-policies >= 20180730 is needed by openssl-libs-1:1.1.1c-2.el8_1.1.x86_64
So
Maybe it is possible to solve it by you know, checking which library has to be downloaded first and then downloading and installing them one by one in the correct order. Some day maybe will find out is it possible, but I am not sure.
Thereafter, launch the CentOS 8 system upgrade as shown.
This will fail. So, instead of the above do the below without reboot:
Check during the boot process is everything ok. Should be.
Replace:
# dnf -y --releasever=8 --allowerasing --setopt=deltarpm=false distro-sync
with:
# dnf --releasever=8 --setopt=deltarpm=false --setopt=protected_packages= --allowerasing distro-sync -y
Tried that, but it removed dnf. Now the system is unusable.
Running operation verification
Error: operation verification vs depsolve:
(NetworkManager >= 1.20 or dhclient) is needed by dracut-network-049-201.git20220131.el8.x86_64
rpmlib(RichDependencies) <= 4.12.0-1 is needed by dracut-network-049-201.git20220131.el8.x86_64
To detect the problem, try running: 'rpm -Va –nofiles –nodigest'.
You probably have a corrupted RPMDB, running 'rpm –rebuilddb' might fix the problem.
The downloaded packages have been cached for the next transaction.
You can clear packages from cache by removing 'dnf clean packages'.
Did not work for me.
Unfortunately, the vault.centos.org repo for CentOS 8 is out, too.
I just skipped CentOS entirely and From CentOS 7 I upgraded directly to CentOS 8 Stream using
dnf install --allowerasing http://mirrors.advancedhosters.com/centos/8-stream/BaseOS/x86_64/os/Packages/{centos-stream-repos-8-3.el8.noarch.rpm,centos-stream-release-8.6-1.el8.noarch.rpm,centos-gpg-keys-8-3.el8.noarch.rpm}
along with a few adjustments.
@Catalin,
I have updated the article and included the vault.centos.org repository…
Confirm it works with vault repos or with stream repos.
Did upgrade with both repos.
In some cases you can’t remove kernels from working OS, so you should boot into recovery mode and do it manually.
1. Download kernel, kernel-core and kernel-modules, linux-firmware.
2. Boot in rescue mode and remove existing linux-firmware package and install downloaded package.
3. Then Install kernel packages by (rpm -iv kernel*).
5. Reboot.
# rpm -iv linux-firmware-20210702-103.gitd79c2677.el8.noarch.rpm
error: open of linux-firmware-20210702-103.gitd79c2677.el8.noarch.rpm failed: No such file or directory
# rpm -iv kernel-modules-4.18.0-348.el8.x86_64.rpm
error: Failed dependencies:
kernel-uname-r = 4.18.0-348.el8.x86_64 is needed by kernel-modules-4.18.0-348.el8.x86_64
# /boot/symvers -> symlink /lib/moules/4.18…/symvers.gz
bash: /boot/symvers: No such file or directory
-> error: open of linux-firmware-20210702-103.gitd79c2677.el8.noarch.rpm failed: No such file or directory – ! You don’t have it.
You should download it first.
And symlink here is just an example – you should write the full kernel name you have. Like:
/boot/symvers -> symlink /lib/moules/4.18.0-348.el8.x86_64/symvers.gz
I’m getting the same error when running:
error: Failed dependencies:
kernel-uname-r = 4.18.0-348.el8.x86_64 is needed by kernel-modules-4.18.0-348.el8.x86_64
When I ran the:
I got an error I noticed some other people got:
“Error:
Problem: The operation would result in removing the following protected packages: kernel”
How to get past the kernel-uname-r dependency error..?
@John,
Check these comments, hope it will solve your problem:
https://www.tecmint.com/upgrade-centos-7-to-centos-8/comment-page-11/#comment-1726257
https://www.tecmint.com/upgrade-centos-7-to-centos-8/comment-page-11/#comment-1726239
Seemed to work.