ansible-koji/docs/compilación_de_paquetes.rst
Rénich Bon Ćirić cffdd81243
docs: add KOJI_TARGET_TAG to bootstrap command and update repo path in decisions
Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-19 06:41:23 -06:00

7.1 KiB

Compilación de Paquetes en Koji

Este documento detalla el procedimiento para el empaquetado, la gestión de repositorios externos y la compilación de paquetes dentro del clúster Koji de MxOS.

Estructura de Repositorios y Fuentes

Para mantener una compatibilidad estricta con CentOS Stream 10, los paquetes de MxOS siguen las siguientes pautas:

  • Repositorios Git: Las recetas Spec y los parches se almacenan en repositorios hospedados en la organización RPMs de Git:

    git.mx-os.mx/RPMs/<paquete>.git

  • Lookaside Cache: Los archivos fuente de gran tamaño (tarballs, crates de Rust, etc.) no se suben al control de versiones de Git. En su lugar, se suben al Lookaside Cache (Dist-Git) hospedado en cs10-koji-distgit.mx-os mediante la API de carga. Cada repositorio Git contiene un archivo llamado sources en su raíz que define los nombres de los archivos fuente y sus hashes SHA512 correspondientes.

Prioridades de Repositorios Externos

Koji utiliza el comando mergerepo_c para fusionar los paquetes internos creados dentro de la etiqueta mxos0 con los repositorios externos oficiales de CentOS y EPEL. Para asegurar que las dependencias se resuelvan adecuadamente y los paquetes de bootstrap compilados localmente (como bash o llvm-libs) tengan precedencia sobre los de upstream, es crucial configurar prioridades correctas en la etiqueta de construcción (mxos0-build):

  • Prioridad 15: centos-stream-10-epel

  • Prioridad 20: centos-stream-10-crb

  • Prioridad 25: centos-stream-10-baseos

  • Prioridad 30: centos-stream-10-appstream

  • Prioridad 35: centos-stream-10-devel

Si necesitas restaurar o corregir las prioridades de los repositorios externos, ejecuta los siguientes comandos como el usuario kojiadmin:

koji remove-external-repo centos-stream-10-appstream mxos0-build
koji add-external-repo -t mxos0-build -p 30 -m bare centos-stream-10-appstream https://mirror.stream.centos.org/10-stream/AppStream/x86_64/os/

Procedimiento para Iniciar Construcciones

Para registrar un nuevo paquete e iniciar su compilación en el sistema Koji, sigue estos pasos:

1. Registrar el Paquete en Koji

Antes de iniciar la compilación de un paquete por primera vez, este debe registrarse bajo la etiqueta del tag destino (mxos0). Ejecuta:

koji add-pkg --owner kojiadmin mxos0 <nombre-del-paquete>

Por ejemplo:

koji add-pkg --owner kojiadmin mxos0 rust-siguldry

2. Solicitar la Construcción (Build)

Una vez registrado, puedes solicitar la compilación directamente indicando el tag destino y la dirección del repositorio Git (SCM URL) junto con la rama o el commit correspondiente:

koji build mxos0 'git+https://git.mx-os.mx/RPMs/<paquete>.git#<rama-o-commit>'

Por ejemplo, para compilar rust-siguldry desde la rama c10s:

koji build mxos0 'git+https://git.mx-os.mx/RPMs/rust-siguldry.git#c10s'

Resolución de Problemas y Regeneración del Repositorio

Si has importado paquetes base nuevos o modificado las prioridades de los repositorios externos y la inicialización de la buildroot falla debido a dependencias desactualizadas o un error de payloadhash mismatch, debes forzar la regeneración inmediata del repositorio de la buildroot mediante el siguiente comando:

koji regen-repo --make-task mxos0-build

Bootstrap de la Distribución (BaseOS)

Para construir todos los paquetes base (BaseOS) de la distribución MxOS de forma ordenada, hemos calculado las dependencias en un contenedor de CentOS Stream 10 (usando la API de DNF para realizar un ordenamiento topológico y resolver ciclos mediante componentes fuertemente conectados).

El orden resultante contiene 480 paquetes únicos y está guardado en el Koji Hub en /home/kojiadmin/bin/bootstrap_order.txt.

Para ejecutar la compilación de bootstrap de forma continua y concurrente (por defecto con un límite de 10 compilaciones simultáneas), se utiliza el script daemon /home/kojiadmin/bin/bootstrap-baseos.py. Este lee la lista ordenada, añade los paquetes no registrados a Koji y lanza las tareas de compilación de forma iterativa:

# Ejecutar el daemon en segundo plano para iniciar el bootstrap
sudo -u kojiadmin env KOJI_TARGET_TAG=mxos0 nohup python3 /home/kojiadmin/bin/bootstrap-baseos.py > /home/kojiadmin/bootstrap-baseos.log 2>&1 &

Puedes supervisar el progreso de las tareas leyendo su archivo de bitácora o listando las tareas de Koji:

tail -f /home/kojiadmin/bootstrap-baseos.log
koji list-tasks --mine

Exportación y Sincronización Automática de Repositorios (Caddy)

El repositorio final para alojar y servir nuestros paquetes RPM oficiales para consumo de DNF se hospeda en el servidor dedicado cs10-koji-repo.mx-os mediante el servidor web Caddy, expuesto públicamente en http://cs10-koji-repo.mx-os/.

La exportación y sincronización de los paquetes firmados está completamente automatizada mediante un flujo push reactivo:

  1. Firma e Importación: El demonio koji-sign-spooler.service detecta nuevos paquetes listos en la cola, los firma con la clave GPG y rpmsign a través de Siguldry PKCS#11, e importa las firmas en la base de datos de Koji.

  2. Espera de Etiquetado y Disparo de Repositorio: Inmediatamente después del commit de las firmas, el spooler inicia un hilo en segundo plano para monitorear si la compilación ha sido etiquetada en el tag destino (como mxos0 o mxos10). Una vez etiquetada, ejecuta de forma asíncrona el script wrapper /usr/local/bin/mxos-trigger-dist-repo.bash.

  3. Generación de Repositorio: El script ejecuta el comando de Koji dist-repo y espera a que la tarea finalice en el constructor. Koji genera una vista consistente de los paquetes firmados (e internamente importados de CentOS) bajo /mnt/koji/repos-dist/mxos0/latest/.

  4. Sincronización Atómica (rsync): Si el dist-repo se completa de forma exitosa, el script invoca a /usr/local/bin/mxos-repo-sync.bash, el cual ejecuta rsync con la opción --delay-updates para transferir de manera atómica las arquitecturas (x86_64/os), paquetes de depuración (x86_64/debug/tree) y fuentes (source/tree) al servidor web de Caddy.

Para forzar manualmente una regeneración y sincronización completa del repositorio, ejecuta en el Koji Hub:

/usr/local/bin/mxos-trigger-dist-repo.bash 23fd4ef4