"Los siguientes paquetes se han retenido:" ¿Por qué y cómo lo resuelvo?

877

Acabo de agregar un repositorio PPA para la versión de desarrollo de GIMP, pero aparece este error:

$ apt-get update && apt-get upgrade
...
The following packages have been kept back:
  gimp gimp-data libgegl-0.0-0 libgimp2.0

¿Por qué y cómo puedo resolverlo para poder usar la última versión en lugar de la que tengo ahora?

jfoucher
fuente
17
Hablando estrictamente, diría que es una advertencia, no un error.
Kazark

Respuestas:

905

Según un artículo en debian-administration.org ,

Si las dependencias han cambiado en uno de los paquetes que ha instalado, de modo que se debe instalar un nuevo paquete para realizar la actualización, aparecerá como "retenido".

Solución prudente 1:

Según la respuesta de Pablo , puede ejecutar sudo apt-get --with-new-pkgs upgrade, e instalará los paquetes retenidos.

Esto tiene el beneficio de no marcar los paquetes retenidos como "instalados manualmente", lo que podría forzar una mayor intervención del usuario en la línea (ver comentarios).

Si la solución de Pablo funciona para ti, por favor, vota. Si no, por favor comente lo que salió mal.

Solución prudente 2:

La solución cautelosa es correr sudo apt-get install <list of packages kept back>. En la mayoría de los casos, esto le dará a los paquetes retenidos lo que necesitan para actualizar con éxito.

Solución agresiva:

Una solución más agresiva es ejecutar sudo apt-get dist-upgrade, lo que obligará a la instalación de esas nuevas dependencias.

Pero dist-upgrade puede ser bastante peligroso . A diferencia de la actualización , puede eliminar paquetes para resolver situaciones complejas de dependencia. A diferencia de usted, APT no siempre es lo suficientemente inteligente como para saber si estas adiciones y eliminaciones podrían causar estragos.

Entonces, si se encuentra en un lugar donde la "solución cautelosa" no funciona, dist-upgrade puede funcionar ... pero probablemente sea mejor que aprenda un poco más sobre APT y resuelva los problemas de dependencia "a mano" instalando y eliminando paquetes caso por caso.

Piense en ello como arreglar un automóvil ... si tiene tiempo y es práctico con una llave inglesa, obtendrá tranquilidad al leer y hacer la reparación usted mismo. Si se siente afortunado, puede dejar su auto con su prima dist-upgradey esperar que ella sepa lo que hace.

Michael Crenshaw
fuente
180
Como esta es una respuesta aceptada, realmente necesita actualizarse para advertir sobre el uso dist-upgradeen un sistema estable, como lo han señalado muchas de las otras respuestas a continuación. Personalmente, creo que hay una respuesta más simple / segura que debe promoverse: apt-get install <list of pkgs>
Cas
77
Cas, ¿debo agregar que podría ser peligroso ejecutar una actualización dist en un sistema estable? ¿Por qué exactamente eso es peligroso? (Sinceramente, no lo sé muy bien).
Michael Crenshaw
17
Hay una respuesta de Falla del servidor que explica dist-upgrade con un poco más de detalle. Creo que vale la pena aclarar (no es peligroso como tal) que puede actualizar todo el sistema, lo que puede estar más allá de lo que el usuario espera / quiere, es decir, en el ejemplo de OP, se preguntan por qué se está frenando gimp.
Cas
19
Tenga en cuenta que sudo apt-get dist-upgradetambién puede eliminar paquetes. En consecuencia, siempre es mejor inspeccionar la lista de cambios que se realizarán antes de aceptarlos, cuando se ejecutan sudo apt-get dist-upgrade.
Eliah Kagan
66
@EliahKagan ¿Puedo agregar que incluso apt-get upgradepuede eliminar paquetes? Siempre lo hará cuando haya un conflicto de versiones de lo contrario. Piense en llvm3.6vs. llvm3.6v5(con el "v5" que significa que fue compilado gcc 5). Estos dos no pueden coexistir , solo uno de los dos puede mantenerse en el sistema. Entonces sí, también dist-upgradepuede eliminar algunos paquetes, pero no solo dist-upgradeeso haría esto; bajo ciertas circunstancias, también lo upgradeharía.
syntaxerror
500

Cada vez que recibe del comando apt-get upgradeel mensaje

The following packages have been kept back:

luego para actualizar uno o todos los paquetes retenidos, sin hacer una actualización de distribución (esto es lo que dist-upgradehace, si no recuerdo mal) es emitir el comando:

apt-get install <list of packages kept back>

esto resolverá los problemas retenidos y solicitará instalar paquetes adicionales, etc., como se explicó en otras respuestas.

usuario88285
fuente
3
Cuando los paquetes se mantienen de esta manera y yo manualmente apt-get upgrade <list of packages>, si rehago apt-get upgrade, enumerará los paquetes en cuestión como ya no son necesarios y que puedo usar apt autoremovepara eliminarlos, lo que hago, y luego uno último apt-get upgradey ya no aparecen como retenido ... Muy raro. ¿Alguna idea?
cram2208
¿ apt-get installTambién elimina los paquetes cuando es necesario para resolver situaciones de dependencia retorcidas, o tendría que ejecutar un apt-get removecomando por separado para lograr esa parte del proceso de actualización?
Michael Crenshaw
@ cram2208 Creo que ese es el comportamiento esperado. Los paquetes que se "instalaron [...] automáticamente y ya no se requieren" son las versiones anteriores de los paquetes actualizados, que ahora ya no son necesarios. apt autoremoveluego elimina estas dependencias no utilizadas.
Alex
3
Si la actualización requeriría la instalación de un nuevo paquete, el paquete se "retendrá". Primero considere usar: sudo apt-get --with-new-pkgs upgradelo que no tendría el efecto secundario de causar que los paquetes se
marquen
@ mac9416 sí, lo hace.
jarno
174

apt-get dist-upgrade es peligroso para el medio ambiente estable,

  1. configuración incorrecta de source.list y terminas con ubuntu roto.
  2. es posible que actualice toda la aplicación a la versión que no desea.

Caso de uso: la actualización del kernel se mantuvo, solo desea actualizar el kernel, no desea actualizar toda la distribución.

Mejor forma de manejar el paquete retenido:

sudo aptitude

Si ha retenido el paquete, debería ver Paquetes actualizables en la parte superior de la lista.

  • Hit + en esa lista
  • Presiona g dos veces
  • Responda debconf stuff si se le pregunta
  • Presione regresar para continuar
  • Presione Q
  • Presione yes

Su paquete guardado instalado.

Michael Crenshaw
fuente
34
apt-get dist-upgradesolo es peligroso si tienes depósitos incorrectos /etc/apt/sources.list*. Es bueno tener en cuenta que dist-upgradeactualiza todos los paquetes, pero con los repositorios predeterminados, eso debería estar bien. No usarlo dist-upgradepuede ser peligroso, ya que puede perder las actualizaciones de seguridad.
Flimm
66
apt-get dist-upgradepuede eliminar y agregar paquetes, pero no es realmente peligroso. ¡Cualquier comando de instalación de paquete puede causar daños graves si tiene problemas en su sources.listarchivo ! Un apt-get upgradecomando regular instalará cualquier paquete desde cualquier fuente de software que esté habilitado; dist-upgradeNo es único de esta manera. Además, usar aptitudepara realizar cualquier operación, al menos en amd64, es mucho más peligroso que ejecutarlo apt-get dist-upgrade, en una versión donde el error 831768 no está solucionado.
Eliah Kagan
Para mí, fue más fácil (máquina local con X funcionando) simplemente abrir synaptic y forzar la actualización del paquete. Por alguna razón, no parecía aparecer en absoluto donde lo describió en sináptico.
djvs
3
Tambiénsudo aptitude safe-upgrade
msanford
146

¿Por qué no prueba esta respuesta de Unix SE ?

sudo apt-get --with-new-pkgs upgrade

Esto permite que se instalen nuevos paquetes. Le informará qué paquetes se instalarían y le indicará antes de realizar la instalación.

aptcomando ( alternativa amigable a apt-get) compartir esta opción.

¡Usar en su apt install <pkg>lugar marcará pkg como "instalado manualmente"! Para marcarlo nuevamente como uso "instalado automáticamente" apt-mark auto <pkg>(consulte también el subcomando showmanual). Más información sobre esta respuesta .

Pablo A
fuente
20
+1 porque no tiene el efecto secundario de hacer que los paquetes se marquen como instalados manualmente.
ctrl-alt-delor
1
Nota para quien lea mi comentario anterior: no tener el efecto secundario de marcar como instalado manualmente es algo bueno. Me gusta esta respuesta
ctrl-alt-delor
1
Si. apt-mark auto <pkg>solo debería ser necesario para marcar un paquete como instalado automáticamente ( aquí la página del manual ).
Pablo A
11
Por alguna razón, sudo apt-get --with-new-pkgs upgradetodavía muestra los paquetes como "retenidos". No hay mensaje de error.
Franklin Yu
2
Solo quiero agregar que para muchas instancias actualizadas de servidores Debian 9.6, esta fue la solución más segura sin romper las cosas. Gracias por esto, Pablo, ya que afortunadamente probé otras opciones en entornos de preparación de antemano, y pude administrar muchos servidores con estándares de seguridad gracias a la inclusión de --with-new-pkgs con resultados mucho más limpios para la administración general de paquetes futuros. ¡Realmente, esta respuesta UNIX SE debería ser votada!
Julio
34

Normalmente hay dos razones por las que puede ver este mensaje.

Si la actualización del programa (a través de sudo apt-get upgrade) hace que se agreguen o eliminen paquetes, entonces el programa se retrasará. Puede usar sudo apt-get dist-upgradeen este caso, que luego ofrecerá agregar o eliminar los programas adicionales.

Esto es bastante común y generalmente no es un problema. Ocasionalmente (particularmente durante un Ubuntu alfa) a dist-upgradeofrecerá eliminar muchos otros programas, en cuyo caso probablemente desee cancelarlo.

Si el programa depende de paquetes o versiones que no están disponibles, entonces el programa se retrasará. Realmente no puede hacer nada más que esperar en esta circunstancia, ya que el paquete es básicamente desinstalable. Esto puede suceder cuando los paquetes se agregan al repositorio fuera de servicio, cuando se cambia el nombre de un paquete o cuando un paquete deja de proporcionar un paquete virtual.

jbowtie
fuente
55
¿Hay alguna manera de determinar si el paquete retenido necesita una dependencia que no se puede instalar o si se está reteniendo porque otros paquetes dependen de él? Tengo muchos paquetes retenidos y creo que ambos casos pueden aplicarse en mi sistema.
Jake
Gracias, la segunda razón fue el problema para mí. Incluso se apt-get dist-upgradenegó a instalarlo. La inspección del paquete con aptitud demostró que depende de un paquete que no está disponible. Supongo que tendré que esperar.
jlh
23

También puedes probar:

sudo aptitude safe-upgrade.

Es más seguro que full-upgrade(originalmente llamado dist-upgrade) porque "los paquetes no se eliminarán a menos que no se usen".

De man aptitude:

actualización segura

Actualiza los paquetes instalados a su versión más reciente. Los paquetes instalados no se eliminarán a menos que no se utilicen /.../ Los paquetes que no están instalados actualmente pueden instalarse para resolver dependencias a menos que se proporcione la opción de línea de comandos --no-new-installs.

Afilu
fuente
21

Lo más probable es que estos paquetes se retengan porque su instalación crearía inconsistencias de dependencia. Esto puede suceder porque está usando archivos en desarrollo activo, ppas, o porque el espejo que usa no está completamente actualizado.

En el último caso, solo espere, cuando se resuelvan las dependencias se instalará la próxima vez.

Editar:

Existe otra posibilidad, los paquetes pueden retenerse si se les retiene o si se fijan.

txwikinger
fuente
¿En qué basa esa probabilidad, sin saber lo que sea que haya ejecutado una actualización de apt-get o una actualización de apt-get dist (alt. Los equivalentes de aptitud)?
andol
Este es el problema más frecuente en preguntas de soporte y errores
txwikinger
Convenido. Probablemente deberías esperar y verificarte apt_preferences. Esto a menudo es causado por archivos de desarrollo donde las dependencias disponibles y los paquetes están cambiando muy rápidamente. Espere a que se calmen y es posible que no necesite hacerlo dist-upgrade. Si aún así lo desea dist-upgrade, mire los NUEVOS paquetes que se instalarán y los paquetes que se eliminarán antes de continuar.
Umang
Este es mi caso porque recibo el mensaje "retenido" usando dist-upgrade
Postadelmaga
En los casos en que este problema se debe a una messup con las preferencias de APT (pinning), me encontré con la reinstalación de los paquetes guardados me ayudó: apt-get install --reinstall <packages>.
tanius
9

Esto generalmente se debe a que el paquete ha agregado una dependencia, y la actualización no quiere agregarlo sin su permiso.

Si tu corres:

sudo apt-get install gimp gimp-data libgegl-0.0-0 libgimp2.0

Luego, las nuevas versiones deben instalarse junto con su nueva dependencia.

John Lawrence Aspden
fuente
Actualiza paquetes específicos (y sus dependencias) sin el compromiso (riesgos) de una actualización dist.
John Mee
8

Esto funciono para mi

sudo aptitude full-upgrade
Singh
fuente
Incluso aptitude upgradetrabajó para mí.
Bibhas
Estoy usando Ubuntu 14.04y no tengo aptitudelínea de comando
ahmed hamdy
apt-get dist-upgrademe dio el mismo mensaje, pero esto lo resolvió por mí. Tenía un paquete que estaba rompiendo la actualización de otro paquete. No necesitaba el que instalé, así que aptitude full-upgrademe dio la opción de eliminarlo para poder actualizar todo lo demás.
f.ardelian
6

He descubierto que aptitude hace un mejor trabajo al actualizar paquetes si las versiones difieren ligeramente. Tuve una situación como esta:

me@compy:/etc/apt$ apt-cache policy gzip
gzip:
  Installed: 1.3.5-15
  Candidate: 1.3.5-15+etch1
  Version table:
     1.3.5-15+etch1 0
        500 http://archive.debian.org etch/main Packages
 *** 1.3.5-15 0
        100 /var/lib/dpkg/status

Esto hizo que apt-get retrasara la actualización, pero aptitude la actualizó bien. No estoy seguro de qué algoritmo se utiliza para determinar si un paquete debe actualizarse o no. Supongo que estos dos tenían la misma versión, solo un 'calificador' diferente. Pero en cualquier caso, apt-get no lo actualizaría, pero aptitude lo haría.

Alexander Torstling
fuente
4

En mi caso, los paquetes retenidos eran los relacionados con los encabezados de Linux y el núcleo. Llegué a esto tratando de resolver un problema con un signo de exclamación rojo en el área de notificación y no poder actualizar los paquetes.

Para resolverlo, no tuve que usar ni dist-upgrade ni manual apt-get install xxx .

Lo que hice y ayudé ha sido simple y limpio :

sudo apt-get update
sudo apt-get autoremove
sudo apt-get autoclean
sudo apt-get upgrade

Tuve que confirmar manualmente la actualización de Grub y su configuración.

Luego trabajé con la computadora por un tiempo y luego apareció nuevamente el diálogo de actualización estándar, que finalmente incluyó la sección "Base de Ubuntu" con el núcleo y relacionados. La actualización se realizó sin problemas y ya no veo ningún paquete retenido.

Además, es muy importante tener en cuenta que esas * actualizaciones de buntu, incluidas las actualizaciones del kernel, son sensibles a la hibernación : tengo este problema varias veces y siempre lo resuelvo reiniciando la máquina y realizando los pasos anteriores.

Entonces, ¿tal vez esto sería suficiente?

(La situación que se describe aquí está relacionada con mi Xubuntu 15.10 a fines de diciembre de 2015)

llorón
fuente
3

Me encontré con este problema cuando se lanzó un nuevo núcleo. (Posiblemente porque tengo habilitadas las actualizaciones inestables). Encontré que la forma más sencilla de hacer la instalación era a través del instalador gráfico de Ubuntu ( update-manager).

Kazark
fuente
2

Me encontré con este problema usando synaptic porque parecía bloquearse, y para intentar solucionarlo, reinicié e intenté nuevamente.

Luego descubrí un mensaje informativo como parte del paquete con algunas instrucciones posteriores a la instalación para mí.

Tuve que presionar " detalles ", y luego ' q ' para dejar de fumar después de leer el mensaje, y luego las cosas continuaron normalmente.

Vista elíptica
fuente
2

Esta parece ser la forma correcta de reinstalar el paquete retenido:

apt-get install --reinstall libjpeg-progs

Al menos esto funcionó para mí cuando libjpeg-progsestaba atascado después de actualizar Ubuntu 14.04 a 16.04. Estoy seguro de que puede hacer lo mismo con cualquier otra aplicación retenida, por ejemplo gimp.

Fuente: https://ubuntuforums.org/showthread.php?t=2321702&p=13476183#post13476183

Stephan Henningsen
fuente
1
También podrías hacerlo sin él --reinstall.
jarno
Lo curioso es que elimina el paquete libjpeg-turbo-progs.
jarno
1

De hecho, el interruptor que necesita es el dselect-upgradeque instala / elimina las dependencias para el conjunto de paquetes en particular involucrado.

Johnny
fuente
1

He leído todas las publicaciones y descubrí que hay muchas explicaciones interesantes. Estaba probándolos todos pero no tengo ningún resultado por completo. Tengo un problema con mysql-utilities que no pude actualizar. La actualización fue propuesta por el sistema. Entonces, quiero mostrar algunos pasos para hacerlo. Por supuesto, repetiré en algunos momentos todas las publicaciones mencionadas anteriormente. Aquí está mi error, sí, lo encontré en publicaciones ya existentes, pero ¿qué debo hacer a continuación? ingrese la descripción de la imagen aquí

El siguiente paso es:

sudo apt-get --purge remove mysql-utilities

Los resultados que podemos ver en la imagen de abajo. Elimino el paquete y verifico esto por comando:

sudo apt-get -f install

Resultados - ¡Bien! Más tarde instalé esta nueva versión del paquete correctamente. ingrese la descripción de la imagen aquí

De esta manera, creo que puede ayudar a más personas nuevas porque con otros paquetes podemos seguir los mismos pasos.

Una vez, lo siento, cuando repetí en algunos lugares otras publicaciones.

Vasyl Lyashkevych
fuente
55
No utilice capturas de pantalla para el texto del terminal, ya que eso hace que Google no pueda buscarlo y que algunas personas no puedan leerlo. En su lugar, pegue el texto del terminal en su respuesta, seleccione ese texto y presione el {}botón en el editor para formatearlo correctamente.
Chai T. Rex
@ ChaiT.Rex Gracias por los comentarios, lo tomaré en cuenta para el futuro.
Vasyl Lyashkevych
1

Ubuntu 18.04 proporciona una nueva sintaxis optimizada a través de la aptcual se puede utilizar en lugar de apt-get.

sudo apt full-upgrade

sudo apt upgradese utiliza para instalar actualizaciones disponibles de todos los paquetes actualmente instalados en el sistema desde las fuentes configuradas a través de sources.list (5). Los paquetes nuevos se instalarán si es necesario para satisfacer las dependencias, pero los paquetes existentes nunca se eliminarán. Si la actualización de un paquete requiere la eliminación de un paquete instalado, la actualización de este paquete no se realiza.

sudo apt full-upgrade realiza la función de actualización, pero eliminará los paquetes instalados actualmente si es necesario para actualizar el sistema en su conjunto.

l --marc l
fuente