Fehlerbehebung bei Ubuntu APT: Korrekte Pakete, Haltepunkte und GPG-Fehler beheben

Ubuntu APT reparieren – ohne Ratearbeit.

Inhaltsverzeichnis

APT-Fehler sind auf langläufigen Ubuntu-Systemen häufig und treten meist nach einem Release-Upgrade, einer Änderung eines Drittanbieter-Repositorys, der Entfernung eines PPA, einer manuell installierten .deb-Datei oder einer unterbrochenen Paketinstallation auf.

Die Fehlermeldung kann dramatisch wirken, aber die meisten APT-Probleme sind nicht mysteriös – es handelt sich um Zustandsprobleme, bei denen die Sicht von APT auf Repositorys, Versionen und installierte Pakete nicht mehr übereinstimmt.

laptop ubuntu apt packages

APT versucht, vier Fragen zu beantworten:

  1. Welche Repositorys sind aktiviert?
  2. Welche Paketversionen sind verfügbar?
  3. Welche Pakete sind bereits installiert?
  4. Welche Paketänderungen sind erlaubt?

Wenn diese Antworten im Konflikt stehen, erhalten Sie zurückgehaltene Pakete, gebrochene Abhängigkeiten, fehlende öffentliche Schlüssel, PPA-Fehler oder Pakete, die während des Upgrades zurückgehalten wurden. Dieser Leitfaden bietet Ihnen eine praktische Fehlerbehebungssequenz für Ubuntu APT, geschrieben für Entwickler, DevOps-Ingenieure und Linux-Nutzer, die das System beheben möchten, ohne blind zufällige Befehle aus Forenbeiträgen zu kopieren. Kombinieren Sie dies mit unserem Ubuntu APT und dpkg Cheat Sheet für alltägliche Installations- und Upgrade-Befehle, und stöbern Sie in der größeren Entwickler-Tools-Sammlung für verwandte Linux-Workflows.

Die Kurzversion

Wenn Ihr System nur leicht beschädigt ist, beginnen Sie hier:

sudo apt update
sudo dpkg --configure -a
sudo apt --fix-broken install
sudo apt update
sudo apt upgrade

Wenn Pakete zurückgehalten werden:

apt list --upgradable
apt-mark showhold
sudo apt full-upgrade

Wenn ein PPA oder ein Drittanbieter-Repository fehlschlägt:

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

Lesen Sie die fehlerhafte Repository-Zeile und deaktivieren oder beheben Sie dieses Repository. Wenn Sie NO_PUBKEY sehen, importieren Sie keine zufälligen Schlüssel von einem Keyserver blind – finden Sie die offiziellen Repository-Anweisungen, installieren Sie den Repository-Schlüssel in /etc/apt/keyrings und binden Sie ihn mit signed-by an dieses Repository.

Bevor Sie etwas beheben: Lesen Sie zuerst den APT-Fehler

Führen Sie dies zuerst aus:

sudo apt update

Überspringen Sie es nicht. apt update aktualisiert die Paketmetadaten. Es aktualisiert keine Pakete. Es teilt Ihnen mit, ob Ubuntu alle konfigurierten Repositorys lesen und deren Metadaten verifizieren kann.

Überprüfen Sie dann Ihre Ubuntu-Version und den Codenamen – ein veralteter Release-Name in /etc/apt/sources.list.d/ ist eine häufige Ursache für 404- und Release-Datei-Fehler. Wenn Sie nicht sicher sind, welche Version Sie verwenden, sehen Sie unter wie man die Ubuntu-Version überprüft:

lsb_release -a

Oder:

cat /etc/os-release

Überprüfen Sie auch, was aktualisierbar ist:

apt list --upgradable

Und prüfen Sie, ob ein Paket zurückgehalten wird:

apt-mark showhold

Dies gibt Ihnen die erste Aufspaltung im Entscheidungsbaum – die Identifizierung der Fehlerklasse zuerst macht die Fehlerbehebung einfacher, da jede Klasse eine andere erste Behebung erfordert:

  • Repository-Problem: apt update schlägt fehl.
  • Abhängigkeitsproblem: apt update funktioniert, aber Installation oder Upgrade schlägt fehl.
  • Problem mit zurückgehaltenen Paketen: APT weigert sich, bestimmte Pakete zu ändern.
  • Problem mit gemischten Quellen: Ein PPA, ein manuelles .deb oder ein altes Repository bietet inkompatible Versionen an.
  • Problem mit unterbrochener Installation: dpkg hat Pakete extrahiert, die nie konfiguriert wurden.

Häufige Ubuntu APT-Ausfalltypen

Zurückgehaltene Pakete

Ein zurückgehaltenes Paket ist nicht immer ein Fehler; es bedeutet, dass APT entschieden hat, ein Paket mit dem aktuellen Befehl nicht zu aktualisieren. Dies geschieht oft, wenn das Upgrade die Installation neuer Abhängigkeiten, das Entfernen alter Pakete oder eine Änderung eines Pakets erfordert, die ein einfaches apt upgrade nicht durchführen wird.

Überprüfen Sie die Details:

apt list --upgradable
apt-cache policy package-name

Versuchen Sie ein vollständiges Upgrade nur nach dem Lesen dessen, was APT tun möchte:

sudo apt full-upgrade

full-upgrade darf neue Pakete installieren und Pakete entfernen, wenn dies zur Vollendung des Upgrades erforderlich ist. Das ist nützlich, aber es ist auch der Grund, warum Sie die vorgeschlagenen Änderungen vor der Akzeptanz lesen sollten. Auf einer Workstation ist full-upgrade nach Überprüfung normalerweise in Ordnung; auf einem Server sollten Sie die Entfernungen zweimal lesen.

Zurückgehaltene Pakete (Holds)

Ein zurückgehaltenes Paket (Hold) unterscheidet sich von einem Paket, das nur zurückgehalten (kept back) wird. Ein Hold ist eine explizite Anweisung, die APT davon abhält, dieses Paket automatisch zu installieren, zu aktualisieren oder zu entfernen. Holds sind nützlich, um eine Kernel-, Datenbank-, Treiber- oder Runtime-Version zu fixieren, und sie werden auch leicht vergessen.

Liste der zurückgehaltenen Pakete:

apt-mark showhold

Ein Paket zurückhalten:

sudo apt-mark hold package-name

Ein Hold entfernen:

sudo apt-mark unhold package-name

Wenn Sie Abhängigkeitsfehler in Bezug auf ein zurückgehaltenes Paket sehen, entscheiden Sie, ob der Hold noch beabsichtigt ist. Entfernen Sie Holds nicht automatisch. Sie können eine Produktionsdienstleistung, einen Treiber oder eine kompatibilitätsempfindliche Toolchain schützen.

Gebrochene Abhängigkeiten

Gebrochene Abhängigkeiten bedeuten, dass APT keinen gültigen Paketsatz finden kann, was normalerweise auf einen Versionskonflikt hinweist, nicht auf eine beschädigte Downloaddatei.

Häufige Ursachen sind:

  • Ein Paket erfordert eine Version, die nicht verfügbar ist.
  • Ein PPA bietet eine neuere Bibliothek an, als Ubuntu erwartet.
  • Ein manuell installiertes .deb hängt von Paketen einer anderen Version ab.
  • Eine Paketinstallation wurde unterbrochen.
  • Ein Repository für die falsche Ubuntu-Version ist aktiviert.
  • Paket-Pinning oder Holds verhindern die erforderliche Versionsänderung.

Beginnen Sie mit:

sudo dpkg --configure -a
sudo apt --fix-broken install

Untersuchen Sie dann das Paket:

apt-cache policy package-name
apt-cache depends package-name
apt-cache rdepends package-name

Verwenden Sie dann diese Befehle, um den Paketversionskonflikt zu finden, der APT blockiert, anstatt jede Reparaturbefehlssequenz nacheinander auszuführen.

GPG-Schlüssel- und NO_PUBKEY-Fehler

Ein NO_PUBKEY-Fehler bedeutet, dass APT Repository-Metadaten empfangen hat, aber die Signatur nicht verifizieren kann, weil der erforderliche öffentliche Schlüssel fehlt – ein Vertrauensproblem, nicht nur ein Downloadproblem.

Ein typischer Fehler sieht so aus:

The following signatures could not be verified because the public key is not available: NO_PUBKEY ABCD1234EF567890

Alte Anweisungen verwendeten oft apt-key add, aber vermeiden Sie dies für neue Repository-Einrichtungen. Moderne Ubuntu-Systeme sollten einen repository-spezifischen Keyring und signed-by verwenden.

Ein besseres Muster sieht so aus:

sudo install -d -m 0755 /etc/apt/keyrings

curl -fsSL https://example.com/repo-key.gpg \
  | sudo gpg --dearmor -o /etc/apt/keyrings/example.gpg

echo "deb [signed-by=/etc/apt/keyrings/example.gpg] https://example.com/apt stable main" \
  | sudo tee /etc/apt/sources.list.d/example.list

sudo apt update

Ersetzen Sie die URL und die Repository-Zeile durch die offiziellen Anweisungen des Anbieters.

Der wichtige Teil ist dieser:

signed-by=/etc/apt/keyrings/example.gpg

Diese signed-by-Zeile bindet den Schlüssel an ein Repository, was sauberer und sicherer ist, als jeden Drittanbieterschlüssel in einen globalen Truststore zu legen.

Schlechte PPA- oder Release-Datei-Fehler

PPA-Fehler sehen oft so aus:

The repository does not have a Release file.

Oder:

404 Not Found

Häufige Ursachen:

  • Das PPA unterstützt Ihre Ubuntu-Version nicht.
  • Sie haben Ubuntu aktualisiert, aber das PPA verweist immer noch auf den alten Codenamen.
  • Das PPA wurde gelöscht.
  • Der Betreuer hat aufgehört, Pakete zu veröffentlichen.
  • Sie haben ein PPA hinzugefügt, das für eine andere Ubuntu-Version bestimmt ist.

Überprüfen Sie Ihren Codenamen:

. /etc/os-release
echo "$VERSION_CODENAME"

Liste der Drittanbieter-Quelldateien:

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

Untersuchen Sie sie:

grep -R "^deb" /etc/apt/sources.list /etc/apt/sources.list.d/

Deaktivieren Sie eine verdächtige Quelle durch Umbenennung:

sudo mv /etc/apt/sources.list.d/example.list /etc/apt/sources.list.d/example.list.disabled
sudo apt update

Wenn APT nach dem Deaktivieren der Datei funktioniert, haben Sie die problematische Quelle gefunden und können sie dauerhaft beheben oder entfernen.

Ein sicheres APT-Fehlerbehebungs-Workflow

Schritt 1: Metadaten aktualisieren

sudo apt update

Wenn dies fehlschlägt, beheben Sie die Repositorys, bevor Sie versuchen, Pakete zu reparieren. APT kann Abhängigkeiten nicht korrekt lösen, wenn sein Paketindex veraltet oder unvollständig ist.

Suchen Sie nach Zeilen, die enthalten:

NO_PUBKEY
Release file
404 Not Found
does not have a Release file
The repository is not signed

Dies sind Repository- oder Vertrauensprobleme, und sie sollten behoben werden, bevor Sie versuchen, Pakete zu reparieren.

Schritt 2: Unterbrochene Paketkonfiguration abschließen

Wenn eine Paketinstallation unterbrochen wurde, kann dpkg Dateien extrahiert haben, aber das Paket nicht konfiguriert haben.

Führen Sie aus:

sudo dpkg --configure -a

Wenn dies erfolgreich ist, fahren Sie fort:

sudo apt --fix-broken install

Wenn es fehlschlägt, lesen Sie den Paketnamen und den Fehler sorgfältig. Das Paket, das am Ende des Fehlers genannt wird, ist oft wichtiger als das Paket, das Sie ursprünglich zu installieren versucht haben.

Schritt 3: APT bitten, Abhängigkeiten zu reparieren

sudo apt --fix-broken install

Dieser Befehl bittet APT, Abhängigkeitsprobleme zu korrigieren, indem fehlende Abhängigkeiten installiert oder Pakete entfernt werden, die nicht erfüllt werden können. Lesen Sie die vorgeschlagene Aktion sorgfältig, insbesondere jede Entfernung.

Seien Sie vorsichtig, wenn APT entfernen möchte:

  • ubuntu-desktop
  • ubuntu-server
  • linux-generic
  • Display-Manager-Pakete
  • Netzwerk-Pakete
  • Datenbank-Pakete
  • Container-Runtime-Pakete
  • Desktop-Umgebung-Pakete

Manchmal ist das Entfernen eines Metapakets harmlos. Manchmal ist es ein Warnsignal, dass Ihre Paketquellen schlecht gemischt sind. Akzeptieren Sie keine großen Entfernungen, ohne sie zu verstehen.

Schritt 4: Zurückgehaltene Pakete überprüfen

apt-mark showhold

Wenn ein zurückgehaltenes Paket das Upgrade blockiert, untersuchen Sie es:

apt-cache policy package-name

Wenn der Hold nicht länger benötigt wird:

sudo apt-mark unhold package-name
sudo apt update
sudo apt upgrade

Wenn der Hold beabsichtigt ist, kämpfen Sie nicht gegen APT – beheben Sie das Repository oder die Paketauswahl um den Hold herum, anstatt den Schutz zu entfernen.

Schritt 5: Paketversionen untersuchen

Für ein Paket mit Abhängigkeitsproblemen:

apt-cache policy package-name

Dies zeigt:

  • Installierte Version
  • Kandidaten-Version
  • Verfügbare Versionen
  • Welches Repository jede Version bereitstellt

apt-cache policy ist einer der nützlichsten APT-Debugging-Befehle, weil er zeigt, woher jede verfügbare Version stammt.

Beispiel:

apt-cache policy docker-ce

Wenn die Kandidaten-Version von einem unerwarteten PPA oder alten Repository stammt, haben Sie die wahrscheinliche Ursache des Abhängigkeitskonflikts gefunden.

Schritt 6: Nach gemischten Repositorys suchen

Liste der aktivierten Quellen:

grep -R "^deb" /etc/apt/sources.list /etc/apt/sources.list.d/

Suchen Sie nach:

  • Alten Ubuntu-Codenames
  • Debian-Repositorys auf Ubuntu
  • PPAs für eine andere Ubuntu-Version
  • Duplizierte Vendor-Repositorys
  • Sowohl Snap- als auch APT-Anweisungen für dasselbe Tool gemischt
  • Alte .list-Dateien, die nach der Deinstallation von Software zurückgeblieben sind

Ein häufiges Anti-Pattern ist die Installation eines Tools aus einem Vendor-Repository, gefolgt vom Hinzufügen eines PPA oder eines manuellen .deb, das überlappende Bibliotheken bereitstellt. APT kann viele Quellen handhaben, aber es kann widersprüchliche Absichten nicht in Einklang bringen, es sei denn, Sie richten die Repositorys selbst aus.

Schritt 7: Eine simulierte Installation oder ein Upgrade versuchen

Bevor Sie Änderungen vornehmen, simulieren Sie:

apt -s install package-name

Oder:

apt -s full-upgrade

Die Option -s simuliert die Operation. Sie ist nützlich, wenn Sie sehen möchten, was APT tun würde, ohne das System zu ändern.

Zurückgehaltene Pakete beheben

Zurückgehaltene Pakete auflisten

apt-mark showhold

Wenn nichts ausgegeben wird, sind keine Pakete mit apt-mark zurückgehalten, und Sie können zu Abhängigkeits- oder Repository-Checks übergehen.

Ein Paket absichtlich zurückhalten

sudo apt-mark hold package-name

Gute Gründe, ein Paket zurückzuhalten:

  • Eine Kernel-Version ist bekannt, um mit Ihrer Hardware zu funktionieren.
  • Ein Datenbank-Upgrade erfordert Planung.
  • Ein Treiber-Update bricht Ihre GPU.
  • Eine Runtime-Version muss mit der Produktion übereinstimmen.
  • Ein Vendor-Paket ist nicht mit der neuesten Abhängigkeit kompatibel.

Schlechte Gründe, ein Paket zurückzuhalten:

  • Sie haben einen Befehl aus einem alten Leitfaden kopiert.
  • Sie haben vergessen, warum es zurückgehalten wurde.
  • Sie vermeiden einen Abhängigkeitsfehler, ohne ihn zu verstehen.

Einen Hold entfernen

sudo apt-mark unhold package-name

Dann aktualisieren und upgraden:

sudo apt update
sudo apt upgrade

Wenn das Paket immer noch nicht aktualisiert wird, war es nicht nur ein Hold-Problem. Überprüfen Sie die Policy:

apt-cache policy package-name

Gebrochene Abhängigkeiten beheben

Die Standard-Reparatursequenz

Verwenden Sie diese Sequenz, wenn die Paketinstallation oder das Upgrade halbwegs fehlgeschlagen ist:

sudo apt update
sudo dpkg --configure -a
sudo apt --fix-broken install
sudo apt upgrade

Diese Reihenfolge ist wichtig, da jeder Schritt den Boden für den nächsten bereitet: apt update aktualisiert Repository-Metadaten, dpkg --configure -a beendet die Konfiguration extrahierter Pakete, apt --fix-broken install lässt APT fehlende oder widersprüchliche Abhängigkeiten in Einklang bringen, und apt upgrade setzt normale Paket-Updates fort.

Ein schlecht installiertes lokales Paket entfernen

Wenn das Problem nach der Installation eines heruntergeladenen .deb begann, untersuchen Sie es:

dpkg -l | grep package-name
apt-cache policy package-name

Entfernen Sie es:

sudo apt remove package-name

Wenn Konfigurationsdateien auch Probleme verursachen:

sudo apt purge package-name

Dann reparieren:

sudo apt --fix-broken install

Ein beschädigtes Paket neu installieren

Wenn ein Paket installiert, aber beschädigt ist:

sudo apt install --reinstall package-name

Dies ist nützlich, wenn Dateien fehlen oder beschädigt sind, die Paketquellen aber anderweitig gesund sind und Sie die installierten Dateien aktualisieren möchten, ohne die Versionen zu ändern.

PPA- und Drittanbieter-Repository-Probleme beheben

PPAs und Drittanbieter-Repositorys finden

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

Aktive Repository-Zeilen anzeigen:

grep -R "^deb" /etc/apt/sources.list /etc/apt/sources.list.d/

Auf neueren Ubuntu-Systemen können Sie auch .sources-Dateien im deb822-Format sehen:

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

Anzeigen:

cat /etc/apt/sources.list.d/*.sources

Ein PPA sicher deaktivieren

Quelldatei umbenennen:

sudo mv /etc/apt/sources.list.d/example.list /etc/apt/sources.list.d/example.list.disabled
sudo apt update

Für deb822-Dateien:

sudo mv /etc/apt/sources.list.d/example.sources /etc/apt/sources.list.d/example.sources.disabled
sudo apt update

Das Umbenennen der Quelldatei ist reversibel und sicherer als das sofortige Löschen der Repository-Konfiguration, da Sie sie zurückbenennen können, wenn Sie die falsche Quelle deaktiviert haben.

Pakete von einem PPA entfernen

Das Deaktivieren eines PPA stoppt zukünftige Paketdownloads daraus. Es downgradedt nicht automatisch Pakete, die bereits von diesem PPA installiert wurden.

Wenn das PPA Bibliothetskonflikte verursacht hat, müssen Sie Pakete möglicherweise auf Ubuntu-Versionen downgraden.

Installieren Sie ppa-purge:

sudo apt install ppa-purge

Dann das PPA bereinigen:

sudo ppa-purge ppa:owner/name

Verwenden Sie ppa-purge sorgfältig und lesen Sie die vorgeschlagenen Änderungen vor der Akzeptanz, da es mehrere verwandte Pakete entfernen oder downgraden kann.

Nach einem Release-Upgrade

Nach dem Upgrade von Ubuntu sind alte PPAs eine häufige Fehlerquelle.

Suchen Sie nach alten Codenames:

grep -R "jammy\|noble\|oracular\|plucky" /etc/apt/sources.list /etc/apt/sources.list.d/

Passen Sie die Codenames für Ihr reales System an. Wenn Sie beispielsweise auf Ubuntu 24.04 sind, ist Ihr Codename noble. Wenn eine Drittanbieter-Quelle immer noch auf einen älteren Codenamen verweist, überprüfen Sie, ob dieser Anbieter Ihre aktuelle Ubuntu-Version unterstützt. Wenn Sie ein neues System einrichten, anstatt ein Upgrade zu reparieren, führt unser Ubuntu 24.04 Installationsleitfaden durch das Hinzufügen von Vendor-Repositorys mit signed-by von Anfang an.

Bearbeiten Sie nicht nur den Codenamen und hoffen Sie auf das Beste – einige Repositorys veröffentlichen keine Pakete für jede Ubuntu-Version, also überprüfen Sie zuerst die Vendor-Unterstützung für Ihre Version.

GPG- und NO_PUBKEY-Fehler beheben

Was NO_PUBKEY bedeutet

APT-Repositorys veröffentlichen signierte Metadaten, und Ihr Computer benötigt den passenden öffentlichen Schlüssel, um diese Metadaten zu verifizieren. Wenn der Schlüssel fehlt, lehnt APT das Vertrauen in das Repository ab, was das Verhalten ist, das Sie wollen – deaktivieren Sie keine Signaturprüfungen, nur um den Fehler zum Verschwinden zu bringen.

Das moderne Keyring-Muster

Erstellen Sie das Keyring-Verzeichnis:

sudo install -d -m 0755 /etc/apt/keyrings

Laden Sie den Vendor-Schlüssel herunter und entfernen Sie die Armor:

curl -fsSL https://example.com/repository-key.gpg \
  | sudo gpg --dearmor -o /etc/apt/keyrings/example.gpg

Setzen Sie lesbare Berechtigungen:

sudo chmod 0644 /etc/apt/keyrings/example.gpg

Fügen Sie das Repository mit signed-by hinzu:

echo "deb [signed-by=/etc/apt/keyrings/example.gpg] https://example.com/linux/ubuntu noble stable" \
  | sudo tee /etc/apt/sources.list.d/example.list

Dann aktualisieren:

sudo apt update

Ersetzen Sie noble durch Ihren Ubuntu-Codenamen, falls erforderlich:

. /etc/os-release
echo "$VERSION_CODENAME"

Warum apt-key die falsche Gewohnheit ist

Alte Leitfäden verwenden oft:

curl -fsSL https://example.com/key.gpg | sudo apt-key add -

Vermeiden Sie apt-key add für neue Einrichtungen. Der alte apt-key-Stil fügt Schlüssel einem breiten Vertrauensbereich hinzu, was es schwieriger macht, zu begründen, welcher Schlüssel für welches Repository vertraut wird, während der moderne signed-by-Stil den Schlüssel auf ein bestimmtes Repository beschränkt und grundlegende Supply-Chain-Hygiene ist.

Legacy Trusted Keys finden

Sie können immer noch alte Schlüssel in:

/etc/apt/trusted.gpg
/etc/apt/trusted.gpg.d/

Dateien auflisten:

ls -l /etc/apt/trusted.gpg.d/

Löschen Sie keine Schlüssel zufällig – ordnen Sie zuerst jeden Schlüssel einem Repository zu und migrieren Sie dann ein Repository nach dem anderen zu /etc/apt/keyrings und signed-by.

Häufige GPG-Fehler

Verwenden Sie keine zufälligen Keyservers als erste Wahl bei der Behebung von NO_PUBKEY-Fehlern.

Bessere Reihenfolge:

  1. Verwenden Sie die offiziellen Installationsdokumente des Anbieters.
  2. Laden Sie den Schlüssel von der offiziellen HTTPS-URL des Anbieters herunter.
  3. Speichern Sie ihn in /etc/apt/keyrings.
  4. Binden Sie ihn mit signed-by ein.
  5. Führen Sie sudo apt update aus.

Vermeiden Sie diese Abkürzungen:

sudo apt update --allow-unauthenticated
sudo apt install --allow-unauthenticated package-name

Sie können vorübergehend funktionieren, aber sie entfernen die Signaturverifizierung, die Sie vor manipulierten Repository-Metadaten schützt.

“Das Repository ist nicht signiert” beheben

Dieser Fehler bedeutet normalerweise eines der folgenden Dinge:

  • Das Repository veröffentlicht keine signierten Metadaten.
  • Die Repository-URL ist falsch.
  • Das Repository unterstützt Ihre Ubuntu-Version nicht mehr.
  • Ein Proxy oder Spiegel gibt den falschen Inhalt zurück.
  • Sie verwenden HTTP, wo der Anbieter jetzt HTTPS erwartet.
  • Die Quelldatei hat die falsche Suite oder Komponente.

Finden Sie die fehlerhafte Quelle:

sudo apt update

APT wird die URL drucken. Dann suchen Sie danach:

grep -R "example.com" /etc/apt/sources.list /etc/apt/sources.list.d/

Deaktivieren Sie sie vorübergehend:

sudo mv /etc/apt/sources.list.d/example.list /etc/apt/sources.list.d/example.list.disabled
sudo apt update

Wenn APT nach dem Deaktivieren der Datei wieder funktioniert, installieren Sie dieses Repository von den aktuellen offiziellen Anweisungen des Anbieters neu, anstatt die alte Konfiguration wieder zu aktivieren.

Duplizierte Repository-Warnungen beheben

APT kann warnen, dass ein Ziel mehrfach konfiguriert ist.

Liste der übereinstimmenden Einträge:

grep -R "repo-url-or-domain" /etc/apt/sources.list /etc/apt/sources.list.d/

Duplizierte Repositorys erscheinen oft nach mehrmaligem Ausführen von Vendor-Installations-Skripten.

Behalten Sie eine Quelldatei. Deaktivieren Sie die anderen:

sudo mv /etc/apt/sources.list.d/duplicate.list /etc/apt/sources.list.d/duplicate.list.disabled
sudo apt update

Duplizitätswarnungen sind nicht immer fatal, aber sie sind ein Zeichen für unordentliche Konfiguration, also behalten Sie eine Quelldatei und deaktivieren Sie die Duplikate.

Pakete von der falschen Ubuntu-Version beheben

Eines der schlimmsten APT-Probleme ist das Mischen von Ubuntu-Versionen – beispielsweise sollte eine Maschine mit Ubuntu 24.04 nicht leichthin Pakete von Ubuntu 22.04 oder Debian testing ziehen. Manchmal funktioniert es eine Weile, aber schließlich wird der Abhängigkeitsgraph zu einem Puzzle, das APT nicht sauber lösen kann.

Überprüfen Sie Ihre Version:

. /etc/os-release
echo "$VERSION_CODENAME"

Quellen durchsuchen:

grep -R "^deb" /etc/apt/sources.list /etc/apt/sources.list.d/

Suchen Sie nach fremden Codenames in den aktivierten Quellen und untersuchen Sie dann das betroffene Paket:

apt-cache policy package-name

Wenn die installierte Version aus einem alten oder fremden Repository stammt, deaktivieren Sie dieses Repository und downgraden oder installieren Sie das betroffene Paket von Ubuntu-Repositorys neu.

Ein konservativer Reparaturpfad ist:

sudo apt update
sudo apt install --reinstall package-name

Bei tieferen Konflikten müssen Sie das Paket möglicherweise entfernen und von der richtigen Quelle neu installieren, anstatt ein Upgrade über eine fremde Version zu erzwingen.

APT-Cache und ungenutzte Pakete bereinigen

Die APT-Cache-Bereinigung ist keine Abhängigkeitsreparatur an sich, aber sie kann nach vielen fehlgeschlagenen Installationen helfen, indem sie Festplattenspeicher freisetzt und veraltete Paketdateien löscht.

Entfernen Sie Pakete, die automatisch installiert wurden und nicht länger benötigt werden:

sudo apt autoremove

Geladene Paketdateien bereinigen:

sudo apt clean

Oder entfernen Sie nur veraltete Paketdateien:

sudo apt autoclean

Verwenden Sie autoremove sorgfältig auf Servern und Desktops mit manuell installierten Treiber-Stacks und lesen Sie die Entfernungsliste vor der Akzeptanz.

Praktische APT-Fehlerbehebungs-Rezepte

Rezept: Paket wird zurückgehalten

sudo apt update
apt list --upgradable
apt-mark showhold
sudo apt full-upgrade

Wenn APT nach der Simulation vernünftige Änderungen vorschlägt, akzeptieren Sie sie. Wenn es große Entfernungen vorschlägt, stoppen und untersuchen:

apt-cache policy package-name

Rezept: Zurückgehaltenes Paket blockiert Upgrade

apt-mark showhold
apt-cache policy package-name
sudo apt-mark unhold package-name
sudo apt upgrade

Entfernen Sie nur einen Hold, wenn er nicht länger beabsichtigt ist, da das Entfernen eines Holds, der Produktionssoftware schützt, ein brechendes Upgrade auslösen kann.

Rezept: Unterbrochene Installation

sudo dpkg --configure -a
sudo apt --fix-broken install
sudo apt upgrade

Rezept: NO_PUBKEY-Fehler

  1. Identifizieren Sie das Repository von sudo apt update.
  2. Finden Sie die aktuellen offiziellen Installationsanweisungen des Anbieters.
  3. Installieren Sie den Schlüssel in /etc/apt/keyrings.
  4. Verwenden Sie signed-by in der Quelldatei.
  5. Führen Sie sudo apt update aus.

Beispielstruktur:

sudo install -d -m 0755 /etc/apt/keyrings

curl -fsSL https://example.com/key.gpg \
  | sudo gpg --dearmor -o /etc/apt/keyrings/example.gpg

sudo chmod 0644 /etc/apt/keyrings/example.gpg

echo "deb [signed-by=/etc/apt/keyrings/example.gpg] https://example.com/ubuntu noble main" \
  | sudo tee /etc/apt/sources.list.d/example.list

sudo apt update

Rezept: PPA hat keine Release-Datei

sudo apt update
ls /etc/apt/sources.list.d/
grep -R "ppa.launchpadcontent.net\|launchpad" /etc/apt/sources.list.d/

Deaktivieren Sie das PPA:

sudo mv /etc/apt/sources.list.d/example.list /etc/apt/sources.list.d/example.list.disabled
sudo apt update

Entscheiden Sie dann, ob Sie Pakete von diesem PPA entfernen, ersetzen oder bereinigen möchten.

Rezept: Manuelles .deb hat Abhängigkeiten gebrochen

dpkg -l | grep package-name
apt-cache policy package-name
sudo apt remove package-name
sudo apt --fix-broken install

Wenn Sie die Software immer noch benötigen, bevorzugen Sie das aktuelle APT-Repository des Anbieters gegenüber wiederholten manuellen .deb-Installationen, die mit der Zeit Abhängigkeitskonflikte ansammeln.

Wesentliche APT-Fehlerbehebungsbefehle

Repository und Metadaten

sudo apt update
grep -R "^deb" /etc/apt/sources.list /etc/apt/sources.list.d/
ls /etc/apt/sources.list.d/

Paketstatus

apt list --installed
apt list --upgradable
apt-mark showhold
dpkg -l | grep package-name

Paket-Policy und Abhängigkeiten

apt-cache policy package-name
apt-cache depends package-name
apt-cache rdepends package-name

Reparatur

sudo dpkg --configure -a
sudo apt --fix-broken install
sudo apt install --reinstall package-name
sudo apt full-upgrade

Bereinigung

sudo apt autoremove
sudo apt autoclean
sudo apt clean

Simulation

apt -s install package-name
apt -s full-upgrade

Was Sie nicht tun sollten

Löschen Sie nicht zufällig /var/lib/dpkg

Wenn Sie Ratschläge sehen, dpkg-Statusdateien zu löschen, seien Sie skeptisch. Die dpkg-Datenbank ist das Protokoll installierter Pakete, und das Löschen von Teilen davon kann ein reparierbares Paketproblem in ein volles System-Wiederherstellungsprojekt verwandeln.

Deaktivieren Sie nicht die Signaturverifizierung

Vermeiden Sie:

--allow-unauthenticated

Wenn ein Repository nicht verifiziert werden kann, beheben Sie den Schlüssel oder deaktivieren Sie das Repository, anstatt die Authentifizierung zu umgehen.

Mischen Sie nicht leichthin Ubuntu-Versionen

Fügen Sie keine Repositorys für eine andere Ubuntu-Version hinzu, es sei denn, Sie verstehen APT-Pinning und die Abhängigkeitsfolgen.

Dies gilt insbesondere für:

  • Desktop-Umgebungen
  • Grafiktreiber
  • Python-Stacks
  • Container-Runtimes
  • Kubernetes-Pakete
  • Datenbank-Pakete

Behandeln Sie PPAs nicht als harmlos

PPAs sind nützlich, aber sie sind immer noch Paket-Repositorys, die Bibliotheken und Systempakete ersetzen können – was genau das sein kann, was Sie wollen, oder genau der Grund, warum Ihr nächstes Upgrade bricht. Bevorzugen Sie PPAs für bestimmte Anwendungen, nicht für breite Systemgrundlagen, es sei denn, Sie vertrauen dem Betreuer und verstehen den Upgrade-Pfad.

APT-Fehlerbehebungs-Entscheidungsbaum

Verwenden Sie dieses mentale Modell:

flowchart TD A["Schlägt sudo apt update fehl?"] -->|ja| B["Repositorys, GPG-Schlüssel, PPAs, Netzwerk oder Release-Dateien beheben"] A -->|nein| C["Wurde eine Installation oder ein Upgrade unterbrochen?"] C -->|ja| D["Führen Sie dpkg --configure -a aus, dann apt --fix-broken install"] C -->|nein| E["Sind Pakete zurückgehalten?"] E -->|ja| F["Untersuchen Sie apt-mark showhold und entscheiden Sie, ob Sie den Hold entfernen"] E -->|nein| G["Sind Pakete zurückgehalten (kept back)?"] G -->|ja| H["Untersuchen Sie apt full-upgrade Simulation und Paket-Policy"] G -->|nein| I["Ist eine Drittanbieter-Quelle beteiligt?"] I -->|ja| J["Untersuchen Sie apt-cache policy und Quelldateien"] I -->|nein| K["Untersuchen Sie den spezifischen Paket-Abhängigkeitsfehler"]

Die meisten APT-Probleme werden handhabbar, sobald Sie aufhören, sie als einen großen Fehler zu behandeln und beginnen, Repository-Gesundheit, Paketstatus, Abhängigkeitslösung und Vertrauenskonfiguration zu trennen – der obige Entscheidungsbaum ist eine Abkürzung für diese Disziplin.

Empfohlene Basislinie für Entwicklermaschinen

Für eine saubere Ubuntu-Entwickler-Workstation bevorzugt ich diese Basislinie:

  • Halten Sie Ubuntu-Repositorys standardmäßig.
  • Verwenden Sie Vendor-APT-Repositorys nur, wenn sie offiziell und gewartet sind.
  • Verwenden Sie /etc/apt/keyrings und signed-by für Drittanbieter-Repositorys.
  • Vermeiden Sie alte apt-key-Anweisungen.
  • Vermeiden Sie das Mischen von PPAs, die Kernsystembibliotheken ersetzen.
  • Verwenden Sie Container, uv, pipx, asdf, mise oder sprachen-native Tools für schnell wandernde Entwickler-Abhängigkeiten.
  • Halten Sie APT für das Betriebssystem, Treiber, Dienste und stabile CLI-Tools verantwortlich.

Für Desktop-Software bevorzugen Sie Flatpak oder Snap gegenüber PPAs, wenn ein sandboxed universelles Paket Ihren Bedürfnissen entspricht. APT ist ausgezeichnet, wenn es das Basissystem verwaltet, aber es wird schmerzhaft, wenn es gezwungen wird, wie ein universeller Entwickler-Abhängigkeitsmanager für schnell wandernde Sprach-Ökosysteme zu agieren.

Finale APT-Fehlerbehebungs-Checkliste

Wenn APT auf Ubuntu gebrochen ist, arbeiten Sie durch diese Checkliste:

[ ] Führen Sie sudo apt update aus und lesen Sie den ersten echten Fehler.
[ ] Überprüfen Sie den Ubuntu-Codenamen mit /etc/os-release.
[ ] Beenden Sie unterbrochene Installationen mit dpkg --configure -a.
[ ] Reparieren Sie Abhängigkeiten mit apt --fix-broken install.
[ ] Überprüfen Sie zurückgehaltene Pakete mit apt-mark showhold.
[ ] Untersuchen Sie Paketversionen mit apt-cache policy.
[ ] Deaktivieren Sie gebrochene PPAs oder Drittanbieter-Repositorys.
[ ] Ersetzen Sie apt-key-Style-Repositorys durch signed-by Keyrings.
[ ] Simulieren Sie riskante Operationen mit apt -s.
[ ] Lesen Sie Entfernungen vor der Akzeptanz von full-upgrade oder autoremove.

APT ist nicht zerbrechlich, aber es ist streng, und diese Strenge ist eine Funktion: Sie verhindert, dass unsigned Repositorys, unmögliche Abhängigkeitssets und zufällige Paketersatz stillschweigend Ihr System ändern. Die ruhige Art, APT zu beheben, ist, diese Strenge zu bewahren, den widersprüchlichen Zustand zu finden und das kleinste Ding zu reparieren, das tatsächlich falsch ist.

Abonnieren

Neue Beiträge zu Systemen, Infrastruktur und KI-Engineering.