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


Sono andato a installare bsnes l'altro giorno e per qualsiasi motivo l'installazione è fallita. Ora, non posso aggiornare, installare nuovi pacchetti o fare praticamente alcun comando apt-get mentre tutti cercano di elaborare questo pacchetto danneggiato 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 soluzione 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 prima e il comando dpkg non aiuta. L'altra cosa spesso suggeriscono di eliminarla tramite Synaptic o la riga di comando, che fallisce anche.

Grazie per l'aiuto


45
2018-03-24 02:42


origine




risposte:


Per utenti esperti, utilizzare a proprio rischio.

In base al seguente messaggio di errore:

subprocess installed post-installation script returned error exit status 127

Potresti voler modificare /var/lib/dpkg/info/[package_name].postinst e commenta tutto (o meglio ancora, prova a capirlo e identifica il problema), quindi prova apt-get ancora.

Si noti che, sebbene in questa particolare domanda il messaggio riguardi "post-installazione", potrebbe aver menzionato, ad es. "pre-rimozione" o "post-rimozione" invece (in quali casi l'estensione del file da modificare sarebbe stata .prerm o .postrm).


48
2018-06-05 07:58



In realtà questo è il metodo migliore. Reinstallare dpkg non sempre aiuta. - Danatela
Grazie mille. Ho dovuto sistemare /var/lib/dpkg/info/[package_name].prermma il tuo post mi ha dato la giusta direzione. Sicuramente per gli utenti avanzati però, questo è rischioso! - sмurf
La migliore risposta Grazie! Correzione .prerm e .postrm i file risolvono il problema. - fuser


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

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

    sudo apt-get autoclean
    
  • Forza installazione / rimozione di pacchetti. Usare con cautela

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

    e

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

Anche come sempre, puoi usare dpkg installare, rimuovere ed eliminare i pacchetti.

  • Installare

    sudo dpkg -i <pkgname>
    
  • Rimuovere

    sudo dpkg -r <pkgname>
    
  • Epurazione

    sudo dpkg -P <pkgname>
    

36
2018-03-24 04:10



Entrambi i comandi dpkg e apt-get -force-yes restituiscono lo stesso errore di prima. Autoclean non restituisce un errore ma non sembra fare nulla con i due pacchetti danneggiati. - Bijak
@Bijak Devi aver sicuramente provato a fare lo spurgo bsnes .Hai? - Registered User
Sì, con dpkg -P, apt-get purge e con Synaptic - Bijak
Pubblica l'output di dpkg -l |grep bsnes - Registered User
rF bsnes 0.088-7 amd64 Emulatore accurato SNES / SuperFamicom - Bijak


Quindi, dopo aver cercato su Google e aver letto attentamente i messaggi di errore, sembra proprio questo dpkg doveva essere reinstallato.

sudo apt-get install --reinstall dpkg

Ciò che ha rivelato che questo era il problema (se qualcuno cerca e vede questo) è quello update-alternatives: not found era nel messaggio di errore. Non appena è stato reinstallato dpkg, gli altri pacchetti procedevano normalmente all'installazione.


21
2018-03-25 03:26



Perché l'unica risposta corretta (e accettata) fino a questo momento nella lista con meno di ⅓ dei voti della risposta più alta? +1 - David Foerster
per uno: perché non funziona per 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
Questo è probabilmente il meno probabile soluzione per chiunque arrivi qui in base al titolo della domanda. Ma ci sono molte ragioni per cui si può finire con questo problema, quindi lì volere essere un sacco di proposte "questo funziona per me" soluzioni. - michael


Se tutti gli altri falliscono. Quello che ho fatto è stato prima ho cambiato 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

12
2018-04-14 02:39



Questo 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 in errore. - Ian Mackinnon
dopo un incubo con problemi di kernal rinominare il .postinst del solo kernel interessato ha risolto il problema - Andy


È possibile rimuovere il file del pacchetto in Director /var/lib/dpkg/info/ e aggiorna la fonte.

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


7
2018-05-30 08:29



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


Se tutto il resto fallisce, è possibile rimuovere manualmente il pacchetto dpkg. In esecuzione sudo dpkg -P bsnes dovrebbe eliminare bsnes.


4
2018-03-24 02:56



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


Nel mio caso apt-get install -f lavorato. 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 delle dipendenze)


2
2017-11-19 10:24





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

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


0
2018-02-23 17:09