1213 votos

"Los siguientes paquetes han sido retenidos: ¿Por qué y cómo lo soluciono?"

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

$ apt-get update && apt-get upgrade
...
Los siguientes paquetes se han retenido:
  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?

26 votos

Estrictamente hablando, diría que es una advertencia, no un error.

0 votos

Qué mensaje tan basura. ¿Por qué el sistema operativo no puede simplemente hacer lo necesario?

1379voto

JeffV Puntos 160

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

Si las dependencias han cambiado en uno de los paquetes que tienes instalados de manera que se debe instalar un nuevo paquete para realizar la actualización, entonces eso se mostrará como "kept-back".

(Ten en cuenta que esta no es la única razón por la que podrías ver el mensaje "los paquetes han sido retenidos". Otra razón es que <a href="https://askubuntu.com/q/1431940/2355">las actualizaciones por fases pueden estar activadas</a>, y las actualizaciones aún no se han lanzado para tu máquina).

Solución cautelosa 1:

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

Esto tiene el beneficio de no marcar los paquetes retenidos como "instalados manualmente", lo cual podría requerir más intervención del usuario en el futuro (ver comentarios).

Si la solución de Pablo funciona para ti, por favor vota positivamente. Si no, comenta qué salió mal.

Solución cautelosa 2:

La solución cautelosa consiste en ejecutar sudo apt-get install . En la mayoría de los casos, esto dará a los paquetes retenidos lo que necesitan para actualizarse con éxito.

Solución agresiva:

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

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

Así que si te encuentras en una situación en la que la "solución cautelosa" no funciona, dist-upgrade puede funcionar... pero probablemente sería mejor aprender un poco más sobre APT y resolver los problemas de dependencia "manualmente" instalando y eliminando paquetes caso por caso.

Imagina que estás arreglando un auto... si tienes tiempo y sabes usar una llave inglesa, te sentirás más tranquilo leyendo y haciendo la reparación tú mismo. Si te sientes con suerte, puedes dejar tu auto con tu prima dist-upgrade y esperar que ella sepa lo que hace.

207 votos

Como esta es una respuesta aceptada, realmente necesita actualizarse para advertir sobre el uso de dist-upgrade en un sistema estable, como muchos de las otras respuestas han indicado abajo. Personalmente, creo que hay una respuesta más simple/más segura que necesita ser promovida: apt-get install

8 votos

Cas, ¿debería agregar que podría ser peligroso ejecutar una dist-upgrade en un sistema estable? ¿Por qué exactamente es peligroso? (Honestamente, no conozco apt del todo bien).

20 votos

Hay una respuesta en Server Fault que explica dist-upgrade con más detalle. Creo que simplemente vale la pena aclarar (no es peligroso como tal) que puede actualizar todo el sistema, lo cual puede estar más allá de lo que el usuario espera/desea, es decir, en el ejemplo del OP se preguntan por qué se está reteniendo gimp.

581voto

user88285 Puntos 1511

Cuando recibas del comando apt-get upgrade el mensaje

Los siguientes paquetes se han mantenido sin actualizar:

entonces para actualizar uno o todos los paquetes mantenidos, sin realizar una actualización de distribución (esto es lo que hace dist-upgrade, si recuerdo correctamente) es emitir el comando:

apt-get install 

esto resolverá los problemas de paquetes mantenidos sin actualizar y pedirá instalar paquetes adicionales, etc. como se explicó en otras respuestas.

Ver también: ¿Por qué usar apt-get upgrade en lugar de apt-get dist-upgrade?

3 votos

Cuando los paquetes se mantienen atrás de esta manera y manualmente apt-get upgrade , si vuelvo a hacer apt-get upgrade, aparecerán los paquetes en cuestión como ya no necesarios y que puedo usar apt autoremove para eliminarlos, lo cual hago, y luego uno último apt-get upgrade y ya no aparecen como mantenidos atrás... Muy extraño. ¿Algún pensamiento?

0 votos

¿El comando apt-get install también elimina paquetes cuando es necesario para resolver situaciones de dependencias complicadas, o tendrías que ejecutar un comando separado apt-get remove para completar esa parte del proceso de actualización?

0 votos

@cram2208 Creo que ese es el comportamiento esperado. Los paquetes que fueron "instalados automáticamente y [...] ya no son necesarios" son las versiones anteriores de los paquetes actualizados, que ya no son necesarios. apt autoremove luego elimina estas dependencias no utilizadas.

292voto

Pablo Bianchi Puntos 66

Respondí a una pregunta similar aquí, explicando un poco más sobre las razones detrás de este problema.


Prueba esta respuesta en Unix SE:

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

Esto permite que se instalen nuevos paquetes. Te informará sobre qué paquetes se instalarían y te preguntará antes de realizar la instalación.

apt command (una alternativa amigable a apt-get) comparte esta opción.

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

25 votos

+1 porque no tiene efectos secundarios de marcar los paquetes como instalados manualmente.

3 votos

Nota para quien lea mi comentario anterior: no tener el efecto secundario de marcar como instalado manualmente es algo bueno. Me gusta esta respuesta.

0 votos

Entonces, si usas sudo apt-get --with-new-pkgs upgrade sin ejecutar apt-mark auto , ¿todo estará bien? ¿Es el segundo comando necesario solo si decides instalar manualmente los paquetes retenidos?

185voto

apt-get dist-upgrade es peligroso para un entorno estable,

  1. Configuración incorrecta de source.list y terminas con un Ubuntu roto.
  2. Puede que te actualices toda una aplicación a una versión que no deseas.

Caso de uso: el upgrade del kernel se detiene, solo quieres actualizar el kernel, no toda la distribución.

Mejor manera de manejar los paquetes retenidos:

sudo aptitude

Si tienes un paquete retenido deberías ver Paquetes actualizables en la parte superior de la lista.

  • Presiona + en esa lista
  • Presiona g dos veces
  • Responde las configuraciones de debconf si se te preguntan
  • Pulsa enter para continuar
  • Pulsa Q
  • Pulsa yes

Tu paquete retenido se instalará.

38 votos

El comando apt-get dist-upgrade solo es peligroso si tienes repositorios incorrectos en /etc/apt/sources.list*. Es importante tener en cuenta que dist-upgrade actualiza todos los paquetes, pero con los repositorios predeterminados, eso debería estar bien. No utilizar dist-upgrade podría ser peligroso, ya que podrías perderte actualizaciones de seguridad.

7 votos

El comando apt-get dist-upgrade puede remover así como agregar paquetes, pero no es realmente peligroso. ¡Cualquier comando de instalación de paquetes puede causar daños graves si tiene problemas en su archivo sources.list! Un comando regular apt-get upgrade instalará cualquier paquete de cualquier fuente de software que esté habilitada; dist-upgrade no es único en este sentido. Además, usar aptitude para realizar cualquier operación en absoluto, al menos en amd64, es mucho más peligroso que ejecutar apt-get dist-upgrade, en una versión donde bug 831768 no esté solucionado.

0 votos

Para mí, fue más fácil (máquina local con X en funcionamiento) abrir simplemente synaptic y forzar la actualización del paquete. Por alguna razón, no parecía aparecer en absoluto donde lo describiste en synaptic.

39voto

UnkwnTech Puntos 21942

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

Si al actualizar el programa (a través de sudo apt-get upgrade) se agregarían o eliminarían paquetes, entonces el programa quedará retenido. En este caso, puedes usar sudo apt-get dist-upgrade, que luego ofrecerá agregar o eliminar los paquetes adicionales.

Esto es bastante común y generalmente no es un problema. Ocasionalmente (especialmente durante una versión alfa de Ubuntu) una dist-upgrade ofrecerá eliminar muchos otros programas, en cuyo caso probablemente quieras cancelarlo.

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

6 votos

¿Existe alguna manera de determinar si el paquete retenido necesita una dependencia que no se puede instalar o si se mantiene porque otros paquetes dependen de él? Tengo muchos paquetes retenidos y creo que ambos casos pueden aplicarse en mi sistema.

0 votos

Gracias, la segunda razón fue el problema para mí. Incluso apt-get dist-upgrade se negó a instalarlo. Al inspeccionar el paquete con aptitude, vi que depende de un paquete que no está disponible. Supongo que tendré que esperar.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X