Centos 7 nach 8 InPlace upgrade

Centos 8 ist nun seit einigen Wochen veröffentlicht.

Leider wurde hier auf das leapp Paket verzichtet welches ein inplace upgrade von RHEL 7 nach RHEL 8 erlaubt.

Während es generell zu empfehlen ist solche release Upgrades mit einer Neuinstallation zu verbinden, werde ich hier einen Ansatz umschreiben welcher es ermöglicht das Upgrade direkt durchzuführen.

! Achtung !

Diese Anleitung hat keine Garantie zu funktionieren, wird nicht unterstützt und generell eine schlechte Idee.

Vorbereitung:

Aktualisiere den Host auf die neusten Pakete:
yum update
Installiere dnf
yum -y install dnf yum-utils
und benutze package-cleanup --orphans --leaves um alte Pakete die nicht benötigt werden zu entfernen.

Danach starte neu um sicherzugehen dass alles noch funktioniert.

Das Upgrade

Zuerst beende alle Dienste die auf dem Server laufen (z.b. MySQL)
Nun entferne yum mit dnf remove "yum*"
und update die Centos Release Version mit dnf install http://mirror.centos.org/centos/8/BaseOS/x86_64/os/Packages/centos-release-8.0-0.1905.0.9.el8.x86_64.rpm .
Benutze die selbe Methode um alle anderen Repositories wie EPEL oder RPMFusion auf die CentOS 8 Version zu aktualisieren, und kontrolliere danach die Repository URLs in /etc/yum.repos.d/ (elrepo z.b. schreibt das el7 fest in die URL rein und muss von Hand auf el8 umgeschrieben werden)

Jetzt bereinigen wir den dnf cache und aktualisieren alles:
dnf clean all
dnf --releasever=8 --allowerasing distro-sync


Dieser befehl wird aller Wahrscheinlichkeit zu einem Transaction check error: führen.
Hier ist es die einfachste Möglichkeit das entsprechende Paket zu entfernen und später wieder zu installieren. (in meinem Fall musste ich pycairo entfernen, wenn man den Standard kernel von centos verwendet wir dieser auch entfernt werden müssen)

Wenn der distro sync funktioniert hat muss man die Änderungen an den configdateien sich anschauen und möglichst übernehmen.
Dies geht mit rpmconf -a

Falls man vor der Installation den alten Kernel entfernt hatte, sollte man nun sicherstellen dass dieser wieder installiert ist: dnf install kerne-core

Danach sollte man auch die minimalen dependencies von centos installieren: dnf groupinstall  "Minimal Install"
Hierbei musste ich vorher erst das Verzeichniss /etc/yum löschen damit die Installation von yum funktioniert.

Vor dem finalen Neustart sollte man kontrollieren ob die /boot/grub/grub2.cfg auch die richtigen Kernel enthält.
Sollte dies nicht der fall sein kann es helfen in der /etc/default/grub den Parameter GRUB_ENABLE_BLSCFG auf false zu setzen und die Datei mit grub2-mkconfig > /boot/grub2/grub.cfg neu zu erstellen.

Finaler Neustart

Nach einem Neustart ist das System ein vollständiges Centos 8 .
Ab hier kann man mit package-cleanup --orphans übrig gebliebenes entfernen und beginnen die einzelnen Dienste die man vorher verwendet hat zu testen.