Incapaz de corregir problemas, ha retenido paquetes rotos

216

Después de actualizar de 10.04 a 12.04, estoy tratando de instalar diferentes paquetes. Por ejemplo, ia32-libs y skype (4.0).

Al intentar instalarlos, aparece el mensaje de error "No se pueden corregir los problemas, ha retenido los paquetes rotos".

Salida de comandos:

sudo apt-get install -f
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

Después de ejecutar esto:

sudo dpkg --configure -a
foo@foo:~$ sudo apt-get install -f
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
trond
fuente
3
Puede ayudarnos si nos mostró el comando que realmente está intentando (como sudo apt-get install ia32-libs) y el resultado de ese comando. Además, ¿ sudo apt-get dist-upgrademuestra alguna actualización disponible?
thomasrutter
3
No sé qué tiene de malo su pregunta, no veo ningún error real, ni el que usted describe en su título.
Braiam
posible duplicado de ¿Cómo resuelvo dependencias insatisfechas?
Eliah Kagan

Respuestas:

238

Ese mensaje de error en particular puede indicar que ha retenido paquetes, pero también puede indicar un problema diferente.

Puede obtener una lista de paquetes retenidos reales con:

dpkg --get-selections | grep hold

Si no hay ninguno, o ninguno parece estar relacionado, entonces probablemente sea otra cosa. Verifique cuidadosamente la salida del comando que estaba intentando cuando recibió el mensaje de error, ya que puede haber otras pistas en la salida completa de ese comando, aparte del mensaje de error.

Otro método de solución de problemas puede ser utilizar aptitude en lugar de apt-get para intentar instalar su paquete:

sudo aptitude install <packagename>

Aptitude se rendirá con menos facilidad e intentará encontrar soluciones que puedan implicar la modificación de otros paquetes. Puede darle más explicaciones del problema y opciones para solucionarlo.

Ocasionalmente, aptitude estará demasiado ansioso por eliminar o degradar una gran cantidad de paquetes para satisfacer su solicitud, en cuyo caso volver a intentar -fcambiar sus prioridades y ayudarlo a encontrar soluciones que impliquen eliminar / degradar menos paquetes, incluso si eso significa que no todos los cambios que solicitó puede seguir adelante:

sudo aptitude -f install <packagename>
thomasrutter
fuente
66
¿Alguna idea de cómo deshacer un paquete? :-)
Eugene van der Merwe
66
Esa es una pregunta aparte .
thomasrutter
6060
Aptitude fue más útil para mí que apt-get, gracias por la pista.
szx
99
Una cosa a tener en cuenta es que la aptitud puede hacer que sea más fácil hacer más daño a su sistema. Por ejemplo, si apt-get no puede instalar algo debido a dependencias conflictivas, se dará por vencido. Sin embargo, aptitude podría ofrecer seguir adelante, pero desinstalar un montón de otros paquetes para satisfacer esos conflictos, o incluso paquetes de degradación. Simplemente debe ser consciente de lo que sugiere y proceder solo si es una buena idea.
thomasrutter
44
Los paquetes "en espera" no tienen nada que ver con el mensaje, solo que el conflicto se evitó manteniéndolos presionados (no instalando, actualizando, degradando o eliminando).
Braiam el
33

Eso me paso a mi tambien. Todo lo que hice fue sudo apt-get updatey eso solucionó mi problema. Buena suerte.

usuario2292711
fuente
9

Me encontré con un escenario similar con respecto a las dependencias faltantes. En mi caso, estaba tratando de instalar curl en ubuntu saucy salamander 13.10 ...

El error indicó que la dependencia requería una versión anterior de la biblioteca curl3.

Pude degradarme a la versión anterior al intentar instalar curl usando aptitude.

Cuando notó la dependencia que faltaba y la razón (requería una versión anterior del archivo de la biblioteca), me dio varias opciones sobre cómo responder ... y// n/q

Yhabría abortado la instalación, Nbuscaría otra opción y Qsimplemente saldría y no haría nada más, dejando un paquete roto.

Seleccioné N, y me dio la opción de degradar el archivo de la biblioteca a una versión anterior. Entonces eso fue lo que hice, y curl terminó de instalar sin más errores.

  • Puedo considerar actualizar el archivo de la biblioteca nuevamente después de la instalación, pero bueno, hasta ahora todo bien.
Peopleunit
fuente
9

Tuve un escenario similar en una nueva instalación de 14.04, sin archivos listados dpkg --get-selections | grep holdy sin alegría después sudo apt-get update.

Lo que me solucionó fue un simple

sudo apt-get autoremove

Cuando intenté reinstalar el paquete que fallaba, funcionó bien. ¡Hurra!

yochannah
fuente
4

Tuve el mismo problema, ejecuté el comando de verificación de paquetes desde la otra respuesta ( dpkg --get-selections | grep hold) y vi

tomcat7                                         deinstall
tomcat7-common                                  install

así que usé " apt-get remove tomcat7-common"

Entonces podría instalar Tomcat 6 (estaba eliminando Tomcat 7 e instalando Tomcat 6 como lo hace).

Nollaig
fuente
Los paquetes "en espera" no tienen nada que ver con el mensaje, solo que el conflicto se evitó manteniéndolos presionados (no instalando, actualizando, degradando o eliminando)
Braiam
agregue la purga de la bandera: apt-get remove --purge packet
Sergio Abreu
4

Estas son algunas formas rápidas y fáciles de corregir el you have held broken packageserror.

  • Abra su archivo sources.list /etc/apt/sources.listy verifique que no haya ninguna fuente de software para una versión de Ubuntu diferente a la versión de Ubuntu que está utilizando actualmente. Si encuentra líneas de lanzamiento incorrectas en sources.list, abra el archivo sources.list con sudoedit /etc/apt/sources.list, comente las líneas incorrectas en sources.list precediéndolas con un #carácter, guarde el archivo sources.list y ejecútelo sudo apt updatepara actualizar la lista de Paquetes de software disponibles.

  • Seleccione la opción Reparar paquetes rotos en el administrador de paquetes Synaptic. Ejecute los siguientes comandos para instalar Synaptic.

    sudo apt update  
    sudo apt upgrade   
    sudo apt install synaptic  
    

    Abra Synaptic y en Synaptic seleccione Editar -> Reparar paquetes rotos y luego repita Editar -> Reparar paquetes rotos por segunda vez.

    En Synaptic en el panel izquierdo, haga clic en el botón Filtros personalizados que está marcado con el cursor del mouse en la siguiente captura de pantalla. De la lista en la esquina superior izquierda, seleccione Roto . En el panel central se enumerarán los paquetes rotos que aún deben repararse.

    Mostrar paquetes rotos en Synaptic

    Seleccione los paquetes rotos de uno en uno. Seleccione un paquete roto y luego abra la terminal y ejecútelo . Los resultados de este comando le dirán si ese paquete roto se instaló desde los repositorios predeterminados de Ubuntu o desde alguna otra fuente. Si el paquete roto se instaló desde alguna otra fuente, tal vez ese paquete pueda eliminarse junto con su fuente de software y reemplazarse por una versión diferente del mismo paquete de los repositorios predeterminados de Ubuntu. Por lo general, esto significa arreglar un paquete roto al degradar ese paquete a una versión anterior.apt policy <package-name>

  • Si recibe este mensaje de error:

    Try 'apt-get -f install' with no packages (or specify a solution)  
    

    Ejecute los siguientes comandos:

    sudo apt update  
    sudo apt upgrade   
    sudo apt-get -f install   
    
  • Retire manualmente un paquete roto.

    1. Encuentra tu paquete en /var/lib/dpkg/info

      ls -l /var/lib/dpkg/info | grep <package>
      
    2. Mueva la carpeta del paquete a otra ubicación.

      cd /tmp && sudo mkdir new-package-location  
      sudo mv /var/lib/dpkg/info/<package>.* /tmp/new-package-location/    
      
    3. Ejecute el siguiente comando:

      sudo dpkg --remove --force-remove-reinstreq <package>  
      

Si todos estos métodos no funcionan, es posible que los paquetes rotos sean causados ​​por algo que está incrustado tan profundamente en el sistema operativo que ninguno de estos métodos tiene ningún efecto sobre él. El primer lugar obvio para buscar este "algo" profundamente incrustado es en las fuentes de software en /etc/apt/sources.list. Verifique el archivo sources.list para ver si contiene líneas no estándar que pueden estar causando un error de paquetes rotos. Un archivo estándar de Ubuntu sources.list se parece a los archivos sources.list en esta respuesta .

La forma correcta de eliminar una línea sospechosa de sources.list es comentarla precediéndola con un #carácter. Luego, ejecute sudo apt updatepara actualizar la lista de software disponible.

karel
fuente
0

Para mí, ninguno de los anteriores funcionó porque mi sistema no se actualizó. yo hice

Home Key > Software Updater > Install

y actualicé mi sistema; luego, podría instalar mi paquete normalmente con apt.

nathangeorge1
fuente
0

Tuve el mismo problema al reinstalar xsanedespués de una ppainstalación fallida . Como le sucedió a yochannah, "no hay archivos listados dpkg --get-selections | grep hold, y no hay alegría después sudo apt-get update".

La pista que apt-getme dio es

xsane : Depends: libsane (>= 1.0.24) but it is not going to be installed

Debido a la respuesta de yochannah, tuve la sensación de que debía eliminar algunos paquetes instalados previamente. Y fue así, tuve que eliminar manualmente todos los paquetes relacionados a sane, entre otros xsane-commony libsane, que todavía estaba instalado como ppaversión.

¡Por lo tanto, ten cuidado con lo que has instalado anteriormente y ordena!

amado por Jesús
fuente