¿Qué significa "Los siguientes paquetes han sido retenidos"?

72

Cuando hago un apt-get upgrademensaje, a veces recibo un mensaje que dice "Los siguientes paquetes se han retenido". Por ejemplo:

$ sudo apt-get upgrade                                                                                                
Reading package lists... Done                                                                                                          
Building dependency tree                                                                                                               
Reading state information... Done                                                                                                      
The following packages have been kept back:                                                                                            
  linux-headers-server linux-image-server linux-server                                                                                 
0 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.

Que significa exactamente? Obviamente, los paquetes se han retenido y no están instalados, pero ¿por qué?

La siguiente pregunta sería: ¿cómo se actualizan estos paquetes retenidos?

Charles Roper
fuente
2
Puede encontrar una explicación muy clara aquí: debian-administration.org/article/69/…
jplandrain
Resumí los comentarios y la documentación técnica sobre: ​​Los siguientes paquetes se han retenido. Los invito a leer mi artículo y dejar comentarios para que esto pueda mejorarse. Gracias por su tiempo para abordar esta petición. Además, deseo que encuentres útil la publicación. Este es su enlace: guillermo.lopez.co.cr/… Por favor, cite este artículo como un recurso cuando alguien necesite ayuda sobre este tema.
ithan

Respuestas:

63

Si la actualización requiere que se elimine otro paquete o que se instale un nuevo paquete, el paquete se "retendrá". Como explica la página del manual para la actualización de apt-get :

Los paquetes actualmente instalados con nuevas versiones disponibles se recuperan y actualizan; en ningún caso se eliminan los paquetes instalados actualmente, o los paquetes que aún no están instalados se recuperan e instalan.

Para superar esto, puedes hacer

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.

Chad
fuente
66
Bien, esa es la explicación más clara hasta ahora. Sin embargo, la página de manual a la que se vinculó en die.net no incluye la opción --with-new-pkgs. Este sí: manpages.debian.org/cgi-bin/man.cgi?query=apt-get
Charles Roper el
1
Pero actualicé y actualicé todos los paquetes. Entonces, ¿por qué esos paquetes no se actualizan?
Nullpointer
2
@Nullpointer "apt-get upgrade" no instalará nuevos paquetes (a menos que proporcione el indicador). Sin la marca, si la actualización de un paquete existente requeriría la instalación de un nuevo paquete, esa actualización no sucederá.
Chad
Esto no funciona para mí (Ubuntu 19.04) y da como resultado exactamente el mismo mensaje que `apt upgrade`, es decir," retenido ".
Marc
18

El informe básico es que apt-get upgradeno actualizará los paquetes para los cuales el administrador de paquetes desea eliminar y reinstalar el paquete. Esto sucede mucho en los parches de seguridad porque, a menudo, en realidad fueron las bibliotecas precursoras de la compilación distribuible final las que fueron parcheadas. La funcionalidad "seguir adelante y eliminar cosas" está presente, apt-get dist-upgradepero asegúrese de ejecutarla apt-get updateprimero en caso de que los chicos de la cadena descubrieran algo desde la última vez que lo intentó. A veces extrañan cosas y las arreglan rápidamente.

rhoyerboat
fuente
3

Tratar apt-get dist-upgrade. Desde la página del manual:

dist-upgrade

dist-upgradeAdemás de realizar la función de upgrade, también maneja inteligentemente las dependencias cambiantes con nuevas versiones de paquetes; apt-get tiene un sistema de resolución de conflictos "inteligente" e intentará actualizar los paquetes más importantes a expensas de los menos importantes si es necesario. Entonces, el dist-upgradecomando puede eliminar algunos paquetes. El /etc/apt/sources.listarchivo contiene una lista de ubicaciones para recuperar los archivos de paquete deseados. Consulte también apt_preferences(5)un mecanismo para anular la configuración general de paquetes individuales.

Si bien este comando se usa para actualizar a una nueva versión principal del sistema operativo, no lo hace de manera predeterminada. El archivo /etc/apt/sources.listse debe cambiar a la nueva versión, y luego una dist-upgradese utiliza.

Darin Luckie
fuente
1

Solo haz

sudo apt-get install linux-headers-server linux-image-server linux-server

para actualizar los paquetes retenidos.

Entonces corre apt-get upgradey estarás bien.

Robert
fuente
55
Esto es incorrecto. apt-get dist-upgradese NO actualizar su sistema operativo a una nueva versión. man apt-getpara ver las diferencias
BT643
@ BT643 (y aquellos que votaron a favor del comentario) rechacen las respuestas incorrectas en lugar de dejar un comentario. Especialmente respuestas descaradamente erróneas como esta que perpetúan un error común. Dependemos de los votos para traer buen contenido al frente, pero también para empujar hacia abajo el contenido incorrecto.
terdon
1
@terdon Lo intenté pero no tengo suficiente representante :) (necesito 125 para votar a favor).
BT643
¿No es la primera parte (instalar / actualizar solo los paquetes retenidos) una buena respuesta? Luego proceda con la actualización. Extracción del infractor consejos sobre dist-upgrade suena como una idea mejor que sólo downvoting una respuesta parcialmente correcta ...
Xen2050
En primer lugar considerar el uso de: sudo apt-get --with-new-pkgs upgradeque no tendría efecto colateral de causar paquetes a ser marcado como instalado manualmente
l l --marc