Come rimuovere / installare un pacchetto che non è completamente installato?


62

Sono andato a installare bsnes l'altro giorno e per qualsiasi motivo l'installazione non è riuscita. Ora, non riesco ad aggiornare, installare nuovi pacchetti o fare praticamente qualsiasi comando apt-get poiché tutti tentano di elaborare questo pacchetto rotto e falliscono. Il tentativo di installare un nuovo pacchetto lo condanna allo stesso destino. L'errore che ottengo è:

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)

Ho cercato su Google e qui su Ask Ubuntu ma non ho trovato una soluzione funzionante. La correzione comunemente suggerita è di eseguire quanto segue:

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

Questo tuttavia non funziona. I comandi apt-get falliscono tutti con lo stesso errore di cui sopra e il comando dpkg non aiuta. L'altra cosa che suggeriscono spesso di eliminarlo tramite Synaptic o la riga di comando, che fallisce anche.

Grazie per l'aiuto

Risposte:


60

Per utenti esperti, utilizzare a proprio rischio.

Secondo il seguente messaggio di errore:

subprocess installed post-installation script returned error exit status 127

Potresti voler modificare /var/lib/dpkg/info/[package_name].postinste commentare tutto (o meglio ancora, provare a capirlo e identificare il problema), quindi riprovare apt-get.

Si noti che sebbene in questa particolare domanda il messaggio riguardi "post-installazione", avrebbe potuto invece citare, ad esempio, "pre-rimozione" o "post-rimozione" (in tal caso l'estensione del file da modificare sarebbe stata .prermo .postrm) .


2
In realtà questo è il metodo migliore. La reinstallazione dpkgnon sempre aiuta.
Danatela,

2
Grazie mille. Ho dovuto riparare /var/lib/dpkg/info/[package_name].prermma il tuo post mi ha dato la giusta direzione. Sicuramente per utenti esperti, questo è rischioso !
sabato

La migliore risposta Grazie! Correzione .prerme .postrmfile risolvono il problema.
fusore

42

Oltre a quelli che hai già pubblicato, ci sono pochi altri comandi che possono essere utili.

  • Autoclean cancella il repository locale dei file di pacchetto recuperati.

    sudo apt-get autoclean
    
  • Forza l'installazione / rimozione dei pacchetti. ☠Utilizzare con cautela

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

    e

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

Inoltre, come sempre, è possibile utilizzare dpkgper installare, rimuovere ed eliminare i pacchetti.

  • Installare

    sudo dpkg -i <pkgname>
    
  • Rimuovere

    sudo dpkg -r <pkgname>
    
  • Epurazione

    sudo dpkg -P <pkgname>
    

Entrambi i comandi dpkg e apt-get --force-yes restituiscono lo stesso errore che stavo ottenendo prima. Autoclean non restituisce un errore, ma non sembra fare nulla con i due pacchetti rotti.
Bijak,

@Bijak Devi aver sicuramente provato a eliminare bsnes.
Utente registrato

Sì, con dpkg -P, apt-get purge e con Synaptic
Bijak

Pubblica l'output didpkg -l |grep bsnes
Utente registrato

rf bsnes 0.088-7 amd64 Emulatore SNES / SuperFamicom
accurato

27

Quindi, dopo aver cercato su Google e aver letto di nuovo attentamente i messaggi di errore, sembra che dpkgdebba essere reinstallato.

sudo apt-get install --reinstall dpkg

Ciò che ha evitato che questo era il problema (se qualcuno lo cerca e lo vede) è update-alternatives: not foundstato nel messaggio di errore. Non appena è stato reinstallato dpkg, gli altri pacchetti hanno proceduto all'installazione normalmente automaticamente.


3
Perché l'unica risposta corretta (e accettata) finora in fondo alla lista con meno di ⅓ dei voti della risposta migliore? +1
David Foerster,

per uno: poiché non funziona per i pacchetti che non possono più essere scaricati "La reinstallazione di linux-image-extra-4.4.0-65-generic non è possibile, non può essere scaricata".
Joe,

3
Questa è probabilmente la soluzione meno probabile per chiunque venga qui in base al titolo della domanda. Ma ci sono molte ragioni per cui si può finire con questo problema, quindi ci saranno molte soluzioni "funziona per me".
michael

Questo in realtà non funziona.
Nelson,

15

È possibile rimuovere il file del pacchetto in questo /var/lib/dpkg/info/percorso e aggiornare l'origine.

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

Quindi reinstallare il pacchetto sudo apt-get install [package_name]

Doc


4
In realtà hai avuto un uso migliore sudo rm /var/lib/dpkg/info/[pakege_name].*. Altrimenti rimuoverai anche i pacchetti che iniziano con lo stesso nome. Comunque, grazie per questo, è stata l'unica soluzione che ha funzionato per me
smac89,

13

Se tutti gli altri falliscono. Quello che ho fatto è stato prima cambiare la directory in:

cd /var/lib/dpkg/info

poi ho rimosso tutto con .postinst:

sudo rm *.postinst

quindi aggiorna il repository

sudo apt-get update

poi tutto è tornato alla normalità quando l'ho fatto:

sudo apt-get --force-yes install openjdk-7-jre-headless

6
Ciò rimuove tutti gli script post-installazione, non solo quello del pacchetto interessato. Un po 'troppo zelante secondo me. -1
David Foerster,

Se è facile identificare e rimuovere solo il particolare script post-installazione che causa un problema, questo può essere un modo molto conveniente per rimuovere un pacchetto difettoso.
Ian Mackinnon,

dopo un incubo con problemi di kernal che hanno rinominato il .postinst del solo kernel interessato risolto il problema
Andy,

5

Se tutto il resto fallisce, è possibile rimuovere manualmente il pacchetto dpkg. La corsa sudo dpkg -P bsnesdovrebbe eliminare bsnes.


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

Nel mio caso ha apt-get install -ffunzionato. Stavo installando mysql-workbench-community

Precedentemente provato apt autoclean

Ho visto l'errore dpkg a causa di alcune dipendenze mancanti che potevano essere corrette installando in modalità forzata (installazione dipendenze)


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

Dopo aver eseguito sopra, è possibile installare / aggiornare / rimuovere / eliminare come al solito per qualsiasi pacchetto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.