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.

Comme pour les packages rpm, les instructions permettant de construire les modules et les containers sont stockés dans git à l’adresse src.fedoraproject.org et les jobs de construction sont coordonées par koji.fedoraproject.org. Le flatpak pour une application peut être trouvé sur src.fedoraproject.org dans le dépôt flatpaks/<application> ; cet dépôt git contient deux fichiers : <application>.yaml`, qui définit le contenu du module, et container.yaml, qui définit comment le module est transformé en container flatpak.

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)

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

$ flatpak remote-add fedora-testing oci+https://registry.fedoraproject.org#testing
$ flatpak remote-modify --enable fedora-testing
$ flatpak install fedora-testing org.fedoraproject.Platform/x86_64/f33

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

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

Ceci génèrera les versions initiales des deux fichiers. L’option --flatpak-common fait en sorte que le module généré dépende du module flatpak-common. Cela n’est pas l’option par défaut, car flatpak-common est toujours plus ou moins expérimental, mais celui-ci est souvent assez utile pour rendre vos module plus petits et plus facile à construire. L’option --flathub=feedreader cherche sur Flathub une application dont le nom ou l’identifiant de l’application correspond à feedreader, et utilise le manifeste Flathub pour initialiser le fichier container.yaml. Si plusieurs correspondances sont trouvées, elles sont affichées, et vous aurez à lancer à nouveau fedmod rpm2flatpak avec une critère de recherche un peu plus précis.

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: [f33]
      flatpak-runtime: [f33]
      platform: [f33]
    requires:
      flatpak-common: [f33]
      flatpak-runtime: [f33]
      platform: [f33]
  profiles: (2)
    default:
      rpms:
      - feedreader
  components:
    rpms:
      feedreader: (3)
        buildorder: 10
        rationale: Application package
        ref: f33 (4)
      gnome-online-accounts: (5)
        rationale: Runtime dependency
        ref: f33
      gumbo-parser: (5)
        rationale: Runtime dependency
        ref: f33
      libpeas: (5)
        rationale: Runtime dependency
        ref: f33
...
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>.