Zum Inhalt springen

RedHat Updates

Aus superMassive

RHEL Major Upgrade Guide

RHEL 7.9 → RHEL 8 → RHEL 9

Offline-Umgebung mit lokalem Repo-Server

Version 1.0 | April 2026

1. Übersicht und Voraussetzungen

[Bearbeiten | Quelltext bearbeiten]

Dieses Dokument beschreibt den In-Place-Upgrade-Prozess von RHEL 7.9 auf RHEL 8 und anschließend auf RHEL 9 in einer Offline-Umgebung ohne direkten Internetzugang. Als Upgrade-Werkzeug wird Leapp verwendet.

1.1 Upgrade-Pfad

[Bearbeiten | Quelltext bearbeiten]
Schritt Von Nach Methode
1 RHEL 7.9 RHEL 8.10 Leapp (el7toel8)
2 RHEL 8.10 RHEL 9.x Leapp (el8toel9)
3 RHEL 9.x RHEL 9.7 dnf update -y

1.2 Allgemeine Voraussetzungen

[Bearbeiten | Quelltext bearbeiten]
  • System vollständig auf aktuellem Patch-Stand (yum/dnf update -y)
  • VM-Snapshot oder Backup vor jedem Upgrade-Schritt
  • Lokaler Repo-Server mit RHEL 8 und RHEL 9 Paketen erreichbar
  • Ausreichend freier Speicher auf /usr (mindestens +1 GB Puffer empfohlen)
  • Konsolen-Zugang (iDRAC/ILO) für den Fall dass SSH nach Reboot nicht verfügbar ist

🔴 Ein Rollback nach gestartetem Upgrade ist NICHT möglich! Snapshot/Backup ist zwingend erforderlich.

2. Upgrade RHEL 7.9 → RHEL 8 (ohne Satellite Server)

[Bearbeiten | Quelltext bearbeiten]

2.1 System vorbereiten

[Bearbeiten | Quelltext bearbeiten]

# Version bestätigen

cat /etc/redhat-release

# System vollständig patchen

yum update -y && reboot

2.2 Kernel-Module blacklisten

[Bearbeiten | Quelltext bearbeiten]

Folgende Kernel-Module sind mit RHEL 8 nicht kompatibel und müssen vor dem Upgrade geblacklisted werden:

cat > /etc/modprobe.d/leapp-blacklist.conf << 'EOF'

blacklist pata_acpi

blacklist BusLogic

EOF

# Initramfs neu bauen

dracut -f --kver $(uname -r)

# Falls Blacklist nicht greift - zusaetzlich per GRUB

# In /etc/default/grub die Zeile GRUB_CMDLINE_LINUX ergaenzen:

# rd.blacklist=pata_acpi rd.blacklist=BusLogic

# BIOS:

grub2-mkconfig -o /boot/grub2/grub.cfg

# UEFI:

grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg

reboot

# Nach Reboot prüfen - keine Ausgabe = korrekt

lsmod | grep pata_acpi

lsmod | grep BusLogic

pata_acpi und BusLogic sind in RHEL 8 nicht mehr vorhanden. BusLogic ist ein alter VMware SCSI-Adapter-Treiber der auf modernen Systemen nicht genutzt wird.

2.3 Leapp installieren

[Bearbeiten | Quelltext bearbeiten]

# RHEL 7 Extras Repo aktivieren

subscription-manager repos --enable rhel-7-server-extras-rpms

# Alternativ bei lokalem Repo - Extras muessen im lokalen Repo verfuegbar sein

yum install leapp leapp-upgrade -y

2.4 Leapp Repo-Konfiguration (Offline)

[Bearbeiten | Quelltext bearbeiten]

Da kein Internetzugang besteht, muessen die RHEL 8 Repos explizit fuer Leapp konfiguriert werden. Die Repo-IDs in dieser Datei muessen sich von den IDs in /etc/yum.repos.d/ unterscheiden um Duplikate zu vermeiden:

cat > /etc/leapp/files/leapp_upgrade_repositories.repo << 'EOF'

[leapp-rhel8-BaseOS]

name=Local RHEL 8 BaseOS (Leapp)

baseurl=http://REPO-SERVER-IP/RHEL8/BaseOS/

enabled=1

gpgcheck=0

module_hotfixes=1

[leapp-rhel8-AppStream]

name=Local RHEL 8 AppStream (Leapp)

baseurl=http://REPO-SERVER-IP/RHEL8/AppStream/

enabled=1

gpgcheck=0

module_hotfixes=1

[leapp-rhel8-HighAvailability]

name=Local RHEL 8 HighAvailability (Leapp)

baseurl=http://REPO-SERVER-IP/RHEL8/HighAvailability/

enabled=1

gpgcheck=0

module_hotfixes=1

EOF

🔴 Die baseurl muss per IP-Adresse angegeben werden, nicht per Hostname - der Leapp-Container loest DNS moeglicherweise nicht auf. URLs mit curl -I testen!

2.5 DNF Konfiguration anpassen

[Bearbeiten | Quelltext bearbeiten]

Auf RHEL 7 existiert /etc/dnf/dnf.conf oft nicht oder ist leer. Leapp benoetigt diese Datei mit korrektem [main] Header:

cat > /etc/dnf/dnf.conf << 'EOF'

[main]

gpgcheck=1

installonly_limit=3

clean_requirements_on_remove=True

best=False

skip_if_unavailable=True

exclude=*.i686

EOF

# Kopie fuer Leapp erstellen

cp /etc/dnf/dnf.conf /etc/leapp/files/dnf.conf

2.6 Repo-Server vorbereiten

[Bearbeiten | Quelltext bearbeiten]

Der Repo-Server darf nur jeweils eine (die neueste) Version eines Pakets enthalten. Mehrere Versionen fuhren zu DNF-Resolver-Konflikten:

# Auf dem Repo-Server: Alte Pakete entfernen

# WICHTIG: Erst nur anzeigen, dann loeschen!

cd /pfad/zum/repo/Packages

repomanage --old .

# Wenn Ausgabe korrekt: loeschen

repomanage --old . | xargs rm -f

# Metadaten neu erstellen (im Verzeichnis mit repodata/)

cd ..

createrepo --update .

repomanage arbeitet nicht rekursiv. Bei alphabetischen Unterordnern (Packages/a/, Packages/b/ ...) muss eine Schleife verwendet werden: for dir in Packages/*/; do repomanage --old "$dir" | xargs rm -f; done

# Auf dem RHEL7-System: Cache leeren und pruefen

yum clean all

yum --disablerepo='*' --enablerepo='local-rhel8-BaseOS' \

list --showduplicates perl-libs 2>/dev/null

2.7 Netzwerkroute pruefen

[Bearbeiten | Quelltext bearbeiten]

# Ist der Repo-Server erreichbar?

curl -I http://REPO-SERVER-IP/RHEL8/BaseOS/repodata/repomd.xml

# Falls nicht erreichbar - Route setzen

ip r a NETZ/MASKE via GATEWAY

# Route persistent machen

cat >> /etc/sysconfig/network-scripts/route-INTERFACE << 'EOF'

NETZ/MASKE via GATEWAY

EOF

2.8 Pakete auf Remove-Liste setzen

[Bearbeiten | Quelltext bearbeiten]

Folgende Pakete aus RHEL 7 koennen nicht direkt auf RHEL 8 aktualisiert werden und muessen vor dem Upgrade entfernt werden:

cat >> /etc/leapp/transaction/to_remove << 'EOF'

pcs

ruby-libs

perl-B-Debug

perl-ExtUtils-Command

EOF

# Inhalt pruefen

cat /etc/leapp/transaction/to_remove

💡 pcs (Pacemaker/Corosync) kann nach dem Upgrade neu installiert werden: dnf install pcs -y && systemctl enable --now pcsd

2.9 Pre-Upgrade Assessment

[Bearbeiten | Quelltext bearbeiten]

leapp preupgrade --no-rhsm --target 8.10

Den Report auswerten:

cat /var/log/leapp/leapp-report.txt

Symbol Bedeutung Aktion
inhibitor Blockiert den Upgrade Muss behoben werden
high/medium Warnung Sollte geprueft werden
info Hinweis Kein Handlungsbedarf

2.10 Upgrade durchfuehren

[Bearbeiten | Quelltext bearbeiten]

leapp upgrade --no-rhsm --target 8.10

Das System rebooted mehrfach automatisch. Dauer: 30-90 Minuten. Fortschritt per Konsole (iDRAC/ILO) beobachten.

🔴 Nicht eingreifen waehrend der Upgrade laeuft - auch bei laengerer Inaktivitaet!

2.11 Post-Upgrade Aufgaben (RHEL 8)

[Bearbeiten | Quelltext bearbeiten]

# Version bestaetigen

cat /etc/redhat-release

# Alte RHEL 7 Kernel entfernen

dnf remove $(rpm -q kernel | grep el7)

# Leapp Pakete entfernen und neu installieren (WICHTIG!)

dnf remove leapp* -y

dnf install leapp leapp-upgrade -y

# System vollstaendig patchen

dnf update -y && reboot

🔴 Nach dem Upgrade auf RHEL 8 muessen die Leapp-Pakete unbedingt neu installiert werden! Die RHEL 7 Version (python2-leapp) ist nicht fuer den el8toel9 Upgrade geeignet.

3. Upgrade RHEL 8 → RHEL 9 (ohne Satellite Server)

[Bearbeiten | Quelltext bearbeiten]

3.1 Leapp fuer RHEL 9 vorbereiten

[Bearbeiten | Quelltext bearbeiten]

# Korrekte Leapp Version pruefen (muss el8 sein!)

rpm -q leapp leapp-upgrade python3-leapp

# Python-Abhaengigkeiten pruefen

python3 -c "import pyudev; print(pyudev.__version__)"

# Falls pyudev fehlt - Symlink erstellen

ln -s /usr/lib/python3.6/site-packages/pyudev \

/usr/lib/python2.7/site-packages/pyudev

3.2 RHEL 9 Repo-Konfiguration

[Bearbeiten | Quelltext bearbeiten]

Die leapp_upgrade_repositories.repo muss fuer RHEL 9 aktualisiert werden:

cat > /etc/leapp/files/leapp_upgrade_repositories.repo << 'EOF'

[leapp-rhel9-BaseOS]

name=Local RHEL 9 BaseOS (Leapp)

baseurl=http://REPO-SERVER-IP/RHEL9/BaseOS/

enabled=1

gpgcheck=0

module_hotfixes=1

[leapp-rhel9-AppStream]

name=Local RHEL 9 AppStream (Leapp)

baseurl=http://REPO-SERVER-IP/RHEL9/AppStream/

enabled=1

gpgcheck=0

module_hotfixes=1

[leapp-rhel9-HighAvailability]

name=Local RHEL 9 HighAvailability (Leapp)

baseurl=http://REPO-SERVER-IP/RHEL9/HighAvailability/

enabled=1

gpgcheck=0

module_hotfixes=1

EOF

🔴 Das RHEL 9 HighAvailability Repo darf keine Rocky Linux Pakete enthalten! Pruefen mit: find /pfad/repo/ -name '*rocky*'

3.3 VDO Paket installieren

[Bearbeiten | Quelltext bearbeiten]

VDO (Virtual Data Optimizer) ist in RHEL 9 in den Kernel integriert. Das Paket muss vor dem Upgrade installiert sein:

dnf install vdo -y

systemctl status vdo

3.4 Leapp DNF Plugin pruefen

[Bearbeiten | Quelltext bearbeiten]

# Plugin muss vorhanden sein

find / -name 'rhel_upgrade.py' 2>/dev/null

# Falls Symlink fehlt - erstellen

mkdir -p /var/lib/leapp/el9userspace/lib/python3.9/site-packages/dnf-plugins/

ln -s /usr/share/leapp-repository/repositories/system_upgrade/common/files/rhel_upgrade.py \

/var/lib/leapp/el9userspace/lib/python3.9/site-packages/dnf-plugins/rhel_upgrade.py

3.5 Pre-Upgrade Assessment

[Bearbeiten | Quelltext bearbeiten]

leapp preupgrade --no-rhsm

# Report auswerten

cat /var/log/leapp/leapp-report.txt | grep -E 'inhibitor|Risk Factor: high'

3.6 Upgrade durchfuehren

[Bearbeiten | Quelltext bearbeiten]

leapp upgrade --no-rhsm

Das System rebooted mehrfach automatisch. Dauer: 30-90 Minuten.

3.7 Post-Upgrade auf RHEL 9.7

[Bearbeiten | Quelltext bearbeiten]

# Version bestaetigen

cat /etc/redhat-release

# Alte Kernel entfernen

dnf remove $(rpm -q kernel | grep el8)

# Auf RHEL 9.7 aktualisieren

dnf update -y

reboot

# Finale Version pruefen

cat /etc/redhat-release

uname -r

4. Haeufige Fehler und Loesungen

[Bearbeiten | Quelltext bearbeiten]

4.1 DNF execution failed - Paket-Konflikte

[Bearbeiten | Quelltext bearbeiten]

Ursache: Mehrere Versionen eines Pakets im Repo oder inkompatible Pakete.

# Alte Pakete im Repo finden

yum --disablerepo='*' --enablerepo='REPO-ID' list --showduplicates PAKET

# Auf Remove-Liste setzen

echo 'PAKETNAME' >> /etc/leapp/transaction/to_remove

# YUM Cache leeren

yum clean all

4.2 Repository mehrfach definiert

[Bearbeiten | Quelltext bearbeiten]

Ursache: Gleiche Repo-IDs in /etc/yum.repos.d/ und /etc/leapp/files/leapp_upgrade_repositories.repo.

# Losung: Andere Praefixe in leapp_upgrade_repositories.repo verwenden

# z.B. 'leapp-rhel8-BaseOS' statt 'local-rhel8-BaseOS'

4.3 Failed to synchronize cache for repo im Leapp-Container

[Bearbeiten | Quelltext bearbeiten]

Ursache: Der Leapp-Container kann den Repo-Server nicht erreichen.

# URL testen

curl -I http://REPO-SERVER-IP/RHEL8/BaseOS/repodata/repomd.xml

# Route pruefen und ggf. setzen

ip route

ip r a NETZ/MASKE via GATEWAY

# Hostname durch IP ersetzen in leapp_upgrade_repositories.repo

4.4 Not enough space on filesystem

[Bearbeiten | Quelltext bearbeiten]

Ursache: Zu wenig freier Speicher auf /usr oder anderen Partitionen.

# LV erweitern

lvextend -L +2G /dev/VGNAME/usr

xfs_growfs /usr # XFS

resize2fs /dev/VGNAME/usr # ext4

4.5 ImportError: No module named X (Python 2)

[Bearbeiten | Quelltext bearbeiten]

Ursache: Leapp-Version ist noch die RHEL 7 Version (python2-leapp) auf einem RHEL 8 System.

# Alte Leapp Version entfernen und neu installieren

dnf remove leapp* -y

dnf install leapp leapp-upgrade -y

rpm -q leapp # muss el8 sein!

4.6 Rocky Linux Pakete im Repo

[Bearbeiten | Quelltext bearbeiten]

Ursache: Der Repo-Server enthaelt Rocky Linux Pakete die nicht mit RHEL kompatibel sind.

# Rocky Pakete finden und entfernen

find /pfad/zum/repo/ -name '*rocky*'

find /pfad/zum/repo/ -name '*rocky*' -exec mv {} /tmp/rocky-backup/ \;

createrepo --update /pfad/zum/repo/

4.7 $osversion Variable in Repo-Dateien

[Bearbeiten | Quelltext bearbeiten]

Ursache: Repo-Dateien enthalten $osversion als Variable die nicht aufgeloest wird.

# Variable ersetzen

grep -rl '\$osversion' /etc/yum.repos.d/

sed -i 's/\$osversion/7Server/g' /etc/yum.repos.d/DATEI.repo

5. Schnellreferenz: Wichtige Dateien und Pfade

[Bearbeiten | Quelltext bearbeiten]
Datei / Pfad Zweck
/etc/leapp/files/leapp_upgrade_repositories.repo RHEL Ziel-Repos fuer Leapp (muss andere IDs als yum.repos.d haben)
/etc/leapp/files/dnf.conf DNF Konfiguration fuer Leapp-Container
/etc/leapp/transaction/to_remove Pakete die vor Upgrade entfernt werden
/etc/leapp/transaction/to_install Pakete die beim Upgrade installiert werden
/etc/modprobe.d/leapp-blacklist.conf Kernel-Module Blacklist
/var/log/leapp/leapp-report.txt Leapp Pre-Upgrade Report
/var/log/leapp/leapp-upgrade.log Leapp Upgrade Log
/var/lib/leapp/el9userspace/ Leapp RHEL 9 Container-Umgebung
/etc/dnf/dnf.conf DNF Hauptkonfiguration (muss [main] Header haben)

6. Leapp Befehle Schnellreferenz

[Bearbeiten | Quelltext bearbeiten]
Befehl Beschreibung
leapp preupgrade --no-rhsm --target 8.10 Pre-Upgrade Assessment RHEL 7->8
leapp upgrade --no-rhsm --target 8.10 Upgrade starten RHEL 7->8
leapp preupgrade --no-rhsm Pre-Upgrade Assessment RHEL 8->9
leapp upgrade --no-rhsm Upgrade starten RHEL 8->9
leapp answer --list Alle ausstehenden Fragen anzeigen
cat /var/log/leapp/leapp-report.txt Report anzeigen
tail -f /var/log/leapp/leapp-upgrade.log Upgrade-Log live verfolgen