Un playbook para desplegar un koji de prueba. Incluye OpenTofu para desplegar infraestrctura usando libvirt + kvm/qemu.
  • Jinja 39.6%
  • HCL 18%
  • Shell 17.9%
  • Python 12.2%
  • CSS 9.5%
  • Other 2.8%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Rénich Bon Ćirić a37e0560ce
feat(infra): use backing_store and target blocks in OpenTofu
Configure libvirt_volume resources to use the shared base_image as backing_store and specify capacity explicitly. This allows proper thin provisioning and volume resizing (expanding the virtual size beyond the 5GB base template). Correct target formatting schema block syntax.

Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-17 03:46:04 -06:00
.agents/journal feat(infra): use backing_store and target blocks in OpenTofu 2026-06-17 03:46:04 -06:00
bin feat: Integración de Siguldry PKCS#11 y spooler de firmas 2026-06-16 10:06:44 -06:00
docs docs(fork): document fork strategy and bootstrap phase 1 and 2 2026-06-17 03:33:22 -06:00
inventories/staging feat: deploy Caddy repository server for BaseOS packages 2026-06-16 16:10:32 -06:00
opentofu feat(infra): use backing_store and target blocks in OpenTofu 2026-06-17 03:46:04 -06:00
roles refactor(theme): extract Koji CSS overrides to dedicated file 2026-06-17 03:34:45 -06:00
vars feat(bootstrap): use public CentOS mirrors and add Spanish Koji docs 2026-06-17 03:25:29 -06:00
.gitignore refactor(ansible): Estandariza nombres de roles y actualiza Koji 2025-11-15 20:08:24 -06:00
ansible.cfg feat: Integración de Siguldry PKCS#11 y spooler de firmas 2026-06-16 10:06:44 -06:00
bootstrap.yaml feat: Integración de Siguldry PKCS#11 y spooler de firmas 2026-06-16 10:06:44 -06:00
CHANGELOG.rst feat: Integración de Siguldry PKCS#11 y spooler de firmas 2026-06-16 10:06:44 -06:00
CODE_OF_HONOR.rst primer commit 2025-08-06 05:45:11 -06:00
deploy.yaml feat: deploy Caddy repository server for BaseOS packages 2026-06-16 16:10:32 -06:00
GNUmakefile feat(makefile): add targets to install and remove CA cert on local PC 2026-06-16 12:18:00 -06:00
README.rst docs(readme): document Koji Web SSL authentication and client cert setup 2026-06-16 12:25:12 -06:00
requirements.yaml primer commit 2025-08-06 05:45:11 -06:00
reset.yaml refactor(ansible): Estandariza nombres de roles y actualiza Koji 2025-11-15 20:08:24 -06:00
TODO.rst docs: Actualizar TODO.rst con tareas pendientes 2025-11-22 11:58:44 -06:00

Playbook de Ansible para MxOS Koji

Este playbook de Ansible automatiza el despliegue, configuración y ciclo de vida de un cluster de compilación Koji local (Staging/PoC) para la distribución MxOS, un fork de CentOS Stream 10 (y CentOS Stream 11 en el futuro).

El objetivo es mantener una compatibilidad estricta con la infraestructura oficial de CentOS Stream para facilitar la colaboración ascendente y el aprendizaje del ecosistema de empaquetado de Red Hat.

Entorno de Desarrollo

Para empezar a desarrollar, necesitas configurar un entorno de virtualización local. Este proyecto usa OpenTofu para aprovisionar 5 máquinas virtuales CentOS Stream 10 con Libvirt/KVM.

Requisitos

Este proyecto tiene las siguientes dependencias de software y entorno:

Software:
OpenTofu:

Para aprovisionar la infraestructura virtual.

Ansible:

Para la configuración y el despliegue de Koji.

libvirt, libvirt-nss y qemu:

Para la virtualización de las máquinas y resolución DNS interna por nombre.

# instalar dependencias
dnf -y install @virtualization libvirt-nss

# activar servicio de libvirt
systemctl enable --now libvirtd.socket

# configurar resolucion de nombres nss
authselect enable-feature with-libvirt
authselect check
authselect apply-changes
Colecciones de Ansible:

Instalar las colecciones requeridas definidas en el proyecto:

ansible-galaxy collection install -r requirements.yaml
Sistema Operativo:

Todo el desarrollo y las pruebas se han realizado sobre Fedora 43 x86_64 con SELinux en modo Enforcing.

Permisos de Usuario:

Tu usuario local debe pertenecer a los grupos de virtualización:

usermod -aG libvirt,kvm,qemu renich

Configuración Inicial

Antes de desplegar el entorno, debes realizar los siguientes pasos de configuración:

Credenciales de Ansible Vault:

Crea el archivo cifrado vars/credentials.yaml con las credenciales del cluster.

ansible-vault encrypt vars/credentials.yaml

El archivo credentials.yaml debe contener las siguientes variables:

# Base de Datos
koji_db_user: koji
koji_db_password: "tu-contraseña-segura"
koji_db_name: koji
koji_db_network: "192.168.122.0/24"

# Clave Secreta Web
web_secret: "tu-clave-secreta-web"

# Passphrase GPG
gpg_key_passphrase: "tu-passphrase-de-llave-gpg"

# Correo Electrónico
kojid_smtp_pass: "tu-contraseña-smtp"
Imagen Base de la VM:

Copia la imagen base de CentOS Stream 10 qcow2 en ~/VirtualMachines/cs10-system.qcow2. OpenTofu utilizará esta ruta definida en opentofu/variables.tf para clonar los discos de las VMs.

Despliegue y Uso

  1. Aprovisionar la Infraestructura (OpenTofu): Crea las 5 VMs CentOS Stream 10 (Hub, DB, NFS, Builder, Dist-Git) y expande sus volúmenes de almacenamiento.

    make init
  2. Desplegar la Configuración (Ansible): Aplica los roles del playbook sobre los nodos virtuales aprovisionados.

    make deploy
  3. Arrancar e Inicializar Koji: Crea los usuarios, certificados base, tags de compilación (mxos0), grupos y destinos necesarios en la base de datos de Koji.

    make bootstrap
Acceso al Entorno:

Puedes acceder a la interfaz de administración web en: https://cs10-koji-00.mx-os/koji

Autenticación SSL en Koji Web:

El inicio de sesión de Koji Web requiere autenticación estricta basada en certificados de cliente SSL. Para poder acceder, sigue estos pasos en tu PC de escritorio:

  1. Instalar la confianza de la CA: Instala el certificado de la CA en el almacén de confianza del sistema de tu máquina local:

    sudo make install-ca
  2. Importar el certificado de cliente: Importa el archivo PKCS#12 del usuario administrador en tu navegador web (Chrome, Firefox, etc.):

    • Archivo: certs/kojiadmin_browser_cert.p12

    • Contraseña de importación: Ninguna (déjala vacía y presiona Enter)

  3. Acceder e Iniciar Sesión: Navega a https://cs10-koji-00.mx-os/koji/login. Tu navegador te solicitará seleccionar el certificado de cliente. Tras seleccionarlo, Koji Web autenticará tu sesión de forma segura redirigiéndote al index.

Uso del Cliente (CLI):

Para administrar Koji, accede al nodo Hub y ejecuta comandos como kojiadmin:

ssh root@cs10-koji-00.mx-os
sudo -u kojiadmin koji moshimoshi

Gestión de Fuentes (Lookaside Cache)

El servidor Dist-Git (cs10-koji-04.mx-os) actúa únicamente como Lookaside Cache para tarballs pesados. Los metadatos y archivos de especificación (.spec) de los paquetes se mantienen en repositorios Git independientes bajo git.mx-os.mx/RPMs/.

Sincronización de Fuentes:

Para compilar paquetes, los tarballs deben existir en el lookaside cache.

Sincronizar un paquete individual:

./bin/sync-sources.bash bash c10s

Sincronizar todos los paquetes de MxOS: Obtiene los repositorios del servidor Git de MxOS y sincroniza sus fuentes automáticamente:

./bin/sync-all-sources.bash

Firma de paquetes

Para cumplir con los estándares de seguridad de CentOS Stream, las compilaciones exitosas se firman criptográficamente mediante Sigul.

Flujo de Firma en Staging

  1. Koji Hub finaliza una compilación en estado COMPLETE y activa el plugin sigul_sign.py.

  2. El plugin encola el ID de compilación en el spooler local en /var/spool/koji-sign/queue/.

  3. El demonio independiente koji-sign-spooler.service detecta el archivo, espera a que finalice la transacción en base de datos, envía el RPM al servidor de firmas Sigul (simulado por Flask en staging) e importa la firma criptográfica de vuelta a Koji.

  4. Nota: En la siguiente fase, el servidor Flask simulado se migrará a una instalación real del puente y servidor de Sigul.

Documentación del Proyecto

La documentación técnica detallada, especificaciones y justificaciones de diseño se encuentran en el directorio docs/.

Estructura de Documentos

  • docs/technical/spec.rst: Especificaciones técnicas del cluster de MxOS Koji.

  • docs/technical/roadmap.rst: Fases de igualación a CentOS Stream y mejoras de infraestructura futuras.

  • docs/technical/decisiones/: Architecture Decision Records (ADRs) que justifican las decisiones clave de diseño del proyecto.

Desarrollo (Tareas de Makefile)

El GNUmakefile en la raíz del proyecto facilita las tareas de desarrollo comunes:

make init:

Destruye la infraestructura existente con OpenTofu y luego la recrea.

make deploy:

Ejecuta el playbook de despliegue principal.

make bootstrap:

Ejecuta el playbook de arranque para configurar los objetos de Koji.

make reset:

Ejecuta el playbook de reseteo.

make regenerate-certs:

Limpia el directorio certs/ y luego ejecuta las tareas de Ansible para regenerar todos los certificados.

Referencias