ansible-koji/docs/compilación_de_paquetes.rst
Rénich Bon Ćirić 8ca23088f4
feat(build): fix lookaside cache fallback and organize repository structure
- Add fallback to official CentOS Stream lookaside cache in SCM get-sources script
- Update documentation to reflect CentOS-style structured repositories on cs10-repo
- Update project journal with progress and decisions

Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-16 21:34:34 -06:00

125 lines
6.6 KiB
ReStructuredText

===============================
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-04.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 5**: ``centos-stream-10-baseos``
* **Prioridad 10**: ``centos-stream-10-appstream``
* **Prioridad 15**: ``centos-stream-10-epel``
* **Prioridad 20**: ``centos-stream-10-crb``
.. note::
Una prioridad con un número menor en Koji indica una mayor precedencia. Esto asegura que si el mismo paquete (NEVRA idéntico) existe tanto en el repositorio interno de Koji como en el de BaseOS o AppStream, Koji priorice e instale la versión compilada internamente.
Si necesitas restaurar o corregir las prioridades de los repositorios externos, ejecuta los siguientes comandos como el usuario ``kojiadmin``:
.. code-block:: bash
koji remove-external-repo centos-stream-10-appstream mxos0-build
koji add-external-repo -t mxos0-build -p 10 centos-stream-10-appstream
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:
.. code-block:: bash
koji add-pkg --owner kojiadmin mxos0 <nombre-del-paquete>
Por ejemplo:
.. code-block:: bash
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:
.. code-block:: bash
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``:
.. code-block:: bash
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:
.. code-block:: bash
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 ``/root/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 ``/root/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:
.. code-block:: bash
# Ejecutar el daemon en segundo plano para iniciar el bootstrap
nohup python3 /root/bootstrap-baseos.py > /var/log/bootstrap-baseos.log 2>&1 &
Puedes supervisar el progreso de las tareas leyendo su archivo de bitácora o listando las tareas de Koji:
.. code-block:: bash
tail -f /var/log/bootstrap-baseos.log
koji list-tasks --mine
Exportación de Paquetes al Servidor de Repositorio (Caddy)
==========================================================
El repositorio final para alojar y servir nuestros paquetes RPM oficiales para consumo de DNF se hospeda en el servidor dedicado ``cs10-repo.mx-os`` mediante el servidor web Caddy. El repositorio está expuesto públicamente en ``http://cs10-repo.mx-os/``.
Para automatizar la exportación y sincronización de todos los paquetes RPM que Koji ha compilado y firmado exitosamente, se utiliza el script ``/root/export-koji-to-repo.py`` en el Koji Hub. Este script:
1. Consulta todas las compilaciones completadas bajo la etiqueta ``mxos0``.
2. Localiza los RPMs firmados en el almacenamiento compartido de Koji (``/mnt/koji/packages/``).
3. Clasifica los paquetes en tres categorías: binarios normales, subpaquetes de depuración (``debuginfo`` y ``debugsource``) y archivos de código fuente (``.src.rpm``).
4. Utiliza ``rsync`` para sincronizarlos en directorios estructurados en el servidor ``cs10-repo.mx-os`` bajo la estructura estándar de CentOS Stream:
- Paquetes binarios: ``/srv/www/repo/BaseOS/x86_64/os/Packages/``
- Paquetes de depuración: ``/srv/www/repo/BaseOS/x86_64/debug/tree/Packages/``
- Paquetes de código fuente: ``/srv/www/repo/BaseOS/source/tree/Packages/``
5. Ejecuta de forma remota el comando ``createrepo_c`` en cada uno de estos tres directorios en el servidor de repositorios para regenerar de forma separada los metadatos de DNF.
Para ejecutar la exportación manualmente de todos los paquetes listos, ejecuta en Koji Hub:
.. code-block:: bash
sudo python3 /root/export-koji-to-repo.py