Debian y Ubuntu: Guía de Administración Completa
Debian y Ubuntu forman la familia de distribuciones Linux más extendida del mundo, tanto en servidores como en equipos de escritorio. Si te estás iniciando en la administración de sistemas, es muy probable que tu primera máquina Linux funcione con una de estas dos distribuciones. En esta guía vamos a cubrir todo lo que necesitas para administrar un sistema Debian o Ubuntu en el día a día: la gestión de paquetes con APT, la configuración de repositorios, las actualizaciones de versión y la resolución de los problemas más habituales.
1. Debian y Ubuntu: ¿Qué Diferencias Hay?
Ubuntu está construido a partir de Debian: aproximadamente el 90 % de los paquetes de Ubuntu provienen directamente de los repositorios de Debian. Ambas distribuciones comparten, por tanto, el mismo formato de paquetes (.deb), el mismo gestor APT y gran parte de su documentación. Sin embargo, difieren en varios puntos importantes.
| Criterio | Debian | Ubuntu |
|---|---|---|
| Editor | Proyecto comunitario | Canonical (empresa) |
| Ciclo de lanzamiento | Aproximadamente cada 2 años, «cuando está listo» | Cada 6 meses, fechas fijas |
| Versiones LTS | Cada versión estable (~5 años con LTS) | Una LTS cada 2 años (5 años de soporte) |
| Estabilidad | Muy conservadora, paquetes probados | Paquetes más recientes |
| Software propietario | Separado (non-free) | Integrado con mayor facilidad |
| Snap | Ausente por defecto | Instalado y utilizado por defecto |
| Público objetivo | Servidores, puristas del software libre | Principiantes, escritorio, cloud |
En resumen: Debian prioriza la estabilidad y la libertad del software; Ubuntu prioriza la facilidad de uso y la actualidad de los paquetes. Para un servidor de producción, ambas son excelentes opciones.
2. Entender el Ciclo de Versiones y las LTS
Las versiones de Ubuntu
Ubuntu publica una versión cada seis meses, numerada con el año y el mes de lanzamiento: 24.04 significa abril de 2024. Cada dos años, la versión de abril es una LTS (Long Term Support) con cinco años de soporte. Las versiones intermedias solo reciben soporte durante nueve meses.
# Mostrar la versión instalada
lsb_release -a
# Alternativa sin lsb_release
cat /etc/os-release
Regla sencilla: en un servidor, instala siempre una LTS (20.04, 22.04, 24.04…). Las versiones intermedias se reservan para los equipos de escritorio de usuarios que quieren las últimas novedades.
Las versiones de Debian
Debian mantiene tres ramas en paralelo:
- stable: la versión de producción, actualizada únicamente por seguridad;
- testing: la futura versión estable, en preparación;
- unstable (sid): la rama de desarrollo, donde llegan los nuevos paquetes.
Cada versión estable lleva un nombre en clave tomado de los personajes de Toy Story (Bookworm, Trixie…). Una versión estable cuenta con soporte del equipo de seguridad durante unos tres años, y después dos años adicionales por parte del proyecto LTS.
3. APT en Profundidad
APT (Advanced Package Tool) es la herramienta central de la gestión de paquetes. Estos son los comandos que usarás a diario.
Actualizar la lista de paquetes
# Descarga los índices de los repositorios (no modifica nada en el sistema)
sudo apt update
Este comando no actualiza nada: simplemente refresca la lista de paquetes disponibles. Conviene ejecutarlo siempre antes de una instalación o una actualización.
Actualizar los paquetes instalados
# Actualiza los paquetes sin eliminar ni instalar otros nuevos
sudo apt upgrade
# Actualiza permitiendo la instalación o eliminación de paquetes
# (necesario para las actualizaciones del kernel, por ejemplo)
sudo apt full-upgrade
La diferencia es importante: upgrade rechaza cualquier actualización que requiera eliminar un paquete, mientras que full-upgrade (antes dist-upgrade) acepta resolver los cambios de dependencias. En un servidor, acostúmbrate a leer con atención lo que propone full-upgrade antes de confirmar.
Instalar y eliminar paquetes
# Instalar un paquete
sudo apt install nginx
# Instalar varios paquetes de una vez
sudo apt install curl git htop
# Eliminar un paquete conservando sus archivos de configuración
sudo apt remove nginx
# Eliminar un paquete Y sus archivos de configuración
sudo apt purge nginx
# Eliminar las dependencias que ya no son necesarias
sudo apt autoremove
Ejecuta apt autoremove con regularidad: cuando eliminas un paquete, sus dependencias siguen instaladas y se acumulan con el tiempo.
Buscar e inspeccionar paquetes
# Buscar un paquete por palabra clave
apt search "serveur web"
# Mostrar los detalles de un paquete (versión, tamaño, dependencias, descripción)
apt show nginx
# Listar las versiones disponibles y su procedencia
apt-cache policy nginx
# Listar las dependencias de un paquete
apt-cache depends nginx
# Listar los paquetes que dependen de un paquete
apt-cache rdepends nginx
El pinning: fijar o priorizar versiones
El pinning permite controlar qué versión de un paquete debe preferir APT, por ejemplo para impedir una actualización o para obtener un paquete de un repositorio concreto.
# Impedir cualquier actualización de un paquete (método sencillo)
sudo apt-mark hold nginx
# Volver a permitir las actualizaciones
sudo apt-mark unhold nginx
# Listar los paquetes bloqueados
apt-mark showhold
Para un control más fino, crea un archivo en /etc/apt/preferences.d/:
# /etc/apt/preferences.d/nginx-pin
# Prioridad > 1000: fuerza esta versión incluso si hay que hacer un downgrade
Package: nginx
Pin: version 1.24.*
Pin-Priority: 1001
4. sources.list y los Repositorios
Dónde se definen los repositorios
Los repositorios de APT se declaran en /etc/apt/sources.list y en los archivos del directorio /etc/apt/sources.list.d/. En las versiones recientes (Debian 12+, Ubuntu 24.04+), el formato «deb822» en archivos .sources sustituye progresivamente al formato antiguo.
# Formato antiguo (una línea por repositorio)
# tipo URL distribución componentes
deb http://deb.debian.org/debian bookworm main contrib non-free-firmware
deb http://security.debian.org/debian-security bookworm-security main
Los componentes tienen un significado preciso:
- main: software libre con soporte oficial;
- contrib (Debian): software libre que depende de software no libre;
- non-free / non-free-firmware (Debian): software y firmware propietarios;
- universe / multiverse (Ubuntu): paquetes comunitarios y no libres.
Modificar los repositorios correctamente
# No modifiques nunca sources.list a mano sin hacer una copia de seguridad
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# Añade mejor tus repositorios de terceros en archivos separados
sudo nano /etc/apt/sources.list.d/mon-depot.list
# Tras cualquier modificación, refresca los índices
sudo apt update
Los repositorios de terceros modernos exigen una clave de firma almacenada en /etc/apt/keyrings/ y referenciada con la opción signed-by:
# Ejemplo: añadir el repositorio oficial de Docker
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu noble stable" | \
sudo tee /etc/apt/sources.list.d/docker.list
5. Los PPA en Ubuntu
Los PPA (Personal Package Archives) son repositorios personales alojados en Launchpad, propios del ecosistema Ubuntu. Permiten obtener versiones más recientes de un software que las de los repositorios oficiales.
# Añadir un PPA (añade el repositorio y su clave automáticamente)
sudo add-apt-repository ppa:ondrej/php
sudo apt update
# Eliminar un PPA
sudo add-apt-repository --remove ppa:ondrej/php
# Eliminar un PPA y volver a las versiones oficiales de los paquetes
sudo apt install ppa-purge
sudo ppa-purge ppa:ondrej/php
Atención: un PPA lo mantiene una persona o un equipo ajeno a la distribución. Añade únicamente PPA de fuentes reconocidas y evítalos en servidores de producción cuando exista una alternativa oficial.
6. dpkg: el Nivel Bajo
APT se apoya en dpkg, la herramienta de bajo nivel que realmente instala los archivos .deb. Lo necesitarás en algunas situaciones concretas.
# Instalar un archivo .deb descargado manualmente
sudo dpkg -i paquet.deb
# Si dpkg indica dependencias que faltan, deja que APT las resuelva
sudo apt install -f
# Método moderno recomendado: apt gestiona el .deb Y sus dependencias
sudo apt install ./paquet.deb
# Listar todos los paquetes instalados
dpkg -l
# Comprobar si un paquete está instalado
dpkg -l | grep nginx
# Listar los archivos instalados por un paquete
dpkg -L nginx
# Encontrar a qué paquete pertenece un archivo
dpkg -S /etc/nginx/nginx.conf
7. Actualización de Versión
Ubuntu: do-release-upgrade
Ubuntu proporciona una herramienta específica para pasar de una versión a la siguiente:
# 1. Actualizar completamente el sistema antes de nada
sudo apt update && sudo apt full-upgrade
sudo reboot
# 2. Lanzar la actualización de versión
sudo do-release-upgrade
# Comprobar el comportamiento configurado (lts o normal)
cat /etc/update-manager/release-upgrades
Con Prompt=lts en este archivo, la herramienta solo propone el paso de una LTS a otra LTS (de 22.04 a 24.04, por ejemplo), que es el ajuste recomendado en servidores. Ten en cuenta que la actualización de una LTS a la siguiente solo se ofrece tras la publicación de la primera versión de mantenimiento (24.04.1, por ejemplo).
Debian: modificación de los repositorios
En Debian, la actualización de versión se realiza cambiando el nombre en clave en los repositorios y lanzando después una actualización completa:
# 1. Hacer una copia de seguridad y sustituir el nombre en clave (p. ej. bookworm -> trixie)
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo sed -i 's/bookworm/trixie/g' /etc/apt/sources.list
# 2. Actualización en dos fases, como recomiendan las notas de la versión
sudo apt update
sudo apt upgrade --without-new-pkgs
sudo apt full-upgrade
sudo reboot
En cualquier caso: haz una copia de seguridad completa antes de la actualización, lee las notas de la versión y no te saltes nunca una versión (pasar directamente de Debian 11 a 13 no está soportado).
8. Actualizaciones Automáticas con unattended-upgrades
En un servidor, aplicar automáticamente los parches de seguridad es una buena práctica casi imprescindible.
# Instalación y activación
sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
La configuración se encuentra en /etc/apt/apt.conf.d/50unattended-upgrades:
// Extracto de configuración típica
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}-security";
};
// Reinicio automático si es necesario (p. ej. actualización del kernel)
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "04:00";
# Probar la configuración sin aplicar nada
sudo unattended-upgrade --dry-run --debug
# Consultar los registros
less /var/log/unattended-upgrades/unattended-upgrades.log
9. Snap vs APT
Ubuntu impulsa el formato Snap, paquetes autocontenidos que incluyen sus propias dependencias. El tema divide opiniones y conviene entender las ventajas e inconvenientes.
| Criterio | APT (.deb) | Snap |
|---|---|---|
| Dependencias | Compartidas entre paquetes | Incluidas en cada snap |
| Tamaño en disco | Reducido | Elevado (bibliotecas duplicadas) |
| Actualidad de las versiones | Fija durante la vida de la versión | Siempre la última versión |
| Actualizaciones | Controladas por el administrador | Automáticas (difíciles de bloquear) |
| Arranque de las aplicaciones | Rápido | Más lento (montaje de squashfs) |
| Aislamiento de seguridad | Ninguno por defecto | Confinamiento en sandbox |
| Disponibilidad | Todas las distribuciones .deb | Principalmente Ubuntu |
# Comandos básicos de snap
snap list # snaps instalados
sudo snap install code --classic
sudo snap refresh # actualizar
sudo snap remove code
En la práctica: en un servidor, da prioridad a APT para todo lo que esté disponible en .deb. Los snaps siguen siendo pertinentes para aplicaciones de escritorio recientes o herramientas que el editor solo distribuye de este modo.
10. Resolución de Problemas Habituales
Bloqueo de dpkg: «Could not get lock»
Este mensaje aparece cuando otro proceso ya está utilizando APT (a menudo una actualización automática en segundo plano):
# Identificar el proceso que mantiene el bloqueo
sudo lsof /var/lib/dpkg/lock-frontend
# Esperar a que termine, o comprobar los procesos apt en curso
ps aux | grep -E "apt|dpkg"
Elimina manualmente el archivo de bloqueo solo como último recurso, tras comprobar que no se está ejecutando ningún proceso apt o dpkg: eliminar el bloqueo durante una instalación en curso puede corromper la base de datos de paquetes.
# Solo como último recurso, si no hay ningún proceso activo
sudo rm /var/lib/dpkg/lock-frontend /var/lib/dpkg/lock
sudo dpkg --configure -a
Dependencias rotas
# Intentar la reparación automática
sudo apt install -f
# Terminar la configuración de los paquetes interrumpidos
sudo dpkg --configure -a
# Limpiar la caché y volver a descargar los índices
sudo apt clean
sudo apt update
# Reinstalar un paquete dañado
sudo apt install --reinstall nom-du-paquet
Espacio en disco saturado por la caché de APT
# Ver el tamaño de la caché
du -sh /var/cache/apt/archives
# Eliminar únicamente los .deb de versiones obsoletas
sudo apt autoclean
# Vaciar completamente la caché
sudo apt clean
Buenas Prácticas
- En servidores, instala únicamente versiones LTS (Ubuntu) o stable (Debian).
- Ejecuta
sudo apt updateantes de cualquier instalación o actualización. - Lee la lista de cambios propuestos por
full-upgradeantes de confirmar. - Activa
unattended-upgradespara los parches de seguridad. - Añade los repositorios de terceros en
/etc/apt/sources.list.d/con una clavesigned-by, nunca en el archivo principal. - Limita los PPA a lo estrictamente necesario y evítalos en producción.
- Haz una copia de seguridad completa antes de cada actualización de versión.
- Limpia con regularidad con
apt autoremoveyapt autoclean.
Conclusión
Debian y Ubuntu ofrecen uno de los ecosistemas de gestión de paquetes más maduros del mundo Linux. Dominando APT, la estructura de los repositorios, los mecanismos de actualización de versión y los pocos reflejos de resolución de problemas que hemos visto aquí, tienes todo lo necesario para administrar estos sistemas con tranquilidad en el día a día. El siguiente paso lógico en tu aprendizaje: la gestión de servicios con systemd, la configuración del cortafuegos con ufw y la automatización de tus despliegues. Practica en una máquina virtual, rompe cosas, arréglalas: así es como se progresa.
Acerca de InSkillCoach
Experto en formación y tecnologías
Coach especializado en tecnologías avanzadas e IA, impulsado por GNeurone Inc.
Certificaciones:
- AWS Certified Solutions Architect – Professional
- Certificaciones de Google Cloud
- Microsoft Certified: DevOps Engineer Expert
- Certified Kubernetes Administrator (CKA)
- CompTIA Security+
Comentarios
Los comentarios funcionan con GitHub Discussions
Inicia sesión con GitHub para participar en la discusión