RedHat Updates
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 |