Introduction
Introduction Statistics Contact Development Disclaimer Help
Title: Flatpak integration in Qubes OS templates
Author: Solène
Date: 15 September 2023
Tags: flatpak qubesos linux
Description: In this guide, you will learn how to setup your Qubes OS
templates to integrate flatpak programs
# Introduction
I recently wanted to improve Qubes OS accessibility to new users a bit,
yesterday I found why GNOME Software wasn't working in the offline
templates.
Today, I'll explain how to install programs from Flatpak in a template
to provide to other qubes. I really like flatpak as it provides extra
security features and a lot of software choice, and all the data
created by Flatpak packaged software are compartmentalized into their
own tree in `~/.var/app/program.some.fqdn/`.
Qubes OS official project website
Flatpak official project website
Flathub: main flatpak repository
# Setup
All the commands in this guide are meant to be run in a Fedora or
Debian template as root.
In order to add Flathub repository, you need to define the variable
`https_proxy` in your shell session so flatpak can figure how to reach
the repository through the proxy:
```shell
export all_proxy=http://127.0.0.1:8082/
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.…
```
Now, if you want to use flatpak commands, you need to either set the
`all_proxy` variable in your shell session, or prefix the flatpak
command with `env all_proxy=http://127.0.0.1:8082 flatpak .....`.
## GNOME Software specific bug workaround
In order to circumvent a GNOME Software bug, if you want to use it to
install packages (Flatpak or not), you need to add the following line
to `/rw/config/rc.local`:
```shell
ip route add default via 127.0.0.2
```
GNOME Software gitlab issue #2336 saying a default route is required to make it…
Restart the template, GNOME software is now able to install flatpak
programs!
## User-wide proxy setting
You can make the environment variable persistent for the user `user` if
you want to allow GNOME Software to work with flatpak, but also for all
flatpak commands as the user `user`, so you do not have to export the
variable every time.
/!\ Note that this can lead to the template's programs to connect to
the Internet as the proxy will be configured for the whole user `user`,
so let's say you start Firefox or run something with telemetry and they
support proxies, they will use the proxy.
```
mkdir -p /home/user/.config/environment.d/
cat <<EOF >/home/user/.config/environment.d/proxy.conf
all_proxy=http://127.0.0.1:8082/
EOF
```
# Qubes OS integration
If you install or remove flatpak programs, either from the command line
or with the Software application, you certainly want them to be easily
available to add in the qubes menus.
Here is a script to automatically keep the applications list in sync
every time a change is made to the flatpak applications.
If you don't want to use the automated script, you will need to run
`/etc/qubes/post-install.d/10-qubes-core-agent-appmenus.sh`, or click
on "Sync applications" in the template qube settings after each flatpak
program installation / deinstallation.
## Inotify-tool (optional)
For the setup to work, you will have to install the package
`inotify-tools` in the template, this will be used to monitor changes
in a flatpak directory.
## Syncing app menu script
Create `/usr/local/sbin/sync-app.sh`:
```shell
#!/bin/sh
# when a desktop file is created/removed
# - links flatpak .desktop in /usr/share/applications
# - remove outdated entries of programs that were removed
# - sync the menu with dom0
inotifywait -m -r \
-e create,delete,close_write \
/var/lib/flatpak/exports/share/applications/ |
while IFS=':' read event
do
find /var/lib/flatpak/exports/share/applications/ -type l -name "*.desktop"…
do
ln -s "$line" /usr/share/applications/
done
find /usr/share/applications/ -xtype l -delete
/etc/qubes/post-install.d/10-qubes-core-agent-appmenus.sh
done
```
You have to mark this file as executable with `chmod +x
/usr/local/sbin/sync-app.sh`.
### Start the file monitoring script at boot
Finally, you need to activate the script created above when the
templates boots, this can be done by adding this snippet to
`/rw/config/rc.local`:
```
# start monitoring flatpak changes to reload icons
/usr/local/sbin/sync-app.sh &
```
## Updating
You can automatically run flatpak upgrade after a template update.
After a `dnf` change, all the scripts in `/etc/qubes/post-install.d/`
are executed.
Create `/etc/qubes/post-install.d/05-flatpak-update.sh` with the
following content, and make the script executable:
```
#!/bin/sh
# abort if not in a template
if [ "$(qubesdb-read /type)" = "TemplateVM" ]
then
export all_proxy=http://127.0.0.1:8082/
flatpak upgrade -y --noninteractive
fi
```
Every time you update your template, flatpak will upgrade after and the
application menus will also be updated if required.
# Conclusion
With this setup, you can finally install programs from flatpak in a
template to provide it to other qubes, with bells and whistles to not
have to worry about creating desktop files or keeping them up to date.
Please note that while well-made Flatpak programs like Firefox will add
extra security, the repository flathub allows anyone to publish
programs. You can browse flathub to see who is publishing which
software, they may be the official project team (like Mozilla for
Firefox) or some random people.
You are viewing proxied material from dataswamp.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.