Linux: paquetes y repositorios
De qué familia es la máquina que hay delante y qué implica, cómo se instala software con y sin salida a internet, dónde se declaran los repositorios, qué guarda cada caché local y por qué una organización monta su propio repositorio.
La familia UNIX y las ramas de Linux
Antes de teclear nada en una máquina desconocida hay que saber de qué familia es, porque de ahí sale todo lo demás: el gestor de paquetes, la ruta de los ficheros de configuración y hasta el nombre de los servicios. UNIX no es un producto sino una familia con muchos descendientes, y Linux es solo una de las ramas.
| Sistema | Quién está detrás |
|---|---|
| Solaris | Sun Microsystems, hoy en manos de Oracle |
| SCO UNIX | Santa Cruz Operation |
| HP-UX | Hewlett-Packard |
| AIX | IBM |
| BSD | Rama libre de la que salen FreeBSD y, por herencia, macOS |
| Linux | Núcleo libre sobre el que se montan las distribuciones |
Dentro de Linux, lo que se instala nunca es el núcleo a secas sino una distribución: el núcleo más un gestor de paquetes, una selección de programas y unas decisiones de configuración. Las distribuciones se agrupan en pocas ramas, y las de cada rama comparten el formato de paquete.
| Rama | Descendientes habituales | Formato de paquete |
|---|---|---|
| Debian | Ubuntu, Linux Mint | .deb |
| Red Hat | Fedora, CentOS y su relevo Rocky Linux | .rpm |
| Mandriva | Mageia | .rpm |
| SUSE | openSUSE | .rpm |
| Slackware | Distribuciones derivadas minoritarias | .tgz |
| Gentoo | Compilación desde la receta, llamada ebuild | ebuild |
| Puppy Linux | Distribuciones ligeras | .pet |
| Arch Linux | Manjaro y otras | gestor pacman |
Dos datos de historia reciente que se preguntan. CentOS era la versión gratuita y compatible de Red Hat Enterprise Linux, y al cambiar su modelo el relevo lo tomó Rocky Linux. Y macOS, aunque hoy parezca un mundo aparte, desciende de BSD, que es lo que explica que su terminal se parezca tanto a la de Linux.
El formato de paquete es la pista más rápida: .deb significa familia Debian y por tanto apt; .rpm significa familia Red Hat o SUSE y por tanto dnf o zypper.
Para el examen
.deb: familia Debian; gestor apt
.rpm: familia Red Hat o SUSE; gestor dnf o zypper
Instalar con red y sin red
Un administrador se encuentra dos escenarios muy distintos. En el normal, la máquina llega al repositorio y basta pedir el paquete por su nombre. En el otro, la máquina está aislada, alguien trae el fichero del paquete en la mano y hay que instalarlo tal cual. Cada escenario tiene su herramienta.
| Escenario | Familia Debian | Familia Red Hat |
|---|---|---|
| Con acceso al repositorio | apt install nombre | dnf install nombre |
| Con el fichero en la mano | dpkg -i fichero.deb | rpm -Uvh fichero.rpm |
La diferencia no es de comodidad, es de capacidad: las herramientas de fichero no resuelven dependencias. Si el paquete que se instala a mano necesita otros, la instalación queda a medias y hay que rematarla. En la familia Debian, la orden que busca lo que falta y lo trae es apt install con la opción de arreglo.
dpkg -i agente-inventario_2.1_amd64.deb
apt install -f # busca y resuelve lo que quedó pendiente
dpkg --configure -a # termina de configurar paquetes a medias
dpkg -l | grep agente # comprobar que quedó instaladoEn la familia Red Hat, las tres letras de rpm -Uvh se preguntan por separado y conviene leerlas de una en una: U instala o actualiza según haga falta, v da salida detallada y h dibuja la barra de progreso.
rpm -Uvh agente-inventario-2.1.x86_64.rpm
rpm -qa | grep agente # consultar todo lo instalado
rpm -e agente-inventario # desinstalardpkg y rpm trabajan con el fichero que se les da y no salen a buscar nada. Resolver dependencias es cosa de apt y de dnf, que son los que hablan con el repositorio.
Para el examen
dpkg y rpm: instalan el fichero que se les da
Lo que NO hacen: resolver dependencias
Quién sale al repositorio: apt y dnf
Dónde se declara un repositorio
Un repositorio es un servidor que publica paquetes y un catálogo firmado que dice qué hay en él. La máquina no lo adivina: está escrito en un fichero de configuración, y saber cuál es lo primero que se toca cuando falla una instalación.
| Familia | Dónde se declaran los repositorios |
|---|---|
| Debian y derivadas | /etc/apt/sources.list y el directorio /etc/apt/sources.list.d |
| Red Hat y derivadas | El directorio /etc/yum.repos.d, con un fichero .repo por repositorio |
En la familia Debian, cada línea del fichero declara un origen con cuatro datos: si trae binarios o código fuente, la dirección del servidor, la versión de la distribución y las secciones que se aceptan. Es habitual añadir orígenes propios en ficheros aparte dentro del directorio, para no tocar el principal y poder quitarlos borrando un fichero.
# /etc/apt/sources.list.d/interno.list
deb https://paquetes.interno.llc/debian bookworm main
# después de tocar cualquier origen hay que refrescar el catálogo
apt updateEn la familia Red Hat cada repositorio es un fichero con formato de secciones: un identificador, un nombre legible, la dirección base, si está activo y la clave con la que se comprueba la firma de los paquetes.
# /etc/yum.repos.d/interno.repo
[interno]
name=Repositorio interno
baseurl=https://paquetes.interno.llc/rocky/9/
enabled=1
gpgcheck=1Ese gpgcheck no es un adorno: los repositorios van firmados y el gestor rechaza lo que no cuadre. Es la razón por la que añadir un origen nuevo obliga a instalar también su clave pública, y por la que apt update se queja cuando esa clave falta o ha caducado.
Debian declara repositorios en sources.list y en sources.list.d; Red Hat, en ficheros .repo dentro de /etc/yum.repos.d. Es de las preguntas de ruta más repetidas del temario.
Para el examen
En Debian: sources.list y sources.list.d
En Red Hat: ficheros .repo en /etc/yum.repos.d
Las cachés locales y las tres formas de actualizar
El gestor de paquetes guarda dos cosas distintas en disco y confundirlas lleva a diagnósticos equivocados. Una es el catálogo descargado, es decir la lista de qué hay disponible y en qué versión. La otra son los ficheros de paquete que se han ido bajando para instalarlos.
| Ruta | Qué guarda |
|---|---|
| /var/lib/apt/lists | Los catálogos descargados de cada repositorio |
| /var/cache/apt/archives | Los ficheros .deb ya descargados |
Esa separación explica la trampa clásica de la familia Debian: hay una orden que refresca el catálogo y otra que instala lo nuevo, y no hacen lo mismo. Ejecutar solo la primera no actualiza nada; ejecutar solo la segunda actualiza contra una lista vieja.
| Orden | Qué hace en realidad |
|---|---|
| apt update | Vuelve a descargar los catálogos. No instala nada |
| apt upgrade | Actualiza lo instalado sin quitar ni añadir paquetes |
| apt full-upgrade | Actualiza y, si hace falta, elimina paquetes que estorben |
La tercera forma existe porque a veces una actualización obliga a retirar algo, por ejemplo cuando un paquete se parte en dos o cambia de nombre. apt upgrade se planta antes que hacer eso; full-upgrade acepta el sacrificio. En la sintaxis antigua esa misma orden se llamaba dist-upgrade.
apt update && apt upgrade
apt full-upgrade
apt clean # vacía los .deb descargados
apt autoremove # quita dependencias que ya no usa nadieapt update refresca el catálogo y apt upgrade instala. Una pregunta que diga que apt update actualiza el software es falsa, aunque el nombre invite a creerlo.
Para el examen
apt update: refresca el catálogo
apt upgrade: instala las actualizaciones
Afirmación falsa típica: que apt update actualiza el software
Frontends, búsqueda y repositorio propio
Por encima de las órdenes básicas hay capas pensadas para trabajar más cómodo. En la familia Debian son tres y conviene distinguirlas porque el examen las mezcla: aptitude funciona en modo texto con una interfaz de menús, dselect es el frontend histórico y synaptic es la aplicación de escritorio con ventanas.
| Herramienta | Qué es |
|---|---|
| aptitude | Frontend de consola con interfaz de menús |
| dselect | Frontend clásico, anterior a aptitude |
| synaptic | Frontend gráfico de escritorio |
Hay además dos órdenes muy parecidas que no son intercambiables. apt es la interfaz pensada para una persona: barra de progreso, colores y salida legible, que puede cambiar entre versiones. apt-get es la interfaz estable, la que se usa dentro de un guion precisamente porque su salida no va a cambiar de forma inesperada.
Para buscar en el catálogo, la orden vigente es apt search, que reemplazó a apt-cache search, y apt show para leer la ficha completa de un paquete concreto. En la familia Red Hat las equivalentes son dnf search, dnf info y dnf list.
apt search servidor-web
apt show apache2
dnf search servidor-web
dnf info httpdSobre dnf conviene un aviso de vigencia: en la familia Red Hat, yum fue el gestor durante años pero desde la versión 8 el gestor real es dnf, y yum se conserva como enlace por compatibilidad. Responder yum a una pregunta sobre un sistema actual es responder con el nombre antiguo.
Por último, una organización rara vez deja que cada máquina se descargue lo que quiera de internet. Lo habitual es montar un gestor de repositorios propio, del que Artifactory es el ejemplo más conocido, que hace de espejo y de almacén: guarda una copia controlada de los paquetes aprobados, de manera que todas las máquinas instalen exactamente las mismas versiones y se pueda reconstruir un sistema tal como estaba.
apt para el uso interactivo y apt-get dentro de guiones. Un repositorio propio no es un capricho: es lo que hace reproducible una instalación y lo que permite instalar sin salida a internet.
Para el examen
apt frente a apt-get: uso interactivo frente a guiones
Repositorio propio: hace reproducible la instalación y permite instalar sin salida a internet