Solución de problemas de APT en Ubuntu: reparación de paquetes rotos, retenciones y errores de GPG

Corrija APT en Ubuntu sin conjeturas.

Índice

Los fallos de APT son comunes en máquinas Ubuntu de larga vida útil, y suelen aparecer después de una actualización de versión, un cambio en un repositorio de terceros, la eliminación de un PPA, la instalación manual de un .deb o una instalación de paquetes interrumpida.

El mensaje de error puede parecer dramático, pero la mayoría de los problemas de APT no son misteriosos: son problemas de estado donde la visión de APT sobre los repositorios, las versiones y los paquetes instalados ya no coincide.

laptop ubuntu apt packages

APT intenta responder cuatro preguntas:

  1. ¿Qué repositorios están habilitados?
  2. ¿Qué versiones de paquetes están disponibles?
  3. ¿Qué paquetes ya están instalados?
  4. ¿Qué cambios de paquetes están permitidos?

Cuando esas respuestas entran en conflicto, obtienes paquetes retenidos, dependencias rotas, claves públicas faltantes, errores de PPA incorrectos o paquetes retenidos durante la actualización. Esta guía te ofrece una secuencia práctica de solución de problemas para APT en Ubuntu, escrita para desarrolladores, ingenieros de DevOps y usuarios de Linux que quieren corregir el sistema sin pegar a ciegas comandos aleatorios de hilos de foros. Combínalo con nuestra hoja de trucos de APT y dpkg para Ubuntu para comandos diarios de instalación y actualización, y navega por la colección más amplia de Herramientas de Desarrollo para flujos de trabajo relacionados con Linux.

La versión corta

Si tu sistema está solo ligeramente dañado, comienza aquí:

sudo apt update
sudo dpkg --configure -a
sudo apt --fix-broken install
sudo apt update
sudo apt upgrade

Si hay paquetes retenidos:

apt list --upgradable
apt-mark showhold
sudo apt full-upgrade

Si un PPA o repositorio de terceros falla:

ls /etc/apt/sources.list.d/
sudo apt update

Lee la línea del repositorio que falla y luego deshabilita o corrige ese repositorio. Si ves NO_PUBKEY, no importes a ciegas claves aleatorias de un servidor de claves; busca las instrucciones oficiales del repositorio, instala la clave del repositorio en /etc/apt/keyrings y vincúlala a ese repositorio con signed-by.

Antes de corregir nada: Lee el error de APT primero

Ejecuta esto primero:

sudo apt update

No lo omitas. apt update actualiza los metadatos de los paquetes. No actualiza los paquetes. Te indica si Ubuntu puede leer todos los repositorios configurados y verificar sus metadatos.

Luego verifica tu versión de Ubuntu y su nombre en clave; un nombre de versión desactualizado en /etc/apt/sources.list.d/ es una causa frecuente de errores 404 y de archivo Release. Si no estás seguro de qué versión tienes, consulta cómo verificar tu versión de Ubuntu:

lsb_release -a

O:

cat /etc/os-release

También verifica qué se puede actualizar:

apt list --upgradable

Y verifica si algún paquete está retenido:

apt-mark showhold

Esto te da la primera división en el árbol de decisiones: identificar la clase de falla primero facilita la solución de problemas porque cada clase tiene una corrección inicial diferente:

  • Problema de repositorio: apt update falla.
  • Problema de dependencias: apt update funciona, pero la instalación o actualización falla.
  • Problema de paquete retenido: APT se niega a cambiar paquetes específicos.
  • Problema de fuente mixta: Un PPA, un .deb manual o un repositorio antiguo proporciona versiones incompatibles.
  • Problema de instalación interrumpida: dpkg ha extraído paquetes que nunca se configuraron.

Tipos comunes de fallos de APT en Ubuntu

Paquetes retenidos

Un paquete retenido no siempre es un error; significa que APT decidió no actualizar un paquete usando el comando actual. Esto suele ocurrir cuando la actualización requiere instalar nuevas dependencias, eliminar paquetes antiguos o cambiar un paquete de una manera que apt upgrade simple no realizará.

Verifica los detalles:

apt list --upgradable
apt-cache policy package-name

Intenta una actualización completa solo después de leer lo que APT quiere hacer:

sudo apt full-upgrade

full-upgrade está permitido para instalar nuevos paquetes y eliminar paquetes si es necesario para completar la actualización. Eso es útil, pero también es por eso que debes leer los cambios propuestos antes de aceptar. En una estación de trabajo, full-upgrade suele estar bien después de la revisión; en un servidor, lee las eliminaciones dos veces.

Paquetes retenidos manualmente

Un paquete retenido es diferente de un paquete que simplemente se queda atrás. Una retención es una instrucción explícita que impide que APT instale, actualice o elimine automáticamente ese paquete. Las retenciones son útiles para fijar una versión de kernel, base de datos, controlador o entorno de ejecución, y también es fácil olvidarse de ellas.

Lista de paquetes retenidos:

apt-mark showhold

Retener un paquete:

sudo apt-mark hold package-name

Eliminar una retención:

sudo apt-mark unhold package-name

Si ves errores de dependencias que involucran un paquete retenido, decide si la retención sigue siendo intencional. No elimines retenciones automáticamente. Pueden estar protegiendo un servicio de producción, un controlador o una cadena de herramientas sensible a la compatibilidad.

Dependencias rotas

Las dependencias rotas significan que APT no puede encontrar un conjunto de paquetes válido, lo que suele indicar un conflicto de versiones en lugar de una descarga corrupta.

Las causas comunes incluyen:

  • Un paquete requiere una versión que no está disponible.
  • Un PPA proporciona una biblioteca más nueva de la que Ubuntu espera.
  • Un .deb instalado manualmente depende de paquetes de otra versión.
  • La instalación de un paquete se interrumpió.
  • Un repositorio para la versión incorrecta de Ubuntu está habilitado.
  • La fijación de paquetes o las retenciones impiden el cambio de versión necesario.

Comienza con:

sudo dpkg --configure -a
sudo apt --fix-broken install

Luego inspecciona el paquete:

apt-cache policy package-name
apt-cache depends package-name
apt-cache rdepends package-name

Luego usa esos comandos para encontrar el conflicto de versión de paquete que está bloqueando APT, en lugar de ejecutar cada comando de reparación en secuencia.

Errores de clave GPG y NO_PUBKEY

Un error NO_PUBKEY significa que APT recibió metadatos del repositorio, pero no puede verificar la firma porque falta la clave pública requerida: un problema de confianza, no simplemente un problema de descarga.

Un error típico se ve así:

The following signatures could not be verified because the public key is not available: NO_PUBKEY ABCD1234EF567890

Las instrucciones antiguas a menudo usaban apt-key add, pero evita eso para la configuración de nuevos repositorios. Los sistemas Ubuntu modernos deben usar un anillo de claves específico del repositorio y signed-by.

Un mejor patrón se ve así:

sudo install -d -m 0755 /etc/apt/keyrings

curl -fsSL https://example.com/repo-key.gpg \
  | sudo gpg --dearmor -o /etc/apt/keyrings/example.gpg

echo "deb [signed-by=/etc/apt/keyrings/example.gpg] https://example.com/apt stable main" \
  | sudo tee /etc/apt/sources.list.d/example.list

sudo apt update

Reemplaza la URL y la línea del repositorio con las instrucciones oficiales del proveedor.

La parte importante es esta:

signed-by=/etc/apt/keyrings/example.gpg

Esa línea signed-by vincula la clave a un solo repositorio, lo cual es más limpio y seguro que poner cada clave de terceros en un almacén de confianza global.

Errores de PPA incorrecto o de archivo Release

Los fallos de PPA a menudo se ven así:

The repository does not have a Release file.

O:

404 Not Found

Causas comunes:

  • El PPA no admite tu versión de Ubuntu.
  • Actualizaste Ubuntu, pero el PPA aún apunta al nombre en clave antiguo.
  • El PPA fue eliminado.
  • El mantenedor dejó de publicar paquetes.
  • Agregaste un PPA destinado a otra versión de Ubuntu.

Verifica tu nombre en clave:

. /etc/os-release
echo "$VERSION_CODENAME"

Lista archivos de fuente de terceros:

ls /etc/apt/sources.list.d/

Inspecciónalos:

grep -R "^deb" /etc/apt/sources.list /etc/apt/sources.list.d/

Deshabilita una fuente sospechosa renombrándola:

sudo mv /etc/apt/sources.list.d/example.list /etc/apt/sources.list.d/example.list.disabled
sudo apt update

Si APT funciona después de deshabilitar el archivo, has encontrado la fuente problemática y puedes corregirla o eliminarla permanentemente.

Flujo de trabajo seguro de solución de problemas de APT

Paso 1: Actualizar metadatos

sudo apt update

Si esto falla, corrige los repositorios antes de intentar reparar paquetes. APT no puede resolver las dependencias correctamente si su índice de paquetes está desactualizado o incompleto.

Busca líneas que contengan:

NO_PUBKEY
Release file
404 Not Found
does not have a Release file
The repository is not signed

Estos son problemas de repositorio o de confianza, y deben corregirse antes de intentar cualquier reparación de paquetes.

Paso 2: Finalizar la configuración de paquetes interrumpida

Si una instalación de paquete se interrumpió, dpkg puede haber extraído archivos pero no configurado el paquete.

Ejecuta:

sudo dpkg --configure -a

Si esto tiene éxito, continúa:

sudo apt --fix-broken install

Si falla, lee el nombre del paquete y el error cuidadosamente. El paquete nombrado en la parte inferior del error a menudo es más importante que el paquete que originalmente intentaste instalar.

Paso 3: Pedir a APT que repare las dependencias

sudo apt --fix-broken install

Este comando le pide a APT que corrija los problemas de dependencias instalando dependencias faltantes o eliminando paquetes que no se pueden satisfacer. Lee la acción propuesta cuidadosamente, especialmente cualquier eliminación.

Ten cuidado si APT quiere eliminar:

  • ubuntu-desktop
  • ubuntu-server
  • linux-generic
  • paquetes de gestor de pantalla
  • paquetes de red
  • paquetes de base de datos
  • paquetes de entorno de ejecución de contenedores
  • paquetes de entorno de escritorio

A veces, eliminar un metapaquete es inofensivo. A veces es una señal de advertencia de que tus fuentes de paquetes están mezcladas mal. No aceptes eliminaciones grandes sin entenderlas.

Paso 4: Verificar paquetes retenidos

apt-mark showhold

Si un paquete retenido está bloqueando la actualización, inspéctalo:

apt-cache policy package-name

Si la retención ya no es necesaria:

sudo apt-mark unhold package-name
sudo apt update
sudo apt upgrade

Si la retención es intencional, no luches contra APT: corrige el repositorio o la selección de paquetes alrededor de la retención en lugar de eliminar la protección.

Paso 5: Inspeccionar versiones de paquetes

Para un paquete con problemas de dependencias:

apt-cache policy package-name

Esto muestra:

  • Versión instalada
  • Versión candidata
  • Versiones disponibles
  • Qué repositorio proporciona cada versión

apt-cache policy es uno de los comandos de depuración de APT más útiles porque muestra de dónde proviene cada versión disponible.

Ejemplo:

apt-cache policy docker-ce

Si la versión candidata proviene de un PPA inesperado o un repositorio antiguo, has encontrado la probable causa del conflicto de dependencias.

Paso 6: Buscar repositorios mezclados

Lista las fuentes habilitadas:

grep -R "^deb" /etc/apt/sources.list /etc/apt/sources.list.d/

Busca:

  • Nombres en clave antiguos de Ubuntu
  • Repositorios Debian en Ubuntu
  • PPAs para otra versión de Ubuntu
  • Repositorios de proveedores duplicados
  • Instrucciones de Snap y APT mezcladas para la misma herramienta
  • Archivos .list antiguos dejados atrás después de desinstalar software

Un antipatrón común es instalar una herramienta desde un repositorio de proveedor y luego agregar un PPA o un .deb manual que proporcione bibliotecas superpuestas. APT puede manejar muchas fuentes, pero no puede reconciliar intenciones conflictivas a menos que alinees los repositorios tú mismo.

Paso 7: Intentar una instalación o actualización simulada

Antes de hacer cambios, simula:

apt -s install package-name

O:

apt -s full-upgrade

La opción -s simula la operación. Es útil cuando quieres ver qué haría APT sin cambiar el sistema.

Corregir paquetes retenidos

Listar paquetes retenidos

apt-mark showhold

Si no se imprime nada, no hay paquetes retenidos con apt-mark, y puedes pasar a las verificaciones de dependencias o repositorios.

Retener un paquete intencionalmente

sudo apt-mark hold package-name

Buenas razones para retener un paquete:

  • Se sabe que una versión del kernel funciona con tu hardware.
  • Una actualización de base de datos necesita planificación.
  • Una actualización de controlador rompe tu GPU.
  • Una versión de entorno de ejecución debe coincidir con la producción.
  • Un paquete de proveedor no es compatible con la última dependencia.

Malas razones para retener un paquete:

  • Copiaste un comando de una guía antigua.
  • Olvidaste por qué fue retenido.
  • Estás evitando un error de dependencia sin entenderlo.

Eliminar una retención

sudo apt-mark unhold package-name

Luego actualiza y actualiza:

sudo apt update
sudo apt upgrade

Si el paquete aún no se actualiza, no era solo un problema de retención. Verifica la política:

apt-cache policy package-name

Corregir dependencias rotas

La secuencia de reparación estándar

Usa esta secuencia cuando la instalación o actualización de paquetes falló a mitad de camino:

sudo apt update
sudo dpkg --configure -a
sudo apt --fix-broken install
sudo apt upgrade

Este orden importa porque cada paso prepara el terreno para el siguiente: apt update actualiza los metadatos del repositorio, dpkg --configure -a termina de configurar los paquetes extraídos, apt --fix-broken install permite que APT reconcilie dependencias faltantes o conflictivas, y apt upgrade reanuda las actualizaciones normales de paquetes.

Eliminar un paquete local instalado mal

Si el problema comenzó después de instalar un .deb descargado, inspéctalo:

dpkg -l | grep package-name
apt-cache policy package-name

Elimínalo:

sudo apt remove package-name

Si los archivos de configuración también están causando problemas:

sudo apt purge package-name

Luego repara:

sudo apt --fix-broken install

Reinstalar un paquete dañado

Si un paquete está instalado pero roto:

sudo apt install --reinstall package-name

Esto es útil cuando los archivos faltan o están corruptos, pero las fuentes de los paquetes son de otra manera saludables y quieres actualizar los archivos instalados sin cambiar las versiones.

Corregir problemas de PPA y repositorios de terceros

Encontrar PPAs y repositorios de terceros

ls /etc/apt/sources.list.d/

Muestra líneas de repositorio activas:

grep -R "^deb" /etc/apt/sources.list /etc/apt/sources.list.d/

En sistemas Ubuntu más nuevos, también puede ver archivos .sources usando el formato deb822:

ls /etc/apt/sources.list.d/*.sources

Muéstralos:

cat /etc/apt/sources.list.d/*.sources

Deshabilitar un PPA de forma segura

Renombra el archivo de fuente:

sudo mv /etc/apt/sources.list.d/example.list /etc/apt/sources.list.d/example.list.disabled
sudo apt update

Para archivos deb822:

sudo mv /etc/apt/sources.list.d/example.sources /etc/apt/sources.list.d/example.sources.disabled
sudo apt update

Renombrar el archivo de fuente es reversible y más seguro que eliminar la configuración del repositorio inmediatamente, porque puedes renombrarlo de nuevo si deshabilitaste la fuente incorrecta.

Eliminar paquetes de un PPA

Deshabilitar un PPA detiene las descargas futuras de paquetes de él. No baja automáticamente la versión de los paquetes ya instalados desde ese PPA.

Si el PPA causó conflictos de bibliotecas, es posible que necesites bajar la versión de los paquetes a las versiones de Ubuntu.

Instala ppa-purge:

sudo apt install ppa-purge

Luego purga el PPA:

sudo ppa-purge ppa:owner/name

Usa ppa-purge cuidadosamente y lee los cambios propuestos antes de aceptar, porque puede eliminar o bajar la versión de varios paquetes relacionados.

Después de una actualización de versión

Después de actualizar Ubuntu, los PPAs antiguos son una fuente común de errores.

Busca nombres en clave antiguos:

grep -R "jammy\|noble\|oracular\|plucky" /etc/apt/sources.list /etc/apt/sources.list.d/

Ajusta los nombres en clave para tu sistema real. Por ejemplo, si estás en Ubuntu 24.04, tu nombre en clave es noble. Si una fuente de terceros aún apunta a un nombre en clave anterior, verifica si ese proveedor admite tu versión actual de Ubuntu. Si estás configurando una máquina nueva en lugar de reparar una actualización, nuestra guía de instalación de Ubuntu 24.04 recorre el proceso de agregar repositorios de proveedores con signed-by desde el principio.

No solo edites el nombre en clave y esperes lo mejor: algunos repositorios no publican paquetes para cada versión de Ubuntu, así que verifica el soporte del proveedor para tu versión primero.

Corregir errores de GPG y NO_PUBKEY

Qué significa NO_PUBKEY

Los repositorios de APT publican metadatos firmados, y tu máquina necesita la clave pública correspondiente para verificar esos metadatos. Si falta la clave, APT se niega a confiar en el repositorio, que es el comportamiento que deseas: no deshabilites las verificaciones de firma solo para hacer que el error desaparezca.

El patrón moderno de anillo de claves

Crea el directorio del anillo de claves:

sudo install -d -m 0755 /etc/apt/keyrings

Descarga y desarma la clave del proveedor:

curl -fsSL https://example.com/repository-key.gpg \
  | sudo gpg --dearmor -o /etc/apt/keyrings/example.gpg

Establece permisos legibles:

sudo chmod 0644 /etc/apt/keyrings/example.gpg

Agrega el repositorio con signed-by:

echo "deb [signed-by=/etc/apt/keyrings/example.gpg] https://example.com/linux/ubuntu noble stable" \
  | sudo tee /etc/apt/sources.list.d/example.list

Luego actualiza:

sudo apt update

Reemplaza noble con tu nombre en clave de Ubuntu si es necesario:

. /etc/os-release
echo "$VERSION_CODENAME"

Por qué apt-key es un hábito incorrecto

Las guías antiguas a menudo usan:

curl -fsSL https://example.com/key.gpg | sudo apt-key add -

Evita apt-key add para configuraciones nuevas. El estilo antiguo de apt-key agrega claves a un área de confianza amplia, lo que dificulta razonar sobre qué clave es de confianza para qué repositorio, mientras que el estilo moderno signed-by limita la clave a un repositorio específico y es una higiene básica de la cadena de suministro.

Encontrar claves de confianza heredadas

Todavía puede tener claves antiguas en:

/etc/apt/trusted.gpg
/etc/apt/trusted.gpg.d/

Lista archivos:

ls -l /etc/apt/trusted.gpg.d/

No elimines claves al azar: primero asigna cada clave a un repositorio, luego migra un repositorio a la vez a /etc/apt/keyrings y signed-by.

Errores comunes de GPG

No uses servidores de claves aleatorios como tu primera opción al corregir errores NO_PUBKEY.

Mejor orden:

  1. Usa la documentación de instalación oficial del proveedor.
  2. Descarga la clave desde la URL HTTPS oficial del proveedor.
  3. Almacénala en /etc/apt/keyrings.
  4. Víncula con signed-by.
  5. Ejecuta sudo apt update.

Evita estos atajos:

sudo apt update --allow-unauthenticated
sudo apt install --allow-unauthenticated package-name

Pueden funcionar temporalmente, pero eliminan la verificación de firma que te protege de metadatos de repositorio manipulados.

Corregir “El repositorio no está firmado”

Este error suele significar una de estas cosas:

  • El repositorio no publica metadatos firmados.
  • La URL del repositorio es incorrecta.
  • El repositorio ya no admite tu versión de Ubuntu.
  • Un proxy o espejo está devolviendo el contenido incorrecto.
  • Estás usando HTTP donde el proveedor ahora espera HTTPS.
  • El archivo de fuente tiene el套件 o componente incorrecto.

Encuentra la fuente que falla:

sudo apt update

APT imprimirá la URL. Luego búscala:

grep -R "example.com" /etc/apt/sources.list /etc/apt/sources.list.d/

Deshabilita temporalmente:

sudo mv /etc/apt/sources.list.d/example.list /etc/apt/sources.list.d/example.list.disabled
sudo apt update

Si APT vuelve a funcionar después de deshabilitar el archivo, reinstala ese repositorio desde las instrucciones oficiales actuales del proveedor en lugar de reactivar la configuración antigua.

Corregir advertencias de repositorios duplicados

APT puede advertir que un destino está configurado múltiples veces.

Lista entradas coincidentes:

grep -R "repo-url-or-domain" /etc/apt/sources.list /etc/apt/sources.list.d/

Los repositorios duplicados a menudo aparecen después de ejecutar scripts de instalación de proveedores múltiples veces.

Mantén un archivo de fuente. Deshabilita los otros:

sudo mv /etc/apt/sources.list.d/duplicate.list /etc/apt/sources.list.d/duplicate.list.disabled
sudo apt update

Las advertencias de duplicados no siempre son fatales, pero son una señal de configuración descuidada, así que mantén un archivo de fuente y deshabilita los duplicados.

Corregir paquetes de la versión incorrecta de Ubuntu

Uno de los peores problemas de APT es mezclar versiones de Ubuntu: por ejemplo, una máquina en Ubuntu 24.04 no debería buscar casualmente paquetes de Ubuntu 22.04 o Debian testing. A veces funciona por un tiempo, pero eventualmente el gráfico de dependencias se convierte en un rompecabezas que APT no puede resolver limpiamente.

Verifica tu versión:

. /etc/os-release
echo "$VERSION_CODENAME"

Busca fuentes:

grep -R "^deb" /etc/apt/sources.list /etc/apt/sources.list.d/

Busca nombres en clave extraños en las fuentes habilitadas, luego inspecciona el paquete afectado:

apt-cache policy package-name

Si la versión instalada provino de un repositorio antiguo o extraño, deshabilita ese repositorio y baja la versión o reinstala el paquete afectado desde los repositorios de Ubuntu.

Una ruta de reparación conservadora es:

sudo apt update
sudo apt install --reinstall package-name

Para conflictos más profundos, es posible que necesites eliminar el paquete y reinstalarlo desde la fuente correcta en lugar de forzar una actualización sobre una versión extraña.

Limpiar la caché de APT y paquetes no utilizados

La limpieza de la caché de APT no es una corrección de dependencias en sí misma, pero puede ayudar después de muchas instalaciones fallidas al recuperar espacio en disco y limpiar archivos de paquetes desactualizados.

Elimina paquetes que se instalaron automáticamente y ya no son necesarios:

sudo apt autoremove

Limpia los archivos de paquetes descargados:

sudo apt clean

O elimina solo archivos de paquetes obsoletos:

sudo apt autoclean

Usa autoremove con cuidado en servidores y escritorios con pilas de controladores instalados manualmente, y lee la lista de eliminaciones antes de aceptar.

Recetas prácticas de solución de problemas de APT

Receta: Paquete retenido

sudo apt update
apt list --upgradable
apt-mark showhold
sudo apt full-upgrade

Si APT propone cambios razonables después de la simulación, acéptalos. Si propone eliminaciones grandes, detente e inspecciona:

apt-cache policy package-name

Receta: Paquete retenido bloquea la actualización

apt-mark showhold
apt-cache policy package-name
sudo apt-mark unhold package-name
sudo apt upgrade

Solo desretenga un paquete si la retención ya no es intencional, porque eliminar una retención que protege software de producción puede desencadenar una actualización que rompe cosas.

Receta: Instalación interrumpida

sudo dpkg --configure -a
sudo apt --fix-broken install
sudo apt upgrade

Receta: Error NO_PUBKEY

  1. Identifica el repositorio desde sudo apt update.
  2. Encuentra las instrucciones de instalación oficiales actuales del proveedor.
  3. Instala la clave en /etc/apt/keyrings.
  4. Usa signed-by en el archivo de fuente.
  5. Ejecuta sudo apt update.

Estructura de ejemplo:

sudo install -d -m 0755 /etc/apt/keyrings

curl -fsSL https://example.com/key.gpg \
  | sudo gpg --dearmor -o /etc/apt/keyrings/example.gpg

sudo chmod 0644 /etc/apt/keyrings/example.gpg

echo "deb [signed-by=/etc/apt/keyrings/example.gpg] https://example.com/ubuntu noble main" \
  | sudo tee /etc/apt/sources.list.d/example.list

sudo apt update

Receta: PPA no tiene archivo Release

sudo apt update
ls /etc/apt/sources.list.d/
grep -R "ppa.launchpadcontent.net\|launchpad" /etc/apt/sources.list.d/

Deshabilita el PPA:

sudo mv /etc/apt/sources.list.d/example.list /etc/apt/sources.list.d/example.list.disabled
sudo apt update

Luego decide si eliminar, reemplazar o purgar paquetes de ese PPA.

Receta: .deb manual rompió dependencias

dpkg -l | grep package-name
apt-cache policy package-name
sudo apt remove package-name
sudo apt --fix-broken install

Si aún necesitas el software, prefiere el repositorio APT actual del proveedor sobre instalaciones manuales repetidas de .deb, que tienden a acumular conflictos de dependencias con el tiempo.

Comandos esenciales de solución de problemas de APT

Repositorio y metadatos

sudo apt update
grep -R "^deb" /etc/apt/sources.list /etc/apt/sources.list.d/
ls /etc/apt/sources.list.d/

Estado del paquete

apt list --installed
apt list --upgradable
apt-mark showhold
dpkg -l | grep package-name

Política y dependencias del paquete

apt-cache policy package-name
apt-cache depends package-name
apt-cache rdepends package-name

Reparación

sudo dpkg --configure -a
sudo apt --fix-broken install
sudo apt install --reinstall package-name
sudo apt full-upgrade

Limpieza

sudo apt autoremove
sudo apt autoclean
sudo apt clean

Simulación

apt -s install package-name
apt -s full-upgrade

Qué no hacer

No elimines /var/lib/dpkg al azar

Si ves consejos para eliminar archivos de estado de dpkg, sé escéptico. La base de datos de dpkg es el registro de paquetes instalados, y eliminar partes de ella puede convertir un problema de paquete reparable en un proyecto completo de recuperación del sistema.

No desactives la verificación de firmas

Evita:

--allow-unauthenticated

Si un repositorio no se puede verificar, corrige la clave o deshabilita el repositorio en lugar de omitir la autenticación.

No mezcles versiones de Ubuntu casualmente

No agregues repositorios para otra versión de Ubuntu a menos que entiendas la fijación de APT y las consecuencias de las dependencias.

Esto aplica especialmente a:

  • entornos de escritorio
  • controladores gráficos
  • pilas de Python
  • entornos de ejecución de contenedores
  • paquetes de Kubernetes
  • paquetes de base de datos

No trates a los PPAs como inofensivos

Los PPAs son útiles, pero siguen siendo repositorios de paquetes que pueden reemplazar bibliotecas y paquetes del sistema: lo cual puede ser exactamente lo que quieres, o exactamente por qué tu próxima actualización se rompe. Prefiere los PPAs para aplicaciones específicas, no para bases del sistema amplias, a menos que confíes en el mantenedor y entiendas la ruta de actualización.

Árbol de decisiones de solución de problemas de APT

Usa este modelo mental:

flowchart TD A["¿Falla sudo apt update?"] -->|sí| B["Corregir repositorios, claves GPG, PPAs, red o archivos de versión"] A -->|no| C["¿Se interrumpió una instalación o actualización?"] C -->|sí| D["Ejecuta dpkg --configure -a, luego apt --fix-broken install"] C -->|no| E["¿Hay paquetes retenidos?"] E -->|sí| F["Inspecciona apt-mark showhold y decide si desretener"] E -->|no| G["¿Hay paquetes retenidos por actualización?"] G -->|sí| H["Inspecciona la simulación de apt full-upgrade y la política del paquete"] G -->|no| I["¿Está involucrada una fuente de terceros?"] I -->|sí| J["Inspecciona apt-cache policy y archivos de fuente"] I -->|no| K["Inspecciona el error específico de dependencia del paquete"]

La mayoría de los problemas de APT se vuelven manejables una vez que dejas de tratarlos como un solo error grande y comienzas a separar la salud del repositorio, el estado del paquete, la resolución de dependencias y la configuración de confianza: el árbol de decisiones anterior es un atajo para esa disciplina.

Línea base recomendada para máquinas de desarrollo

Para una estación de trabajo de desarrollo Ubuntu limpia, prefiero esta línea base:

  • Mantén los repositorios de Ubuntu estándar.
  • Usa repositorios APT de proveedores solo cuando sean oficiales y mantenidos.
  • Usa /etc/apt/keyrings y signed-by para repositorios de terceros.
  • Evita las instrucciones antiguas de apt-key.
  • Evita mezclar PPAs que reemplacen bibliotecas del sistema principales.
  • Usa contenedores, uv, pipx, asdf, mise o herramientas nativas del lenguaje para dependencias de desarrollo de rápida evolución.
  • Mantén APT responsable del sistema operativo, controladores, servicios y herramientas CLI estables.

Para software de escritorio, prefiere Flatpak o Snap sobre PPAs cuando un paquete universal aislado se ajuste a tus necesidades. APT es excelente cuando gestiona el sistema base, pero se vuelve doloroso cuando se le obliga a comportarse como un gestor de dependencias de desarrollo universal para ecosistemas de lenguajes de rápida evolución.

Lista de verificación final de solución de problemas de APT

Cuando APT está roto en Ubuntu, trabaja a través de esta lista de verificación:

[ ] Ejecuta sudo apt update y lee el primer error real.
[ ] Verifica el nombre en clave de Ubuntu con /etc/os-release.
[ ] Finaliza instalaciones interrumpidas con dpkg --configure -a.
[ ] Repara dependencias con apt --fix-broken install.
[ ] Verifica paquetes retenidos con apt-mark showhold.
[ ] Inspecciona versiones de paquetes con apt-cache policy.
[ ] Deshabilita PPAs rotos o repositorios de terceros.
[ ] Reemplaza repositorios estilo apt-key con anillos de claves signed-by.
[ ] Simula operaciones de riesgo con apt -s.
[ ] Lee las eliminaciones antes de aceptar full-upgrade o autoremove.

APT no es frágil, pero es estricto, y esa estrictitud es una característica: evita que repositorios no firmados, conjuntos de dependencias imposibles y reemplazos accidentales de paquetes cambien tu sistema silenciosamente. La forma calmada de corregir APT es preservar esa estrictitud, encontrar el estado conflictivo y reparar la cosa más pequeña que está realmente mal.

Suscribirse

Recibe nuevas publicaciones sobre sistemas, infraestructura e ingeniería de IA.