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.
There are different tutorial 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. 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 import 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 RHEL7 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 CentOS7 machine:
[root@centos7 ~]# mount /dev/cdrom /mnt -o loop
Go to /mnt/Packages and install the packages we need:
[root@centos7 Packages]# yum -y localinstall subscription-manager-1.15.9-15.el7.x86_64.rpm
(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@centos7 Packages]# mkdir /etc/yum.repos.d.centos [root@centos7 Packages]# mv /etc/yum.repos.d/CentOS-* /etc/yum.repos.d.centos
Force-remove the centos-release and yum RPMs
[root@centos7 Packages]# rpm -e yum --nodeps [root@centos7 Packages]# rpm -ihv yum-3.4.3-132.el7.noarch.rpm [root@centos7 Packages]# rpm -e centos-release --nodeps [root@centos7 Packages]# yum localinstall redhat-release-server-7.2-9.el7.x86_64.rpm
Register your system
To get access to RHEL repositories, you need to register your system. The username “example@example.com” must be replaced with your username. The ID is a randomly generated UUID.
[root@centos7 ~]# subscription-manager register Registering to: subscription.rhn.redhat.com:443/subscription Username: example@example.com Password: The system has been registered with ID: e61bd536-854c-4f32-a1fa-7f75c37046a5 [root@centos7 ~]#
Attach the system to a subscription
Usually it is just good enough to auto-attach the subscription needed.
[root@centos7 ~]# subscription-manager attach --auto Installed Product Current Status: Product Name: Red Hat Enterprise Linux Server Status: Subscribed [root@centos7 ~]# s
Review enabled repositories
Sometimes you dont want to use all the repos provided. The simplest way is just to disable all and re-enable those you need.
[root@centos7 ~]# subscription-manager repos --list [root@centos7 ~]# subscription-manager repos --disable "*" [root@centos7 ~]# subscription-manager repos --enable rhel-7-server-rpms --enable rhel-7-server-optional-rpms --enable whatever-else-you-need [root@centos7 ~]# yum clean all
Changing the Distribution
Now we have all requirements met, lets reinstall the packages.
[root@centos7 ~]# yum reinstall "*" --exclude=filesystem [ommited output] zlib x86_64 1.2.7-15.el7 rhel-7-server-rpms 90 k Not available: dhclient x86_64 12:4.2.5-42.el7.centos - 0.0 plymouth x86_64 0.8.9-0.24.20140113.el7.centos - 0.0 curl x86_64 7.29.0-25.el7.centos - 0.0 grub2-tools x86_64 1:2.02-0.29.el7.centos - 0.0 basesystem noarch 10.0-7.el7.centos - 0.0 plymouth-core-libs x86_64 0.8.9-0.24.20140113.el7.centos - 0.0 mariadb-libs x86_64 1:5.5.44-2.el7.centos - 0.0 libcurl x86_64 7.29.0-25.el7.centos - 0.0 dhcp-libs x86_64 12:4.2.5-42.el7.centos - 0.0 plymouth-scripts x86_64 0.8.9-0.24.20140113.el7.centos - 0.0 dhcp-common x86_64 12:4.2.5-42.el7.centos - 0.0 grub2 x86_64 1:2.02-0.29.el7.centos - 0.0 centos-logos noarch 70.0.6-3.el7.centos - 0.0 Transaction Summary ================================================================================= Reinstall 291 Packages Not available 13 Packages Total download size: 154 M Installed size: 577 M Is this ok [y/d/N]:
Here you can see the Centos specific packages, we need to take care about them later. Proceed and acknowledge with Y.
Cleanup
Now we need to manually clean up the CentOS specific packages with are named [package-name-and-version]-centos.
[root@centos7 ~]# rpm -qa --queryformat "%{NAME} %{VENDOR}\n" | grep -i centos | cut -d' ' -f1 filesystem centos-logos mariadb-libs libcurl dhcp-common plymouth-scripts dhclient basesystem plymouth-core-libs curl dhcp-libs plymouth [root@centos7 ~]#
With some of the packages you need to proceed very careful, the i.e. the filesystem package is awful. If you remove it, you will reinstall your system.
Luckily there is the rpm parameter –justdb which only does changes to the RPM-Database but not on the actual file system.
Some more critical packages need to be replaced as well.
[root@centos7 Packages]# rpm -e centos-logos plymouth plymouth-scripts plymouth-core-libs grub2 grub2-tools dhcp-common dhclient dhcp-libs curl libcurl --nodeps [root@centos7 Packages]# rpm -i curl-7.29.0-25.el7.x86_64.rpm libcurl-7.29.0-25.el7.x86_64.rpm [root@centos7 Packages]# yum -y install plymouth plymouth-scripts plymouth-core-libs grub2 grub2-tools dhcp-common dhclient dhcp-libs [root@centos7 ~]# yum remove basesystem [root@centos7 ~]# yum -y install basesystem
Dirty Hardcore Hack, please be careful, use the –justdb parameter
[root@centos7 Packages]# rpm -e filesystem --nodeps --justdb [root@centos7 Packages]# cp filesystem-3.2-20.el7.x86_64.rpm /root/ [root@centos7 Packages]# cd [root@centos7 ~]# umount /mnt [root@centos7 ~]# rpm -ihv filesystem-3.2-20.el7.x86_64.rpm
Aftermath
Now update your system, reboot and check if all is working as expected. There may be more cleanup work to do.
[root@centos7 ~]# umount /mnt [root@centos7 ~]# yum -y update && reboot
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 RHEL7. The only traces left are the previously install Kernels. They will get deleted over time when installing (updating) new Kernels.
In my case I just used CentOS7 minimal installation. The CentOS distribution comes with a total of 231 packages which need to be manually replaced if installed. 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β¦
Better install RHEL in the first place π
I have tried this link and it failed to boot π and need to abandon the server.
Hi,
That is pretty bad π As I wrote in the article its a risky thing to do this migration and it is not supported at all. It would be interesting what the actual reason was for the failure. I guess it should be recoverable quite easy
worked, thanks.
thought i’d have to reinstall with an exclamation, a few hashes and at signs.
should have installed RHEL in the first place.
I’ve tried it on CentOS 7 and RHEL 7.6.
In my case it was necessary to install also subscription-manager-rhsm-certificates.
Cause this is a hosted Root Server and it is not possible to mount an iso directly, I’ve tried this solution. Server runs now for a week without any trouble.
Mine worked except issues with an illegal loopback on a bind0 device. Redhat 7.6 handles its ifcfg scripts in a different directory than Centos. After correcting that I rebooted again and voila! I still have a bunch of packages marked from Centos though.
I works in my CentOS 7.4 to RHEL 7.4 u4 then remove other CentOS package manually then update to RHEL 7.5.
All of my repo are locaI so I did use the subscription guide.
Hi, i managed to switch from Centos to RHEL 7.9 – on baremetal host, with 2 failed attempts, with fix on UEFI, big thx for your blog post !!!.
Thanks π