¿Cómo configurar un repositorio en red?

Aprender Certificado Fundación Linux en España contenido Técnicos desde Cero en CiberED

Un repositorio de software es un almacén centralizado de paquetes (RPM, DEB, etc.) desde el cual los sistemas pueden instalar, actualizar o eliminar software de forma automática y controlada.

28.1. Introducción a los repositorios de red

En lugar de depender de repositorios públicos de Internet (que pueden ser lentos, inaccesibles o no deseados), un administrador puede configurar un repositorio de red local para:

  • Acelerar las instalaciones en la red interna.
  • Servir paquetes propios o personalizados.
  • Controlar exactamente qué versiones están disponibles.
  • Reducir el consumo de ancho de banda de Internet.
  • Trabajar en entornos aislados o sin conexión.

Un repositorio de red se monta sobre un servidor web (HTTP/HTTPS), FTP o NFS, y los clientes se configuran para apuntar a esa ubicación. En este capítulo aprenderás a crear repositorios para sistemas basados en RPM (YUM/DNF) y en DEB (APT), utilizando createrepo y herramientas de APT, así como a configurar los clientes.

28.2. Componentes de un repositorio

Independientemente del tipo de paquete, un repositorio consta de:

  • Directorio con los paquetes (.rpm, .deb).
  • Metadatos que describen los paquetes (nombre, versión, dependencias, checksums). Estos metadatos son generados por herramientas específicas.
  • Un medio de acceso: servidor HTTP, FTP, NFS o simplemente un directorio local/remoto montado.

Para que los clientes puedan usar el repositorio, se debe configurar un archivo de repositorio (en YUM/DNF o APT) que indique la URL o ruta y, opcionalmente, claves GPG para verificar la autenticidad.

28.3. Preparación del servidor y almacenamiento de paquetes

28.3.1. Crear el directorio del repositorio

Elegir una ubicación, por ejemplo /srv/repositorio. Dentro, se pueden crear subdirectorios para cada distribución o arquitectura.

sudo mkdir -p /srv/repositorio/rhel/8/x86_64
sudo mkdir -p /srv/repositorio/ubuntu/focal

28.3.2. Obtener los paquetes

Se pueden descargar paquetes de Internet (con wget, curl, yumdownloader, apt download, etc.) o copiar los existentes de medios de instalación o de otros sistemas.

Ejemplo para RPM usando yumdownloader (requiere instalar yum-utils):

sudo yum install yum-utils
yumdownloader --destdir=/srv/repositorio/rhel/8/x86_64 httpd

Para DEB:

sudo apt install apt-utils
cd /srv/repositorio/ubuntu/focal
apt download nginx

28.4. Crear un repositorio YUM/DNF (RPM)

28.4.1. Instalar createrepo

createrepo es la herramienta que genera los metadatos del repositorio a partir de los archivos .rpm.

sudo yum install createrepo   # RHEL/CentOS
sudo apt install createrepo    # Debian/Ubuntu (aunque es para RPM)

28.4.2. Generar los metadatos

Ejecutar createrepo en el directorio que contiene los RPMs:

sudo createrepo /srv/repositorio/rhel/8/x86_64

Esto crea el subdirectorio repodata/ con los archivos de metadatos (repomd.xml, etc.).

Actualización del repositorio: cada vez que se añadan o eliminen paquetes, se debe volver a ejecutar createrepo --update.

28.4.3. Servir el repositorio por HTTP

Instalar un servidor web (Apache o Nginx) y configurar un alias o Virtual Host que apunte al directorio del repositorio.

Con Apache:

  • Crear un archivo de configuración en /etc/httpd/conf.d/repo.conf (RHEL) o /etc/apache2/conf-available/repo.conf (Debian):
Alias /repo /srv/repositorio
<Directory /srv/repositorio>
    Options Indexes FollowSymLinks
    Require all granted
</Directory>
  • Recargar Apache.

Con Nginx:

server {
    listen 80;
    server_name repo.ejemplo.com;
    root /srv/repositorio;
    autoindex on;
}

28.4.4. Configurar el cliente para usar el repositorio

Crear un archivo .repo en /etc/yum.repos.d/ (por ejemplo, mirepo.repo):

[mirepo]
name=Mi Repositorio Local
baseurl=http://repo.ejemplo.com/rhel/8/x86_64
enabled=1
gpgcheck=0
  • baseurl puede ser HTTP, HTTPS, FTP o incluso una ruta local file:///ruta.
  • gpgcheck=1 activa la verificación de firma GPG; para repositorios locales propios se puede poner 0 si no se firma, aunque es recomendable firmar.

Después, en el cliente:

sudo yum clean all
sudo yum repolist
sudo yum install paquete

28.5. Crear un repositorio APT (Debian/Ubuntu)

28.5.1. Estructura de un repositorio APT

APT usa una estructura más compleja: los paquetes .deb se colocan en un directorio pool/ y los metadatos se generan en dists/. Para simplificar, se puede crear un repositorio “trivial” (no oficial) que solo contenga un directorio con .deb y un archivo Packages.gz, o usar herramientas como reprepro o apt-ftparchive.

Para el examen LFCS, lo más habitual es configurar un repositorio simple con apt-ftparchive o simplemente servir los .deb en un directorio indexado. Sin embargo, daremos los pasos básicos con reprepro, que es estándar.

28.5.2. Usando apt-ftparchive (método simple)

  1. Colocar los .deb en un directorio (ej. /srv/repositorio/ubuntu/focal).
  2. Generar el índice de paquetes:
cd /srv/repositorio/ubuntu/focal
dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz
  1. Servir el directorio por HTTP (como en el caso RPM).
  2. En el cliente, añadir la línea al archivo /etc/apt/sources.list o en /etc/apt/sources.list.d/mirepo.list:
deb [trusted=yes] http://repo.ejemplo.com/ubuntu/focal ./

La opción [trusted=yes] deshabilita la verificación de firma GPG (no recomendado en producción, pero útil para laboratorio). Si se desea firma, se necesita configurar un archivo Release con firma, lo cual es más complejo.

28.5.3. Usando reprepro (más profesional)

reprepro gestiona repositorios APT con distribuciones, componentes y arquitecturas.

  1. Instalar: sudo apt install reprepro
  2. Crear estructura y configuración:
sudo mkdir -p /srv/repositorio/ubuntu
cd /srv/repositorio/ubuntu
sudo mkdir conf

Crear conf/distributions:

Origin: MiEmpresa
Label: MiEmpresa Ubuntu
Codename: focal
Architectures: amd64
Components: main
Description: Repositorio local de MiEmpresa
  1. Añadir paquetes:
sudo reprepro -b /srv/repositorio/ubuntu includedeb focal /ruta/paquete.deb

Esto coloca el paquete en pool/ y actualiza los índices en dists/.

  1. Servir el directorio /srv/repositorio/ubuntu por HTTP.

  2. En el cliente, añadir:

deb http://repo.ejemplo.com/ubuntu focal main

Si no se firma, se puede usar [trusted=yes].

28.6. Firma GPG de repositorios (opcional pero recomendado)

Para garantizar la autenticidad e integridad de los paquetes, se firma el repositorio con una clave GPG.

28.6.1. Generar clave GPG

gpg --gen-key

28.6.2. Firmar el repositorio RPM

  • Exportar la clave pública: gpg --export -a "Nombre" > RPM-GPG-KEY-mirepo
  • Firmar cada paquete con rpm --addsign paquete.rpm (requiere configurar ~/.rpmmacros con %_gpg_name).
  • El archivo repomd.xml se puede firmar, pero no es obligatorio para que el cliente verifique los paquetes si se establece gpgcheck=1 y se importa la clave pública.

En el cliente, se puede instalar la clave pública: sudo rpm --import http://repo.ejemplo.com/RPM-GPG-KEY-mirepo y en el .repo poner gpgcheck=1.

28.6.3. Firmar el repositorio APT

  • Con reprepro, se pueden generar archivos Release.gpg y InRelease mediante reprepro export.
  • En el cliente, importar la clave con sudo apt-key add clave.gpg (aunque apt-key está obsoleto en versiones recientes; se recomienda colocar la clave en /etc/apt/trusted.gpg.d/).

28.7. Repositorios NFS

En lugar de HTTP, se puede montar el directorio del repositorio por NFS y usar baseurl=file:///ruta/montada en el cliente. Esto es más simple pero requiere montar NFS y no es tan flexible como HTTP.

Ejemplo:

  • Exportar /srv/repositorio por NFS.
  • En el cliente, montar en /mnt/repo.
  • En el archivo .repo:
[mi-repo-nfs]
name=Repo NFS
baseurl=file:///mnt/repo/rhel/8/x86_64
enabled=1
gpgcheck=0

28.8. Solución de problemas comunes

ProblemaPosible causaSolución
Cliente no encuentra el repositorioURL incorrecta, firewall bloquea puertoVerificar con curl -I http://repo..., abrir puerto
Error de metadatos en YUMrepodata no existe o está corruptoEjecutar createrepo --update en el servidor
“Hash Sum mismatch” en APTÍndice Packages.gz desactualizadoRegenerar con dpkg-scanpackages y actualizar
GPG check fallaClave no importada o paquetes no firmadosImportar clave o desactivar temporalmente gpgcheck=0 (solo pruebas)
Permisos denegados al servir con ApacheDirectorio no legible por el servidor webAjustar permisos con chmod -R o+rX y SELinux/AppArmor
Paquetes instalados desde repositorio local no actualizanNo se regeneran metadatos tras añadir paquetesVolver a ejecutar createrepo --update / reprepro includedeb

28.9. Ejercicios prácticos

  1. Repositorio RPM con HTTP:

    • Crea un directorio /srv/repo/rpm y descarga varios paquetes RPM (puedes usar yumdownloader en un sistema RHEL/CentOS o descargar de Internet).
    • Instala createrepo y genera los metadatos.
    • Configura Apache para servir el directorio en http://localhost/repo.
    • En un cliente (o en el mismo sistema), crea un archivo .repo y verifica con yum repolist que aparece. Instala un paquete del repositorio.
  2. Repositorio APT con apt-ftparchive:

    • Crea un directorio /srv/repo/deb y coloca algunos .deb (puedes usar apt download en Ubuntu/Debian).
    • Genera Packages.gz.
    • Sirve con Apache en http://localhost/deb.
    • Añade la fuente al cliente y ejecuta apt update. Verifica que los paquetes están disponibles.
  3. Uso de reprepro (opcional):

    • Instala reprepro y configura una distribución focal con componente main.
    • Añade un paquete .deb y exporta el repositorio.
    • Configura el cliente y prueba.
  4. Firma GPG básica:

    • Genera una clave GPG y firma un paquete RPM. Importa la clave pública en el cliente y activa gpgcheck=1. Verifica que la instalación funciona.
  5. Persistencia y actualización:

    • Añade un nuevo paquete al repositorio. Actualiza los metadatos. En el cliente, ejecuta yum clean all y yum check-update para ver que aparece.

28.10. Resumen y consejos para LFCS

  • Un repositorio de red es un servidor (HTTP/FTP/NFS) que sirve paquetes junto con sus metadatos.
  • Para RPM, createrepo genera repodata/. Para APT, se puede usar dpkg-scanpackages + gzip o reprepro.
  • Los clientes se configuran con archivos .repo (YUM/DNF) o entradas en sources.list.
  • La persistencia y actualización de los metadatos es crucial: cada cambio en los paquetes requiere regenerar los índices.
  • La firma GPG es opcional pero recomendada en producción.
  • En el examen, es probable que te pidan configurar un repositorio local simple y apuntar un cliente a él. Practica con HTTP y con un directorio local.

Con este capítulo has aprendido a crear repositorios de red para distribuciones basadas en RPM y DEB, una capacidad muy valorada en la administración de flotas de servidores. En el próximo capítulo abordaremos la monitorización del rendimiento, seguridad y resolución de problemas de red, integrando herramientas de diagnóstico que ya hemos visto.

Vistas: 0

Descubre más desde CIBERED

Suscríbete y recibe las últimas entradas en tu correo electrónico.

Scroll al inicio