Tutoriel d’empaquetage

Créer un Flatpak d’une application qui est déjà empaquetée au sein de Fedora s’effectue en deux étapes. Tout d’abord, vous devez créer un module pour l’application. Ce module sera utilisé pour reconstruire le RPM et le RPM source de l’application. Ensuite, vous devez créer un container à partir de ce module. Dans le contexte de Fedora, les flatpack sont juste une autre dorme de container, et sont pris en charge d’une manière similaire aux containers Docker utilisés pour des applications serveur.

Just as for packages, the instructions for building modules and containers are stored in git on https://src.fedoraproject.org and builds are coordinated by https://koji.fedoraproject.org. The flatpak for a an application can be found on https://src.fedoraproject.org in the repository flatpaks/<application>; this git repository contains two files: <application>.yaml, which defines the contents of the module, and container.yaml, which defines how the module is turned into a Flatpak container.

Configuration

Installation des outils nécessaires :

$ sudo dnf install flatpak-module-tools fedmod

Assurez-vous que votre utilisateur fait partie du groupe mock (aussi les bien la construction des modules en local que la construction des modules en local utilisent mock).

$ sudo usermod -a -G mock $USER

(Vous devez peut être fermer votre session et vous reconnecter)

Add Fedora testing flatpak remote:

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

Sur Fedora, il peut être déjà installé, mais être désactivé. Pour l’activer, exécutez :

$ flatpak remote-modify --enable fedora-testing

Et installez l’environnement d’exécution Flatpak Fedora si vous ne l’avez pas déjà installé :

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

Création des fichiers <application>.yaml et container.yaml

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

This generates initial versions of the two files. The --flatpak-common option makes the generated module depend on the flatpak-common module. This is not the default, since flatpak-common is still a bit experimental, but is often quite useful in making your module smaller and easier to build. The --flathub=feedreader option searches Flathub for an application whose name or application ID matches feedreader, and uses the Flathub manifest to initialize container.yaml. If multiple matches are found, they are displayed, and you’ll need to re-run fedmod rpm2flatpak with a more specific search string.

D’abord, regardons le fichier de définition du module :

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
...
1 La source et la description viennent des métadonnées du RPM
2 Le profil par défaut liste les RPMs devant être inclus ainsi que leur dépendances
3 Le paquet par défaut pour l’application
4 C’est la branche du paquet RPM dans https://src.fedoraproject.org que doit utiliser ce composant. Vous pouvez ajouter n’importe quelle branche, ou bien un commit spécifique.
5 Les paquets RPMS suivants seront construits pour l’empaquetage

Cela peut être utilisé tel quel. Plus des scénarios plus complexes, il peut être nécessaire d’ajouter des clés buildorder: supplémentaires afin que les dépendances du bundle (paquet) soient construites dans le bon ordre.

Maintenant, regardons le fichier container.yaml.

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
1 Il est surement préférable d’utiliser --socket=fallback-x11 pour éviter d’accéder à la socket de Xwayland alors que Wayland est utilisé.

Le fichier container.yaml peut aussi être utilisé tel quel. S’il n’y a pas d’application déjà construite sur Flathub, vous pouvez omettre l’option --flathub à la commande fedmod rpm2flatpak. Dans ce cas, vous aurez à pick an application ID and éditer container.yaml.

Effectuer une construction en local

$ flatpak-module local-build --install

C’est un raccourci pour les trois étapes :

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

Si la construction du module réussit mais que la construction du module échoue, et que vous avez besoin de modifier le fichier container.yaml afin de le reconstruire, vous pouvez exécuter :

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

Tester

Si l’installation réussit, vous pouvez maintenant exécuter :

$ flatpak run org.gnome.FeedReader

Afin de le tester.

Requête à src.fedoraproject.org

Veuillez demander un nouveau dépôt Git en exécutant :

$ fedpkg request-repo --namespace=flatpaks <application>

Importer le contenu de votre module

Une fois le dépôt créé, veuillez exécuter :

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

Construction dans Koji

D’abord, créer le module

$ fedpkg module-build

Si cela réussit, vous pouvez ensuite exécuter :

$ fedpkg flatpak-build

Tester la construction

Pour installer le dernier Flatpak construit par Koji, veuillez lancer :

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

Créer une mise à jour

Trouver le numéro de le build de votre Flatpak. Si vous ne l’avez pas dans l’historique de votre terminal, vous pouvez aller à https://koji.fedoraproject.org/ et chercher le nom de votre application dans "Packages". Le numéro de la build sera sous la forme : myapplication-20b180601144429.2.

Aller à https://bodhi.fedoraproject.org/updates/new et entrez le numéro de la build dans "Candidate Builds" (ignorer "Packages"). Entrer une description de votre mise à jour dans "Update Notes" comme “Initial Flatpak of <application>” (c’est une bonne pratique d’écrire ce texte en anglais), et cliquer sur <Submit>.