There are various reasons why to migrate from CentOS to RHEL. Quicker access to bugfixes and new minor releases as well as having a fully commercially supported system. Unfortunately most providers do not have an option to install RHEL but CentOS instead.
There are different tutorials on the net how to migrate from RHEL to CentOS but almost no information about the other way round. It is quite simple and at the end of the day you have only Red Hat Packages installed.
In 2012 I wrote an article about Migrating from CentOS6 to RHEL6. Subsequently I’ve posted a similar article for RHEL 7: Migrating from CentOS7 to RHEL7. Now its time for an update.
Disclaimer
Some of the procedures can be destructive for your system and/or your data. I’m not taking any responsibility for any damage casue. Take a full backup of your system before even thinking about trying this procedure!
Also important to note is that such a procedure is not supported by Redhat.
Requirements
There are only two things you need
- A valid RHEL subscription obtained from Redhats online store
- A RHEL8 ISO-Image which corresponds with your current CentOS minor release (or newer) which can be downloaded at Redhat downloads
Preparations
Be sure you activated your subscription.
Mount the ISO image on your CentOS8 machine:
[root@centos8 ~]# mount /dev/cdrom /mnt -o loop
Go to /mnt/BaseOS/Packages and install the packages we need:
[root@centos8 Packages]# rpm -e subscription-manager-rhsm-certificates --nodeps [root@centos8 Packages]# yum localinstall subscription-manager-1* [root@centos8 Packages]# yum localinstall subscription-manager-rhsm-certificates-1*
(Re)Move your CentOS repos
To avoid conflicts between CentOS and Redhat Repositories you need to get rid of them. Remove them or just keep a copy.
[root@centos8 Packages]# mkdir /etc/yum.repos.d.centos [root@centos8 Packages]# mv /etc/yum.repos.d/CentOS-* /etc/yum.repos.d.centos
Force-remove the centos-release and yum RPMs
[root@centos8 Packages]# rpm -e centos-release --nodeps [root@centos8 Packages]# yum localinstall redhat-release-8*
Unmount the ISO
This is important, otherwise yum reinstall will fail!
[root@centos8 ~]# umount /mnt
Register your system
To get access to RHEL repositories, you need to register your system. The username “user@example.com” must be replaced with your username. The ID is a randomly generated UUID.
[root@centos8 ~]# subscription-manager register Registering to: subscription.rhsm.redhat.com:443/subscription Username: user@example.com Password: The system has been registered with ID: 8aa7ef30-e834-4889-9e07-c5e8ce31e681 The registered system name is: centos8.example.com [root@centos8 ~]#
Attach the system to a subscription
Usually it is just good enough to auto-attach the subscription needed.
[root@centos8 ~]# subscription-manager attach --auto Installed Product Current Status: Product Name: Red Hat Enterprise Linux for x86_64 Status: Subscribed [root@centos8 ~]#
Review enabled repositories
Sometimes you don’t want to use all the repos provided. The simplest way is just to disable all and re-enable those you need.
[root@centos8 ~]# yum repolist Updating Subscription Management repositories. Red Hat Enterprise Linux 8 for x86_64 - AppStream (RPMs) 3.0 MB/s | 9.3 MB 00:03 Red Hat Enterprise Linux 8 for x86_64 - BaseOS (RPMs) 2.9 MB/s | 8.1 MB 00:02 repo id repo name status rhel-8-for-x86_64-appstream-rpms Red Hat Enterprise Linux 8 for x86_64 - AppStream (RPMs) 6,031 rhel-8-for-x86_64-baseos-rpms Red Hat Enterprise Linux 8 for x86_64 - BaseOS (RPMs) 2,193 [root@centos8 ~]#
Adjust with subscription manager repos –disable|enable as needed.
Changing the Distribution
Now we have all requirements met, let’s reinstall the packages.
[root@centos8 ~]# yum -y reinstall "*"
Cleanup
Now we need to manually clean up the CentOS specific packages that have not been reinstalled.
[root@centos8 ~]# rpm -qa --queryformat "%{NAME} %{VENDOR}\n" | grep -i centos | cut -d' ' -f1 containers-common centos-logos glibc libfprint containernetworking-plugins python3-dnf-plugin-spacewalk platform-python glibc-common python3-rhnlib slirp4netns gpgme rhn-client-tools dnf-plugin-spacewalk podman python3-libs qemu-guest-agent glibc-langpack-en container-selinux python3-gpg runc buildah fuse-overlayfs python3-rhn-client-tools oci-systemd-hook [root@centos8 ~]#
Most of these packages are not problematic to remove and reinstall. Unfortunately this is not the case with the glibc packages. Do not try to remove them with –nodeps, your system will stop working. The problem is that the CentOS delivered packages seem to be newer than that provided by RHEL. This can be solved by downgrading the packages.
That may be the same with other packages as well.
[root@centos8 ~]# yum downgrade glibc
At the end, there will be one package left: python3-gpg. Due to some dependencies it can only be reinstalled after the rest of the packages are reinstalled/downgraded.
[root@centos8 ~]# yum reinstall python3-gpg
Check if there are still RPMs of vendor “Centos” installed:
[root@centos7 ~]# rpm -qa --queryformat "%{NAME} %{VENDOR}\n" | grep -i centos | cut -d' ' -f1
This should return nothing, almost all is now RHEL8. The only traces left are the previously installed Kernels. They will get deleted over time when installing (updating) new Kernels.
In my case I just used CentOS8 “Server” installation. If you plan to go down this road, please clone the system first for testing before migrating the actual system.
Support by Redhat
Will the converted machine be supported after this procedure? Well, officially it is not supported, but if there are no traces of CentOS left on the machine…
As mentioned before, better install RHEL in the first place 🙂
Thanks for this. For other people out there, the instructions on this blog are what actually worked. Redhat has recently published some instructions using a tool “convert2rhel” that was a fail for us.
I say forget the tool and follow these instructions. You may be able to download the needed RPMS for access.redhat.com without mounting the dvd.
Thank you,
I can report that this recipe works very well !!
the convert2rhel does not work…