Entendiendo la Gestión de Paquetes en Linux: APT vs. YUM vs. DNF
Una comparación práctica de APT, YUM y DNF para instalar, actualizar, eliminar y solucionar problemas de paquetes en Linux.
Entendiendo la Gestión de Paquetes en Linux: APT vs. YUM vs. DNF
Si te mueves entre Ubuntu, Debian, Fedora, Rocky Linux, AlmaLinux o RHEL, la gestión de paquetes es uno de los primeros lugares donde la memoria muscular falla. El trabajo es el mismo en todas partes: instalar software, aplicar actualizaciones de seguridad, eliminar lo que ya no necesitas y mantener las dependencias consistentes. Los comandos y las ubicaciones de los archivos son lo suficientemente diferentes como para que copiar el manual equivocado pueda perder tiempo o dañar un equipo.
APT, YUM y DNF no son herramientas competidoras entre las que normalmente eliges en una misma máquina. Pertenecen a diferentes familias de distribuciones. APT es la herramienta de alto nivel habitual en sistemas basados en Debian. YUM fue la herramienta de alto nivel durante mucho tiempo en sistemas antiguos basados en Red Hat. DNF es el reemplazo moderno en las versiones actuales de Fedora, RHEL 8 y posteriores, CentOS Stream, Rocky Linux y AlmaLinux.
¿Qué es un Gestor de Paquetes?
En esencia, un gestor de paquetes es un conjunto de herramientas de software que automatizan el proceso de instalación, actualización, configuración y eliminación de paquetes de software de un sistema operativo. En lugar de compilar software desde el código fuente o gestionar dependencias manualmente, un gestor de paquetes interactúa con repositorios de software para obtener binarios precompilados y manejar todos los requisitos previos necesarios automáticamente.
Las funciones clave de un gestor de paquetes incluyen:
- Resolución de Dependencias: Identifica e instala automáticamente todas las bibliotecas requeridas y otros paquetes de software que una aplicación particular necesita para funcionar.
- Repositorios de Software: Gestiona conexiones a servidores remotos (repositorios) donde se almacenan los paquetes, asegurando el acceso a una amplia gama de software.
- Actualizaciones del Sistema: Facilita la actualización de paquetes individuales o de todo el sistema operativo, asegurando que se apliquen parches de seguridad y nuevas funciones.
- Integridad de Paquetes: Verifica la autenticidad e integridad de los paquetes mediante firmas digitales para prevenir manipulaciones.
- Eliminación Limpia: Asegura que cuando se desinstala software, todos sus archivos asociados y dependencias se eliminen limpiamente, evitando la acumulación en el sistema.
Las distribuciones de Linux típicamente usan uno de dos formatos principales de paquetes: .deb para sistemas basados en Debian y .rpm para sistemas basados en Red Hat. APT gestiona paquetes .deb, mientras que YUM y DNF gestionan paquetes .rpm.
APT (Herramienta de Paquetes Avanzada)
APT es la utilidad de línea de comandos para gestionar paquetes .deb que se encuentra principalmente en Debian y sus derivados, como Ubuntu, Linux Mint, Pop!_OS y muchos otros. Es reconocido por su robusta resolución de dependencias y un vasto ecosistema de software.
Conceptos Clave
dpkg: Mientras queaptes la herramienta de alto nivel,dpkges la herramienta subyacente de bajo nivel que realmente instala, elimina y gestiona paquetes.debindividuales. APT actúa como una interfaz frontal paradpkg, manejando repositorios y dependencias.sources.list: El archivo/etc/apt/sources.list(y los archivos en/etc/apt/sources.list.d/) define las ubicaciones de los repositorios de software que APT utiliza para encontrar paquetes. Estos pueden ser repositorios oficiales, PPAs (Archivos de Paquetes Personales) de terceros o fuentes locales.- Estructura del Paquete: Los paquetes se distribuyen como archivos
.deb, que son esencialmente archivos que contienen el software compilado, archivos de configuración y metadatos.
Comandos Comunes de APT
Históricamente, apt-get era el comando principal, pero el comando apt (introducido alrededor de Debian 8 / Ubuntu 16.04) ofrece una interfaz más amigable al combinar las características más comunes de apt-get y apt-cache.
| Tarea | Comando apt |
Descripción |
|---|---|---|
| Actualizar listas de paquetes | sudo apt update |
Refresca la lista de paquetes disponibles y sus versiones desde los repositorios. |
| Actualizar paquetes instalados | sudo apt upgrade |
Actualiza todos los paquetes instalados a sus versiones más recientes. No elimina paquetes. |
| Actualización completa del sistema | sudo apt full-upgrade |
Actualiza todos los paquetes instalados, eliminando los antiguos si es necesario para resolver dependencias. |
| Instalar un paquete | sudo apt install <nombre_paquete> |
Instala un paquete especificado y sus dependencias. |
| Eliminar un paquete | sudo apt remove <nombre_paquete> |
Elimina un paquete pero conserva sus archivos de configuración. |
| Purgar un paquete | sudo apt purge <nombre_paquete> |
Elimina un paquete y sus archivos de configuración. |
| Buscar un paquete | apt search <palabra_clave> |
Busca paquetes que coincidan con una palabra clave. |
| Mostrar detalles del paquete | apt show <nombre_paquete> |
Muestra información detallada sobre un paquete. |
| Limpiar paquetes antiguos | sudo apt autoremove |
Elimina paquetes de dependencia instalados automáticamente que ya no son necesarios. |
Ejemplos
# Actualizar listas de paquetes
sudo apt update
# Instalar el servidor web 'nginx'
sudo apt install nginx
# Actualizar todos los paquetes instalados
sudo apt upgrade
# Eliminar 'nginx' y sus archivos de configuración
sudo apt purge nginx
Ventajas de APT
- Manejo confiable de dependencias: APT es bueno explicando lo que planea instalar, actualizar, retener o eliminar antes de cambiar el sistema.
- Gran ecosistema de repositorios: Los repositorios de Debian y Ubuntu cubren una amplia gama de software para servidores y escritorios.
- Comportamiento predecible del servidor: Las versiones estables de Debian y Ubuntu LTS generalmente priorizan versiones de paquetes probadas sobre la última versión upstream.
Desventajas de APT
- Versiones de Software Más Nuevas: A veces, los paquetes en los repositorios oficiales pueden no ser las versiones más recientes debido al enfoque en la estabilidad y las pruebas exhaustivas.
YUM (Yellowdog Updater, Modificado)
YUM fue el gestor de paquetes principal para Red Hat Enterprise Linux (RHEL) y sus derivados como CentOS, Fedora (hasta hace poco) y Scientific Linux. Opera sobre paquetes .rpm (Gestor de Paquetes Red Hat).
Conceptos Clave
rpm: Similar adpkg,rpmes la herramienta de gestión de paquetes de bajo nivel para archivos.rpm. YUM actúa como una interfaz frontal de alto nivel.- Archivos
.repo: Las configuraciones de repositorio se definen típicamente en archivos.repoubicados en/etc/yum.repos.d/. Estos archivos especifican la URL base, las claves GPG y otros metadatos para cada repositorio. - Estructura del Paquete: El software se distribuye como archivos
.rpm, que contienen binarios, bibliotecas y metadatos.
Comandos Comunes de YUM
| Tarea | Comando yum |
Descripción |
|---|---|---|
| Verificar actualizaciones | sudo yum check-update |
Verifica las actualizaciones disponibles sin instalarlas. |
| Actualizar todos los paquetes | sudo yum update |
Actualiza todos los paquetes instalados. |
| Instalar un paquete | sudo yum install <nombre_paquete> |
Instala un paquete especificado y sus dependencias. |
| Eliminar un paquete | sudo yum remove <nombre_paquete> |
Elimina un paquete. |
| Buscar un paquete | yum search <palabra_clave> |
Busca paquetes que coincidan con una palabra clave. |
| Mostrar detalles del paquete | yum info <nombre_paquete> |
Muestra información detallada sobre un paquete. |
| Limpiar archivos en caché | sudo yum clean all |
Limpia los metadatos del repositorio y los paquetes en caché. |
Ejemplos
# Verificar actualizaciones disponibles
sudo yum check-update
# Instalar el servidor web 'httpd' (Apache)
sudo yum install httpd
# Actualizar todos los paquetes instalados
sudo yum update
# Eliminar 'httpd'
sudo yum remove httpd
Ventajas de YUM
- Comportamiento empresarial maduro: YUM sigue siendo común en sistemas RHEL y CentOS antiguos, por lo que lo verás en manuales heredados.
- Historial de transacciones:
yum historypuede mostrar instalaciones, actualizaciones y eliminaciones anteriores. En algunos casos, puedes deshacer o revertir una transacción, pero debes probar esto con cuidado porque los archivos de configuración, el estado del servicio y los datos externos no se restauran mágicamente.
Desventajas de YUM
- Rendimiento: A veces puede ser más lento en comparación con gestores de paquetes modernos como DNF, especialmente con repositorios grandes o árboles de dependencias complejos.
- Siendo Reemplazado: En sistemas basados en RHEL más nuevos (RHEL 8+), DNF ha reemplazado a YUM como el gestor de paquetes predeterminado, aunque
yuma menudo sigue funcionando como un alias paradnf.
DNF (YUM Dandificado)
DNF es el gestor de paquetes de próxima generación para distribuciones basadas en Red Hat, sirviendo como sucesor de YUM. Es el predeterminado en Fedora (desde la versión 18), RHEL 8+, CentOS Stream, AlmaLinux y Rocky Linux. DNF aborda muchas de las deficiencias de YUM, ofreciendo un rendimiento mejorado y una resolución de dependencias superior.
Conceptos Clave
libsolv: DNF utilizalibsolvpara la resolución de dependencias, que está altamente optimizado y proporciona un rendimiento significativamente mejor que el solucionador anterior de YUM.- Modularidad: Una característica clave en RHEL 8+ y Fedora, la modularidad permite que diferentes versiones o flujos de un paquete de software (por ejemplo, Python 3.6 vs. Python 3.8) estén disponibles simultáneamente, y los usuarios pueden elegir cuál instalar.
- Compatibilidad: DNF mantiene una interfaz de línea de comandos que es en gran medida compatible con YUM, lo que facilita la transición para los usuarios.
Comandos Comunes de DNF
Muchos comandos de DNF son idénticos o muy similares a los comandos de YUM.
| Tarea | Comando dnf |
Descripción |
|---|---|---|
| Verificar actualizaciones | sudo dnf check-update |
Verifica las actualizaciones disponibles sin instalarlas. |
| Actualizar todos los paquetes | sudo dnf update |
Actualiza todos los paquetes instalados. |
| Instalar un paquete | sudo dnf install <nombre_paquete> |
Instala un paquete especificado y sus dependencias. |
| Eliminar un paquete | sudo dnf remove <nombre_paquete> |
Elimina un paquete. |
| Buscar un paquete | dnf search <palabra_clave> |
Busca paquetes que coincidan con una palabra clave. |
| Mostrar detalles del paquete | dnf info <nombre_paquete> |
Muestra información detallada sobre un paquete. |
| Limpiar archivos en caché | sudo dnf clean all |
Limpia los metadatos del repositorio y los paquetes en caché. |
| Listar módulos disponibles | dnf module list |
Lista los flujos de módulos de software disponibles. |
| Habilitar un módulo | sudo dnf module enable <módulo> |
Habilita un flujo de módulo específico. |
Ejemplos
# Verificar actualizaciones disponibles
sudo dnf check-update
# Instalar la base de datos 'mariadb-server'
sudo dnf install mariadb-server
# Actualizar todos los paquetes instalados
sudo dnf update
# Listar los flujos de módulos de Node.js disponibles
dnf module list nodejs
# Habilitar el flujo del módulo Node.js 16 (si está disponible)
sudo dnf module enable nodejs:16
# Eliminar 'mariadb-server'
sudo dnf remove mariadb-server
Ventajas de DNF
- Resolución de dependencias mejorada: DNF utiliza
libsolv, que generalmente maneja elecciones de dependencias complejas más rápido y más claramente que el comportamiento anterior de YUM. - Salida y APIs más limpias: DNF es más fácil de scriptear que YUM anterior en muchos flujos de trabajo administrativos.
- Modularidad: Proporciona flexibilidad para instalar diferentes versiones de software dentro del mismo sistema.
- Diseño Moderno: Construido con una API clara para extensiones y código más limpio.
Desventajas de DNF
- Tecnología Más Nueva: Aunque es estable, algunas características, especialmente las relacionadas con la modularidad, pueden requerir una curva de aprendizaje ligeramente más pronunciada para los nuevos usuarios.
Diferencias Clave y Casos de Uso
La distinción fundamental entre APT y YUM/DNF radica en la familia de distribuciones a la que sirven y el formato de paquete que manejan.
| Característica | APT (Debian/Ubuntu) | YUM/DNF (RHEL/Fedora) |
|---|---|---|
| Formato de Paquete | .deb (Paquete Debian) |
.rpm (Paquete Red Hat) |
| Herramienta Subyacente | dpkg |
rpm |
| Archivos de Configuración | /etc/apt/sources.list |
/etc/yum.repos.d/*.repo |
| Distribuciones Principales | Debian, Ubuntu, Mint, Pop!_OS | RHEL, Fedora, CentOS, AlmaLinux, Rocky Linux |
| Solucionador de Dependencias | Interno (robusto, bien probado) | YUM: Interno (más lento); DNF: libsolv (más rápido, moderno) |
| Evolución | apt-get -> apt |
yum -> dnf |
| Modularidad | No integrada directamente (PPAs para flexibilidad) | DNF ofrece flujos module para múltiples versiones |
- APT es ideal para usuarios y administradores que priorizan una estabilidad sólida como una roca, un amplio soporte comunitario y un vasto repositorio de software. Es la opción preferida para sistemas basados en Debian, que son populares tanto para servidores como para escritorios.
- YUM cumplió bien su propósito en entornos empresariales durante años, proporcionando un método estable y probado para gestionar software. Aunque todavía está presente como alias, su uso directo está siendo eliminado gradualmente.
- DNF es el estándar moderno para sistemas basados en Red Hat. Es la elección para aquellos que ejecutan RHEL contemporáneo, Fedora o sus derivados, ofreciendo rendimiento, resolución de dependencias avanzada y características como la modularidad, lo que lo hace excelente para entornos de desarrollo y producción que requieren versiones específicas de software.
Mejores Prácticas para la Gestión de Paquetes
Independientemente del gestor de paquetes que estés utilizando, seguir las mejores prácticas asegura un sistema saludable y seguro:
- Actualizaciones Regulares: Ejecuta periódicamente
sudo apt update && sudo apt upgradeosudo dnf updatepara aplicar parches de seguridad y correcciones de errores. - Entender Antes de Instalar: Siempre verifica qué hace un paquete y su reputación antes de instalarlo, especialmente de repositorios de terceros.
- Verificar Fuentes del Repositorio: Asegúrate de que cualquier repositorio añadido sea confiable para evitar instalar software malicioso o inestable.
- Limpiar: Usa
sudo apt autoremoveosudo dnf autoremovepara eliminar dependencias huérfanas y liberar espacio en disco. - Revisar
apt showodnf info: Antes de instalar, usa estos comandos para obtener detalles sobre el paquete, incluyendo sus dependencias y tamaño. - Respaldar Sistemas Críticos: Antes de realizar actualizaciones importantes (por ejemplo,
apt full-upgradeo actualizaciones de distribución), asegúrate de tener una copia de seguridad de los datos y configuraciones críticos.
Solución de Problemas del Gestor de Paquetes
La mayoría de las fallas del gestor de paquetes no son misteriosas una vez que las separas en tres categorías: metadatos del repositorio, conflictos de dependencias y estado de la base de datos de paquetes local.
Si APT dice que no puede encontrar un paquete, comienza con sudo apt update. APT no consulta cada repositorio remoto fresco para cada instalación. Utiliza metadatos locales. Si el paquete se añadió recientemente, o si la máquina no ha actualizado sus listas en un tiempo, la instalación puede fallar incluso si el repositorio es correcto. Si apt update falla, lee la línea del repositorio en el error. Un PPA obsoleto, una clave de firma caducada, un espejo roto o un nombre en clave de distribución no soportado suele ser el problema real.
En sistemas DNF o YUM, el primer movimiento equivalente suele ser:
sudo dnf makecache
sudo dnf repolist
En sistemas antiguos:
sudo yum makecache
sudo yum repolist
repolist es útil porque confirma si el repositorio está habilitado en absoluto. Un paquete puede estar disponible desde EPEL, CodeReady Builder, PowerTools, CRB o un repositorio de proveedor, pero no desde los repositorios base del sistema operativo. En ese caso, la solución no es descargar un RPM aleatorio de la web. La solución más limpia es habilitar el repositorio correcto y dejar que el gestor de paquetes maneje las dependencias.
Los conflictos de dependencias requieren más cuidado. Si APT propone eliminar una gran parte del sistema, detente y lee la transacción. Lo mismo se aplica a dnf remove. Eliminar un paquete puede eliminar servicios que dependen de él. En servidores, me gusta copiar la transacción propuesta en las notas del incidente antes de aceptarla. Eso te da un registro de lo que cambió si un servicio se rompe después.
Para instalaciones interrumpidas, usa el comando de reparación nativo antes de intentar la limpieza manual:
# Debian/Ubuntu
sudo dpkg --configure -a
sudo apt -f install
# Fedora/RHEL-family
sudo dnf check
sudo dnf history
La eliminación manual en /var/lib/dpkg, /var/lib/rpm, /var/cache/apt o /var/cache/dnf debe ser el último recurso. Esos directorios son el estado del gestor de paquetes, no desorden ordinario.
Una Hoja de Referencia Práctica de Traducción
Cuando sigas documentación escrita para una familia de Linux diferente, traduce la intención, no solo el comando.
| Tarea | Debian/Ubuntu | Fedora/RHEL-family |
|---|---|---|
| Refrescar metadatos del repositorio | sudo apt update |
sudo dnf makecache |
| Actualizar paquetes instalados | sudo apt upgrade |
sudo dnf upgrade o sudo dnf update |
| Instalar un paquete | sudo apt install nginx |
sudo dnf install nginx |
| Eliminar un paquete | sudo apt remove nginx |
sudo dnf remove nginx |
| Eliminar paquete y configuración | sudo apt purge nginx |
No hay un equivalente exacto; los scripts del paquete pueden dejar configuración/datos |
| Buscar paquetes | apt search nginx |
dnf search nginx |
| Mostrar información del paquete | apt show nginx |
dnf info nginx |
| Listar paquetes instalados | apt list --installed |
dnf list installed |
| Ver archivos del paquete | dpkg -L nginx |
rpm -ql nginx |
| Encontrar el paquete propietario de un archivo | dpkg -S /ruta/archivo |
rpm -qf /ruta/archivo |
Ese último par está infravalorado. Si encuentras un binario o archivo de configuración extraño en un equipo, dpkg -S o rpm -qf te dice qué paquete es el propietario. Si ningún paquete es el propietario, el archivo puede haber sido creado por una aplicación, un script de implementación, un administrador o un atacante. Eso no prueba nada por sí mismo, pero te da una mejor siguiente pregunta.
La forma más segura de pensar en la gestión de paquetes es simple: quédate dentro de la herramienta que tu distribución espera, lee las transacciones antes de aceptarlas y trata los repositorios de terceros como dependencias de producción. Una vez que sepas dónde viven los archivos del repositorio y cómo inspeccionar la propiedad de los paquetes, APT, YUM y DNF se sienten mucho menos como mundos diferentes.