LinuxParty

Inicio desactivadoInicio desactivadoInicio desactivadoInicio desactivadoInicio desactivado
 

A veces puede ser práctico instalar tu propio repositorio para prevenir repentinas caidas del repositorio original. Este artículo demuestra cómo crear un espejo usando CentOS para tu red local. Si tienes que instalar múltiples sistemas simultáneamente en tu red local,

entonces todos los paquetes necesarios se pueden descargar sobre una conexión rápida tipo LAN, así ahorrarás tu ancho de banda
en Internet.

Aquí tienes una versión actualizada y ampliada del artículo —con correcciones, mejoras y enfoques modernos— sobre cómo crear un repositorio local tipo YUM/DNF para CentOS / Red Hat / Fedora:


Introducción

Tener un repositorio local puede ser muy útil en entornos de red local (por ejemplo en una oficina o aula de formación), ya que:

  • Reduce el tráfico hacia repositorios remotos.
  • Garantiza disponibilidad en caso de cortes de Internet o repositorios externos caídos.
  • Permite tener control sobre versiones de paquetes disponibles.
  • Facilita la instalación en múltiples máquinas de forma homogénea.

Aunque el artículo original se centraba en CentOS / Red Hat / Fedora con YUM, hoy en día muchas de estas distribuciones usan DNF como gestor de paquetes (Fedora, RHEL 8/9, CentOS Stream). Pero el concepto de repositorio RPM local sigue siendo válido.

A continuación, el procedimiento paso a paso, con adaptaciones modernas.


Requisitos previos

  1. Una máquina (servidor) con suficiente espacio de disco para almacenar los paquetes RPM que vayas a sincronizar o copiar.
  2. Servicio accesible desde la red interna (por ejemplo mediante HTTP, FTP o incluso NFS/SMB).
  3. Acceso root o privilegios suficientes para gestionar el repositorio y los paquetes.
  4. En los clientes, configuraciones para apuntar al repositorio local.

Pasos para crear el repositorio local

1. Preparar el directorio donde estará el repositorio

Por ejemplo, en el servidor:

sudo mkdir -p /srv/repos/centos8   # o “rhel9”, “fedora36”, etc.
sudo chown -R root:root /srv/repos
sudo chmod -R 755 /srv/repos

Puedes organizar subdirectorios por versión, arquitectura (x86_64, aarch64…), tipo (BaseOS, AppStream, Extras…).

2. Copiar o sincronizar paquetes

Tienes dos opciones principales:

Opción A: copiar un repositorio remoto

Usar rsync, reposync o herramientas similares para descargar paquetes del repositorio oficial.

Por ejemplo, en RHEL/CentOS/Fedora modernas:

sudo dnf install -y dnf-plugins-core  # si no está instalado
sudo reposync --repoid=BaseOS --download-path=/srv/repos/centos8/BaseOS
sudo reposync --repoid=AppStream --download-path=/srv/repos/centos8/AppStream
# etc.

reposync descargará los paquetes RPM del repositorio configurado localmente en /etc/yum.repos.d/.

Otra alternativa es rsync directamente desde mirrors oficiales (si permiten rsync). Por ejemplo:

rsync -av --delete rsync://mirror.centos.org/centos/8/BaseOS/x86_64/os/ /srv/repos/centos8/BaseOS/

Opción B: copiar manualmente tus propios RPMs

Si tienes paquetes propios (internos, builds personalizados, etc.), simplemente colócalos dentro del directorio del repositorio, en la estructura apropiada (por ejemplo, /srv/repos/centos8/custom/).

3. Crear los metadatos del repositorio

Una vez tengas los RPMs en los directorios adecuados, debes generar los metadatos que permiten que yum, dnf o zypper (cuando aplica) identifiquen los paquetes:

sudo dnf install -y createrepo  # o createrepo_c (versión en C más rápida)
# Por ejemplo:
sudo createrepo_c /srv/repos/centos8/BaseOS
sudo createrepo_c /srv/repos/centos8/AppStream

Si ya existía el repositorio antes y sólo estás actualizando, puedes usar:

sudo createrepo_c --update /srv/repos/centos8/BaseOS

Esto sólo re-indexa lo necesario sin rehacer todo de cero.

4. Exponer el repositorio vía HTTP (u otro protocolo)

Para que los clientes puedan acceder al repositorio, lo más habitual es servirlo vía HTTP.

Si usas Apache:

sudo yum install -y httpd
# o en RHEL 8/9 / Fedora:
sudo dnf install -y httpd

# Crear configuración:
cat <<EOF | sudo tee /etc/httpd/conf.d/repos.conf
Alias /repos /srv/repos

<Directory /srv/repos>
  Options Indexes
  Require all granted
</Directory>
EOF

sudo systemctl enable --now httpd

Para Nginx sería similar:

server {
  listen 80;
  server_name repos.miempresa.local;

  location / {
    root /srv/repos;
    autoindex on;
  }
}

Reinicia el servicio web. Ahora, desde un navegador puedes probar, por ejemplo:

http://mi-servidor/repos/centos8/BaseOS/

y debería listar los RPMs y archivos repodata/.

5. Crear el archivo .repo para clientes

En cada máquina cliente (o como plantilla de configuración) crea un archivo en /etc/yum.repos.d/ por ejemplo mi-repo-local.repo:

[mi-local-baseos]
name=Repositorio local BaseOS CentOS 8
baseurl=http://mi-servidor/repos/centos8/BaseOS/
enabled=1
gpgcheck=0

[mi-local-appstream]
name=Repositorio local AppStream CentOS 8
baseurl=http://mi-servidor/repos/centos8/AppStream/
enabled=1
gpgcheck=0

Si quieres firmar tus paquetes (recomendado en entornos corporativos), puedes:

  1. Crear un par de claves GPG.
  2. Firmar los RPMs (rpm --addsign o herramientas relacionadas).
  3. Colocar la clave pública en los clientes y activar gpgcheck=1.

6. Actualizar el repositorio cuando cambien paquetes

Cada vez que añadas o elimines paquetes, ejecuta nuevamente createrepo_c --update en el directorio correspondiente.

Si usas reposync, puedes integrarlo dentro de un script cron que sincronice periódicamente del repositorio remoto y regenere los metadatos.


Particularidades modernas y recomendaciones

  • En Fedora y versiones recientes de RHEL / CentOS, DNF es el gestor de paquetes por defecto. Aun así, los repositorios .repo funcionan igual.
  • Usa createrepo_c (la versión en C) en lugar de createrepo cuando sea posible, ya que es significativamente más rápido.
  • Si tienes repositorios muy grandes o muchos archivos, puedes usar herramientas como yum-mirror, mrepo o Pulp (para soluciones más robustas) que manejan versiones, categorías y tareas automáticas.
  • Para entornos empresariales, considera usar Red Hat Satellite o Katello/Pulp para gestión centralizada de repositorios y contenido.
  • Si usas SSL (HTTPS) para tu servidor HTTP, configura certificados válidos y asegúrate de que los clientes confíen en ellos.
  • Puedes usar herramientas como rsync + cron para mantener espejo actualizado regularmente.
  • Para firmar paquetes, es buena práctica usar GPG con rpm --addsign o rpmsign.
  • Si tu red es rápida (gigabit), es buena idea tener el repositorio local en un servidor con SSD o almacenamiento rápido, para que clientes tengan buen rendimiento.

No estás registrado para postear comentarios



Redes:



   

 

Suscribete / Newsletter

Suscribete a nuestras Newsletter y periódicamente recibirás un resumen de las noticias publicadas.

Donar a LinuxParty

Probablemente te niegues, pero.. ¿Podrías ayudarnos con una donación?


Tutorial de Linux

Top 15 artículos por Fecha

Filtro por Categorías