Ir al contenido

6.1 Repositorios y APT

tutorial.getReady

  • Comprenderás la filosofía de seguridad de los “Repositorios” oficiales y cómo añadir fuentes externas.
  • Dominarás el cirujano de bajo nivel dpkg para instalar archivos locales y gestionar paquetes rotos.
  • Sabrás utilizar el gestor de alto nivel apt y sus variantes (apt-get, apt-cache) para resolver dependencias.
  • Aprenderás a eliminar software limpiando su configuración global (purge).
  • Auditarás orígenes externos editando /etc/apt/sources.list y /etc/apt/sources.list.d/.

En Windows o macOS, la norma es abrir el navegador y buscar un .exe o .dmg en una web aleatoria. En Linux empresarial, esa práctica está estrictamente desaconsejada por seguridad y trazabilidad.

El software en Debian se descarga desde inmensas bibliotecas centrales verificadas criptográficamente llamadas Repositorios. El ciclo de vida se divide en:

  • Bajo nivel (dpkg): Manipula los paquetes .deb que ya están en tu disco.
  • Alto nivel (APT / Aptitude): Busca en internet, resuelve dependencias y llama a dpkg en segundo plano.

dpkg (Debian Package) es la herramienta fundamental de bajo nivel. Solo sirve para archivos .deb que tengas físicamente en el sistema.

ventana terminal
# Instalar un paquete .deb local
sudo dpkg -i google-chrome.deb
# Si falla por dependencias, forzar la instalación (PELIGROSO, solo para emergencias)
sudo dpkg --force-depends -i google-chrome.deb
# Listar TODOS los paquetes del sistema (con su estado)
dpkg -l
# Ver el estado EXACTO de un paquete específico
dpkg -s nginx
# Listar todos los ficheros que instaló un paquete
dpkg -L nginx
# Averiguar a qué paquete pertenece un fichero concreto
dpkg -S /usr/sbin/nginx

3. El Gestor de Alto Nivel: apt (y sus primos)

Sección titulada “3. El Gestor de Alto Nivel: apt (y sus primos)"

apt es la interfaz unificada, pero en el examen LFCS también verás apt-get y apt-cache. apt se conecta a internet, descarga el programa, resuelve todas las dependencias y pasa el trabajo a dpkg.

1. Actualizar el Índice de Paquetes (update) Sincroniza la lista de software disponible con los repositorios remotos.

ventana terminal
sudo apt update
# Equivalente legacy: sudo apt-get update

2. Buscar e Inspeccionar (search / show)

ventana terminal
apt search mariadb # Busca por nombre o descripción
apt show nginx # Muestra versión, dependencias, tamaño y descripción
# Equivalente legacy: apt-cache show nginx

3. Instalar y Actualizar

ventana terminal
# Instalar un programa (resuelve dependencias automáticamente)
sudo apt install nginx
# Actualizar paquetes (solo los que no requieren instalar/eliminar otros)
sudo apt upgrade
# Equivalente legacy: sudo apt-get upgrade
# Actualizar TODO el sistema (permite instalar nuevas dependencias o eliminar obsoletas)
sudo apt dist-upgrade
# Equivalente legacy: sudo apt-get dist-upgrade

4. Amputar Definitivamente (Eliminar)

ventana terminal
# Elimina el paquete pero DEJA los archivos de configuración global (/etc/)
sudo apt remove nginx
# Elimina el paquete y BORRA los archivos de configuración global (/etc/)
sudo apt purge nginx
# Auto-eliminar paquetes que ya no son necesarios (dependencias huérfanas)
sudo apt autoremove

4. La Configuración de Orígenes: sources.list

Sección titulada “4. La Configuración de Orígenes: sources.list"

apt sabe dónde comprar porque le damos una dirección en /etc/apt/sources.list. También puedes dividir configuraciones en /etc/apt/sources.list.d/ (útil para repositorios de terceros como Docker o Kubernetes).

Estructura de una línea estándar:

deb http://deb.debian.org/debian bookworm main contrib non-free

| Componente | Descripción | | :--- | :--- | | deb | Paquetes binarios compilados (los que usas al instalar). deb-src es para código fuente (desarrolladores). | | URL | El servidor o mirror que aloja los paquetes (puedes cambiarlo por mirrors más rápidos). | | Distribución | El nombre en clave de tu versión (ej. bookworm=12, bullseye=11). Nunca mezcles versiones distintas. | | Componentes | main (100% libre), contrib (libre pero depende de no-libre), non-free (software propietario), non-free-firmware (firmwares de hardware desde Bookworm). |

¿Cómo añadir un repositorio externo? (Ejemplo: Docker)

Sección titulada “¿Cómo añadir un repositorio externo? (Ejemplo: Docker)"

El proceso siempre es el mismo:

  1. Importar la clave GPG del repositorio para verificar que los paquetes son auténticos.
  2. Crear un archivo .list en /etc/apt/sources.list.d/.
  3. Ejecutar sudo apt update para refrescar el índice.
ventana terminal
# 1. Agregar la clave GPG para verificar la autenticidad
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 2. Crear un archivo específico en sources.list.d/
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian bookworm stable" | sudo tee /etc/apt/sources.list.d/docker.list
# 3. ¡IMPORTANTE! Actualizar el índice para que APT reconozca el nuevo repositorio
sudo apt update && sudo apt install docker-ce

Logs (Bitácora de auditoría): apt guarda todo lo que haces en /var/log/apt/history.log (histórico de comandos) y los errores detallados en /var/log/apt/term.log. Si un compañero rompió el sistema, aquí encontrarás al culpable.

Reparar Paquetes Rotos: Si dpkg dejó un paquete a medias (estado “half-installed”), el comando milagroso es:

ventana terminal
sudo apt install -f

Este comando (fix-broken) intentará resolver las dependencias pendientes o eliminar paquetes rotos.


Si ejecutas sudo apt remove nginx, el programa se desinstala, sí. Pero deja atrás en el disco duro todos los archivos de configuración (/etc/nginx) intactos por si te arrepientes “el año que viene” y lo vuelves a instalar.

En producción, a menudo queremos eliminar las huellas absolutas de un software mal configurado para empezar totalmente desde cero. Para amputaciones totales, jamás usamos remove, usamos el Purgante:

ventana terminal
# Purga: Desinstala y adicionalmente destruye toda huella de configuración GLOBAL (/etc/).
# NOTA: No borra configuraciones de usuario en /home/.
sudo apt purge nginx
# Barrido general: Un comando vital que audita si han quedado librerías huérfanas
# que se bajaron hace meses como dependencias de un software que ya borraste.
# Solo elimina paquetes que fueron instalados automáticamente.
sudo apt autoremove

7. Bloquear versiones con apt-mark (Holding)

Sección titulada “7. Bloquear versiones con apt-mark (Holding)"

En producción es crítico poder fijar una versión de un paquete para evitar que apt upgrade lo actualice automáticamente (p.ej. un kernel o una versión de MySQL validada en un entorno crítico):

ventana terminal
# Bloquear un paquete (hold) — no se actualizará con `apt upgrade`
sudo apt-mark hold nginx
# Ver todos los paquetes bloqueados
apt-mark showhold
# Desbloquear para permitir actualizaciones
sudo apt-mark unhold nginx

  1. Un compañero te da un archivo descargado de internet llamado teams-linux.deb. Lo ejecutas con sudo dpkg -i teams-linux.deb e inmediatamente el terminal vomita líneas rojas indicando “Unmet dependencies” arruinando la instalación. Tu compañero te dice que no te preocupes, que uses otro comando mágico de apt que escanea las catástrofes de dpkg instaladas a medias, viaja a internet, baja las dependencias que faltaban y parchea la instalación rota sanándola completamente. ¿Cuál es ese comando?

  2. Editando el fichero /etc/apt/sources.list has sustituido la palabra “bookworm” (Debian 12) por “trixie” (el inestable y futuro Debian 13). Has guardado el archivo. Emocionado, a los diez segundos escribes sudo apt install firefox esperando tener la versión experimental moderna de dicho Firefox, pero el servidor te instala la vieja que ya tenías ayer ¿Por qué falló tu experimento?

  3. Existe un servicio web crítico de backend que está fallando por estar mal configurado en /etc/. Tu jefe te ordena “desinstalarlo y volver a instalarlo completamente limpio y de fábrica” para borrar las huellas del desastre. Tiras un sudo apt remove backend para después tirarle un sudo apt install backend. El programa arranca y… ¡vuelve a fallar usando la configuración vieja! ¿Qué orden erraste?

  4. Has bloqueado el kernel de tu servidor con sudo apt-mark hold linux-image-amd64 para evitar que una actualización automática rompa tu sistema. Tiempo después, descubres una vulnerabilidad crítica en el kernel y necesitas actualizarlo manualmente. ¿Qué secuencia de comandos es correcta para aplicar el parche de seguridad?

  5. Un desarrollador te pide que instales un paquete llamado super-app que está en un repositorio externo. Sigues los pasos: añades la clave GPG, creas el archivo en /etc/apt/sources.list.d/super-app.list con la URL correcta y ejecutas sudo apt install super-app. APT te responde: “Unable to locate package super-app”. ¿Qué te has saltado?