apt dice que los paquetes se han retenido, ¿qué hacer?

22

La salida de apt-get upgradees:

The following packages have been kept back:
certbot python-acme python-certbot python-certbot-apache python-cryptography python-openssl

¿Qué significa esto? ¿Debo tomar medidas? ¿Entonces qué?

Jarle Hammen Knudsen
fuente

Respuestas:

36

Solución rápida y fácil:

He tenido el mismo problema, varias veces. NO lo hagas sudo apt-get dist-upgradeprimero. Muy importante. **** NOTA: Esta solución es para máquinas basadas en Debian pero no funcionará en KDE Neon . Para actualizar KDE Neon, debe usar sudo pkcon update. ****

¿Por qué?

Puede hacer que su sistema sea muy inestable, los programas pueden fallar y puede perder mucha funcionalidad en su sistema operativo.

Usted DEBE instalar cada paquete individual, Sin embargo , durante ese proceso, otras dependencias también se instalarán de forma automática y su problema será resuelto en tan sólo unos minutos.

No he tenido problemas con la siguiente solución. Es bastante rápido y fácil.


Primero, haz esto:

apt list --upgradable

  • Esto mostrará una lista de paquetes que se pueden actualizar.

A continuación, haz esto:

  • Comience al principio de la lista con el primer paquete y escriba:

sudo apt-get install package-name-here

  • Esto se ejecutará durante el proceso de instalación y las dependencias de extracción / instalación.

Después de que el proceso se complete, haga esto:

apt list --upgradable

  • Esto mostrará nuevamente qué paquetes se pueden actualizar. Su lista de paquetes ahora debería estar disminuyendo. Siga la lista de paquetes y escriba apt list --upgradabledespués de cada instalación de paquete. Esto solo tomará un par de minutos en completarse.

Finalmente:

sudo apt-get autoclean

sudo apt-get update && sudo apt-get dist-upgrade

Si esta solución funcionó para usted, no olvide votarla de manera que la solución correcta esté disponible para otros y esté en la parte superior de la lista de respuestas.

Si por alguna razón esta solución no funciona para usted, consulte la respuesta del usuario GAD3R a continuación. También es una buena solución.

Gracias.

Gregory Smitherman
fuente
1
Para mí, el paquete era ubuntu-minimal. Tus instrucciones funcionaron perfectamente.
DeanM
No use esta solución si está usando KDE Neon.
Gregory Smitherman
11

¿Qué significa esto?

The following packages have been kept back:

La respuesta esta aqui

Esto significa que hay nuevas versiones de estos paquetes que no se instalarán por algún motivo. Las posibles razones son dependencias rotas (un paquete del que depende no tiene una versión disponible para descargar) o nuevas dependencias (el paquete ha llegado a depender de nuevos paquetes desde la última versión).

¿Debo tomar medidas?

Debe usar dist-upgradepara instalar las nuevas dependencias y actualizar los paquetes:

sudo apt-get dist-upgrade

El problema se puede resolver ejecutando, dist-upgradesi no es necesario:

Arreglar dependencias rotas

sudo apt-get -f install 

Elimine algunos paquetes que ya no están instalados en su sistema:

sudo apt-get autoclean

Ponga el paquete deseado en espera:

echo "<package_name> hold" | dpkg --set-selections

Reconfigure el paquete nombrado:

dpkg-reconfigure <package_name>
GAD3R
fuente
3

De esta respuesta de Unix SE :

En primer lugar, como se mencionó anteriormente, ¡NO actualice la actualización de ningún sistema de producción! Si bien dist-upgrade "resolverá" los paquetes retenidos definitivamente no es la solución a este problema y es muy probable que le cause más dolor que bien si lo ejecuta sin conocer las implicaciones en su sistema.

Si la actualización de un paquete requiere la instalación de paquetes adicionales, se "retendrá" cuando se ejecute sudo apt-get upgrade.

Como se mencionó anteriormente, puede instalar estos paquetes "retenidos" manualmente ejecutándolos explícitamente, sudo apt-get install [paste kept back packages here]pero esto marcará estos paquetes como "instalados manualmente", que a menudo no es lo que queremos.

Para instalar automáticamente los paquetes adicionales necesarios para actualizar los paquetes "retenidos" sin marcar los paquetes "retenidos" como instalados manualmente, simplemente ejecute sudo apt-get --with-new-pkgs upgrade.

Brian Heese
fuente
Más información sobre --with-new-pkgslos efectos secundarios de otras alternativas aquí .
Pablo A
2

Incluí esta respuesta en mi blog. Si quieres ver que puedes ir desde este enlace .

El error anterior es muy común en la terminal de Ubuntu cuando intenta actualizar ( apt-get upgrade). Esto suele suceder porque las dependencias de un paquete que instala ha cambiado. Para actualizar, primero debe actualizarlos también. Por lo tanto, es muy sencillo resolver eso. Podrá ver los paquetes que se mantuvieron debajo de este mensaje de error. Como ejemplo, puedo ver los siguientes paquetes en la lista:

gnome-software gnome-software-common linux-generic linux-headers-generic linux-image-generic snapd ubuntu-core-launcher ubuntu-software

No solo escriba sudo apt-get dist-upgradeEs muy peligroso ya que instala todas las actualizaciones pendientes. Esto podría llevar su entorno de trabajo a un estado altamente inestable.

Por lo tanto, mi opinión es usar famosos

sudo apt-get install [package]

Puede reemplazarlo [package]con el paquete que esté en el mensaje de error. También puede ponerlos como están en una lista (solo cópielos y péguelos). Como ejemplo en mi caso puedo ingresar

sudo apt-get install gnome-software gnome-software-common linux-generic linux-headers-generic linux-image-generic snapd ubuntu-core-launcher ubuntu-software

Si quieres hacer

sudo apt-get dist-upgrade

por alguna razón, solo asegúrese de inspeccionar la lista de paquetes usando la opción de simulación -s( sudo apt-get -s dist-upgrade), o sin la -sopción puede terminar la ejecución antes de aceptar. (siempre puedes elegir la opción no)

Dimuth Tharaka Menikgama
fuente
2

Recientemente, una actualización de seguridad de Debian introdujo algunas nuevas dependencias. En este caso, el linux-imagepaquete comenzó a requerir linux-firmware, entre algunos otros. Entonces fueron retenidos y no instalados por ellos unattended-upgrade. Después de algunas pruebas y confirmaciones, pude instalar selectivamente solo esos paquetes, sin tocar otras actualizaciones pendientes:

apt-get -yy install $(apt-get -s upgrade | sed '1,/kept back/d;/will be upgraded/,$d')

Dick Visser
fuente
1

Este artículo resume muy bien por qué sucede esto:

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".

La solución a esto es instalarlos explícitamente con

sudo apt install [packages]

Probablemente desee marcar estos paquetes como instalados automáticamente, a menos que usted mismo se preocupe por ellos y no solo para satisfacer las dependencias.

sudo apt-mark auto [packages]

Para evitar que esto suceda en primer lugar, recomiendo usar

sudo apt --with-new-pkgs upgrade

para actualizar paquetes en el futuro, lo que permite la instalación de nuevos paquetes para satisfacer los cambios en las dependencias.

Karl Bartel
fuente
¡Dos aprobado por --with-new-pkgs! Y permítanme enfatizar una vez más que, " ¡NO des-actualice ningún sistema de producción! Si bien la actualización de dist" resolverá "los paquetes retenidos definitivamente no es la solución a este problema y probablemente le causará más dolor que bien si usted ejecutarlo sin conocer las implicaciones en su sistema ".
xpt