Tutorial de empaquetado

Creando un Flatpak de una aplicación que esté ya empaquetada en Fedora involucra dos pasos. Primero necesita crear un módulo para la aplicación. Este módulo será utilizado para reconstruir la aplicación RPM y RPMs. Después necesita crear un contenedor fuera del módulo. En el contexto Fedora, flatpak son tan solo otra forma de contenedor, y son manipulados muy similar a los contenedores Docker utilizados para aplicaciones de servidor.

Tan solo como un paquete, las instrucciones para construir el módulo y contenedores están almacenados a git en https://src.fedoraproject.org y las construcciones están coordinadas por https://koji.fedoraproject.org. El flatpak para una aplicación puede encontrase en https://src.fedoraproject.org dentro del repositorio flatpaks/<application>; este repositorio git contiene dos archivos: <application>.yaml, el cual define el contenido del módulo, y conteiner.yaml, el cual define como el módulo está ajustado en un contenedor Flatpak.

Ajustes

Instalar las herramientas necesarias:

$ sudo dnf install flatpak-module-tools fedmod

Asegure que su usuario está dentro del grupo mock (ambos compilaciones de módulo local y contenedor local utilizan mock).

$ sudo usermod -a -G mock $USER

(Puede que necesite salir y volver a entrar.)

Añadir a la prueba flatpak Fedora remota:

$ flatpak remote-add fedora-testing oci+https://registry.fedoraproject.org#testing

En Fedora pudo ser ya instalado, pero en estado deshabilitado. Para habilitar ejecute:

$ flatpak remote-modify --enable fedora-testing

E instale el Fedora Flatpak Runtime si no lo ha instalado ya:

$ flatpak install fedora-testing org.fedoraproject.Platform/x86_64/f37

Creando <application>.yaml y container.yaml

$ mkdir feedreader && cd feedreader
$ fedmod fetch-metadata
$ fedmod rpm2flatpak --flatpak-common --flathub=feedreader feedreader

Esto genera versiones iniciales de los dos archivos. La opción --flatpak-common hace que el módulo generado dependa del módulo flatpak-common. Esto no es lo predeterminado, ya que flatpak-common aún es un bit experimental, pero a menudo es muy útil en hacer su módulo más pequeño y más fácil de construir. La opción --flathub=feedreader busca Flathub para una aplicación cuyo nombre o ID de aplicación coincida con feedreader, y utilice la declaración Flathub para inicializar container.yaml. Si son encontradas múltiples coincidencias, son exhibidas, y necesitará re-ejecutar fedmod rpm2flatpak con una cadena de búsqueda más específica.

Primero miraremos en el archivo de definición del módulo:

feedreader.yaml
---
document: modulemd
version: 2
data:
  summary: RSS desktop client (1)
  description: >- (1)
    FeedReader is a modern desktop application designed to complement existing web-based
    RSS accounts. It combines all the advantages of web based services like synchronization
    across all your devices with everything you expect from a modern desktop application.
  license:
    module:
    - MIT
  dependencies:
  - buildrequires:
      flatpak-common: [f37]
      flatpak-runtime: [f37]
      platform: [f37]
    requires:
      flatpak-common: [f37]
      flatpak-runtime: [f37]
      platform: [f37]
  profiles: (2)
    default:
      rpms:
      - feedreader
  components:
    rpms:
      feedreader: (3)
        buildorder: 10
        rationale: Application package
        ref: f37 (4)
      gnome-online-accounts: (5)
        rationale: Runtime dependency
        ref: f37
      gumbo-parser: (5)
        rationale: Runtime dependency
        ref: f37
      libpeas: (5)
        rationale: Runtime dependency
        ref: f37
...
yaml
1 Origen y descripción viene desde metadatos RPM
2 El perfil de listados por defecto de RPM está incluido junto con sus dependencias
3 El paquete principal para la aplicación
4 Esta es la rama del RPM en https://src.fedoraproject.org a utilizar para este componente. Puede utilizar cualquier rama, o incluso apuntar a un commit específico.
5 Más allá del rpms fuente que será recompilado para agrupar

Este pudo ser utilizado tal cual. Para más casos complejos, puede ser necesario añadir teclas buildorder: adicionales tales que las dependencias vinculadas de compilación estén en el orden correcto.

Entonces miraremos en el archivo container.yam.

container.yaml
compose:
    modules:
    - feedreader:stable
flatpak:
    id: org.gnome.FeedReader
    branch: stable
    command: feedreader
    finish-args: |-
        --socket=pulseaudio
        --socket=x11 (1)
        --share=ipc
        --socket=wayland
        --device=dri
        --share=network
        --filesystem=xdg-run/dconf
        --filesystem=~/.config/dconf:ro
        --talk-name=ca.desrt.dconf
        --env=DCONF_USER_CONFIG_DIR=.config/dconf
        --talk-name=org.gnome.OnlineAccounts
        --own-name=org.gnome.FeedReader.ArticleView
        --talk-name=org.freedesktop.Notifications
        --talk-name=org.freedesktop.secrets
        --env=DECSYNC_DIR=.local/share/decsync
        --filesystem=~/.local/share/decsync
yaml
1 Esto sería mejor en --socket=fallback-x11 para prevenir acceso a los zócalos Xwayland cuando ejecuten en Wayland.

Además el archivo container.yaml puede ser utilizado como es. Si no hay ninguna construcción existente de la aplicación en Flathub, puede omitir la opción --flathub para fedmod rpm2flatpak`. En este caso necesita tomar un ID de aplicación y editar container.yaml.

Realizando una compilación local

$ flatpak-module local-build --install

Esto es un enlace para tres pasos:

$ flatpak-module build-module
$ flatpak-module build-container --from-local
$ flatpak-module install <aplicación>-stable-<version>.oci.tar.gz

Si la compilación del módulo es correcta pero la construcción del contenedor falla, y necesita cambiar el container.yam e intentar de nuevo, puede hacer:

$ flatpak-module build-container --from-local --install

Probando

Si la instalación es correcta, ahora puede hacer:

$ flatpak run org.gnome.FeedReader

Para probarlo fuera.

solicita src.fedoraproject.org

Solicite un repositorio Git nuevo como sigue:

$ fedpkg request-repo --namespace=flatpaks <aplicación>

Importando su contenido de módulo

Una vez que el repo haya sido creado:

$ mv <aplicación> <aplicación>.old
$ fedpkg clone flatpaks/<aplicación>
$ cd <application>
$ cp ../application.old/{<aplicación>.yaml,container.yaml} .
$ git add <aplicación>.yaml container.yaml
$ git commit -m "Initial import"
$ git push origin stable

Compilando en Koji

Primera compilación del módulo

$ fedpkg module-build

Si eso completa correctamente, entonces puede ir a:

$ fedpkg flatpak-build

Probando la construcción

Para instalar la última construcción lograda desde Koji, ejecute:

$ flatpak-module install --koji <application>:stable

Creando una actualización

Encuentra el NVR de su compilación Flatpak - si no lo tiene en su arrastre de terminal vaya a https://koji.fedoraproject.org/ y busque en "Packages" para el nombre de la aplicación. El ID de construcción para el _Flatpak será algo como: miaplicación-20b180601144429.2.

Vaya a https://bodhi.fedoraproject.org/updates/new e introduzca el flatpak NVR bajo Candidate Builds (descarta “Packages”). Introduzca texto bajo “Actualizar notas” como “Flatpak inicial de <aplicación>”, y pulse <Enviar>.