Wie entferne / installiere ich ein nicht vollständig installiertes Paket?

62

Ich habe neulich bsnes installiert und aus irgendeinem Grund ist die Installation fehlgeschlagen. Jetzt kann ich keine neuen Pakete aktualisieren, installieren oder im Grunde keine apt-get-Befehle ausführen, da alle versuchen, dieses kaputte Paket zu verarbeiten und fehlschlagen. Der Versuch, ein neues Paket zu installieren, führt zum selben Schicksal. Der Fehler, den ich erhalte, ist:

Setting up google-chrome-stable (33.0.1750.152-1) ...
/var/lib/dpkg/info/google-chrome-stable.postinst: 124: /var/lib/dpkg/info/google-chrome-stable.postinst: update-alternatives: not found
dpkg: error processing google-chrome-stable (--configure):
 subprocess installed post-installation script returned error exit status 127
Setting up bsnes (0.088-7) ...
/var/lib/dpkg/info/bsnes.postinst: 5: /var/lib/dpkg/info/bsnes.postinst: update-alternatives: not found
dpkg: error processing bsnes (--configure):
 subprocess installed post-installation script returned error exit status 127
Errors were encountered while processing:
 google-chrome-stable
 bsnes
E: Sub-process /usr/bin/dpkg returned an error code (1)

Ich habe auf Google und hier auf Ask Ubuntu gesucht, aber keine funktionierende Lösung gefunden. Die häufig vorgeschlagene Lösung besteht darin, Folgendes auszuführen:

sudo apt-get clean && sudo apt-get autoremove
sudo apt-get -f install
sudo dpkg --configure -a

Dies funktioniert jedoch nicht. Die apt-get-Befehle schlagen alle mit demselben Fehler wie oben fehl, und der Befehl dpkg hilft einfach nicht weiter. Die andere Sache, die sie oft vorschlagen, um es über Synaptic oder die Befehlszeile zu löschen, die auch fehlschlägt.

Danke für die Hilfe

Bijak
quelle

Antworten:

60

Für fortgeschrittene Benutzer erfolgt die Verwendung auf eigene Gefahr.

Laut folgender Fehlermeldung:

subprocess installed post-installation script returned error exit status 127

Möglicherweise möchten Sie /var/lib/dpkg/info/[package_name].postinstalles bearbeiten und kommentieren (oder besser noch, versuchen Sie es zu verstehen und das Problem zu identifizieren) und versuchen Sie es dann apt-geterneut.

Beachten Sie, dass in dieser speziellen Frage die Meldung "Post-Installation" betrifft, jedoch stattdessen "Pre-Removal" oder "Post-Removal" erwähnt werden könnte (in welchen Fällen die Erweiterung der zu bearbeitenden Datei gewesen wäre .prermoder .postrm). .

Skippy le Grand Gourou
quelle
2
Eigentlich ist das die beste Methode. Neuinstallation dpkghilft nicht immer.
Danatela
2
Tausend Dank. Ich musste reparieren, /var/lib/dpkg/info/[package_name].prermaber Ihr Beitrag gab mir die richtige Richtung. Auf jeden Fall für fortgeschrittene Benutzer, das ist riskant !
sмurf
Die beste Antwort. Vielen Dank! Korrekturen .prermund .postrmDateien beheben das Problem.
Fixiereinheit
42

Außer denen, die Sie bereits gepostet haben, gibt es nur wenige andere Befehle, die hilfreich sein können.

  • Autoclean löscht das lokale Repository der abgerufenen Paketdateien.

    sudo apt-get autoclean
    
  • Installation / Deinstallation von Paketen erzwingen. ☠Vorsichtig verwenden

    sudo apt-get --force-yes install <pkgname>
    

    und

    sudo apt-get --force-yes remove <pkgname>
    

Wie immer können Sie mit dpkgPakete installieren, entfernen und löschen.

  • Installieren

    sudo dpkg -i <pkgname>
    
  • Entfernen

    sudo dpkg -r <pkgname>
    
  • Reinigen

    sudo dpkg -P <pkgname>
    
registrierter Nutzer
quelle
Sowohl der Befehl dpkg als auch der Befehl apt-get --force-yes geben den gleichen Fehler zurück, den ich zuvor erhalten habe. Autoclean gibt keinen Fehler zurück, scheint aber auch nichts mit den zwei kaputten Paketen zu tun.
Bijak
@ Bijak Sie müssen sicherlich versucht haben zu bsnesspülen .Haben Sie?
Registrierter Benutzer
Ja, mit dpkg -P, apt-get purge und mit Synaptic
Bijak
Posten Sie die Ausgabe vondpkg -l |grep bsnes
Registered User
rF bsnes 0.088-7 amd64 Genaue SNES / SuperFamicom-Emulator
Bijak
27

Also, nach mehr googeln und wirklich sorgfältig durchlesen der Fehlermeldungen scheint es, dass dpkgneu installiert werden musste.

sudo apt-get install --reinstall dpkg

Was darauf hinwies, dass dies das Problem war (wenn jemand dies sucht und sieht), update-alternatives: not foundwar das in der Fehlermeldung. Sobald dpkg neu installiert wurde, wurden die anderen Pakete normal automatisch installiert.

Bijak
quelle
3
Warum ist die einzig richtige (und akzeptierte) Antwort in der Liste so weit unten mit weniger als ⅓ der Stimmen der Top-Antwort? +1
David Foerster
zum einen: weil es nicht für pakete funktioniert, die nicht mehr heruntergeladen werden können "die neuinstallation von linux-image-extra-4.4.0-65-generic ist nicht möglich, sie kann nicht heruntergeladen werden."
Joe
3
Dies ist wahrscheinlich die am wenigsten wahrscheinliche Lösung für alle , hier basierend kommen auf dem Titel der Frage. Es gibt jedoch viele Gründe, warum dieses Problem auftreten kann. Daher werden viele Lösungsvorschläge "Das funktioniert für mich" vorliegen.
Michael
Das funktioniert eigentlich nicht.
NelsonGon
15

Sie können die Paketdatei in diesem /var/lib/dpkg/info/Pfad entfernen und die Quelle aktualisieren.

sudo rm /var/lib/dpkg/info/[package_name].*
sudo dpkg --configure -a
sudo apt-get update

Installieren Sie dann Ihr Paket neu sudo apt-get install [package_name]

Doc

Hamed
quelle
4
Eigentlich sollte man es besser gebrauchen sudo rm /var/lib/dpkg/info/[pakege_name].*. Andernfalls entfernen Sie auch Pakete, die mit demselben Namen beginnen. Trotzdem, danke dafür, es war die einzige Lösung, die für mich funktioniert hat
smac89
13

Wenn alle Stricke reißen. Ich habe zuerst das Verzeichnis geändert in:

cd /var/lib/dpkg/info

dann habe ich alles entfernt mit .postinst:

sudo rm *.postinst

Aktualisieren Sie dann das Repository

sudo apt-get update

dann hat sich alles normalisiert, als ich es tat:

sudo apt-get --force-yes install openjdk-7-jre-headless
Mike B
quelle
6
Dadurch werden alle Skripts nach der Installation entfernt, nicht nur die des betroffenen Pakets. Ein bisschen zu übereifrig meiner Meinung nach. -1
David Foerster
Wenn es einfach ist, nur das bestimmte Post-Install-Skript zu identifizieren und zu entfernen, das ein Problem verursacht, kann dies eine sehr bequeme Möglichkeit sein, ein fehlerhaftes Paket zu entfernen.
Ian Mackinnon
Nach einem Albtraum mit Kernel-Problemen wurde das Problem durch Umbenennen der .postinst-Datei nur des betroffenen Kernels behoben
Andy,
5

Wenn alles andere fehlschlägt, können Sie das Paket manuell durch entfernen dpkg. Laufen sudo dpkg -P bsnessollte spülen bsnes.

saiarcot895
quelle
2
dpkg: error processing package libcuda1-340 (--purge): package is in a very bad inconsistent state; you should reinstall it before attempting a removal
Endolith
2

In meinem Fall hat es apt-get install -ffunktioniert. Ich habe die mysql-workbench-community installiert

Zuvor versucht apt autoclean

Ich habe den dpkg-Fehler aufgrund einiger fehlender Abhängigkeiten gesehen, die durch Installation im erzwungenen Modus behoben werden konnten (Installieren von Abhängigkeiten).

Vikas Avnish
quelle
0
sudo apt-get install -f --reinstall coreutils init-system-helpers

Nachdem Sie oben ausgeführt haben, können Sie alle Pakete wie gewohnt installieren / aktualisieren / entfernen / bereinigen.

Uddhav Gautam
quelle