Solo para visitantes de nuestro blog Obtenga 3 meses adicionales gratis + 10% de descuento en el plan trianual YSBLOG10
Agarra el trato

Cómo crear YUM en un servidor Linux para repositorios locales

Última actualización: marzo 7, 2026 9 minutos de lectura Sanjeet Chauhan
Crear YUM en un servidor Linux

Crear YUM en un servidor Linux Creando un repositorio YUM local (desde una ISO o paquetes reflejados), generando metadatos con createrepo_c, sirviéndolos mediante HTTP/HTTPS y añadiendo un archivo .repo en los clientes que apunta a su URL base. Esto permite una gestión de paquetes rápida, controlada y sin conexión. managemiento en sistemas RHEL/CentOS/AlmaLinux/Rocky.

En esta guía, le mostraré cómo crear YUM en un servidor Linux paso a paso; específicamente, cómo crear un repositorio YUM local que pueda alojar de forma privada o reflejar desde fuentes ascendentes.

Ya sea que esté ejecutando CentOS 7, AlmaLinux/Rocky 8/9 o RHEL, este tutorial cubre configuraciones sin conexión, sincronización, seguridad GPG y mantenimiento del mundo real.

¿Qué es YUM (y DNF) y por qué crear tu propio repositorio?

YUM (Yellowdog Updater, Modified) es el paquete manager utilizado por distribuciones basadas en RPM. En RHEL 8/9, CentOS Stream, AlmaLinux y Rocky Linux, el cliente predeterminado es DNF, pero el comando yum se mantiene como contenedor para compatibilidad.

¿Qué es YUM (y DNF) y por qué crear tu propio repositorio?

La creación de su propio repositorio YUM centraliza los paquetes para lograr velocidad, control y cumplimiento, lo que es ideal para centros de datos, redes aisladas y entornos DevOps consistentes.

Requisitos previos

  • Un servidor Linux (RHEL/CentOS 7 o AlmaLinux/Rocky/RHEL 8/9) con acceso sudo/root
  • Conocimientos básicos de redes, firewall y SELinux
  • Para RHEL: suscripción activa o una fuente de contenido válida; para la comunidad: espejos de transmisión de AlmaLinux/Rocky/CentOS
  • Servidor web para alojar el repositorio (Apache httpd o Nginx)
  • Utilidades: createrepo_c y, opcionalmente, reposync (desde yum-utils o dnf-plugins-core)

Decisión rápida: dos formas de crear un repositorio YUM

  • Repositorio local/fuera de línea desde ISO o un directorio de RPM (mejor para conjuntos de paquetes seleccionados o con espacio de aire)
  • Repositorio reflejado con sincronización de repositorios desde fuentes ascendentes (ideal para mantener un espejo local actualizado)

Opción 1: Crear un repositorio YUM local desde el directorio ISO o RPM

Este método crea un repositorio a partir de paquetes que ya tienes, como una imagen ISO de RHEL/AlmaLinux/Rocky o una colección de RPM personalizada. Es la forma más rápida de crear YUM en un servidor Linux para usarlo sin conexión.

Paso 1: Instalar las herramientas necesarias

# RHEL/CentOS 7
sudo yum install -y createrepo yum-utils httpd

# AlmaLinux/Rocky/RHEL 8/9
sudo dnf install -y createrepo_c dnf-plugins-core httpd

Paso 2: Preparar un directorio de repositorio

sudo mkdir -p /var/www/html/repos/localrepo
sudo chown -R root:root /var/www/html/repos
sudo chmod -R 755 /var/www/html/repos

Paso 3: (Opcional) Montar una ISO y copiar paquetes

Si está utilizando una ISO de distribución (por ejemplo, AlmaLinux-9.x-x86_64-dvd.iso), monte y copie los RPM desde los directorios BaseOS/AppStream (o Paquetes).

sudo mkdir -p /mnt/iso
sudo mount -o loop /path/to/AlmaLinux-9.x-x86_64-dvd.iso /mnt/iso

# Copy BaseOS and AppStream packages (adjust paths per distro)
sudo cp -av /mnt/iso/BaseOS/Packages/*.rpm /var/www/html/repos/localrepo/
sudo cp -av /mnt/iso/AppStream/Packages/*.rpm /var/www/html/repos/localrepo/

Como alternativa, copie sus RPM seleccionados en el mismo directorio si está creando un repositorio personalizado.

Paso 4: Generar metadatos con createrepo_c

# Initialize repository metadata
sudo createrepo_c /var/www/html/repos/localrepo

# Later, when updating with new RPMs, use --update:
sudo createrepo_c --update /var/www/html/repos/localrepo

Paso 5: Sirva el repositorio a través de HTTP (Apache)

sudo systemctl enable httpd --now

# If SELinux is enforcing, allow Apache to read the repo directory
sudo chcon -R -t httpd_sys_content_t /var/www/html/repos

# Open firewall if needed
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --reload

La URL base de su repositorio ahora es:

http://<your-server-ip-or-domain>/repos/localrepo

Paso 6: Crear un archivo .repo en las máquinas cliente

sudo tee /etc/yum.repos.d/localrepo.repo > /dev/null <<'EOF'
[localrepo]
name=Local YUM Repository
baseurl=http://<your-server-ip-or-domain>/repos/localrepo
enabled=1
gpgcheck=0
EOF

# Refresh cache and test
sudo yum clean all && sudo yum makecache
sudo yum repolist

# Install a package to verify
sudo yum install -y <package-name>

Establezca gpgcheck=1 después de firmar los paquetes o los metadatos del repositorio con una clave GPG (que se explica a continuación).

(Opcional) Paso 7: Habilite la firma GPG para mayor seguridad

Firmar genera confianza. Genere o importe una clave GPG, firme RPM o metadatos y dirija a los clientes a su clave pública.

# Create a GPG key (interactive)
gpg --full-generate-key

# Export public key to serve via HTTP
gpg --export -a "Your Name or Repo Key" | sudo tee /var/www/html/repos/RPM-GPG-KEY-localrepo

# On clients, import and enforce gpgcheck
sudo rpm --import http://<server>/repos/RPM-GPG-KEY-localrepo

# Then set in /etc/yum.repos.d/localrepo.repo
gpgcheck=1
gpgkey=http://<server>/repos/RPM-GPG-KEY-localrepo

Opción 2: Duplicar un repositorio ascendente con reposync

Use reposync para replicar los repositorios oficiales localmente. Esto reduce el ancho de banda externo y acelera las actualizaciones en varios servidores.

Paso 1: Instalar las utilidades de reposync

# RHEL/CentOS 7
sudo yum install -y yum-utils httpd

# AlmaLinux/Rocky/RHEL 8/9
sudo dnf install -y dnf-plugins-core httpd

Paso 2: Elija qué repositorios reflejar

  • AlmaLinux/Rocky 8/9: BaseOS, AppStream, Extras
  • RHEL 8/9: BaseOS, AppStream (requiere acceso por suscripción)
  • CentOS 7: base, actualizaciones, extras (nota EOL: migración del plan)

Paso 3: Ejecutar reposync

Cree una estructura de directorios y sincronícela. Los ejemplos a continuación muestran AlmaLinux 9; ajústelos a su distribución y arquitectura.

BASE=/var/www/html/repos/almalinux9
sudo mkdir -p $BASE/{BaseOS,AppStream}
# Sync packages and metadata
sudo reposync -p $BASE/BaseOS --download-metadata --repo=almalinux-baseos
sudo reposync -p $BASE/AppStream --download-metadata --repo=almalinux-appstream

# If your reposync doesn't add repodata, generate it:
sudo createrepo_c $BASE/BaseOS
sudo createrepo_c $BASE/AppStream

En RHEL, asegúrese de que sus repositorios de suscripción estén habilitados antes de sincronizar. En CentOS 7, use los ID de repositorio de /etc/yum.repos.d/CentOS-Base.repo.

Paso 4: Sirve y expone tu espejo

sudo systemctl enable httpd --now
sudo chcon -R -t httpd_sys_content_t /var/www/html/repos
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --reload

Cree archivos de repositorio de cliente que apunten a su espejo:

# AlmaLinux 9 example:
sudo tee /etc/yum.repos.d/alma-local.repo > /dev/null <<'EOF'
[almalinux-BaseOS-local]
name=AlmaLinux 9 BaseOS (Local)
baseurl=http://<server>/repos/almalinux9/BaseOS
enabled=1
gpgcheck=1
gpgkey=https://repo.almalinux.org/almalinux/RPM-GPG-KEY-AlmaLinux-9

[almalinux-AppStream-local]
name=AlmaLinux 9 AppStream (Local)
baseurl=http://<server>/repos/almalinux9/AppStream
enabled=1
gpgcheck=1
gpgkey=https://repo.almalinux.org/almalinux/RPM-GPG-KEY-AlmaLinux-9
EOF

sudo dnf clean all && sudo dnf makecache
sudo dnf repolist

Mantenimiento: Mantenga su repositorio YUM saludable

  • Automatizar sincronizaciones: Ejecutar reposync cada noche o semana a través de cron o temporizadores systemd
  • Podar paquetes antiguos: Utilice reposync –delete para eliminar paquetes eliminados anteriormente
  • Regenerar metadatos: createrepo_c –actualizar al agregar o eliminar RPM
  • Almacenamiento del monitor: Los servidores dedicados o VPS respaldados por NVMe manejan mejor los espejos de repositorio bajo carga
  • Acceso seguro: Prefiero HTTPS, restringido por IP/VPN para repositorios internos
# Example cron job (as root) to sync nightly at 2:30 AM
cat <<'CRON' >> /etc/crontab
30 2 * * * root reposync -p /var/www/html/repos/almalinux9/BaseOS --download-metadata --repo=almalinux-baseos --delete
35 2 * * * root reposync -p /var/www/html/repos/almalinux9/AppStream --download-metadata --repo=almalinux-appstream --delete
# Refresh metadata if needed
40 2 * * * root createrepo_c --update /var/www/html/repos/almalinux9/BaseOS
45 2 * * * root createrepo_c --update /var/www/html/repos/almalinux9/AppStream
CRON

Mejores prácticas de seguridad para repositorios YUM privados

  • Habilite gpgcheck=1 y distribuya su clave pública GPG
  • Servir a través de HTTPS con un certificado válido (Vamos a cifrar para repositorios con acceso a Internet)
  • Utilice autenticación básica o listas de IP permitidas para repositorios internos
  • Cambios de auditoría: Controle las versiones de sus archivos .repo del repositorio y sincronice los scripts
  • Endurecer Apache/Nginx y mantén el sistema operativo actualizado a través de tu nuevo repositorio.

YUM vs DNF: Comandos que usarás

  • Instalar: yum install pkg es igual a dnf install pkg
  • Actualizar caché/lista de repositorios: yum makecache, yum repolist es igual a dnf makecache, dnf repolist
  • Limpiar caché: yum limpiar todo es igual a dnf limpiar todo
  • Espejo: Sincronización de repositorios de yum-utils (EL7) frente a sincronización de repositorios de dnf-plugins-core (EL8/9)

En sistemas modernos, el comando yum suele ser un enlace simbólico a dnf. Todos los pasos aquí funcionan en ambos, con nombres de paquetes ajustados según la versión.

Solución de errores comunes del repositorio YUM

  • No se puede encontrar una baseurl válida: Verificar baseurl en .repo, DNSy cortafuegos; asegurar Apache está en funcionamiento y es accesible
  • repodata/repomd.xml no encontrado: Ejecute createrepo_c en el directorio del repositorio o asegúrese de descargar metadatos con reposync
  • Error en la comprobación GPG: Importe la clave GPG correcta y confirme la URL de la clave GPG; configure gpgcheck=0 temporalmente para diagnóstico
  • 404 en paquetes: Comprobar el contexto de SELinux (httpd_sys_content_t) y los permisos de directorio (755)
  • Arquitectura despareja: Asegúrese de estar sincronizando/sirviendo la arquitectura base correcta (x86_64, aarch64)

Consejos prácticos del personal de hosting

  • Dividir los repositorios por entorno (producción/etapa/desarrollo) para aislar las versiones del paquete
  • Almacene en caché los paquetes populares en nodos perimetrales cercanos a sus servidores de aplicaciones
  • Para propiedades grandes, refleje solo lo que necesita con filtros –repo y listas de inclusión/exclusión
  • Documente los ID de su repositorio y mantenga los archivos .repo mínimos y consistentes mediante la configuración manageción

Alojar su repositorio YUM privado en un VPS NVMe rápido o un servidor dedicado mejora el rendimiento durante las ventanas de parches. YouStable ofrece opciones VPS optimizadas y hardware real, ideales para espejos, con ancho de banda, instantáneas y protección DDoS que mantienen sus repositorios confiables bajo carga.

Preguntas Frecuentes

¿Cómo creo un repositorio YUM local a partir de un ISO?

Monta la ISO, copia los RPM a un directorio, ejecuta createrepo_c para generar repodata y sirve el directorio a través de Apache or Nginx. Finalmente, crea un archivo .repo en los clientes que apunte baseurl a la ruta de tu servidor y ejecuta yum/dnf makecache.

¿YUM es reemplazado por DNF?

En RHEL 8/9 y derivados, DNF es el valor predeterminado, pero el comando yum se mantiene por compatibilidad. El diseño y la configuración del repositorio (p. ej., archivos .repo, repodata) funcionan de la misma manera, por lo que esta guía se aplica a ambos.

¿Cómo puedo reflejar los repositorios oficiales localmente?

Instale yum-utils (EL7) o dnf-plugins-core (EL8/9) y ejecute reposync con los ID de repositorio deseados y la etiqueta --download-metadata. Distribuya los directorios sincronizados mediante HTTP/HTTPS y dirija a los clientes a su URL base. Use --delete para eliminar los paquetes eliminados.

¿Cómo puedo proteger un repositorio YUM privado?

Habilite las comprobaciones GPG, sirva a través de HTTPS, restrinja el acceso por IP o VPN y almacene el contenido del repositorio en sistemas reforzados. Firme sus paquetes o metadatos y distribuya su clave pública GPG a través de un canal de confianza.

¿Cuál es la forma más sencilla de apuntar muchos servidores a mi repositorio?

Utilizar configuración management (Ansible, Puppet o Salt) para implementar el archivo .repo de forma uniforme. Mantenga los repositorios versionados y separados por entorno para evitar actualizaciones accidentales entre flotas.

Deja Tu Comentario

Su dirección de correo electrónico no será publicada. Las areas obligatorias están marcadas como requeridas *

Ir al Inicio