- Configurar rol dist_git como Lookaside Cache únicamente (sin git-daemon). - Actualizar estructura de caché a 'rpms/pkg/file/algo/hash/file' compatible con upstream. - Añadir scripts bin/sync-sources.bash y bin/sync-all-sources.bash para sincronizar fuentes desde CentOS Stream. - Eliminar bin/import-srpm.bash obsoleto. - Actualizar script mxos-get-sources.bash en kojid para usar la nueva estructura de URL. - Corregir lógica de 'add-host' en koji_bootstrap para manejar reintentos limpiamente. - Actualizar documentación (README.rst, docs/instalación.rst) reflejando los cambios. - Correcciones menores en rutas de configuración y nombres de grupos en deploy.yaml.
196 lines
No EOL
13 KiB
ReStructuredText
196 lines
No EOL
13 KiB
ReStructuredText
====================================
|
|
Procedimiento de Instalación de Koji
|
|
====================================
|
|
|
|
Este documento describe los pasos completos que necesitas para configurar un sistema de compilación Koji funcional, desde la
|
|
generación inicial de certificados hasta el arranque del entorno de compilación. Aquí consolidamos información de la documentación
|
|
de Koji y la experiencia práctica.
|
|
|
|
Fase 1: Autoridad de Certificación y Generación de Certificados SSL
|
|
===================================================================
|
|
Esta fase establece la base criptográfica para que los componentes de Koji se comuniquen de forma segura.
|
|
|
|
Crea la Autoridad de Certificación (CA):
|
|
Crea un directorio dedicado para tu infraestructura PKI de Koji (p. ej., `/etc/pki/koji`).
|
|
Genera un certificado de CA Raíz autofirmado y su clave privada correspondiente. Usarás esta CA para firmar todos los demás certificados de componentes de Koji.
|
|
Genera Certificados de Componentes y Usuarios:
|
|
Para cada componente de Koji que requiere autenticación (koji_hub, koji-web, kojid, kojira, dist-git y usuarios administradores), genera
|
|
una solicitud de firma de certificado (CSR) única y una clave privada.
|
|
|
|
Certificados del Lado del Servidor (koji_hub, koji-web, dist-git):
|
|
El Common Name (CN) en estos certificados *debe* coincidir con el
|
|
Nombre de Dominio Completo (FQDN) del servidor donde los desplegarás. Estos certificados deben incluir `serverAuth` en su
|
|
`extendedKeyUsage`.
|
|
Certificados del Lado del Cliente (kojid, kojira, usuarios administradores):
|
|
El CN para estos certificados debe coincidir con
|
|
el nombre de usuario de Koji que usarás para la autenticación. Estos certificados deben incluir `clientAuth` en su
|
|
`extendedKeyUsage`.
|
|
|
|
Firma cada CSR con tu CA Raíz recién creada para generar los certificados de componente/usuario.
|
|
Combina la clave privada de cada componente y su certificado firmado en un único archivo `.pem`. Los clientes de Koji usan a
|
|
menudo este archivo `.pem`.
|
|
Para que los usuarios administradores accedan a través del navegador web, genera un paquete PKCS12 (`.p12`) a partir del
|
|
certificado y la clave del usuario, que incluya el certificado de la CA.
|
|
|
|
**Nota de Seguridad**: Para la generación de claves GPG, utiliza archivos temporales seguros que se eliminen inmediatamente después de su uso para evitar exponer la frase de paso.
|
|
|
|
Fase 2: Configuración de la Base de Datos PostgreSQL
|
|
====================================================
|
|
Koji usa una base de datos PostgreSQL para almacenar todos los metadatos relacionados con la compilación, la información del usuario y la configuración.
|
|
|
|
Instala e Inicializa PostgreSQL:
|
|
Instala el paquete `postgresql-server` en tu host de base de datos.
|
|
Inicializa el clúster de la base de datos PostgreSQL.
|
|
Crea la Base de Datos y el Usuario de Koji:
|
|
Como el usuario `postgres`, crea una base de datos dedicada para Koji (p. ej., `koji`).
|
|
Crea un usuario de PostgreSQL dedicado (p. ej., `koji`) que Koji usará para conectarse a la base de datos. Asígnale una
|
|
contraseña segura a este usuario.
|
|
Carga el Esquema de Koji:
|
|
Carga el esquema de la base de datos de Koji desde el archivo SQL proporcionado (normalmente `/usr/share/koji/schema.sql` del
|
|
paquete `koji`) en la base de datos de Koji que acabas de crear. Asegúrate de hacerlo como el usuario de la base de datos de
|
|
Koji para mantener la propiedad correcta.
|
|
Configura el Acceso a la Base de Datos (`postgresql.conf` y `pg_hba.conf`):
|
|
Edita `postgresql.conf` para:
|
|
|
|
* Habilitar SSL (`ssl = on`).
|
|
* Especificar los archivos de certificado y clave del servidor (`ssl_cert_file`, `ssl_key_file`).
|
|
* Especificar el archivo del certificado de la CA (`ssl_ca_file`).
|
|
* Configurar `listen_addresses` para permitir conexiones desde Koji Hub (p. ej., `'*'`).
|
|
* Aumentar `max_connections` para satisfacer las necesidades de Koji (p. ej., `200`).
|
|
|
|
Edita `pg_hba.conf` para permitir conexiones desde todos los hosts de Koji Hub (si hay varios) a la base de datos de Koji con SSL y un método de autenticación seguro (p. ej., `scram-sha-256`). Además, configura el acceso local para el usuario `postgres`.
|
|
|
|
Fase 3: Configuración de Koji Hub
|
|
=================================
|
|
El Koji Hub es el plano de control central para el sistema de compilación Koji.
|
|
|
|
Instala Koji Hub y Dependencias:
|
|
Instala `koji_hub`, `koji-web`, `httpd`, `mod_ssl`, `mod_wsgi`, `python3-cryptography`, `nmap-ncat`, `postgresql` (bibliotecas
|
|
de cliente), `policycoreutils-python-utils` y `python3-koji-hub-plugins`.
|
|
Configura el Hub (`/etc/koji_hub/hub.conf` y el directorio `.d`):
|
|
Configura los parámetros de conexión de la base de datos (`DBName`, `DBUser`, `DBHost`, `DBPass`).
|
|
Establece `KojiDir` en la ruta donde Koji almacenará los datos de compilación (p. ej., `/mnt/koji`).
|
|
Configura los ajustes de autenticación, incluyendo `DNUsernameComponent` y `ProxyDNs` para la autenticación de certificados de
|
|
cliente SSL.
|
|
Asegúrate de que la configuración de plugins apunte a una ruta válida (p. ej., `/usr/lib/koji-hub-plugins`) y habilita los plugins necesarios (como `echo`).
|
|
Configura Apache para el Hub:
|
|
Asegúrate de que `mod_ssl` y `mod_wsgi` estén habilitados.
|
|
Edita `/etc/httpd/conf.d/ssl.conf` para que apunte al certificado del servidor, la clave y el certificado de la CA de Koji del
|
|
Koji Hub.
|
|
Configura el bloque `<Location /kojihub/ssllogin>` en `/etc/httpd/conf.d/kojihub.conf` para que requiera certificados de
|
|
cliente SSL (`SSLVerifyClient require`).
|
|
Crea la Estructura del Sistema de Archivos de Koji:
|
|
Crea los subdirectorios necesarios en `KojiDir` (p. ej., `packages`, `repos`, `work`, `scratch`, `repos-dist`, `certs`,
|
|
`clients`).
|
|
Asegúrate de que el usuario `apache` tenga la propiedad y los permisos de escritura adecuados en estos directorios.
|
|
|
|
Fase 4: Configuración de Koji Web
|
|
=================================
|
|
La interfaz Koji Web te proporciona una forma fácil de usar para interactuar con Koji.
|
|
|
|
Configura Koji Web (`/etc/kojiweb/web.conf` y el directorio `.d`):
|
|
Establece `KojiHubURL` y `KojiFilesURL` en las URL apropiadas.
|
|
Para la autenticación SSL, especifica `WebCert` (el archivo PEM del componente koji-web) y `KojiHubCA` (el certificado de la CA de Koji).
|
|
Establece el valor de `Secret` en una contraseña segura y única.
|
|
Configura Apache para Koji Web:
|
|
Configura el bloque `<Location /koji/login>` en `/etc/httpd/conf.d/kojiweb.conf` para que requiera certificados de cliente SSL si los usuarios se autenticarán a través de navegadores web.
|
|
|
|
Fase 5: Configuración de Dist-Git
|
|
=================================
|
|
El servidor Dist-Git (`cs10-koji-04.mx-os`) está configurado como un **Lookaside Cache** para gestionar los archivos fuente grandes (tarballs) necesarios para las compilaciones de Koji. **No aloja repositorios Git**; estos se gestionan externamente.
|
|
|
|
Instalación y Configuración:
|
|
Instala `httpd` y `mod_ssl`.
|
|
Configura `httpd` para servir el Lookaside Cache a través de HTTPS. El alias `/sources` apunta al directorio de caché (`/var/lib/dist-git/cache`).
|
|
Asegúrate de que se fuerce el tráfico HTTPS mediante redirecciones y que **la navegación de directorios esté deshabilitada** para la coherencia con el comportamiento upstream de CentOS Stream.
|
|
Directorio y Permisos:
|
|
Crea la estructura de directorios para la caché de fuentes (lookaside cache) en `/var/lib/dist-git/cache`.
|
|
Asegura que los contextos de SELinux (`httpd_sys_content_t`) sean persistentes mediante `semanage fcontext`.
|
|
|
|
Fase 6: Configuración de Kojid (Constructor) y Kojira (Administrador de Repos)
|
|
==============================================================================
|
|
|
|
Configura Kojid (en cada host constructor):
|
|
Instala `koji-builder`, `rpm-build`, `rpmdevtools` y `mock`.
|
|
Edita `/etc/kojid/kojid.conf` para que apunte a la URL del servidor XML-RPC de Koji Hub.
|
|
Especifica el certificado de cliente del componente `kojid` y el certificado de la CA de Koji.
|
|
Establece el parámetro `user` en el FQDN del host constructor.
|
|
Establece `topdir` en el directorio de Koji montado (p. ej., `/mnt/koji`).
|
|
Establece `workdir` en un directorio local (p. ej., `/var/lib/kojid-work`).
|
|
Configura `allowed_scms` para permitir la descarga de fuentes desde tu Dist-Git, utilizando un script wrapper (p. ej., `mxos-get-sources.bash`) para gestionar la caché de fuentes (lookaside cache).
|
|
Asegúrate de que el servicio `kojid` se ejecute como `root` (predeterminado) y tenga los permisos adecuados en `workdir`.
|
|
Agrega los usuarios que necesitan compilar paquetes (p. ej., `kojiadmin`) al grupo `mock`.
|
|
|
|
Configura Kojira (en el hub o en un host dedicado):
|
|
Instala `koji-utils`.
|
|
Edita `/etc/kojira/kojira.conf` para que apunte a la URL del servidor XML-RPC de Koji Hub.
|
|
Especifica el certificado de cliente del componente `kojira` y el certificado de la CA de Koji.
|
|
|
|
Estos componentes manejan los procesos de compilación reales y la gestión de repositorios.
|
|
|
|
Fase 7: Configuración de SELinux y Firewall
|
|
===========================================
|
|
Un contexto de seguridad y un acceso a la red adecuados son cruciales para que Koji funcione.
|
|
|
|
Configuración de SELinux:
|
|
Establece los siguientes booleanos de SELinux para permitir el acceso a la red y a los archivos necesarios para `httpd`:
|
|
|
|
* `setsebool -P httpd_can_network_connect_db=1` (permite que httpd se conecte a PostgreSQL)
|
|
* `setsebool -P httpd_can_network_connect=1` (permite que httpd realice conexiones de red generales)
|
|
* `setsebool -P allow_httpd_anon_write=1` (permite que httpd escriba en áreas de contenido público)
|
|
* `setsebool -P httpd_use_nfs=1` (si `/mnt/koji` está en un recurso compartido NFS)
|
|
|
|
Aplica los contextos de archivo de SELinux correctos:
|
|
|
|
* `semanage fcontext -a -t httpd_sys_rw_content_t "/mnt/koji(/.*)?"` (para contexto persistente en directorios de escritura)
|
|
* `restorecon -r -v /mnt/koji` (para aplicar el contexto inmediatamente)
|
|
|
|
Configuración del Firewall:
|
|
Abre los puertos de firewall necesarios en los hosts respectivos:
|
|
|
|
* Koji Hub: HTTP (80/tcp), HTTPS (443/tcp).
|
|
* Servidor PostgreSQL: PostgreSQL (5432/tcp) desde el Koji Hub.
|
|
* Servidor NFS: NFS (servicios nfs, rpc-bind, mountd).
|
|
* Dist-Git: HTTP (80/tcp), HTTPS (443/tcp).
|
|
|
|
Fase 8: Arranque del Entorno de Compilación de Koji
|
|
===================================================
|
|
Esta fase final prepara a Koji para que realice compilaciones reales.
|
|
|
|
Otorga Privilegios de Administrador al Usuario Inicial:
|
|
Inserta manualmente un registro en la tabla `user_perms` en la base de datos de Koji para otorgarle al usuario administrador
|
|
inicial (p. ej., `kojiadmin`) el permiso de `admin`. Este es un paso único para el administrador inicial.
|
|
Crea Etiquetas y un Destino de Compilación:
|
|
Crea una etiqueta de destino (p. ej., `cs10`) donde terminarán los RPM finales: `koji add-tag cs10`.
|
|
Crea una etiqueta de compilación (p. ej., `cs10-build`) que defina el contenido del buildroot y agrégale arquitecturas:
|
|
`koji add-tag --parent cs10 --arches "x86_64" cs10-build`.
|
|
Crea un destino de compilación que vincule la etiqueta de compilación y la etiqueta de destino:
|
|
`koji add-target cs10-build cs10-build cs10`.
|
|
Puebla el Grupo de Compilación:
|
|
Agrega los paquetes esenciales que se requieren para compilar (p. ej., `rpm-build`, `gcc`, `make`) al grupo `build` de tu
|
|
etiqueta de compilación: `koji add-group-pkg cs10-build build <package_name>`.
|
|
Alternativamente, importa definiciones de grupo desde una instancia de Koji existente (p. ej., el `comps.xml` de Fedora).
|
|
Regenera el Repositorio:
|
|
Después de agregar paquetes al grupo de compilación, regenera el repositorio para la etiqueta de compilación: `koji regen-repo
|
|
cs10-build`. Esto pone los paquetes a disposición de `kojid` para crear los buildroots.
|
|
Importa Paquetes Iniciales:
|
|
Importa cualquier SRPM base y RPMs binarios a Koji y etiquétalos en tu etiqueta de destino. Esto proporciona una base de
|
|
paquetes para la resolución de dependencias durante las compilaciones.
|
|
|
|
Este procedimiento detallado debería servirte como una guía completa para que configures un entorno Koji.
|
|
|
|
Fase 9: Características Adicionales
|
|
===================================
|
|
|
|
Recolección de Basura:
|
|
Un servicio de systemd (`koji-cleanup.timer`) se ejecuta semanalmente para limpiar compilaciones antiguas
|
|
y directorios de trabajo, ayudando a conservar el espacio en disco.
|
|
Notificaciones:
|
|
Koji está configurado para registrar todos los eventos en `/var/log/koji_callbacks.log`. Este es un sistema
|
|
de notificación básico que puede ser extendido para integrarse con otros sistemas.
|
|
Permisos Granulares:
|
|
Se crea un usuario `builder` con permisos limitados. Este usuario solo puede realizar compilaciones,
|
|
lo que mejora la seguridad al limitar el acceso a funciones administrativas.
|
|
Autoincremento de NVR:
|
|
La etiqueta de compilación `mxos0-build` está configurada para incrementar automáticamente el número
|
|
de release de los paquetes, simplificando el proceso de release. |