Problembehebung
Archivierte Anleitung
Dieser Artikel wurde archiviert. Das bedeutet, dass er nicht mehr auf Richtigkeit überprüft oder anderweitig gepflegt wird. Der Inhalt wurde für keine aktuell unterstützte Ubuntu-Version getestet. Wenn du Gründe für eine Wiederherstellung siehst, melde dich bitte in der Diskussion zum Artikel. Bis dahin bleibt die Seite für weitere Änderungen gesperrt.
Anmerkung: Artikel wurde mit Paketverwaltung/Problembehebung zusammengeführt und Teile nach Paketverwaltung/Tipps ausgelagert.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Diese Seite dient dazu, bekannte Probleme bei der Arbeit mit der Paketverwaltung und deren Lösungswege zu bündeln, jeweils direkt im Terminal [1].
NO_PUBKEY¶
Wird der Schlüssel (Key) einer Paketquelle geändert - zum Beispiel weil er abläuft - muss der neue Schlüssel zunächst importiert werden. Die eindeutige ID des Schlüssel wird in der Fehlermeldung genannt. Hat man sich versichert, dass der genannte Key tatsächlich zur gewünschten Quelle gehört, kann er mit apt-key in den Keyring der Paketverwaltung eingetragen werden:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys ID
Achtung!
Fremdquellen können Schäden am System hervorrufen. Eine genaue Prüfung des Schlüssels im Fall einer Änderung wird dringend geraten
Sämtliche Pakete neu installieren¶
Sind sehr viele Pakete in schlechtem Zustand, lohnt es sich eventuell, alle installierten Programme neu aus den Quellen herunterzuladen und zu installieren.
dpkg --get-selections | grep "\binstall" | awk '{print $1}' > /tmp/dpkg.log
sucht alle installierten Pakete und speichert diese in der Datei /tmp/dpkg.log.
sudo xargs -n1 apt-get --reinstall install -y < /tmp/dpkg.log
nimmt einen Eintrag aus /tmp/dpkg.log und installiert dieses Paket erneut.
Defekte Pakete reparieren¶
Wenn ein Paket, das nicht zur separaten Installation gedacht ist, eigentlich weitere Pakete benötigt oder in anderer Weise nicht in die bestehende Installation passt, werden bei der nächsten Verwendung von apt-get "kaputte Pakete" gemeldet. Diese muss man reparieren lassen. Der Befehl:
sudo apt-get -f install
führt entweder zur Installation weiterer Pakete oder zur Entfernung des installierten Pakets. In letzterem Fall sollte man sich vergewissern, ob das Paket wirklich für Ubuntu geeignet ist.
Falls die defekten Pakete bekannt sind, kann auch folgender Befehl das Problem lösen:
sudo apt-get -f install PAKET1 [PAKET2]
wobei PAKET1 bzw. PAKET2 usw. durch die Namen der bekannten defekten Pakete ersetzt wird.
Paketverwaltung unbrauchbar¶
Es kann vorkommen, dass die Paketverwaltung nicht mehr funktioniert und z.B. ein
sudo apt-get check
mit folgender Fehlermeldung abbricht:
Segmentation faulty Tree
Dieser Missstand kann durch das Löschen der beiden Dateien /var/cache/apt/pkgcache.bin und /var/cache/apt/srcpkgcache.bin behoben werden.
Sollte die Paketverwaltung nach einem upgrade
bzw. dist-upgrade
unbrauchbar werden, so hilft einer der folgenden Befehle:
sudo apt-get upgrade -f
oder
sudo apt-get dist-upgrade -f
oder
sudo dpkg --configure -a
Lock nicht aufrufbar¶
Manchmal gibt ein Paketmanager die Fehlermeldung
Konnte Lock nicht bekommen
aus. Grund ist meistens, dass bereits ein weiteres Tool zur Paketverwaltung im Hintergrund arbeitet. Dies kontrolliert man zuerst mit
sudo lsof /var/cache/apt/archives/lock
um dann gegebenenfalls mit Shell/ps herauszufinden, welcher Prozess die Paketverwaltung blockiert. Warten auf das Terminieren des Prozesses löst das Problem meist. Sollte der Prozess hängen, kann er mit kill zum Beenden gezwungen werden. Sollte das Lock danach immer noch nicht freigegeben sein, kann man als letzte Möglichkeit den Lock (mit Rootrechten) [2] löschen. Nach dem Löschen muss ein neuer Lock angelegt werden, zum Beispiel mit dem Befehl touch
.
Anzahl zu aktualisierender Pakete beim Konsolenlogin falsch¶
Durch einen Bug im Update Notifier wird manchmal die Meldung über zur Verfügung stehende Aktualisierungen in der Konsole und beim SSH-Login nicht auf den neuesten Stand gebracht. Das behebt folgender Ablauf:
sudo mv /etc/motd.tail /etc/motd.tail.backup sudo touch /etc/motd.tail sudo /usr/lib/update-notifier/update-motd-updates-available --force
Dabei wird zuerst die aktuelle Datei nach backup umbenannt, dann eine neue leere motd-Datei erstellt und anschließend der Update-Notifier zur Korrektur der Angabe gezwungen.
Paketlisten¶
Übersicht der installierten Pakete¶
Reine Informationsliste erzeugen¶
Um eine Liste zu erstellen, die alle installierten Pakete und deren Beschreibungen enthält, führt man den Befehl
COLUMNS=200 dpkg-query -l > packages.list
aus. Die Paketliste befindet sich danach in der Datei packages.list.
Hinweis:
Diese Liste ist rein informativ und lässt sich nicht (bzw. nur schwer) zum Wiederherstellen nach einer Neuinstallation verwenden!
Paketliste zur Wiederherstellung erzeugen¶
Um z.B. einen zweiten Ubunturechner mit der gleichen Paketkonfiguration zu erstellen oder bei einer Neuinstallation des Systems schnell alle zuvor installierten Pakete zu übernehmen, kann man mit dem Befehl
dpkg --get-selections | awk '!/deinstall|purge|hold/ {print $1}' > ~/packages.list
eine Liste ~/packages.list zur Wiederherstellung der Pakete erzeugen.
Möchte man diese Liste zur Installation in einer Ubuntu-Neuinstallation verwenden, ist außerdem ein Sichern bzw. Kopieren der Paketquellen nötig, damit auch Pakete aus nachträglich hinzugefügten Quellen installiert werden können. Der folgende Befehl sichert diese Informationen in die Datei ~/sources.list.sav:
find /etc/apt/sources.list* -type f -name '*.list' -exec bash -c 'echo -e "\n## $1 ";grep -v -e ^# -e ^$ ${1}' _ {} \; > ~/sources.list.sav
Das Ergebnis enthält eine kommentierte Liste aller eingetragenen Paketquellen.
Installation von Paketen aus einer Liste¶
Um später alle in dieser Liste gespeicherten Pakete zu installieren, gibt man folgenden Befehl ein:
xargs -a "packages.list" sudo apt-get install
Vorher muss evtl. noch die zuvor gesicherte sources.list mit der aktuellen synchronisiert werden und eine Aktualisierung der Paketliste durchgeführt werden:
sudo apt-get update
URL-Liste zu installierender Pakete¶
Die Option --print-uris
von apt-get liefert eine URL für alle zu installierenden Pakete. Dies kann man auf einem Rechner mit schlechter oder fehlender Internetanbindung zur Erzeugung einer Liste benutzen, um diese Pakete dann mit einem anderen Rechner herunterzuladen. Der Befehl:
sudo apt-get -q -y --print-uris install PAKETNAME | grep ^\' | awk '{print $1}' | tr -d "'" > ~/wget.list
schreibt die Adressen in eine Liste ~/wget.list. Der Inhalt dieser kann dann mittels wget heruntergeladen werden:
wget -i wget.list
Wget steht auch für die Windows-Plattform zur Verfügung 🇬🇧, so dass man die Liste auch auf einem Windows-Rechner herunterladen kann. Anschließend können die so heruntergeladenen Pakete über die Paketverwaltung Synaptic oder mit dpkg installiert werden.
Verlaufslisten¶
Der folgende Befehl erzeugt eine Liste der in den letzten drei Tagen installierten Pakete:
find /var/lib/dpkg/info -name \*.list -mtime -3 | sed 's#.list$##;s#.*/##' | sort
Einfacher ist jedoch die Auswertung der dpkg Logdateien.
grep 'install ' /var/log/dpkg.log
Die Logdateien werden regelmäßig archiviert (/var/log/dpkg.log.NUMMER.gz). Liegt die Änderung also schon weiter zurück können diese Dateien durchsucht werden. Man muss die mit gzip komprimierten Dateien nicht erst entpacken, sondern benutzt einfach zgrep.
zgrep 'install ' /var/log/dpkg.log.2.gz
Eine andere Möglichkeit ist die Erstellung eines eigenen apt-history
-Befehls. Dieser beruht auf den Log-Dateien /var/log/dpkg.log und /var/log/dpkg.log.1. Dazu wird die Datei ~/.bashrc editiert und folgendes am Ende angefügt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | function apt-history(){ case "$1" in install) cat /var/log/{dpkg.log,dpkg.log.1} | grep 'install ' ;; upgrade|remove) cat /var/log/{dpkg.log,dpkg.log.1} | grep $1 ;; rollback) cat /var/log/{dpkg.log,dpkg.log.1} | grep upgrade | \ grep "$2" -A10000000 | \ grep "$3" -B10000000 | \ awk '{print $4"="$5}' ;; *) cat /var/log/{dpkg.log,dpkg.log.1} ;; esac } |
Quelle: apt-history 🇬🇧
Anschließend neu anmelden oder ein neues Terminalfenster öffnen, damit der Befehl verfügbar ist. Mit dem Befehl:
apt-history upgrade
lassen sich nun beispielsweise die zuletzt aktualisierten Pakete inkl. Datum und Uhrzeit ermitteln. Andere Möglichkeiten sind install
, remove
oder rollback
.
Links¶
APT Übersichtsartikel