15%

15% auf alle Hosting-Dienste sparen

Teste deine Fähigkeiten und erhalte Rabatt auf jeden Hosting-Plan

Benutze den Code:

Skills
Anfangen
08.10.2024

Wie man Ubuntu-Update- und Upgrade-Fehler behebt: Ein vollständiger Leitfaden zur Fehlerbehebung

Ubuntus APT-Paketverwaltungssystem ist eines der zuverlässigsten im Linux-Ökosystem, aber es ist nicht immun gegen Fehler. Wenn `apt-get upgrade`, `apt-get dist-upgrade` oder `do-release-upgrade` einen Fehler ausgibt, liegt die Ursache fast immer in einer von fünf Kategorien: ein veralteter oder beschädigter Paketindex, nicht aufgelöste Abhängigkeitsketten, eine veraltete Sperrdatei, die von einem abgestürzten Prozess hinterlassen wurde, unzureichender Speicherplatz auf der Root-Partition oder ein teilweise konfiguriertes Paket, das durch eine zuvor unterbrochene Transaktion in einem fehlerhaften Zustand hinterlassen wurde.

Dieser Leitfaden bietet einen systematischen, auf Ingenieursniveau ausgelegten Diagnose-Workflow zur Identifizierung und dauerhaften Behebung aller wichtigen Klassen von Ubuntu-Update- und Upgrade-Fehlern – einschließlich Randfälle, die generische Tutorials regelmäßig übersehen.

Verstehen, was bei einem Ubuntu-Upgrade tatsächlich schiefläuft

Bevor Sie Befehle blind ausführen, lohnt es sich, die internen Mechanismen zu verstehen. Wenn Sie `sudo apt-get upgrade` aufrufen, führt APT einen Abhängigkeitsauflösungsdurchlauf gegen den lokalen Paket-Cache unter `/var/lib/apt/lists/` durch. Wenn dieser Cache veraltet, fehlerhaft oder nicht synchron mit den konfigurierten Repositories in `/etc/apt/sources.list` und `/etc/apt/sources.list.d/` ist, schlägt der Resolver entweder vollständig fehl oder schlägt einen inkonsistenten Paketsatz vor.

Die dpkg-Schicht unterhalb von APT verwaltet ihre eigene Zustandsdatenbank unter `/var/lib/dpkg/`. Wenn eine frühere Installation oder ein Upgrade unterbrochen wurde – durch einen Stromausfall, einen SSH-Verbindungsabbruch oder ein manuelles `Ctrl+C` – kann dpkg ein oder mehrere Pakete in einem `half-installed`- oder `triggers-awaiting`-Zustand hinterlassen. APT kann erst fortfahren, wenn der Zustand von dpkg bereinigt ist.

Die fünf Grundursachen auf einen Blick

GrundursacheSymptomPrimäre Lösung
Veralteter Paketindex„404 Not Found” für Paket-URLs`apt-get update`
Fehlerhafte/nicht erfüllte Abhängigkeiten„Unmet dependencies” oder „held broken packages”`apt-get install -f`
Veraltete Sperrdatei„Could not get lock /var/lib/dpkg/lock”Sperrdateien manuell entfernen
Unzureichender Speicherplatz„No space left on device”Speicherplatz auf der `/`-Partition freigeben
Teilweise konfiguriertes Paket„dpkg was interrupted”`dpkg –configure -a`

Lösung 1: Den Paketindex aktualisieren und ein vollständiges Upgrade durchführen

Dies ist der korrekte erste Schritt in jedem Diagnose-Workflow. Führen Sie immer `update` vor `upgrade` aus – sie sind nicht austauschbar.

“`bash

sudo apt-get update

sudo apt-get upgrade

“`

Was jeder Befehl tatsächlich tut:

  • `apt-get update` – Lädt aktuelle Paketmetadaten von jedem in Ihrer `sources.list` definierten Repository herunter. Es installiert nichts. Es überschreibt die Indexdateien unter `/var/lib/apt/lists/`.
  • `apt-get upgrade` – Löst auf und installiert neuere Versionen aller aktuell installierten Pakete. Es wird niemals ein installiertes Paket entfernen oder ein neues installieren, um eine Abhängigkeit zu erfüllen – das ist eine bewusste Sicherheitsbeschränkung.

Wenn `apt-get upgrade` durch Pakete zurückgehalten wird, die neue Abhängigkeiten oder die Entfernung von konfliktierenden erfordern, eskalieren Sie zu:

“`bash

sudo apt-get dist-upgrade

“`

`dist-upgrade` verwendet einen aggressiveren Resolver, der neue Pakete installieren und veraltete entfernen darf, um den Abhängigkeitsgraphen zu erfüllen. Es ist das richtige Werkzeug für Point-Release-Upgrades innerhalb derselben Ubuntu-Version (z. B. 22.04.1 auf 22.04.4).

Wichtiger Hinweis: Überprüfen Sie auf Produktionsservern immer den `dist-upgrade`-Plan, bevor Sie bestätigen. Führen Sie zuerst `apt-get dist-upgrade –dry-run` aus, um genau zu sehen, was installiert, aktualisiert oder entfernt wird, ohne das System zu berühren.

Lösung 2: Fehlerhafte und nicht erfüllte Abhängigkeiten beheben

Ein fehlerhafter Abhängigkeitszustand ist einer der häufigsten Gründe, warum Upgrades mittendrin fehlschlagen. Die kanonische Lösung ist:

“`bash

sudo apt-get install -f

“`

Das Flag `-f` (`–fix-broken`) weist APT an, zu versuchen, einen fehlerhaften Abhängigkeitsgraphen zu korrigieren, indem fehlende Abhängigkeiten heruntergeladen und installiert oder Pakete entfernt werden, die nicht erfüllt werden können. Führen Sie danach das Upgrade erneut aus.

Wenn `-f` nicht ausreicht: Wenn Sie manuell `.deb`-Pakete außerhalb der offiziellen Repositories installiert haben (eine gängige Praxis bei der Installation von Drittanbieter-Software), können diese Pakete Abhängigkeiten auf bestimmte Versionen pinnen, die mit den Repository-Versionen in Konflikt stehen. Identifizieren Sie sie mit:

“`bash

apt-cache policy <package_name>

dpkg -l | grep "^ii" | grep -v "^ii lib"

“`

Überprüfen Sie die „Installed”- vs. „Candidate”-Versionen. Ein gepinntes Paket zeigt einen niedrigeren Kandidaten als das Repository anbietet oder gar keinen Kandidaten. Möglicherweise müssen Sie das konfliktverursachende Paket entfernen, das Upgrade abschließen und dann eine kompatible Version neu installieren.

Lösung 3: Teilweise installierte Pakete mit dpkg neu konfigurieren

Wenn ein früheres Upgrade unterbrochen wurde, enthält die Zustandsdatenbank von dpkg Pakete, die als `half-configured` oder `half-installed` markiert sind. APT weigert sich fortzufahren, bis diese behoben sind.

“`bash

sudo dpkg –configure -a

“`

Das Flag `-a` bedeutet „alle” – dpkg versucht, die Post-Installations-Konfigurationsskripte (`postinst`) für jedes Paket auszuführen, das in einem unvollständigen Zustand hinterlassen wurde. Dies löst häufig Fehler wie folgende:

“`

dpkg was interrupted, you must manually run 'sudo dpkg –configure -a' to correct the problem.

“`

Folgen Sie diesem sofort mit einer neuen Indexaktualisierung und einem Upgrade-Versuch:

“`bash

sudo apt-get update && sudo apt-get upgrade

“`

Sonderfall – beschädigte dpkg-Datenbank: In seltenen Szenarien wird die dpkg-Datenbank selbst beschädigt (am häufigsten nach einem Festplattenausfall oder Dateisystemfehler). Symptome umfassen `dpkg: error: parsing file '/var/lib/dpkg/status'`. Das Wiederherstellungsverfahren beinhaltet die Wiederherstellung aus dem Backup, das dpkg automatisch unter `/var/backups/dpkg.status*` pflegt. Kopieren Sie das aktuellste Backup über die beschädigte Statusdatei:

“`bash

sudo cp /var/backups/dpkg.status.0 /var/lib/dpkg/status

sudo dpkg –configure -a

“`

Lösung 4: Veraltete Sperrdateien entfernen

APT und dpkg verwenden Sperrdateien, um zu verhindern, dass gleichzeitige Paketoperationen die Datenbank beschädigen. Wenn ein Prozess, der eine Sperre hält, abstürzt oder beendet wird, bleibt die Sperrdatei auf der Festplatte. Jeder nachfolgende APT-Aufruf schlägt fehl mit:

“`

E: Could not get lock /var/lib/dpkg/lock-frontend – open (11: Resource temporarily unavailable)

“`

Bevor Sie Sperrdateien entfernen, überprüfen Sie immer, ob kein legitimer Prozess sie hält:

“`bash

sudo lsof /var/lib/dpkg/lock-frontend

sudo lsof /var/lib/dpkg/lock

sudo lsof /var/cache/apt/archives/lock

“`

Wenn `lsof` keine Ausgabe zurückgibt, ist die Sperre veraltet und kann sicher entfernt werden:

“`bash

sudo rm /var/lib/dpkg/lock-frontend

sudo rm /var/lib/dpkg/lock

sudo rm /var/cache/apt/archives/lock

sudo dpkg –configure -a

sudo apt-get update

“`

Warnung: Entfernen Sie niemals Sperrdateien, während ein anderer `apt`-, `apt-get`-, `dpkg`- oder `unattended-upgrades`-Prozess aktiv läuft. Dies auf einem laufenden Prozess zu tun, beschädigt die Paketdatenbank. Wenn `lsof` eine aktive PID anzeigt, warten Sie, bis dieser Prozess abgeschlossen ist, oder untersuchen Sie, warum er hängt, bevor Sie Maßnahmen ergreifen.

Lösung 5: Speicherplatz auf der Root-Partition freigeben

Ubuntu-Upgrades – insbesondere größere Versionsupgrades – erfordern erheblichen freien Speicherplatz auf der Root-Partition. Ein häufiger Fehlerpunkt ist, dass `/boot` sich mit alten Kernel-Images füllt, was die Installation neuer Kernel vollständig blockiert.

Aktuelle Festplattennutzung prüfen:

“`bash

df -h

“`

Speziell prüfen, was Speicherplatz in `/boot` verbraucht:

“`bash

du -sh /boot/*

ls /boot/vmlinuz-*

“`

Systematisches Verfahren zur Speicherplatzwiederherstellung:

“`bash

Remove packages installed as dependencies that are no longer needed

sudo apt-get autoremove –purge

Remove cached .deb files from the local package archive

sudo apt-get clean

Remove old kernel images (keeps the two most recent)

sudo apt-get autoremove –purge

“`

Wenn `/boot` nach `autoremove` noch voll ist, identifizieren und entfernen Sie alte Kernel manuell. Finden Sie zuerst den aktuell laufenden Kernel, damit Sie ihn nicht entfernen:

“`bash

uname -r

“`

Listen Sie dann installierte Kernel auf und entfernen Sie alte explizit:

“`bash

dpkg -l 'linux-image-*' | grep '^ii'

sudo apt-get purge linux-image-X.X.X-XX-generic

“`

Ersetzen Sie den Versionsstring durch eine ältere Kernel-Version – niemals die, die von `uname -r` zurückgegeben wird.

Wenn Sie eine VPS Hosting-Umgebung mit einer festen Root-Partitionsgröße betreiben, ist dieses Szenario besonders häufig. Die Bereitstellung Ihres VPS mit ausreichender Festplattenkapazität von Anfang an – oder die Verwendung einer separaten `/boot`-Partition – verhindert diese Art von Fehler vollständig.

Lösung 6: Redundante Pakete und den APT-Cache bereinigen

Angesammelter Paket-Cache und verwaiste Pakete beeinträchtigen sowohl die Systemleistung als auch die Upgrade-Zuverlässigkeit.

“`bash

sudo apt-get autoremove

sudo apt-get autoclean

sudo apt-get clean

“`

Der Unterschied zwischen `autoclean` und `clean`:

  • `autoclean` entfernt gecachte `.deb`-Dateien nur für Pakete, die nicht mehr aus den konfigurierten Repositories heruntergeladen werden können (d. h. sie sind veraltet). Es bewahrt gecachte Dateien für aktuell verfügbare Pakete.
  • `clean` entfernt alle gecachten `.deb`-Dateien bedingungslos, unabhängig davon, ob sie noch verfügbar sind. Verwenden Sie dies, wenn Sie die maximale Menge an Speicherplatz zurückgewinnen müssen.

Auf Servern, auf denen Speicherplatz eine verwaltete Ressource ist – wie Dedicated Servers, auf denen mehrere Dienste laufen – ist die Automatisierung einer regelmäßigen Cache-Bereinigung über einen Cron-Job oder systemd-Timer eine solide Betriebspraxis.

Lösung 7: Spezifische Paketkonflikte manuell lösen

Wenn `apt-get upgrade` spezifische Paketkonflikte statt eines allgemeinen Abhängigkeitsfehlers meldet, ist ein gezieltes Eingreifen erforderlich.

“`bash

sudo apt-get upgrade –fix-missing

“`

Dieses Flag weist APT an, Pakete zu überspringen, die nicht abgerufen werden können (z. B. aufgrund eines vorübergehend nicht verfügbaren Spiegels), und alles andere zu aktualisieren. Es ist nützlich, wenn ein einzelnes nicht verfügbares Paket das gesamte Upgrade blockiert.

Um ein bestimmtes konfliktverursachendes Paket zu entfernen und neu zu installieren:

“`bash

sudo apt-get remove –purge <package_name>

sudo apt-get install <package_name>

“`

Die Verwendung von `–purge` mit `remove` löscht sowohl die Paketbinärdateien als auch seine Konfigurationsdateien, was wichtig ist, wenn eine beschädigte Konfigurationsdatei die eigentliche Quelle des Konflikts ist.

Die genaue Konfliktquelle identifizieren: Wenn APT einen Konflikt meldet, nennt die Fehlermeldung typischerweise die beteiligten Pakete. Für eine tiefere Analyse:

“`bash

apt-cache show <package_name>

apt-cache depends <package_name>

apt-cache rdepends <package_name>

“`

`rdepends` (umgekehrte Abhängigkeiten) zeigt Ihnen, welche anderen installierten Pakete von dem fraglichen Paket abhängen – wichtige Informationen, bevor Sie etwas entfernen.

Lösung 8: Ein Major-Version-Upgrade mit do-release-upgrade durchführen

Das Upgrade zwischen Ubuntu LTS-Releases (z. B. 20.04 Focal auf 22.04 Jammy oder 22.04 auf 24.04 Noble) erfordert ein dediziertes Werkzeug. Die alleinige Verwendung von `apt-get dist-upgrade` für ein Major-Version-Upgrade wird nicht unterstützt und führt zu einem inkonsistenten System.

Das korrekte Verfahren:

“`bash

sudo apt-get update

sudo apt-get dist-upgrade

sudo apt-get autoremove

sudo do-release-upgrade

“`

Warum das `dist-upgrade` vor dem Upgrade wichtig ist: `do-release-upgrade` prüft, ob Ihr aktuelles System vollständig auf dem neuesten Stand ist, bevor der Versionsübergang eingeleitet wird. Wenn Sie zurückgehaltene Pakete oder ungelöste Abhängigkeiten haben, wird es sich weigern fortzufahren. Das vorherige Ausführen von `dist-upgrade` stellt eine saubere Ausgangsbasis sicher.

Serverspezifische Überlegungen für `do-release-upgrade`:

  • Führen Sie auf headless Servern, auf die über SSH zugegriffen wird, `do-release-upgrade` immer innerhalb einer `tmux`- oder `screen`-Sitzung aus. Wenn Ihre SSH-Verbindung während des Upgrades abbricht, wird der Prozess im Hintergrund fortgesetzt, anstatt beendet zu werden, was das System in einem fehlerhaften Zwischenzustand hinterlassen würde.
  • Verwenden Sie das Flag `-d` nur beim Upgrade auf ein Entwicklungs-Release (noch nicht LTS-stabil). Für Produktionssysteme verwenden Sie niemals `-d`.
  • Das Werkzeug fordert Sie auf, Änderungen an Konfigurationsdateien zu überprüfen, die von ihren Standardwerten abweichen. Lesen Sie diese Aufforderungen sorgfältig – das blinde Akzeptieren der Maintainer-Version kann benutzerdefinierte Serverkonfigurationen überschreiben.

“`bash

Start a persistent session before upgrading

tmux new -s upgrade

sudo do-release-upgrade

“`

Wenn Sie mehrere Ubuntu-Server verwalten – zum Beispiel eine Flotte von VPS mit cPanel-Instanzen – testen Sie den Upgrade-Pfad zuerst auf einem Nicht-Produktionsknoten. cPanel und ähnliche Control Panels haben oft spezifische Ubuntu-Versionsunterstützungsfenster, die hinter dem offiziellen Release-Zyklus zurückbleiben.

Lösung 9: Probleme mit Drittanbieter-Repositories beheben

Eine häufig übersehene Ursache für Update-Fehler ist ein defektes oder inkompatibles Drittanbieter-PPA (Personal Package Archive) oder Repository. Wenn ein PPA für ein Ubuntu-Release hinzugefügt wird und Sie auf das nächste upgraden, hat das PPA möglicherweise keine Pakete für den neuen Release-Codenamen, was dazu führt, dass `apt-get update` Fehler wie folgende ausgibt:

“`

E: The repository 'http://ppa.launchpad.net/…' does not have a Release file.

“`

Alle konfigurierten Repositories auflisten:

“`bash

ls /etc/apt/sources.list.d/

cat /etc/apt/sources.list

“`

Deaktivieren Sie problematische PPAs vorübergehend, indem Sie ihre `.list`-Dateien in `/etc/apt/sources.list.d/` auskommentieren oder entfernen, schließen Sie das System-Upgrade ab und aktivieren oder ersetzen Sie sie dann mit Versionen, die mit dem neuen Release kompatibel sind.

“`bash

sudo add-apt-repository –remove ppa:<ppa_name>/<ppa_name>

“`

Lösung 10: Neustart zur Beseitigung von Prozess-Interferenzen

Bestimmte Update-Fehler werden durch den In-Memory-Zustand verursacht und nicht durch Probleme auf Festplattenebene – zum Beispiel ein laufender Dienst, der ein Datei-Handle auf eine Bibliothek hält, die APT ersetzen muss, oder ein Kernel-Modul, das mit einer neu installierten Version in Konflikt steht.

“`bash

sudo reboot

“`

Führen Sie nach dem Neustart die vollständige Update-Sequenz aus einem sauberen Zustand heraus aus:

“`bash

sudo apt-get update && sudo apt-get upgrade

“`

Auf Remote-Servern, bei denen ein Neustart ein operationelles Risiko darstellt, verwenden Sie `needrestart`, um zu identifizieren, welche Dienste ohne einen vollständigen Systemneustart neu gestartet werden müssen:

“`bash

sudo apt-get install needrestart

sudo needrestart

“`

`needrestart` untersucht laufende Prozesse und identifiziert solche, die veraltete gemeinsame Bibliotheken verwenden, sodass Sie nur die betroffenen Dienste neu starten können, anstatt das gesamte System.

Ubuntu-Update-Fehler verhindern: Operative Best Practices

Reaktive Fehlerbehebung ist notwendig, aber proaktive Systemhygiene eliminiert die meisten dieser Fehler, bevor sie auftreten.

Wartungs-Checkliste für Ubuntu-Server:

  • Führen Sie `sudo apt-get update && sudo apt-get upgrade` regelmäßig aus – mindestens wöchentlich für Produktionssysteme.
  • Überwachen Sie den Speicherplatz auf `/`, `/boot` und `/var` mit Alarmschwellen (85% Auslastung ist ein vernünftiger Auslöser).
  • Überprüfen Sie Drittanbieter-PPAs vor jedem größeren Upgrade-Zyklus.
  • Führen Sie größere Upgrades auf Remote-Systemen immer innerhalb von `tmux` oder `screen` aus.
  • Erstellen Sie vor jeder `do-release-upgrade`-Operation einen Snapshot oder ein Backup. Auf einem Dedicated Server oder VPS bedeutet dies, ein vollständiges Festplatten-Image oder Dateisystem-Snapshot zu erstellen, bevor das Upgrade eingeleitet wird.
  • Testen Sie Upgrade-Verfahren in einer Staging-Umgebung, bevor Sie sie auf die Produktion anwenden.
  • Verwenden Sie `unattended-upgrades` nur für Sicherheits-Patches, nicht für vollständige Paket-Upgrades, um unerwartete Abhängigkeitsänderungen auf Produktionssystemen zu vermeiden.

Für Teams, die Web-Infrastruktur verwalten – einschließlich Shared Web Hosting-Umgebungen oder Multi-Tenant-Anwendungsserver – ist die Erstellung eines dokumentierten Upgrade-Runbooks, das Vorprüfungsschritte, Rollback-Verfahren und Post-Upgrade-Validierungstests umfasst, eine wesentliche operative Praxis.

Entscheidungsmatrix: Welche Lösung zuerst anwenden

FehlermeldungErste MaßnahmeZweite Maßnahme
„Could not get lock”`lsof` prüfen, veraltete Sperrdateien entfernen`dpkg –configure -a`
„Unmet dependencies”`apt-get install -f``dpkg –configure -a`
„No space left on device”`apt-get autoremove –purge && apt-get clean`Alte Kernel manuell entfernen
„dpkg was interrupted”`dpkg –configure -a``apt-get update && apt-get upgrade`
„404 Not Found” für Pakete`apt-get update` (Spiegelverfügbarkeit prüfen)Defekte PPAs deaktivieren
„held broken packages”`apt-get dist-upgrade –dry-run`Konfliktverursachendes Paket entfernen/neu installieren
SSH-Abbruch während des UpgradesNeu verbinden und an `tmux`/`screen`-Sitzung anhängen`dpkg –configure -a` wenn Sitzung verloren ging

FAQ

Warum lässt `apt-get upgrade` einige Pakete als „held back” zurück?

Pakete werden zurückgehalten, wenn ihre Aktualisierung die Installation neuer Pakete oder das Entfernen vorhandener erfordern würde – Aktionen, die `apt-get upgrade` by Design nicht durchführen darf. Verwenden Sie `apt-get dist-upgrade`, um zurückgehaltene Pakete aufzulösen, aber überprüfen Sie die vorgeschlagenen Änderungen immer zuerst mit `–dry-run` auf Produktionssystemen.

Ist es sicher, Sperrdateien aus `/var/lib/dpkg/` zu entfernen?

Nur wenn kein APT- oder dpkg-Prozess aktiv läuft. Überprüfen Sie dies mit `sudo lsof /var/lib/dpkg/lock-frontend` vor dem Entfernen. Wenn ein laufender Prozess die Sperre hält und Sie die Datei entfernen, beschädigen Sie die Paketdatenbank, was eine manuelle Wiederherstellung aus dem dpkg-Status-Backup erfordert.

Was ist der Unterschied zwischen `apt-get upgrade` und `apt-get dist-upgrade`?

`apt-get upgrade` entfernt niemals installierte Pakete oder installiert neue, um Abhängigkeiten aufzulösen – es aktualisiert nur Pakete, die ohne strukturelle Änderungen erfüllt werden können. `apt-get dist-upgrade` verwendet einen intelligenteren Resolver, der neue Pakete installieren und veraltete entfernen kann. Für Point-Release-Updates und Major-Version-Upgrades ist `dist-upgrade` das richtige Werkzeug.

Warum schlägt `do-release-upgrade` unmittelbar nach der Ausführung fehl?

Der häufigste Grund ist, dass das aktuelle System ungelöste Abhängigkeiten oder zurückgehaltene Pakete hat. Führen Sie `sudo apt-get dist-upgrade` und `sudo apt-get autoremove` aus, um das System in einen vollständig konsistenten Zustand zu bringen, bevor Sie `do-release-upgrade` aufrufen. Überprüfen Sie außerdem, ob alle Drittanbieter-PPAs entweder deaktiviert oder mit dem Ziel-Release kompatibel sind.

Wie viel freier Speicherplatz ist für ein größeres Ubuntu-Versionsupgrade erforderlich?

Als praktisches Minimum benötigen Sie mindestens 2–3 GB frei auf der Root-Partition und mindestens 200–300 MB frei auf `/boot`. Der tatsächliche Bedarf variiert je nach Anzahl der installierten Pakete. Führen Sie `sudo do-release-upgrade` mit dem System bei oder über diesen Schwellenwerten aus; wenn der Speicherplatz knapp ist, führen Sie `sudo apt-get autoremove –purge && sudo apt-get clean` unmittelbar vor dem Einleiten des Upgrades aus.

15%

15% auf alle Hosting-Dienste sparen

Teste deine Fähigkeiten und erhalte Rabatt auf jeden Hosting-Plan

Benutze den Code:

Skills
Anfangen