ADMIN

2023

12

2023-11-30T12:00:00

Container und Applikationsmanagement

SCHWERPUNKT

085

Applikationsmanagement

Softwareverteilung

Mit Flatpak unter Linux Applikationen bereitstellen

Einzeln verpackt

von Dr. Holger Reibold

Veröffentlicht in Ausgabe 12/2023 - SCHWERPUNKT

In Linux-Umgebungen sind IT-Verantwortliche seit langer Zeit auf der Suche nach Wegen, Softwareverteilung und Virtualisierung derart zu vereinfachen, dass auf jedem System ohne weitreichende Anpassungen jede beliebige Applikation läuft. Doch bis heute haben wir es mit konkurrierenden, teilweise auch inkompatiblen Werkzeugen für die Anwendungsbereitstellung zu tun. Flatpak verspricht die Lösung dieses Problems über eine Sandbox-Umgebung, in der Apps isoliert vom Rest des Systems problemlos an den Start gehen.

Als Mitte der 1990er Jahre Java mit seiner Sandbox-Technologie an den Start ging, tönte ein Raunen durch die Community: Endlich gab es ein Konzept, das die sichere Ausführung von Applets erlaubte, ohne aus der geschützten Umgebung auszubrechen und diese in Mitleidenschaft zu ziehen. Doch das Potenzial dieses Ansatzes wurde nicht annähernd erschlossen – auch nicht unter dem weitgehend Java-basierten Android. Linux-Administratoren und -Anwender kämpfen nach wie vor mit kaum zu durchschauenden Abhängigkeiten und Verzahnungen von Applikationen und Betriebssystem.
Die Antwort auf diese ungeklärten Fragen ist indes einfach und genial zugleich: Flatpak [1] folgt dem Container- und Virtualisierungsprinzip und stellt für jede Anwendung ein generisches Linux-System zur Verfügung, in dem die Applikation läuft. Offensichtlich ist, dass damit zwar eine Fülle an Dateien mehrfach auf dem System landen, doch der Gewinn der isolierten Applikationen macht dieses Manko wett. Denn bei der Installation müssen Sie nicht mehr mit verschiedenen Paketformaten hantieren und dabei mögliche Installationshürden nehmen, sondern können diese quasi-standardisiert einfach herunterladen und sicher ausführen. So können auf einer Workstation parallel brandaktuelle Internet- und Produktivitätsanwendungen neben zehn Jahre alter Software in Betrieb sein, ohne dass mit Ausführungsproblemen und Inkompatibilitäten zu rechnen ist. Flatpak zielt dabei explizit auf Desktopanwendungen.
Auch für Entwickler sind die Vorteile signifikant: Sie müssen nicht mehr APT-, DEB- und sonstige Paket schnüren, sondern generieren ein Flatpak-Paket – fertig. Der Zeitgewinn und die Arbeitsentlastung sind bedeutend. Und im Unterschied zur teilweise proprietären Alternative Snap unterliegt Flatpak vollständig der GPL v3.0.
Als Mitte der 1990er Jahre Java mit seiner Sandbox-Technologie an den Start ging, tönte ein Raunen durch die Community: Endlich gab es ein Konzept, das die sichere Ausführung von Applets erlaubte, ohne aus der geschützten Umgebung auszubrechen und diese in Mitleidenschaft zu ziehen. Doch das Potenzial dieses Ansatzes wurde nicht annähernd erschlossen – auch nicht unter dem weitgehend Java-basierten Android. Linux-Administratoren und -Anwender kämpfen nach wie vor mit kaum zu durchschauenden Abhängigkeiten und Verzahnungen von Applikationen und Betriebssystem.
Die Antwort auf diese ungeklärten Fragen ist indes einfach und genial zugleich: Flatpak [1] folgt dem Container- und Virtualisierungsprinzip und stellt für jede Anwendung ein generisches Linux-System zur Verfügung, in dem die Applikation läuft. Offensichtlich ist, dass damit zwar eine Fülle an Dateien mehrfach auf dem System landen, doch der Gewinn der isolierten Applikationen macht dieses Manko wett. Denn bei der Installation müssen Sie nicht mehr mit verschiedenen Paketformaten hantieren und dabei mögliche Installationshürden nehmen, sondern können diese quasi-standardisiert einfach herunterladen und sicher ausführen. So können auf einer Workstation parallel brandaktuelle Internet- und Produktivitätsanwendungen neben zehn Jahre alter Software in Betrieb sein, ohne dass mit Ausführungsproblemen und Inkompatibilitäten zu rechnen ist. Flatpak zielt dabei explizit auf Desktopanwendungen.
Auch für Entwickler sind die Vorteile signifikant: Sie müssen nicht mehr APT-, DEB- und sonstige Paket schnüren, sondern generieren ein Flatpak-Paket – fertig. Der Zeitgewinn und die Arbeitsentlastung sind bedeutend. Und im Unterschied zur teilweise proprietären Alternative Snap unterliegt Flatpak vollständig der GPL v3.0.
Wie Flatpak Apps isoliert
Die in der Linux-Distribution notwendige Flatpak-Umgebung nennen die Entwickler eine universelle Ausführungsumgebung. Auch wenn Flatpak, das maßgeblich in der Red-Hat- und Fedora-Community entstanden ist, erst in jüngerer Zeit verstärkt in das Blickfeld rückt, ist das Konzept nicht neu. Der Schwede Alexander Larsson veröffentlichte bereits im August 2007 mit "Glick" ein App-Bundling-Framework und im Dezember 2014 begannen die Arbeiten an dem unmittelbaren Flatpak-Vorläufer "xdg-app". Die erste stabile Flatpak-Version 1.0 stand im August 2018 bereit – aktuell ist Version 1.14.4.
Flatpak erlaubt grundsätzlich das Installieren und Ausführen von Anwendungen auf nahezu jeder Linux-Distribution ohne Root-Berechtigungen. Die native Integration in gängige Linux-Desktopsysteme vereinfacht die Installation. Dabei ist auch die parallele Nutzung identischer Applikationen in verschiedenen Versionen möglich.
Um die isolierte Ausführung von beliebigen Anwendungen zu ermöglichen, bedient sich Flatpak verschiedener Schlüsselkonzepte, insbesondere der Runtimes, der Sandboxen sowie der Portale und der Repositorys. Die Runtimes stellen die grundlegenden Abhängigkeiten bereit, die für die Anwendungsausführung notwendig sind. Sie sind verteilungsunabhängig und nicht an eine bestimmte Distribution und deren Version gebunden. Flatpak-basierte Anwendungen laufen mithin unabhängig von etwaigen Betriebssystem-Updates. Sind Abhängigkeiten erforderlich, die die betreffende Runtime nicht bereitstellt, werden diese als Teil der Anwendung geschnürt.
Auch der Sandbox-Mechanismus folgt einem strikten Regime: Jede Sandbox führt lediglich eine Applikation und deren Runtime aus. Ein Zugriff auf Benutzerdateien, das Netzwerk, Subsysteme und Geräte ist durch die explizite Freigabe möglich, ein Zugriff auf externe Prozesse jedoch nicht. Um den Anwendungen dennoch die Möglichkeit zur Interaktion mit dem Host-System zu ermöglichen, verfügt Flatpak über den Portal-Mechanismus. Dieser erlaubt beispielsweise die Interaktion mit Daten, Dateien und Diensten ohne angepasste Sandbox-Berechtigungen. Typische Beispiele sind das Öffnen von Dateien aus Standardanwendungen über den Dateiauswahl-Dialog oder das Drucken. Spezielle Schnittstellen-Toolkits erlauben das Implementieren der transparenten Portal-Unterstützung, sodass sich der Zugriff auf Ressourcen außerhalb der Sandbox sicher realisieren lässt.
Die Flatpak-Applikationen und -Runtime werden in Repositorys verwaltet und für die Allgemeinheit zugänglich gemacht – ähnlich den Git-Repositorys. Die Flatpak-Repositorys sorgen für die Versionierung der dort bereitgestellten Objekte und neben Updates sind auch Downgrades möglich. Auf Seiten der Clients lassen sich verschiedene Repositorys einrichten. Es gibt eine weitere Parallele zu Git: Ein Update übermittelt nur die geänderten Dateien.
Bei sicherheitsbewussten Administratoren schrillen indes die Alarmglocken bei der Vorstellung, Anwendungen samt ihrer notwendigen Komponenten im Paket zu verteilen. Weisen diese Komponenten Schwachstelle auf, müssten sie einzeln geschlossen werden. Die Flatpak-Entwickler adressieren dieses Problem durch den Einsatz verschiedener Runtimes. Kommt eine davon in mehreren Anwendungen zum Einsatz, sind auch nur bei dieser mögliche Schwachstellen zu schließen.
Voraussetzungen für den Betrieb schaffen
Um in den Genuss der Vorteile dieser App-Verwaltung zu gelangen, ist auf Clientseite die Installation der Flatpak-Umgebung erforderlich. Bei verschiedenen aktuellen Client-Betriebssystemen wie Linux Mint ist Flatpak bereit vorinstalliert. Um das System auf Ubuntu 18.10 oder höher einzuspielen, führen Sie folgenden Befehl aus:
sudo apt install flatpak
Bei älteren Ubuntu-Versionen empfehlen die Entwickler die Verwendung des offiziellen Flatpak-PPA (Personal Package Archive), das Sie wie folgt installieren:
sudo add-apt-repository ppa:flatpak/stable
 
sudo apt update
 
sudo apt install flatpak
Mithilfe des Flatpak-Plug-ins müssen Sie bei der Anwendungsinstallation nicht auf die Konsole zurückgreifen. So spielen Sie es ein:
sudo apt install gnome-software-plugin-flatpak
Sie müssen Flatpak nun für das Zusammenspiel mit einem Repository konfigurieren. Mit Flathub [2] stellen die Entwickler einen eigenen Dienst bereit. Um den Zugriff auf das offizielle Repository einzurichten, führen Sie folgendes Kommando aus:
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/ flathub.flatpakrepo
Nach einem Neustart des Linux-Systems können Sie sich aus Flathub bedienen. Mitte Mai 2023 listet das Verzeichnis 1000 unter Flatpak lauffähige Anwendungen. Grundsätzlich sind Sie allerdings nicht an dieses Repository gebunden, sondern können auch einen eigenen Flatpak-Server hosten und diesen mit kompatiblen Anwendungen bestücken.
Das Procedere bei alternativen Linux-Distributionen entspricht dem hier beschriebenen, allerdings mit systemspezifischen Anpassungen. Die entsprechenden Befehle listet das Flatpak-Team unter [3].
Flatpak-Befehle nutzen
Flatpak ist für Endanwender bewusst einfach gehalten, doch für IT-Profis steht mit der Flatpak-Konsole ein erweitertes Werkzeug zur Verfügung. Für etwas Hintergrund dazu müssen Sie wissen, dass Flatpak jede Anwendung und Runtime-Umgebung anhand einer dreiteiligen ID identifiziert. Die sieht üblicherweise wie folgt aus "com.entwickler.App". Die Anwendungs-ID lautet in der Praxis beispielsweise "org.gimp.GIMP" oder "org.telegram.desktop".
Die Entwickler sprechen in diesem Kontext auch vom Bezeichner-Tripel. Dieses erlaubt das Spezifizieren von Architekturen und Versionen in der Form "ID/ Architektur/Zweig". In der Praxis lautet eine Bezeichnung dann beispielsweise "com.entwickler.App/i386/stable".
Grundsätzlich lassen sich Flatpak-Befehle systemweit oder benutzerspezifisch ausführen. Das Gleiche gilt auch für Repositorys: Diese können allen Benutzer zur Verfügung stehen oder nur ausgewählten. Standardmäßig werden die Befehle systemweit ausgeführt. Der Flatpak-Konsolenbefehl erlaubt Anpassungen und tiefere Einblicke in die Umgebung. Mit flatpak remotes rufen Sie die Liste der aktuell installierten Flatpak-Repositorys ab. Um ein Verzeichnis hinzuzufügen, verwenden sie die "remote-add"-Option und eine ".flatpakrepo"-Datei, die die Details der Remote-Plattform und deren GPG-Schlüssel beinhaltet:
flatpak remote-add --if-not-exists <flathub> https://flathub.org/repo/flathub.flatpakrepo
Dabei steht "flathub" für die lokale Bezeichnung, die Sie der Gegenstelle geben. Die URL verweist auf die ".flatpakrepo"-Datei der Gegenstelle. Mit der Option "--if-not-exists" verhindern Sie die Ausgabe einer Fehlermeldung, sollte die Gegenstelle bereits vorhanden sein. Beim Anlegen erfolgt eine Prüfung, ob das angegebene Repository tatsächlich existiert oder nicht. Um einen Eintrag zu entfernen, verwenden Sie den Befehl
flatpak remote-delete <Verzeichnisname>
Eine Anwendung einspielen
Da nicht alle Flatpak-Repositorys über eine benutzerfreundliche Webschnittstelle für die Suche nach bestimmten Applikationen verfügen, erweist sich der Suchbefehl als hilfreich. Dieser sieht wie folgt aus:
flatpak search <Suchbegriff>
Suchen Sie beispielsweise nach "gimp", listet die Antwort neben dem Grafikprogramm auch das Handbuch, verfügbare Plug-ins und Tools auf. Die Ausgabe führt eine Kurzbeschreibung, die Anwendungs-ID, die Version, den Zweig und die Remotes auf. Die ID verwenden Sie für die Installation eines bestimmten Moduls. Zur Installation verwenden Sie die "install"-Option. Konkret lautet der Befehl wie folgt:
flatpak install <Verzeichnis>  <Anwendungsname>
Wollen Sie beispielsweise Gimp von Flathub installieren, klappt das so:
flatpak install flathub org.gimp.GIMP
Benötigt eine Applikation eine spezifische Runtime, so spielt die Anwendung diese ein. Die Details zu einer zu installierenden Applikation stecken in der ".flatpakref"-Datei. Im Fall von Gimp laden Sie sich die Referenzdatei mit wie folgtl herunter:
flatpak install https://flathub.org/repo/appstream/org.gimp.GIMP.flatpakref
Dieses File verrät Ihnen, welche Runtime für Gimp erforderlich ist. Vor der Anwendungsinstallation erfolgt eine Abfrage, ob die Runtime eingerichtet werden soll.
Steht in der Datei, dass die Anwendung von einem entfernten Rechner installiert werden soll, der noch nicht vorhanden ist, erfolgt zuvor eine entsprechende Abfrage. Stimmen Sie zu, listet Flatpak alle Berechtigungen und weiteren Pakete auf, die eingerichtet werden. Mit einer weiteren Bestätigung erfolgt der Download der verschiedenen Pakete. Hat alles geklappt, starten Sie das zuvor installierte Programm aus der Konsole heraus, für Gimp also:
flatpak run org.gimp.GIMP
Besonders einfach gestaltet sich ein Update aller installierten Applikationen mit flatpak update. Um alle installierten Anwendungen und Runtime-Umgebungen auszugeben, verwenden Sie flatpak list. Um die Ausgabe auf die Anwendungen zu beschränken, lautet der Befehl entsprechend flatpak list --app. Zeigen sich Inkonsistenzen bei Ihrer lokalen Installation, beheben Sie diese mit flatpak repair.
Um eine bereits installierte App wieder zu deinstallieren, verwenden Sie entsprechend Uninstall-Befehl. Diesen können Sie auch einsetzen, um Runtimes und Erweiterungen zu entfernen, die die installierten Anwendungen nicht nutzen:
flatpak uninstall --unused
Das Hantieren mit Portalberechtigungen von installierten Anwendungen wird häufig dazu genutzt, standardmäßig gesetzte Restriktionen aufzulösen. Doch die Gefahr, dabei weitreichende Rechte einzuräumen ist groß. Im Zweifel sollten Sie alle Portalberechtigungen für eine Anwendung zurücksetzen und diese dann mit Flatseal [4] (siehe Kasten) manuell bearbeiten. Um etwa die Berechtigungen für Gimp zurückzusetzen, verwenden Sie:
flatpak permission-reset org.gimp.GIMP
Flatpak verrät Ihnen auch, welche Änderungen an einer Flatpak-Installation im Laufe der Zeit erfolgt sind. Die Logfiles sehen Sie über flatpak history ein.
Berechtigungen mit Flatseal bearbeiten
Die aktuelle Konfiguration von Berechtigungen lässt sich komfortabel mit Flatseal einsehen und bearbeiten. Sie installieren es über Flathub oder manuell:flatpak install flathub com.github.tchx84.FlatsealUnd führen es dann so aus:flatpak run com.github.tchx84.FlatsealAlternativ starten Sie das Programm über die Desktop-GUI. Das Besondere an Flatseal ist die Option, Berechtigungen auf Anwendungs- und auf globaler Ebene zu vergeben. Die Handhabung ist einfach und idealerweise passen Sie die Berechtigungen auf Anwendungsebene an. Die App-spezifischen Einstellungen überschreiben dabei die globalen Konfigurationen. Sie können insbesondere die Share-, Socket- und Device-Einstellungen bearbeiten.
Die Installation einer Flatpak-basierten Anwendung am Beispiel von Gimp.
Flatpak-Pakete bauen und bereitstellen
Für Unternehmen ist Flatpak auch deshalb so interessant, weil sich darüber mit einem standardisierten Verfahren nahezu jede beliebige Applikation über ein unternehmensweites Repository bereitstellen lässt. Dafür benötigen Sie neben Flatpak den Flatpak Builder, den Sie mit folgendem Befehl installieren:
flatpak install flathub org.flatpak.Builder
Da Flatpak für jede Applikation eine Runtime benötigt, müssen Sie immer auch das zugehörige SDK samt relevanten Entwicklungswerkzeugen bereithalten. Dabei kommen insbesondere die Freedesktop-, die KDE-, die Gnome- und die Elementary-Runtime zum Einsatz. Die Freedesktop-Runtime ist die Standardumgebung, die Sie für Anwendungen verwenden, die auf grundlegende Bibliotheken und Services wie D-Bus, GLib, Gtk3, PulseAudio, X11 und Wayland setzen.
Die GNOME-Laufzeitumgebung ist für jene Anwendungen geeignet, die auf diese Plattform aufsetzen. Sie basiert auf der Freedesktop-Laufzeitumgebung und fügt die GNOME-Plattform inklusive Clutter, Gjs, GStreamer et cetera hinzu. Die KDE-Runtime basiert ebenfalls auf Freedesktop, ergänzt diese aber um Qt und das KDE-Framework. Diese Umgebung ist für jene Anwendungen prädestiniert, die die KDE-Plattform und Qt-basierte Anwendungen nutzen. Für solche, die im AppCenter veröffentlicht werden sollen, greifen Sie zur Elementary-Runtime.
Das Erstellen eines eigenen Flatpak-Pakets folgt einem einheitlichen Schema. Im ersten Schritt wählen Sie die Runtime und das passende SDK aus, dann entwickeln Sie die eigentliche Anwendung. Jedes Flatpak-File benötigt eine Manifestdatei, in der die wesentlichen Informationen zu dieser hinterlegt sind. Diese besitzt beispielsweise das Format "org.flatpak.beispiel.yml". Listing 1 zeigt ein einfaches Beispiel.
Listing: Beispiel einer Flatpak-Manifestdatei
app-id: org.flatpak.Beispiel
runtime: org.freedesktop.Platform
runtime-version: '22.08'
sdk: org.freedesktop.Sdk
command: beispiel.sh
modules:
      - name: Beispiel-App
        buildsystem: simple
        build-commands:
                - install -D beispiel.sh
                    /app/bin/beispiel.sh
        sources:
                - type: file
            path: beispiel.sh
Komplexe Anwendungen führen in der Regel weit mehr als in unserem Beispiel Module auf. Der nächste Schritt dient dem Bau der Anwendungen mit dem "flatpak-builder". Den Vorgang lösen Sie mit Angabe des Zielverzeichnisses und der Manifest-Datei aus, zum Beispiel:
flatpak-builder flatpak-apps org.flatpak.Beispiel.yml
Die Funktionstüchtigkeit des Pakets testen Sie durch seine Ausführung:
flatpak run org.flatpak.Beispiel
Wollen Sie tiefer in die Materie eindringen, steht dafür die "Flatpak Developer Demoanwendung" [5] bereit. Sie taugt als Referenzimplementierung und verwendet die Qt- und KDE-Laufzeitumgebungen. Das Beispiel zeigt auch das Verwenden von Portalen und die sichere Implementierung von Host-Funktionen wie bei der Dateiauswahl.
Zum Abschluss müssen Sie die Flatpak-basierte Datei nur noch über ein Repository bereitstellen. Dazu greifen Sie wieder zum "flatpak-builder"; das Argument "--repo" spezifiziert dabei das Repository in etwa so:
flatpak-builder --repo=<MeinRepo> force-clean build-dir
org.flatpak.Beispiel.yml
Um ein eigenes Flatpak-Repository einzurichten, greifen Sie ebenfalls zum "flatpak-builder". Mit dem "flat-manager" [6] steht zudem ein weiteres Werkzeug zum Hosting und zur Wartung von Flatpak-Repositorys bereit.
Alternative Paketformate
Die Linux-Gemeinde beschäftigt sich seit langem mit der Frage, wie sich die Installation und die Verwaltung von unterschiedlichen Anwendungstypen vereinfachen lässt. Daher verwundert es nicht, dass neben Flatpak weitere Umgebungen dieses Problem adressieren. Die beiden bekanntesten Flatpak-Alternativen sind AppImage [7] und Snap [8]. Alle drei Konzepte verfolgen das übergeordnete Ziel, die Anwendungsinstallation und -nutzung einfacher und sicherer zu gestalten. Flatpak und das von Canonical entwickelte Snap zielen primär auf eine strikte Anwendungsisolation. AppImage unterscheidet sich von den beiden anderen insbesondere darin, dass es kein Paketwerkzeug auf Seiten des Clients erfordert.
Bei einem Snap handelt es sich um eine einzelne Datei, die das SquashFS-Dateisystem verwendet. Das Dateisystem wiederum stellt die benötigten Bibliotheken et cetera zur Verfügung. Die einzelnen Snaps sind untereinander und gegen das Host-System abgeschottet. Canonical spricht in diesem Kontext von Confinement. Der Zugriff auf externe Ressourcen erfolgt über Interfaces, die sich der sogenannten Slots und Plugs bedienen. Für das Bauen von Snap-Paketen greifen Sie zu "snapcraft". Ein wesentlicher Unterschied zwischen den Formaten Flatpak und Snap besteht darin, dass Snap keinen eigenen App-Server erlaubt.
Fazit
Rolutionär ist das Flatpak-Konzept nicht, aber es ist die konsequente Umsetzung und Weiterentwicklung bestehender Sicherheitsarchitekturen und Verteilungsmechanismen. Für Administratoren ist der Gewinn auf den ersten Blick gering, da Flatpak bislang nicht für klassische Serveranwendungen taugt. Gleichwohl profitieren sie davon, dass die Desktops sicherer werden und sich einfacher warten lassen. Dass in dieser Diskussion noch reichlich Dynamik steckt, zeigt die Entwicklung der letzten Wochen: Während Ubuntu Flatpak über Bord wirft, sieht Red Hat darin die Zukunft für LibreOffice in der Endanwendervariante von RHEL. Es bleibt also spannend, wer auf dem Desktop künftig die Nase vorn hat.
(jp)
Link-Codes
[3] Flatpak-Setup für unterschiedliche Distributionen: https://flatpak.org/setup/
[7] AppImage: https://appimage.org
[8] Windows Autopilot: https://snapcraft.io/