Construir módulos en Copr

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.

Introducción

Copr ("Community projects") es un servicio que construye tus proyectos de código abierto y crea tus propios repositorios RPM. Lea la documentación para obtener más información o véalo en acción aquí.

Hay múltiples maneras de construir módulos en Copr y depende de cada usuario elegir la más adecuada para su caso de uso específico.

  1. ¿Sabes qué es el archivo modulemd yaml y lo tienes escrito para tu módulo? Entonces enviar un modulemd yaml existente para Copr.

  2. ¿Tienes un proyecto Copr que proporciona algunos paquetes RPM y quieres hacer un módulo a partir de ellos? Entonces no escriba un archivo modulemd yaml manualmente y generarlo a partir de un proyecto Copr.

Descubra temas más avanzados como que requieren paquetes Copr desde un archivo modulemd yaml existente, dependiendo de módulos de Copr, y sustituir paquetes de módulos por paquetes normales.

Descargo de responsabilidad

Copr es un servicio de terceros con su propia implementación del proceso de construcción de módulos. No depende de Servicio de construcción de módulos y no está gobernado por Equipo de Modularidad de Fedora. Como consecuencia, algunas características pueden comportarse de manera diferente.

Algunas funciones se encuentran también en estado experimental o de prueba de concepto (p.e., dependen de otros módulos de Copr) y, por tanto, su uso puede resultar engorroso. Los comentarios de los usuarios son más que bienvenidos y son el factor decisivo de lo que se va a implementar o mejorar. Por favor, envíe sus peticiones a gestor de incidencias de pagure.

Además, sólo se admite la versión 1 del formato modulemd. La versión 2 aún no es compatible (a excepción de los archivos de la versión 2 que son compatibles con el formato anterior).

Enviar un modulemd yaml existente

Actualmente, no hay interfaz de usuario web para enviar una construcción de módulo desde un archivo modulemd yaml existente. La única manera es utilizar el paquete copr-cli. Asegúrese de que está instalado.

dnf install copr-cli

Y asegúrese también de que Vale API está correctamente configurado.

Para enviar una compilación desde un archivo modulemd yaml almacenado localmente, utilice:

copr-cli build-module --yaml /alguna/ruta/testmodule.yaml <COPR proyecto nombre>

Si el archivo modulemd yaml está disponible en una URL accesible para el público, utilice lo siguiente:

copr-cli build-module --url https://example/some/path/testmodule.yaml <Nombre del proyecto COPR>

Para especificar un propietario de proyecto diferente (p.e., al integrarse en un proyecto de grupo), use:

copr-cli build-module --yaml /some/path/testmodule.yaml @mygroup/testmodule

Para más información, consulte copr-cli build-module --help o man copr-cli.

Generar modulemd a partir de un proyecto Copr

Este método tiene como objetivo proporcionar características de modularidad con la menor barrera de entrada posible. No requiere que el usuario sepa escribir un archivo modulemd yaml ni utilizar la línea de comandos. El único prerrequisito es tener un proyecto Copr con algún paquete construido con éxito en él.

Abra su proyecto, pulse en Módulos, luego pulse en Nuevo módulo. La página de entrada tiene este aspecto.

copr build new module

Proporciona una lista de todos los paquetes construidos con éxito en el proyecto. Por defecto, todos están seleccionados para formar parte del módulo. Desmarque los que no desee. Opcionalmente, especifique un módulo API o sus perfiles.

Módulos con paquetes Copr

Es trivial conseguirlo cuando se genera modulemd desde un proyecto Copr. Esta sección describe un caso especial de cómo añadir un paquete Copr en un archivo yaml modulemd personalizado existente.

Actualice la sección `components.rpms`y añada una nueva definición de paquete.

hello:
    rationale: Mostrando como utilizar un paquete de Copr
    ref: ...
    repository: ...

Los marcadores de posición …​ deben sustituirse por valores reales. Abra un navegador web y navegue hasta un detalle de compilación cuyos resultados deba utilizar el módulo. La compilación debe haber finalizado correctamente. Desplácese hasta la sección Resultados.

copr build result
  • Utilice el valor hash de la columna Dist Git Source como ref en el modulemd.

  • Siga el enlace del valor Dist Git Source a una instancia de Copr distgit. Utilice la URL como un repositorio en modulemd; con algunos pequeños ajustes.

    • Recorte todo después .git

    • Sustituye /cgit/ por /git/

copr disgit

Para evitar confusiones, he aquí algunos valores de ejemplo.

hello:
    rationale: Cómo utilizar un paquete de Copr
    ref: 9d1ced1
    repository: http://copr-dist-git.fedorainfracloud.org/git/frostyx/hello/hello.git

Módulos en Copr como dependencias

En este momento, Copr no analiza correctamente las dependencias de los módulos del archivo yaml modulemd. Deben habilitarse explícitamente en la configuración del proyecto, más concretamente en la configuración chroot dentro de un proyecto.

Cuando la dependencia proviene de los repositorios de Fedora, simplemente edite el campo Enable module y añada el módulo en formato name:stream.

Si la dependencia se construyó en Copr, es necesario editar también el campo Repos y proporcionar una URL de repositorio desde la que se pueda instalar el módulo. Consulte la sección [installing modules desde Copr] para aprender a encontrar un repofile para un módulo (en este caso el módulo que se utiliza como dependencia). Utiliza su baseurl como valor para campo Repos.

Instalación de módulos desde Copr

Actualmente el plugin dnf copr no soporta la habilitación de repositorios de módulos y por lo tanto es necesario hacerlo manualmente. Navegue a un proyecto Copr en un navegador web, vea la página Modules, y abra el detalle de un módulo que se va a instalar.Si la compilación sigue en curso, espere a que finalice. En el caso de los módulos que se hayan creado correctamente, aparecerá la sección "Cómo utilizarlos". Siga sus instrucciones. Después de eso, se pueden utilizar los comandos DNF estándar para la manipulación con módulos.

Anular paquetes de módulos

La resolución de la versión del paquete era sencilla en la era anterior a la modularidad. Si varios repositorios proporcionaban el mismo paquete, se prefería el de la versión más alta. Es más complicado ahora. Si hay un flujo de módulos habilitado en el sistema y este flujo proporciona un paquete, se prefiere sobre su variante no modular independientemente de su versión.

Para suprimir este comportamiento, se inventaron los repositorios module_hotfixes. Para ellos, DNF actualiza a una versión superior de un paquete independientemente de su procedencia. Habilítelos en Copr yendo a la configuración del proyecto y activando esta casilla.

[ ] Este repositorio contiene reparaciones del módulo
    Esto hará que los paquetes de este proyecto estén disponibles junto con
    paquetes de los flujos de módulos activos.

O en una línea de comandos

copr-cli modifica frostyx/foo --module-hotfixes on

Ejemplos

Cree un módulo a partir de un archivo yaml modulemd alojado en línea:

copr-cli create testproject1 --chroot fedora-rawhide-x86_64
copr-cli build-module testproject1 \
    --url https://src.fedoraproject.org/modules/httpd/raw/2.4/f/httpd.yaml

También puede crear un módulo a partir de un archivo modulemd yaml almacenado localmente:

fedpkg clone -a modules/httpd
cd httpd
copr-cli create testproject2 --chroot fedora-rawhide-x86_64
copr-cli build-module testproject2 --yaml httpd.yaml