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
baseurlpuede ser HTTP, HTTPS, FTP o incluso una ruta localfile:///ruta.gpgcheck=1activa 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)
- Colocar los
.deben un directorio (ej./srv/repositorio/ubuntu/focal). - Generar el índice de paquetes:
cd /srv/repositorio/ubuntu/focal
dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz
- Servir el directorio por HTTP (como en el caso RPM).
- En el cliente, añadir la línea al archivo
/etc/apt/sources.listo 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.
- Instalar:
sudo apt install reprepro - 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
- 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/.
Servir el directorio
/srv/repositorio/ubuntupor HTTP.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~/.rpmmacroscon%_gpg_name). - El archivo
repomd.xmlse puede firmar, pero no es obligatorio para que el cliente verifique los paquetes si se establecegpgcheck=1y 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 archivosRelease.gpgyInReleasemediantereprepro export. - En el cliente, importar la clave con
sudo apt-key add clave.gpg(aunqueapt-keyestá 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/repositoriopor 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
| Problema | Posible causa | Solución |
|---|---|---|
| Cliente no encuentra el repositorio | URL incorrecta, firewall bloquea puerto | Verificar con curl -I http://repo..., abrir puerto |
| Error de metadatos en YUM | repodata no existe o está corrupto | Ejecutar createrepo --update en el servidor |
| “Hash Sum mismatch” en APT | Índice Packages.gz desactualizado | Regenerar con dpkg-scanpackages y actualizar |
| GPG check falla | Clave no importada o paquetes no firmados | Importar clave o desactivar temporalmente gpgcheck=0 (solo pruebas) |
| Permisos denegados al servir con Apache | Directorio no legible por el servidor web | Ajustar permisos con chmod -R o+rX y SELinux/AppArmor |
| Paquetes instalados desde repositorio local no actualizan | No se regeneran metadatos tras añadir paquetes | Volver a ejecutar createrepo --update / reprepro includedeb |
28.9. Ejercicios prácticos
Repositorio RPM con HTTP:
- Crea un directorio
/srv/repo/rpmy descarga varios paquetes RPM (puedes usaryumdownloaderen un sistema RHEL/CentOS o descargar de Internet). - Instala
createrepoy genera los metadatos. - Configura Apache para servir el directorio en
http://localhost/repo. - En un cliente (o en el mismo sistema), crea un archivo
.repoy verifica conyum repolistque aparece. Instala un paquete del repositorio.
- Crea un directorio
Repositorio APT con
apt-ftparchive:- Crea un directorio
/srv/repo/deby coloca algunos.deb(puedes usarapt downloaden 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.
- Crea un directorio
Uso de
reprepro(opcional):- Instala
repreproy configura una distribuciónfocalcon componentemain. - Añade un paquete
.deby exporta el repositorio. - Configura el cliente y prueba.
- Instala
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.
- Genera una clave GPG y firma un paquete RPM. Importa la clave pública en el cliente y activa
Persistencia y actualización:
- Añade un nuevo paquete al repositorio. Actualiza los metadatos. En el cliente, ejecuta
yum clean allyyum check-updatepara ver que aparece.
- Añade un nuevo paquete al repositorio. Actualiza los metadatos. En el cliente, ejecuta
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,
createrepogenerarepodata/. Para APT, se puede usardpkg-scanpackages+gziporeprepro. - Los clientes se configuran con archivos
.repo(YUM/DNF) o entradas ensources.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.
Descubre más desde CIBERED
Suscríbete y recibe las últimas entradas en tu correo electrónico.
