--- title: "Gestión de paquetes en Linux con APT y DNF (YUM)" description: "Aprende a instalar, actualizar, buscar, bloquear y eliminar paquetes con APT en Ubuntu y Debian y con DNF en Rocky Linux y AlmaLinux, y a añadir repositorios." category: "Sistemas Operativos" language: es source: https://cubepath.com/es/docs/sistemas-operativos/gestion-de-paquetes-apt-yum-dnf updated: 2026-09-25 --- # Gestión de paquetes en Linux con APT y DNF (YUM) El gestor de paquetes instala el software desde los repositorios de la distribución, resuelve sus dependencias, verifica firmas y aplica las actualizaciones de seguridad. Las distribuciones de servidor usan dos familias: APT, que gestiona paquetes `.deb` en Ubuntu y Debian, y DNF, que gestiona paquetes `.rpm` en Rocky Linux, AlmaLinux y RHEL. En esta guía aprenderás las operaciones que harás a diario con cada uno, cómo añadir un repositorio externo de forma segura, cómo bloquear versiones y cómo automatizar los parches de seguridad. ## Requisitos previos - Un servidor con Ubuntu 24.04 LTS o Debian 12/13 para la parte de APT, o con Rocky Linux 9 o AlmaLinux 9 para la parte de DNF. Por ejemplo, un VPS de CubePath. - Un usuario no root con privilegios `sudo`. ## APT, DNF y YUM: qué es cada uno | | APT | DNF | YUM | |---|-----|-----|-----| | Distribuciones | Ubuntu, Debian | Rocky Linux, AlmaLinux, RHEL 8+, Fedora | CentOS 7, RHEL 7 | | Formato de paquete | `.deb` | `.rpm` | `.rpm` | | Herramienta de bajo nivel | `dpkg` | `rpm` | `rpm` | | Repositorios | `/etc/apt/sources.list.d/` | `/etc/yum.repos.d/` | `/etc/yum.repos.d/` | | Registro | `/var/log/apt/history.log` | `/var/log/dnf.log` | `/var/log/yum.log` | DNF sustituyó a YUM a partir de RHEL 8. En Rocky Linux y AlmaLinux el comando `yum` sigue existiendo, pero es un enlace a `dnf`, así que todo lo que verás para DNF sirve también si escribes `yum`. Tanto `apt` como `dnf` son los comandos pensados para uso interactivo. En scripts de Debian y Ubuntu se prefiere `apt-get`, cuya salida no cambia entre versiones. ## Paso 1: Actualizar el índice y el sistema ### Con APT APT separa dos operaciones: `update` descarga la lista de paquetes disponibles y `upgrade` instala las nuevas versiones. Ejecuta siempre `update` primero: ```bash sudo apt update ``` ```output Hit:1 http://archive.ubuntu.com/ubuntu noble InRelease Get:2 http://security.ubuntu.com/ubuntu noble-security InRelease [126 kB] ... 12 packages can be upgraded. Run 'apt list --upgradable' to see them. ``` Revisa qué se va a actualizar y aplica los cambios: ```bash apt list --upgradable sudo apt upgrade ``` `upgrade` nunca elimina paquetes. Cuando una actualización necesita instalar dependencias nuevas o quitar alguna (por ejemplo, un kernel nuevo), usa `full-upgrade`: ```bash sudo apt full-upgrade ``` ### Con DNF DNF refresca los metadatos automáticamente, así que no hay un paso separado. Para ver las actualizaciones disponibles y aplicarlas: ```bash dnf check-update sudo dnf upgrade ``` Para aplicar solo las actualizaciones marcadas como de seguridad: ```bash sudo dnf upgrade --security ``` En ambas familias, si se actualiza el kernel o bibliotecas como `glibc` u OpenSSL, necesitas reiniciar para usar la nueva versión. En Ubuntu y Debian, la existencia del archivo `/var/run/reboot-required` lo indica; en Rocky Linux y AlmaLinux, ejecuta `sudo dnf needs-restarting -r`. ## Paso 2: Buscar e instalar paquetes Busca un paquete por nombre o descripción y consulta sus detalles antes de instalarlo: ```bash apt search redis apt show redis-server ``` ```bash dnf search redis dnf info redis ``` Instala uno o varios paquetes: ```bash sudo apt install nginx redis-server ``` ```bash sudo dnf install nginx redis ``` Los nombres de paquete no siempre coinciden entre familias (`redis-server` frente a `redis`, `apache2` frente a `httpd`, `dnsutils` frente a `bind-utils`), así que busca antes de instalar. Para simular una operación sin aplicarla, útil en servidores de producción: ```bash apt install --simulate nginx ``` ```bash sudo dnf install --assumeno nginx ``` Para ver qué versiones hay disponibles y de qué repositorio viene cada una: ```bash apt policy nginx ``` ```bash dnf list --showduplicates nginx ``` ## Paso 3: Consultar paquetes instalados Estas consultas responden a las preguntas más habituales al diagnosticar un servidor: | Pregunta | APT / dpkg | DNF / rpm | |----------|------------|-----------| | ¿Está instalado? | `dpkg -l nginx` | `rpm -q nginx` | | Lista de instalados | `apt list --installed` | `dnf list --installed` | | ¿Qué archivos instala? | `dpkg -L nginx` | `rpm -ql nginx` | | ¿A qué paquete pertenece este archivo? | `dpkg -S /usr/sbin/nginx` | `rpm -qf /usr/sbin/nginx` | | ¿Qué paquete proporciona un archivo que no tengo? | `apt-file search bin/dig` (instala `apt-file`) | `dnf provides '*/bin/dig'` | Por ejemplo, para saber a qué paquete pertenece el binario de SSH: ```bash dpkg -S /usr/sbin/sshd ``` ```output openssh-server: /usr/sbin/sshd ``` ## Paso 4: Eliminar paquetes APT distingue entre eliminar el paquete y eliminar también su configuración: ```bash sudo apt remove nginx # conserva los archivos de /etc/nginx sudo apt purge nginx # borra también la configuración sudo apt autoremove --purge # quita dependencias que ya nadie necesita ``` DNF no conserva la configuración modificada como archivo activo; si la habías cambiado, la guarda con la extensión `.rpmsave`: ```bash sudo dnf remove nginx sudo dnf autoremove ``` Revisa siempre la lista de paquetes que se van a eliminar antes de confirmar: un `remove` puede arrastrar paquetes que dependen del que quitas. ## Paso 5: Añadir un repositorio externo Cuando necesitas una versión más reciente que la del repositorio de la distribución, lo correcto es usar el repositorio oficial del proyecto. Como ejemplo, añadirás el repositorio estable de nginx.org. ### En Ubuntu con APT Cada repositorio debe firmarse con su propia clave, guardada en `/etc/apt/keyrings/` y asociada solo a ese repositorio mediante `signed-by`. El antiguo `apt-key` está obsoleto porque confiaba en cada clave para todos los repositorios. Instala las herramientas necesarias y descarga la clave: ```bash sudo apt install curl gnupg ca-certificates sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo gpg --dearmor -o /etc/apt/keyrings/nginx.gpg ``` Crea el archivo del repositorio: ```bash echo "deb [signed-by=/etc/apt/keyrings/nginx.gpg] https://nginx.org/packages/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") nginx" | sudo tee /etc/apt/sources.list.d/nginx.list ``` Actualiza el índice y comprueba que la versión candidata viene del nuevo repositorio: ```bash sudo apt update apt policy nginx ``` ```output nginx: Installed: (none) Candidate: 1.28.0-1~noble Version table: 1.28.0-1~noble 500 500 https://nginx.org/packages/ubuntu noble/nginx amd64 Packages 1.24.0-2ubuntu7 500 500 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 Packages ``` ### En Rocky Linux o AlmaLinux con DNF En la familia RHEL, un repositorio es un archivo `.repo` en `/etc/yum.repos.d/`: ```bash sudo nano /etc/yum.repos.d/nginx.repo ``` ```ini [nginx-stable] name=nginx stable repo baseurl=https://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true ``` DNF importa la clave GPG la primera vez que instala un paquete del repositorio y te pide confirmar su huella. Comprueba que el repositorio está activo: ```bash dnf repolist ``` ### EPEL Muchos paquetes habituales (por ejemplo, `htop` o `certbot`) no están en el repositorio base de Rocky Linux y AlmaLinux, sino en EPEL. En Rocky Linux 9 o AlmaLinux 9, activa primero el repositorio CRB, del que dependen muchos paquetes de EPEL, e instala EPEL: ```bash sudo dnf config-manager --set-enabled crb sudo dnf install epel-release ``` ## Paso 6: Bloquear la versión de un paquete A veces necesitas evitar que un paquete se actualice, por ejemplo un motor de base de datos cuya actualización quieres planificar. En APT se usa `apt-mark`: ```bash sudo apt-mark hold mysql-server apt-mark showhold sudo apt-mark unhold mysql-server ``` En DNF se usa el plugin `versionlock`, que hay que instalar: ```bash sudo dnf install python3-dnf-plugin-versionlock sudo dnf versionlock add mariadb-server dnf versionlock list sudo dnf versionlock delete mariadb-server ``` > Importante: un paquete bloqueado tampoco recibe parches de seguridad. Úsalo de forma temporal y documenta por qué está bloqueado. ## Paso 7: Revisar el historial y deshacer cambios DNF registra cada transacción y permite deshacerla, algo muy útil si una actualización rompe un servicio: ```bash dnf history ``` ```output ID | Command line | Date and time | Action(s) | Altered ------------------------------------------------------------------------------- 12 | upgrade | 2026-09-24 10:02 | Upgrade | 18 11 | install nginx | 2026-09-20 16:41 | Install | 3 ``` ```bash dnf history info 12 sudo dnf history undo 12 ``` Para deshacer una actualización, las versiones anteriores de los paquetes tienen que seguir disponibles en los repositorios, así que no siempre funciona. APT no tiene un comando equivalente, pero guarda el historial en `/var/log/apt/history.log`. Para volver a una versión anterior, indícala de forma explícita (debe aparecer en `apt policy`): ```bash grep -A4 'Start-Date' /var/log/apt/history.log | tail -n 20 sudo apt install nginx=1.24.0-2ubuntu7 ``` ## Paso 8: Automatizar las actualizaciones de seguridad En Ubuntu, `unattended-upgrades` viene instalado y aplica cada día las actualizaciones del repositorio de seguridad. En Debian instálalo con `sudo apt install unattended-upgrades`. Comprueba que está activo: ```bash cat /etc/apt/apt.conf.d/20auto-upgrades ``` ```output APT::Periodic::Update-Package-Lists "1"; APT::Periodic::Unattended-Upgrade "1"; ``` Si no lo está, actívalo con `sudo dpkg-reconfigure -plow unattended-upgrades`. Puedes probar qué haría sin aplicar nada: ```bash sudo unattended-upgrade --dry-run --debug ``` En Rocky Linux y AlmaLinux, instala `dnf-automatic`: ```bash sudo dnf install dnf-automatic ``` Edita su configuración para que solo aplique parches de seguridad: ```bash sudo nano /etc/dnf/automatic.conf ``` ```ini [commands] upgrade_type = security apply_updates = yes ``` Activa el temporizador de systemd y comprueba cuándo se ejecutará: ```bash sudo systemctl enable --now dnf-automatic.timer systemctl list-timers dnf-automatic.timer ``` ## Solución de problemas **APT: `Could not get lock /var/lib/dpkg/lock-frontend`.** Otro proceso está usando APT, normalmente `unattended-upgrades` justo después del arranque. Espera a que termine (`ps aux | grep -E 'apt|dpkg'`); no borres los archivos de bloqueo. **APT: `NO_PUBKEY` o `The following signatures couldn't be verified`.** Falta la clave del repositorio o no coincide la ruta de `signed-by`. Vuelve a descargar la clave en `/etc/apt/keyrings/` y comprueba que la ruta del archivo `.list` es la misma. **APT: instalación interrumpida o dependencias rotas.** Termina de configurar los paquetes pendientes: ```bash sudo dpkg --configure -a sudo apt --fix-broken install ``` **DNF: errores de metadatos o `Cannot download repomd.xml`.** Limpia la caché y reintenta: `sudo dnf clean all && sudo dnf makecache`. Si falla un único repositorio, desactívalo temporalmente con `--disablerepo=nombre_repo` para seguir trabajando. ## Conclusión Ya sabes realizar con APT y DNF las tareas de todos los días: actualizar, instalar, consultar y eliminar paquetes, añadir repositorios firmados, bloquear versiones, deshacer cambios y automatizar los parches de seguridad. Como siguientes pasos, puedes configurar alertas de actualizaciones pendientes en tu monitorización, planificar la actualización de versión de la distribución o revisar qué repositorios de terceros tienes activos en cada servidor.