This article is a draft and may contain incomplete or incorrect information.

Dieser Artikel ist ein Entwurf und enthält möglicherweise unvollständige oder falsche Information.

Creating HandBrake flatpak bundles and repository

Install dependencies

Install flatpak and flatpak-builder

sudo dnf install flatpak flatpak-builder

Install flathub repository.

flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo

Install flatpak freedesktop SDK.

flatpak install flathub org.freedesktop.Sdk//24.08

Install flatpak freedesktop runtime platform.

flatpak install flathub org.freedesktop.Platform//24.08

Install flatpak gnome.

flatpak install flathub org.gnome.Platform//47
flatpak install flathub org.gnome.Sdk//47

Install Compilers

flatpak install flathub org.freedesktop.Sdk.Extension.llvm18//24.08
flatpak install flathub org.freedesktop.Sdk.Extension.rust-stable//24.08

Create a new HandBrake flatpak bundle

From the HandBrake source tree, update build versions by running configure

./configure --flatpak

Or to build HandBrake with Quick Sync Video support and HandBrake’s Intel MediaSDK flatpak plugin

./configure --flatpak --enable-qsv

You may also want the following additional flags:

(AMD VCN) --enable-vce  
or  
(NVidia NVEnc) --enable-nvenc --enable-nvdec

Build signed flatpak packages for GUI and CLI.

cd build
make pkg.create.flatpak PGP_ID=<optional signing key id>

Or to build unsigned flatpak packages.

cd build
make pkg.create.flatpak

After the build completes, the flatpak packages for the GUI and CLI can be found in:

pkg/flatpak/*.flatpak

And an OSTree repository where the packages have been committed and signed with the above PGP ID can be found in:

pkg/flatpak/HandBrake-Flatpak.repo

If PGP_ID is omitted, the OSTree commit will be unsigned.

Install flatpak bundle

To use the flatpak bundle directly instead of importing it into a repository and then installing from the repository:

flatpak install <flatpak-bundle>

Add OSTree repo to flatpak repo list (Optional)

This is only for test purposes currently. Ultimately, we might want to establish an “official” repo location that we publish new bundles to. Currently, the repo is just a product of the build and is not meant to be reused across builds.

Add the new repository to your flatpak remotes

flatpak --user remote-add <repo-name> <repo-dir>

Of if the repos was generated without PGP signed commits

flatpak --user remote-add --no-gpg-verify <repo-name> <repo-dir>

Check repo and application (Optional)

List contents of the repo

flatpak --user remote-ls <repo-name>

Install the application (if you wish to test it)

flatpak --user install <repo-name> <app-name>

Maintaining a separate OSTree repository

There are situations where you don’t want to keep your repository on the same server as you built the flatpak on. Rather than exporting the entire repo-dir that is built by flatpak-builder, you can import your bundles into a seperate OSTree repository.

Create a new empty repository

ostree init --mode=archive-z2 --reop=<repo-dir>

Add flatpakrepo file to the repository

This file is used by flatpak clients to add your repoitory to their list of remotes.

Create a file named \<yourproject>.flatpakrepo in \<repo-dir>. The format looks like this:

[Flatpak Repo]
Title=Yourproject
Url=https://dl.yourproject.org:8080/repo/
Homepage=https://yourproject.org/
Comment=Repository of yourproject
Description=Repository of yourproject
Icon=https://dl.yourproject.org/repo/logo.svg
GPGKey=<base64 encoded raw public gpg>

Note that the port above is optional and defaults to 80. I use 8080 for test purposes.

To base64 encode the gpg signing key

gpg2 --export <key-id> > key.gpg
base64 --wrap=0 < key.gpg > key.base64

Importing flatpak bundles into the repository

flatpak build-import-bundle --gpg-sign=<key-id> <repo-dir> <flatpak-bundle>

Update repository summary information

flatpak build-update-repo --generate-static-deltas --gpg-sign=<key-id>

Host your repository with a web server

For test purposes, I just use pythons builtin web server.

python3 -m http.server 8080 --directory <repo-dir>

Note, requires python 3.7 or above.

Publish the location of \<yourproject>.flatpakrepo

Users can add your repository to their list of remotes with:

flatpak remote-add --if-not-exists yourproject https://dl.yourproject.org:8080/repo/yourproject.flatpakrepo