primer commit
This commit is contained in:
commit
864b3e4008
105 changed files with 3185 additions and 0 deletions
214
docs/installation_procedure.rst
Normal file
214
docs/installation_procedure.rst
Normal file
|
|
@ -0,0 +1,214 @@
|
|||
====================================
|
||||
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 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): 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.
|
||||
|
||||
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 Koji Hub 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) y `policycoreutils-python-utils`.
|
||||
|
||||
#. 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.
|
||||
* Coloca las configuraciones sensibles (como `DBPass`) in un archivo separado dentro de `/etc/koji-hub/hub.conf.d/` con permisos
|
||||
restringidos.
|
||||
|
||||
#. 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.
|
||||
|
||||
#. Despliega Plugins de Koji Hub:
|
||||
|
||||
* Copia cualquier complemento personalizado de Koji Hub (p. ej., `sigul_sign.py`) a `/usr/lib/koji-hub/plugins`.
|
||||
|
||||
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 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`).
|
||||
* 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.
|
||||
|
||||
#. 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.
|
||||
* 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.
|
||||
|
||||
Fase 6: 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 public_content_rw_t "/mnt/koji(/.*)?"` (para contexto persistente)
|
||||
* `restorecon -r -v /mnt/koji` (para aplicar el contexto inmediatamente)
|
||||
* Alternativamente, para recursos compartidos NFS donde `semanage fcontext` podría no aplicarse, usa `chcon -R -t
|
||||
public_content_rw_t /mnt/koji/*` (aunque esto no es persistente entre reinicios).
|
||||
|
||||
#. Configuración del Firewall:
|
||||
|
||||
* Abre los puertos de firewall necesarios en los hosts respectivos:
|
||||
* Koji Hub: HTTP (80/tcp), HTTPS (443/tcp), Servidor Mock Sigul (8080/tcp, si se despliega en el hub).
|
||||
* Servidor PostgreSQL: PostgreSQL (5432/tcp) desde el Koji Hub.
|
||||
* Servidor NFS: NFS (servicios nfs, rpc-bind, mountd).
|
||||
|
||||
Fase 7: 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.
|
||||
Loading…
Reference in a new issue