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

APTDNFYUM
DistribucionesUbuntu, DebianRocky Linux, AlmaLinux, RHEL 8+, FedoraCentOS 7, RHEL 7
Formato de paquete.deb.rpm.rpm
Herramienta de bajo niveldpkgrpmrpm
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:

sudo apt update
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:

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:

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:

dnf check-update
sudo dnf upgrade

Para aplicar solo las actualizaciones marcadas como de seguridad:

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:

apt search redis
apt show redis-server
dnf search redis
dnf info redis

Instala uno o varios paquetes:

sudo apt install nginx redis-server
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:

apt install --simulate nginx
sudo dnf install --assumeno nginx

Para ver qué versiones hay disponibles y de qué repositorio viene cada una:

apt policy nginx
dnf list --showduplicates nginx

Paso 3: Consultar paquetes instalados

Estas consultas responden a las preguntas más habituales al diagnosticar un servidor:

PreguntaAPT / dpkgDNF / rpm
¿Está instalado?dpkg -l nginxrpm -q nginx
Lista de instaladosapt list --installeddnf list --installed
¿Qué archivos instala?dpkg -L nginxrpm -ql nginx
¿A qué paquete pertenece este archivo?dpkg -S /usr/sbin/nginxrpm -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:

dpkg -S /usr/sbin/sshd
openssh-server: /usr/sbin/sshd

Paso 4: Eliminar paquetes

APT distingue entre eliminar el paquete y eliminar también su configuración:

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:

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:

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:

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:

sudo apt update
apt policy nginx
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/:

sudo nano /etc/yum.repos.d/nginx.repo
[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:

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:

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:

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:

sudo dnf install python3-dnf-plugin-versionlock
sudo dnf versionlock add mariadb-server
dnf versionlock list
sudo dnf versionlock delete mariadb-server

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:

dnf history
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
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):

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:

cat /etc/apt/apt.conf.d/20auto-upgrades
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:

sudo unattended-upgrade --dry-run --debug

En Rocky Linux y AlmaLinux, instala dnf-automatic:

sudo dnf install dnf-automatic

Edita su configuración para que solo aplique parches de seguridad:

sudo nano /etc/dnf/automatic.conf
[commands]
upgrade_type = security
apply_updates = yes

Activa el temporizador de systemd y comprueba cuándo se ejecutará:

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:

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.