¿Cómo eliminar / instalar un paquete que no está completamente instalado?

62

Fui a instalar bsnes el otro día y por alguna razón la instalación falló. Ahora, no puedo actualizar, instalar nuevos paquetes, o básicamente hacer cualquier comando apt-get ya que todos intentan procesar este paquete roto y fallan. Intentar instalar un nuevo paquete también lo condena al mismo destino. El error que obtengo es:

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)

He estado buscando en Google y aquí en Ask Ubuntu pero no he encontrado una solución que funcione. La solución comúnmente sugerida es ejecutar lo siguiente:

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

Esto sin embargo no funciona. Todos los comandos apt-get fallan con el mismo error que el anterior y el comando dpkg simplemente no ayuda. La otra cosa que a menudo sugieren es purgarlo a través de Synaptic o la línea de comando, que también falla.

Gracias por la ayuda

Bijak
fuente

Respuestas:

60

Para usuarios avanzados, use bajo su propio riesgo.

De acuerdo con el siguiente mensaje de error:

subprocess installed post-installation script returned error exit status 127

Es posible que desee editar /var/lib/dpkg/info/[package_name].postinsty comentar todo (o mejor aún, intente comprenderlo e identificar el problema), luego intente apt-getnuevamente.

Tenga en cuenta que, aunque en esta pregunta en particular el mensaje se refiere a "post-instalación", podría haber mencionado, por ejemplo, "pre-eliminación" o "post-eliminación" (en cuyo caso la extensión del archivo a editar habría sido .prermo .postrm) .

Skippy le Grand Gourou
fuente
2
En realidad este es el mejor método. Reinstalar dpkgno siempre ayuda.
Danatela
2
Montones de gracias. Tuve que arreglarlo, /var/lib/dpkg/info/[package_name].prermpero tu publicación me dio la dirección correcta. Sin embargo, definitivamente para usuarios avanzados, ¡esto es arriesgado !
surf el
La mejor respuesta ¡Gracias! La corrección .prermy los .postrmarchivos solucionan el problema.
fusor
42

Además de los que ya ha publicado, hay algunos otros comandos que pueden ser útiles.

  • Autoclean borra el repositorio local de archivos de paquetes recuperados.

    sudo apt-get autoclean
    
  • Forzar la instalación / eliminación de paquetes. ☠Utilice con precaución

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

    y

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

Además, como siempre, puede usar dpkgpara instalar, eliminar y purgar paquetes.

  • Instalar en pc

    sudo dpkg -i <pkgname>
    
  • Eliminar

    sudo dpkg -r <pkgname>
    
  • Purga

    sudo dpkg -P <pkgname>
    
usuario registrado
fuente
Tanto dpkg como los comandos apt-get --force-yes devuelven el mismo error que estaba obteniendo antes. Autoclean no devuelve un error, pero tampoco parece hacer nada con los dos paquetes rotos.
Bijak
@Bijak Seguramente debes haber intentado purgar bsnes.
Usuario registrado
Sí, con dpkg -P, apt-get purge, y con Synaptic
Bijak
Publique el resultado dedpkg -l |grep bsnes
Usuario registrado el
rF bsnes 0.088-7 amd64 Emulador SNES / SuperFamicom preciso
Bijak
27

Entonces, después de buscar más en Google y leer cuidadosamente los mensajes de error nuevamente, parece que es dpkgnecesario reinstalarlo.

sudo apt-get install --reinstall dpkg

Lo que señaló que este era el problema (si alguien busca y ve esto) es que update-alternatives: not foundestaba en el mensaje de error. Tan pronto como se reinstaló dpkg, los otros paquetes se instalaron normalmente automáticamente.

Bijak
fuente
3
¿Por qué la única respuesta correcta (y aceptada) hasta ahora en la lista con menos de ⅓ de los votos de la respuesta principal? +1
David Foerster
por un lado: debido a que no funciona para paquetes que ya no se pueden descargar "La reinstalación de linux-image-extra-4.4.0-65-generic no es posible, no se puede descargar".
Joe
3
Esta es probablemente la solución menos probable para cualquier persona que venga aquí según el título de la pregunta. Pero hay muchas razones por las que uno puede terminar con este problema, por lo que habrá muchas soluciones propuestas "esto funciona para mí".
michael
Esto en realidad no funciona.
NelsonGon
15

Puede eliminar el archivo del paquete en esta /var/lib/dpkg/info/ruta y actualizar la fuente.

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

Luego, reinstale su paquete sudo apt-get install [package_name]

Doc

Hamed
fuente
44
En realidad tenías mejor uso sudo rm /var/lib/dpkg/info/[pakege_name].*. De lo contrario, también eliminará los paquetes que comienzan con el mismo nombre. De todos modos, gracias por esto, fue la única solución que funcionó para mí
smac89
13

Si todo lo demás falla. Lo que hice fue que primero cambié el directorio a:

cd /var/lib/dpkg/info

luego eliminé todo con .postinst:

sudo rm *.postinst

luego actualice el repositorio

sudo apt-get update

entonces todo volvió a la normalidad cuando lo hice:

sudo apt-get --force-yes install openjdk-7-jre-headless
Mike B
fuente
66
Esto elimina todos los scripts posteriores a la instalación, no solo el del paquete afectado. Demasiado celoso en mi opinión. -1
David Foerster
Si es fácil identificar y eliminar solo el script particular posterior a la instalación que causa un problema, esta puede ser una forma muy conveniente de eliminar un paquete que falla.
Ian Mackinnon el
después de una pesadilla con problemas con el kernel, renombrar el .postinst de solo el kernel afectado solucionó el problema
Andy
5

Si todo lo demás falla, puede eliminar manualmente el paquete dpkg. Correr sudo dpkg -P bsnesdebería purgarse bsnes.

saiarcot895
fuente
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

En mi caso apt-get install -ffuncionó. Estaba instalando mysql-workbench-community

Previamente probado apt autoclean

Vi ese error dpkg debido a algunas dependencias faltantes que podrían corregirse mediante la instalación en modo forzado (instalación de dependencias)

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

Después de ejecutar lo anterior, puede instalar / actualizar / eliminar / purgar como de costumbre para cualquier paquete.

Uddhav Gautam
fuente