Imagen de paquete Debian (.deb)

apt upgrade: Los siguientes paquetes se han retenido

 
 

En este artículo, veremos algunas soluciones al mensaje «Los siguientes paquetes se han retenido» (en inglés: «the following packages have been kept back») que muestra la herramienta apt upgrade cuando intentamos actualizar nuestro equipo.

 
Índice General

     

  • Introducción (Volver al índice General)
    Periódicamente actualizamos los paquetes de nuestras distribuciones a sus versiones más nuevas, para corregir errores o conseguir mejoras del software.
    Normalmente, en las distribuciones basadas en paquetes .deb, cuando actualizamos el sistema con los comandos apt update y apt upgrade, se actualizan todos los paquetes instalados a sus versiones más nuevas disponibles. Sin embargo, si las dependencias de un paquete instalado han cambiado con la nueva versión, de modo que requiera la instalación de nuevos paquetes, el paquete instalado no se actualizará cuando actualicemos el sistema y aparecerá el mensaje «Los siguientes paquetes se han retenido» (en inglés «the following packages have been kept back») seguido de una lista con los nombres de los paquetes retenidos.

    A continuación repasaremos el proceso de actualización del sistema y las posibles soluciones para instalar los paquetes retenidos.

  •  

  • Actualizando la distribución (Volver al índice General)
    Vamos a ver el proceso de actualización de una distribución basada en paquetes .deb, hasta que aparece el mensaje: «Los siguientes paquetes se han retenido» (en inglés «the following packages have been kept back»).

    1. En primer lugar, actualizamos la lista de paquetes disponibles en los repositorios con el siguiente comando:
      $ sudo apt-get update

      Este comando nos indicará el número de paquetes que se pueden actualizar en caso de haber paquetes actualizables, y si los hubiese, nos avisa de la existencia del comando apt list --upgradable que nos permite listar los paquetes actualizables antes de instalarlos.

      $ sudo apt list --upgradable
    2. En segundo lugar, actualizamos los paquetes disponibles con el siguiente comando:
      $ sudo apt-get upgrade

      Llegados a este punto, todos los paquetes de nuestro sistema estarían actualizados.

    3. Si nos encontramos en el caso que trata este artículo, al actualizar las listas de paquetes disponibles en los repositorios, obtendríamos algo similar a lo siguiente:
      1
      2
      3
      4
      5
      6
      
      $ sudo apt-get update
      Obj:1 http://kali.download/kali kali-rolling InRelease
      Leyendo lista de paquetes... Hecho
      Creando árbol de dependencias... Hecho
      Leyendo la información de estado... Hecho
      Se pueden actualizar 5 paquetes. Ejecute «apt list --upgradable» para verlos.
      • La línea 6 del ejemplo anterior, nos indica que hay 5 paquetes que se pueden actualizar y nos avisa de la existencia del comando apt list --upgradable, que nos permite listar los paquetes actualizables.

       
      Veamos con el comando apt list --upgradable la lista de los paquetes que se pueden actualizar del ejemplo anterior:

      $ sudo apt list --upgradable
      Listando... Hecho
      gstreamer1.0-libav/kali-rolling 1.18.5-1 amd64 [actualizable desde: 1.16.2-2]
      libavcodec58/kali-rolling 7:4.4.1-1+b1 amd64 [actualizable desde: 7:4.3-2]
      libavfilter7/kali-rolling 7:4.4.1-1+b1 amd64 [actualizable desde: 7:4.3-2]
      libavformat58/kali-rolling 7:4.4.1-1+b1 amd64 [actualizable desde: 7:4.3-2]
      libavutil56/kali-rolling 7:4.4.1-1+b1 amd64 [actualizable desde: 7:4.3-2]
    4. Si intentamos actualizar los paquetes, en este caso los 5 del ejemplo anterior, estos no se actualizarán, al final de la ejecución del comando aparecerá algo similar a lo siguiente:
      1
      2
      3
      4
      5
      6
      7
      8
      
      $ sudo apt-get upgrade
      Leyendo lista de paquetes... Hecho
      Creando árbol de dependencias... Hecho
      Leyendo la información de estado... Hecho
      Calculando la actualización... Hecho
      Los siguientes paquetes se han retenido:
        gstreamer1.0-libav libavcodec58 libavfilter7 libavformat58 libavutil56
      0 actualizados, 0 nuevos se instalarán, 0 para eliminar y 5 no actualizados.
      • La línea 6 nos avisa de que hay paquetes retenidos.
      • La línea 7 muestra los nombres de los paquetes retenidos.
      • La línea 8 nos indica el número de paquetes no actualizados que en este caso coincide con los paquetes retenidos.
    5.  

      Llegados a este punto, si queremos tener actualizada nuestra distribución, podemos optar por alguna de las soluciones siguientes.

  •  

  • Soluciones (Volver al índice General)
    A continuación, vamos a exponer cuatro soluciones. Empezaremos por la más cauta y terminaremos por la más radical. La elección de la solución de penderá del caso particular de cada sistema o intención del usuario. Algunas soluciones funcionan bien en algunos sistemas y otras no.

       

    • Solución 1: Utilizar el comando «apt-get install» (Volver al índice General)
      La solución más cauta es la instalación manual de los paquetes retenidos. Para hacerlo, ejecutaremos el siguiente comando:

      $ sudo apt-get install <lista de paquetes retenidos>

      Donde <lista de paquetes retenidos> son los nombres de todos los paquetes retenidos separados por espacios. En la mayoría de los casos, este comando instalará todas las dependencias de los paquetes retenidos.

      Por ejemplo:

      $ sudo apt-get install gstreamer1.0-libav libavcodec58 libavfilter7 libavformat58 libavutil56
    •  

    • Solución 2: Utilizar el comando «aptitude safe-upgrade» (Volver al índice General)
      Esta solución podría calificarse como igual de cauta que la Solución 1. La diferencia con la Solución 1 es que este comando no eliminará ningún paquete a menos que no esté en uso. También instalará todas las dependencias de los paquetes retenidos.

      Si el paquete aptitude no está instalado en nuestro sistema, ejecutamos el siguiente comando:

      $ sudo apt-get install aptitude

      Para actualizar los paquetes retenidos con aptitude, ejecutamos el siguiente comando:

      $ sudo aptitude safe-upgrade
    •  

    • Solución 3: Utilizar el comando «apt-get –with-new-pkgs upgrade» (Volver al índice General)
      Instala automáticamente cualquier paquete adicional necesario para actualizar los paquetes retenidos pero, sin marcar los paquetes retenidos como instalados manualmente. Esto podría forzar una mayor intervención del usuario en la línea de comandos. Para hacerlo, ejecutamos el siguiente comando:

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

    • Solución 4: Utilizar el comando «apt-get dist-upgrade» (Volver al índice General)
      Esta solución actualiza la distribución subiéndola de versión. En la mayoría de los casos es la solución más radical, ya que puede eliminar automáticamente los paquetes que considere innecesarios mientras maneja las dependencias. Esto puede dar lugar a situaciones no deseadas. Por otro lado, en distribuciones del tipo Rolling Release, como es Kali Linux, no es una opción radical, por el contrario es de lo más normal.

      Para subir de versión nuestra distribución, ejecutamos el siguiente comando:

      $ sudo apt-get dist-upgrade

      Es aconsejable, que terminado el proceso de actualización limpiemos nuestro sistema de paquetes innecesarios. Para hacerlo, ejecutamos el siguiente comando:

      $ sudo apt-get autoremove

      Hecho todo esto, sería conveniente hacer un reinicio del sistema.

      Esta solución se ha probado en una distribución Kali Linux 2020.2 que terminó actualizada a la versión 2021.3 sin errores de ningún tipo.

 

Espero que este artículo os haya sido de utilidad. Si pensáis que podéis colaborar para mejorar este artículo, que hay algo erróneo en él o simplemente deseáis comentarlo, por favor, dejad vuestra opinión más abajo.
  Configuración de privacidad y de cookies.
Seguir J. Carlos:

Técnico Informático - Desarrollo Web - Administración de Redes

Técnico Informático. Desarrollo Web. Administración de redes.

Últimas publicaciones de

20 comentarios

  1. Alonso Alejandro Colín Cruz

    Gracias por compartir la solución me ayudo mucho.

    • J. Carlos

      Hola Olga,
      Siento que no te haya servido. Yo lo he probado en Debian y en Kali Lunux y lo he conseguido. Siempre empiezo por la solución menos radical, como indico en el artículo.
      ¿Qué solución o soluciones has utilizado? ¿Podrías darme más información, como la salida de los comandos?

      Un saludo

  2. Salvador Fernandez

    Buenos días. Fantástico. Muy bien explicado. Muchísimas gracias.

    • J. Carlos

      Hola Jaime,
      En primer lugar perdón por la tardanza, pero ya he vuelto.

      Un saludo y gracias a ti por visitar ZeppelinuX.

  3. Juan Angel

    Gracias por esta ayuda, me ha servido mucho. Una cosita, al escribir «sudo apt-get list –upgradable» de daba error, porque es «sudo apt list –upgradable». No sé si es cosa de mi sistema o es una errata o algo no lo estoy haciendo bien. Estoy probando lo de «aptitude safe-upgrade», porque tengo 1199 de paquetes no actualizados… y a mano, como que no… seguramente haya forma de pasar la lista a apt-get install, pero estoy siguiendo esa otra forma que parece bastante buena, espero que funcione!!

    • J. Carlos

      Hola Juan Angel,
      En primer lugar perdón por la tardanza, pero ya he vuelto.
      «sudo apt-get list –upgradable», corregido en el artículo. Gracias por tu aporte.
      Espero que alguna de las formas utilizadas en el artículo te sirva.
      Un saludo y gracias por visitar ZeppelinuX.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.