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.

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 httpdPaso 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/reposPaso 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/localrepoPaso 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 --reloadLa URL base de su repositorio ahora es:
http://<your-server-ip-or-domain>/repos/localrepoPaso 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-localrepoOpció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 httpdPaso 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/AppStreamEn 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 --reloadCree 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 repolistMantenimiento: 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
CRONMejores 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.
