Envío de compilaciones de módulos en Fedora

El proyecto Modularity ha sido retirado y no hay sin módulos en Fedora 39 o posterior o en EPEL. Esta página sólo se conserva como referencia histórica.
Con la Modularidad, ya no se construyen paquetes individuales. En su lugar, debe enviar la compilación de un módulo.

Las compilaciones de módulos se activan utilizando fedpkg desde su repositorio dist-git.

$ fedpkg clone modules/NAME
$ cd NAME
$ fedpkg switch-branch BRANCH
$ fedpkg module-build
  • NOMBRE — nombre del módulo

  • RAMA — nombre de la rama de flujo del módulo

Tenga en cuenta el ID de compilación del módulo. Lo necesitará para verificar el estado de compilación y para publicar el módulo más adelante.

Envío de compilaciones de módulos desde un sistema sin navegador web

fedpkg module-build requiere una autorización a MBS. Fedora infrastructure usa OpenID Connect (OIDC) para autorizar a aplicaciones web. Esta autorización necesita un navegador web. Si envía una compilación desde un sistema sin navegador, por ejemplo, desde una máquina virtual o un contenedor, siga este procedimiento:

fedpkg module-build imprime un mensaje con una URL en tu terminal, como este:

Visite https://id.fedoraproject.org/openidc/Authorization?scope=openid+https%3A%2F%2Fid.fedoraproject.org%2Fscope%2Fgroups+https%3A%2F%2Fmbs.fedoraproject.org%2Foidc%2Fsubmit-build&response_type=code&client_id=mbs-authorizer&redirect_uri=http%3A%2F%2Flocalhost%3A12345%2F&response_mode=query para conceder la autorización

Debe abrirlo en su navegador web. Después de realizar con éxito un paso de autenticación, su navegador se quejará con:

Este sitio no se puede alcanzar localhost se negó a conectar.
Buscar en Google para localhost 12345
ERR_CONNECTION_REFUSED

Su navegador en este punto tiene una URL localhost en su barra de direcciones, así:

http://localhost:12345/?code=7c35ded4-054b-4df0-9151-7ef12c7fb838_xe3JWkvf_sL1UyLOzftHJZ3uIlfOo00N

En este punto fedpkg espera en el puerto 12345 de su sistema una conexión entrante desde su navegador web. Mientras fedpkg espera una respuesta OIDC entrante desde su navegador, imite la respuesta con la herramienta curl en un terminal paralelo usando la misma URL:

$ curl 'http://localhost:12345/?code=7c35ded4-054b-4df0-9151-7ef12c7fb838_xe3JWkvf_sL1UyLOzftHJZ3uIlfOo00N'

Eso desbloqueará el comando fedpkg module-build y se reanudará con el envío de la compilación del módulo.

Fallos comunes al enviar la compilación de un módulo

Si un comando fedpkg module-build falla inmediatamente antes de informar de los identificadores de las tareas de construcción de módulos generadas, podría haber un error en el archivo YAML. He aquí una explicación de algunos mensajes de error no evidentes:

  • No se ha podido encontrar ninguno de los flujos del módulo base (platform o bootstrap) en la sección buildrequires — una de las configuraciones de dependencia requiere un flujo platform que no existe en MBS. Esto sucede a menudo cuando una versión antigua de Fedora se elimina de la infraestructura de compilación. Una solución es eliminar del archivo YAML un bloque de configuración que haga referencia a ese flujo de plataforma.

  • Plataforma requerida:f36 y plataforma:f37 — un flujo de módulo requerido para la construcción no existe en un contexto para el mismo flujo de plataforma que un módulo que usted envió para la construcción. Esto ocurre cuando se olvida construir el módulo dependiente para la nueva plataforma. Una solución es construir primero el módulo dependiente o eliminar una configuración para esa plataforma.

Progreso de la construcción del módulo

Para ver el estado de la construcción de su módulo, ejecute:

$ fedpkg module-build-watch BUILD_ID

Cuando el módulo se encuentra en estado "listo", la construcción se ha completado correctamente.

También puede ver la(s) compilación(es) en el servicio de compilación de Fedora Module:

Resultados de la construcción de módulos

Todos los paquetes creados en el módulo se etiquetan en una etiqueta Koji denominada module-$name-$stream-$version-$context. El enlace a esta etiqueta también está disponible en la interfaz de usuario del servicio de construcción de módulos de Fedora mencionada anteriormente.

También hay dos Koji Builds que representan la construcción de un solo módulo.

  • $name-$stream-$version.$context - Contiene los metadatos con los RPM finales que se incluirán en una composición y que, por tanto, serán visibles para el usuario final.

  • $name-devel-$stream-$version.$context - Contiene los metadatos con los RPM filtrados que normalmente no son visibles para el usuario final, pero que a veces pueden ser útiles cuando se construyen otros paquetes contra el módulo. Generalmente, en Fedora no enviamos los módulos -devel.

No encontrarás la compilación del módulo nombre-devel en el Servicio de compilación de módulos, porque es sólo otra representación de la compilación de módulos no-devel. No es una compilación de módulo independiente y sólo existe como compilación Koji.

Ambas compilaciones del módulo Koji contienen varios archivos de metadatos:

  • modulemd.src.txt - Los metadatos modulemd de entrada no modificados utilizados para construir un módulo tal y como se almacenan en dist-git.

  • modulemd.txt - Los metadatos expandidos modulemd que fueron utilizados por Module Build Service para construir este módulo en particular. Contiene, por ejemplo, los requisitos de compilación correctos basados en la expansión del flujo de módulos.

  • modulemd.$arch.txt - Los metadatos modulemd por arquitectura listando los RPMs que terminarán en una composición y por lo tanto serán visibles para el usuario final. Esto, por ejemplo, respeta los filtros o las opciones de modulemd multilib.

Estrategias de reconstrucción

Si desea controlar qué paquetes se reconstruyen y cuáles se reutilizan, puede imponer una estrategia de reconstrucción específica al enviar una compilación.

Hay diferentes estrategias de reconstrucción entre las que elegir:

  • all — Se reconstruyen todos los paquetes del módulo.

  • only-changed — Sólo se reconstruyen los paquetes que han cambiado desde la última compilación exitosa. Esta es la opción por defecto en Fedora.

  • changed-and-after — Éste aprovecha grupos de construcción (buildorder). Los paquetes que han cambiado desde la última compilación correcta se reconstruyen, y también se reconstruyen todos los paquetes con un orden de compilación superior al de cualquiera de los paquetes modificados.

Para obtener información más detallada, consulte el Documentación sobre estrategias de reconstrucción de MBS.

Para aplicar una estrategia de reconstrucción específica, envíe la compilación del módulo con el siguiente comando:

$ fedpkg module-build --optional rebuild_strategy=STRATEGY
  • STRATEGY — nombre de una estrategia de construcción específica (en la lista anterior)