Packaging Tutorial
Creating a Flatpak of an application that is already packaged in Fedora involves two steps. First you need to create a module for the application. This module will be used to rebuild the application RPM and RPMs. Then you need to create a container out of the module. In the Fedora context, flatpaks are just another form of container, and are handled very similar to the Docker containers used for server applications.
Just as for packages, the instructions for building modules and containers are stored in git on src.fedoraproject.org and builds are coordinated by koji.fedoraproject.org. The flatpak for a an application can be found on 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.
Setup
Install the necessary tools:
$ sudo dnf install flatpak-module-tools fedmod
Make sure that your user is in the mock
group (both local module builds and local container builds use mock).
$ sudo usermod -a -G mock $USER
(You may need to log out and log back in.)
Add Fedora testing flatpak remote:
$ flatpak remote-add fedora-testing oci+https://registry.fedoraproject.org#testing
On Fedora it could be already installed, but in disabled state. To enable it run: $ flatpak remote-modify --enable fedora-testing And install the Fedora Flatpak Runtime if you don’t already have it installed: $ flatpak install fedora-testing org.fedoraproject.Platform/x86_64/f37 == Creating This generates initial versions of the two files.
The First we’ll look at the module definition file: feedreader.yaml
This could be used as-is. For more complex cases, it may be necessary to add additional
Then we’ll look at the container.yaml
The == Doing a local build $ flatpak-module local-build --install This is a shortcut for three steps: $ flatpak-module build-module $ flatpak-module build-container --from-local $ flatpak-module install <application>-stable-<version>.oci.tar.gz If building the module succeeds but building the container fails, and you need to change container.yaml and try again, you can do: $ flatpak-module build-container --from-local --install == Testing If installation succeeded, you can now do: $ flatpak run org.gnome.FeedReader To try it out. == src.fedoraproject.org request Please request a new Git repository as follows: $ fedpkg request-repo --namespace=flatpaks <application> == Importing your module content Once the repository has been created: $ 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 == Building in Koji First build the module $ fedpkg module-build If that completes successfully, you can then do: $ fedpkg flatpak-build == Testing the build To install the latest successful build from Koji, run: $ flatpak-module install --koji <application>:stable == Creating an update
Find the NVR of your Flatpak build - if you don’t have it in your terminal scrollback go to https://koji.fedoraproject.org/ and search in "Packages" for the application name. The build ID for the Flatpak build will be something like: Go to https://bodhi.fedoraproject.org/updates/new and enter the flatpak NVR under Candidate Builds (ignore “Packages”). Enter text under “Update notes” like “Initial Flatpak of <application>”, and hit <Submit>. |
Want to help? Learn how to contribute to Fedora Docs ›