102.4 - Gestion de paquetes Debian: Teoria
Introduccion
El sistema de paquetes Debian es utilizado por Debian y sus derivados (Ubuntu, Linux Mint, etc.). Se basa en el formato de paquetes .deb y utiliza dos capas de herramientas: dpkg para la gestion de paquetes individuales y apt/apt-get para la gestion de repositorios y dependencias.
1. Arquitectura del sistema de paquetes Debian
Dos niveles de gestion
+--------------------------------------------+
| apt / apt-get / apt-cache / aptitude | <- Nivel alto
| (gestion de repositorios y dependencias) |
+--------------------------------------------+
| dpkg | <- Nivel bajo
| (instalacion/desinstalacion de .deb) |
+--------------------------------------------+
| Nivel | Herramienta | Funcion |
|---|---|---|
| Bajo | dpkg | Instala/desinstala paquetes .deb individuales. No resuelve dependencias |
| Alto | apt / apt-get | Descarga paquetes de repositorios, resuelve dependencias automaticamente |
2. dpkg - Herramienta de bajo nivel
Estructura de un paquete .deb
Un archivo .deb es un archivo ar que contiene:
nombre_version_arquitectura.deb
|
├── debian-binary (version del formato deb)
├── control.tar.gz (metadatos: dependencias, descripcion, scripts)
└── data.tar.gz (archivos a instalar en el sistema)
Ejemplo de nombre: nginx_1.18.0-1_amd64.deb
nginx- nombre del paquete1.18.0-1- version (upstream-debian_revision)amd64- arquitectura
Base de datos de dpkg
dpkg mantiene su base de datos en /var/lib/dpkg/:
status- estado de todos los paquetes conocidosavailable- lista de paquetes disponiblesinfo/- scripts y archivos de control de cada paquete
Instalar paquetes con dpkg
# Instalar un paquete .deb
dpkg -i paquete.deb
dpkg --install paquete.deb
# Instalar multiples paquetes
dpkg -i paquete1.deb paquete2.debImportante: Si faltan dependencias, dpkg mostrara un error pero dejara el paquete en estado “parcialmente instalado”. Se puede resolver con:
# Reparar dependencias rotas (instala las dependencias faltantes automaticamente)
apt-get install -f
# o equivalentemente:
apt-get -f install
# o con apt moderno:
apt --fix-broken installLa opcion -f (o --fix-broken) indica a apt que intente corregir un sistema con dependencias rotas. Es especialmente util despues de instalar un paquete .deb con dpkg -i que tenia dependencias no satisfechas.
Desinstalar paquetes con dpkg
# Desinstalar (mantiene archivos de configuracion)
dpkg -r paquete
dpkg --remove paquete
# Purgar (elimina TODO: programa + configuracion)
dpkg -P paquete
dpkg --purge paqueteDiferencia clave:
dpkg -r(remove): Elimina los archivos del programa pero conserva los archivos de configuraciondpkg -P(purge): Elimina todo, incluyendo los archivos de configuracion
Consultar paquetes con dpkg
# Listar todos los paquetes instalados
dpkg -l
dpkg --list
# Buscar un paquete especifico
dpkg -l nginx
dpkg -l 'lib*' # Soporta comodines
# Listar archivos instalados por un paquete
dpkg -L nginx
dpkg --listfiles nginx
# Buscar que paquete instalo un archivo
dpkg -S /usr/bin/ssh
dpkg --search /usr/bin/ssh
# Mostrar informacion de un paquete instalado
dpkg -s nginx
dpkg --status nginx
# Mostrar informacion de un archivo .deb (sin instalar)
dpkg -I paquete.deb
dpkg --info paquete.deb
# Listar contenido de un archivo .deb (sin instalar)
dpkg -c paquete.deb
dpkg --contents paquete.debEstados de los paquetes (dpkg -l)
La salida de dpkg -l muestra dos letras de estado:
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
| Codigo | Significado |
|---|---|
ii | Instalado correctamente |
rc | Eliminado, archivos de configuracion presentes |
un | Desconocido, no instalado |
iU | Instalado, pendiente de desempaquetar |
iF | Instalado, configuracion fallida |
hi | Instalado con “hold” (retenido, no se actualiza) |
Reparar paquetes con dpkg
# Configurar paquetes pendientes
dpkg --configure -a
# Reconfigurar un paquete ya instalado (ejecutar scripts postinstall)
dpkg-reconfigure paquete
# Ejemplo comun: reconfigurar zona horaria
dpkg-reconfigure tzdata
# Reconfigurar las locales
dpkg-reconfigure locales3. APT - Herramientas de alto nivel
apt vs apt-get vs apt-cache
| Herramienta | Uso | Notas |
|---|---|---|
apt | Herramienta moderna y unificada | Combina funcionalidades de apt-get y apt-cache. Salida mas amigable |
apt-get | Herramienta clasica de gestion | Mas adecuada para scripts (salida estable) |
apt-cache | Consultas sobre la cache de paquetes | Busqueda e informacion de paquetes |
Actualizar la lista de paquetes
# Descargar la lista actualizada de paquetes de los repositorios
apt update
apt-get updateNota: apt update NO instala ni actualiza paquetes. Solo descarga la informacion actualizada de que paquetes estan disponibles.
Actualizar paquetes instalados
# Actualizar paquetes (no elimina paquetes ni instala nuevos)
apt upgrade
apt-get upgrade
# Actualizacion completa (puede eliminar paquetes obsoletos e instalar nuevos)
apt full-upgrade
apt-get dist-upgradeDiferencia clave entre upgrade y dist-upgrade/full-upgrade:
| Comando | Comportamiento | Uso tipico |
|---|---|---|
apt upgrade / apt-get upgrade | Actualiza paquetes existentes. Nunca elimina paquetes ni instala nuevos. Si una actualizacion requiere eliminar otro paquete, la omite | Actualizaciones de seguridad rutinarias |
apt full-upgrade / apt-get dist-upgrade | Actualizacion mas agresiva. Puede eliminar paquetes obsoletos e instalar nuevos paquetes si es necesario para resolver dependencias | Actualizar a una nueva version de la distribucion o cuando hay cambios mayores de dependencias |
Para el examen:
apt-get dist-upgradeno significa necesariamente actualizar la distribucion completa. Solo significa que permite gestiones de dependencias mas agresivas (eliminar e instalar paquetes) durante la actualizacion.apt full-upgradees el equivalente moderno.
Instalar paquetes
# Instalar un paquete
apt install nginx
apt-get install nginx
# Instalar una version especifica
apt install nginx=1.18.0-1
# Instalar sin confirmar (auto-yes)
apt install -y nginx
# Instalar un archivo .deb local (resolviendo dependencias)
apt install ./paquete.deb
# Reinstalar un paquete
apt install --reinstall nginx
apt-get install --reinstall nginxDesinstalar paquetes
# Desinstalar (mantiene configuracion)
apt remove nginx
apt-get remove nginx
# Purgar (elimina todo incluyendo configuracion)
apt purge nginx
apt-get purge nginx
apt-get remove --purge nginx # Forma alternativa equivalente a apt-get purge
# Eliminar dependencias huerfanas (ya no necesarias)
apt autoremove
apt-get autoremove
# Combinar: purgar y eliminar dependencias huerfanas
apt autoremove --purge nginxDiferencia entre remove y purge:
| Comando | Archivos del programa | Archivos de configuracion |
|---|---|---|
apt remove / apt-get remove | Eliminados | Conservados |
apt purge / apt-get purge | Eliminados | Eliminados |
apt-get remove --purge | Eliminados | Eliminados (equivale a purge) |
Para el examen:
apt-get purgeyapt-get remove --purgeson equivalentes. Ambos eliminan los archivos de configuracion del paquete. Conremove(sin purge), los archivos de configuracion se conservan y el paquete aparece con estadorcendpkg -l.
Buscar paquetes
# Buscar paquetes por nombre o descripcion
apt search nginx
apt-cache search nginx
# Busqueda solo en nombres de paquetes
apt-cache search --names-only nginx
# Mostrar informacion detallada de un paquete
apt show nginx
apt-cache show nginx
# Mostrar informacion breve (politica de versiones)
apt-cache policy nginx
# Mostrar dependencias de un paquete
apt-cache depends nginx
# Mostrar que paquetes dependen de este (dependencias inversas)
apt-cache rdepends nginxLimpiar cache
Los paquetes .deb descargados por apt se almacenan en /var/cache/apt/archives/. Con el tiempo, esta cache puede ocupar mucho espacio en disco.
# Eliminar TODOS los paquetes .deb descargados en cache
apt clean
apt-get clean
# Vacia completamente /var/cache/apt/archives/
# Eliminar solo paquetes obsoletos de la cache (versiones antiguas que ya no estan en repositorios)
apt autoclean
apt-get autoclean
# Conserva los .deb de las versiones actuales de los paquetes
# Ver cuanto espacio ocupa la cache
du -sh /var/cache/apt/archives/| Comando | Que elimina | Espacio liberado |
|---|---|---|
apt-get clean | Todos los .deb descargados | Maximo |
apt-get autoclean | Solo .deb de versiones obsoletas | Parcial |
4. Repositorios - sources.list
/etc/apt/sources.list
Archivo principal que define los repositorios de paquetes.
Formato de una linea
tipo_paquete URI distribucion componentes
Ejemplo:
deb http://archive.ubuntu.com/ubuntu jammy main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu jammy main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu jammy-updates main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu jammy-security main restricted universe multiverse
| Campo | Descripcion | Ejemplo |
|---|---|---|
deb | Paquetes binarios | deb |
deb-src | Codigo fuente | deb-src |
| URI | Direccion del repositorio | http://archive.ubuntu.com/ubuntu |
| Distribucion | Nombre de la release | jammy, bookworm, stable |
| Componentes | Secciones del repositorio | main, restricted, universe |
Componentes del repositorio (Ubuntu)
| Componente | Descripcion |
|---|---|
main | Software libre soportado oficialmente |
restricted | Controladores propietarios soportados |
universe | Software libre mantenido por la comunidad |
multiverse | Software no libre (propietario) |
Componentes del repositorio (Debian)
| Componente | Descripcion |
|---|---|
main | Software que cumple las DFSG (totalmente libre) |
contrib | Software libre que depende de software no libre |
non-free | Software propietario |
/etc/apt/sources.list.d/
Directorio para archivos de repositorios adicionales (terceros). Cada archivo tiene extension .list o .sources.
# Ejemplo: /etc/apt/sources.list.d/docker.list
deb https://download.docker.com/linux/ubuntu jammy stable5. apt-file - Buscar archivos en paquetes
apt-file permite buscar que paquete contiene un archivo especifico, incluso si el paquete no esta instalado.
Instalacion y uso
# Instalar apt-file
apt install apt-file
# Actualizar la base de datos de apt-file
apt-file update
# Buscar que paquete contiene un archivo
apt-file search /usr/bin/htop
# Listar archivos de un paquete (sin necesidad de tenerlo instalado)
apt-file list nginxDiferencia con dpkg -S
| Comando | Busca en | Requisito |
|---|---|---|
dpkg -S <archivo> | Paquetes instalados | Paquete debe estar instalado |
apt-file search <archivo> | Todos los paquetes (repositorios) | Base de datos de apt-file actualizada |
6. dpkg-reconfigure
Permite reconfigurar un paquete ya instalado ejecutando sus scripts de configuracion post-instalacion.
# Reconfigurar la zona horaria
dpkg-reconfigure tzdata
# Reconfigurar las locales del sistema
dpkg-reconfigure locales
# Reconfigurar el teclado
dpkg-reconfigure keyboard-configuration
# Reconfigurar en modo no interactivo (usar respuestas por defecto)
dpkg-reconfigure -f noninteractive paqueteUso principal: Cuando un paquete necesita ser reconfigurado despues de la instalacion (por ejemplo, cambiar la zona horaria, las locales o los parametros de un servicio).
7. Gestion de claves GPG de repositorios
Los repositorios se firman con claves GPG para verificar la autenticidad de los paquetes.
# Anadir clave GPG de un repositorio (metodo clasico, obsoleto)
apt-key add clave.gpg
# Metodo moderno: almacenar en /etc/apt/trusted.gpg.d/
curl -fsSL https://ejemplo.com/clave.gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/ejemplo.gpg
# Listar claves instaladas
apt-key listResumen para el examen
- dpkg es de bajo nivel (no resuelve dependencias); apt es de alto nivel (resuelve dependencias).
dpkg -iinstala,dpkg -rdesinstala (conserva config),dpkg -Ppurga (elimina todo).dpkg -llista paquetes,dpkg -Llista archivos de un paquete,dpkg -Sbusca que paquete tiene un archivo.apt updateactualiza la lista;apt upgradeactualiza paquetes;apt full-upgradeactualizacion agresiva.apt removemantiene config;apt purgeelimina todo./etc/apt/sources.listdefine repositorios;/etc/apt/sources.list.d/para repos adicionales.apt-file searchbusca archivos en todos los paquetes (instalados o no);dpkg -Ssolo en instalados.dpkg-reconfigurere-ejecuta la configuracion post-instalacion de un paquete.dpkg --configure -aintenta configurar paquetes que quedaron en estado roto.
Trampas del examen
Errores comunes y distinciones criticas que LPI suele evaluar en este subtema:
dpkgvsapt: nivel bajo vs alto —dpkgNO resuelve dependencias;aptsi las resuelve. El examen puede preguntar que herramienta usar cuando una instalacion falla por dependencias.dpkg -rvsdpkg -P—-r(remove) desinstala pero conserva archivos de configuracion;-P(purge) elimina todo incluyendo la configuracion. El examen puede preguntar como eliminar completamente un paquete con sus configuraciones.dpkg -Svsapt-file search—dpkg -Sbusca SOLO entre paquetes instalados;apt-file searchbusca en TODOS los paquetes del repositorio (instalados o no). El examen puede presentar un escenario donde el paquete no esta instalado.apt updatevsapt upgrade—updateactualiza la LISTA de paquetes disponibles (metadatos);upgradeinstala las actualizaciones de paquetes. El examen puede invertir sus funciones en las opciones.apt upgradevsapt full-upgrade—upgradenunca elimina paquetes;full-upgrade(antesdist-upgrade) puede eliminar paquetes si es necesario para resolver dependencias. El examen puede preguntar cual es mas “agresivo”.dpkg -lvsdpkg -L—-l(minuscula L) lista todos los paquetes instalados;-L(mayuscula L) lista los archivos de UN paquete especifico. La diferencia entre mayuscula y minuscula es critica.dpkg -ivsdpkg -rrequieren nombres diferentes —-irequiere el archivo.debcompleto (e.g.,paquete_1.0_amd64.deb);-rrequiere solo el nombre del paquete (e.g.,paquete). El examen puede mezclar estos formatos./etc/apt/sources.listvs/etc/apt/sources.list.d/— El primero es el archivo principal de repositorios; el segundo es un directorio para archivos individuales de repositorios adicionales. El examen puede preguntar donde anadir un repositorio de terceros.dpkg-reconfigureno reinstala el paquete — Solo re-ejecuta los scripts de configuracion post-instalacion. El examen puede presentarlo como si reinstalara el paquete.