Es wurde ein neuer stabiler Release-Zweig des Flatpak-Tools 1.14 veröffentlicht, der ein System zur Erstellung eigenständiger Pakete bereitstellt, die nicht an bestimmte Linux-Distributionen gebunden sind und in einem speziellen Container ausgeführt werden, der die Anwendung vom Rest des Systems isoliert. Die Unterstützung für die Ausführung von Flatpak-Paketen ist gewährleistet für Arch Linux, CentOS, Debian, Fedora, Gentoo, Mageia, Linux Mint, Alt Linux und Ubuntu. Flatpak-Pakete sind im Fedora-Repository enthalten und werden von der GNOME-Anwendung zur Paketverwaltung unterstützt.
Wichtige Neuerungen im Flatpak 1.14-Zweig:
- Es wurde ein Verzeichnis für Dateien im Zustand (.local/state) erstellt, und die Umgebungsvariable XDG_STATE_HOME verweist auf dieses Verzeichnis.
- Bedingte Überprüfungen wie „have-kernel-module-Name“ wurden hinzugefügt, um das Vorhandensein von Kernelmodulen zu bestimmen (ein universeller Ersatz für die zuvor angebotene Überprüfung have-intel-gpu, die nun durch den Ausdruck „have-kernel-module-i915“ ersetzt werden kann).
- Der Befehl „flatpak document-unexport —doc-id=…“ wurde implementiert.
- Der Export von Appstream-Metadaten zur Verwendung in der Hauptumgebung wurde sichergestellt.
- Automatische Vervollständigungsregeln für Flatpak-Befehle in der Fish-Shell wurden hinzugefügt.
- Netzwerkzugang zu den Diensten X11 und PulseAudio ist erlaubt (nach Hinzufügen der entsprechenden Einstellungen).
- Der Hauptbranch im Git-Repository wurde von „master“ in „main“ umbenannt, da das Wort „master“ in letzter Zeit als politisch unkorrekt angesehen wird.
- Die Skripte zum Starten werden neu geschrieben, falls die Anwendung umbenannt wird.
- Den install-Befehl wurden die Optionen „—include-sdk“ und „—include-debug“ hinzugefügt, um SDK und Debuginfo-Dateien zu installieren.
- Die flatpakref- und flatpakrepo-Dateien unterstützen jetzt den Parameter „DeploySideloadCollectionID“, welcher bei der Installation den Sammlungs-Identifikator während der Hinzufügung des Remote-Repositories festlegt, anstatt nach dem Herunterladen der Metadaten.
- Die Erstellung von verschachtelten Sandbox-Umgebungen für Handler in Sitzungen mit separaten MPRIS-Namen (Media Player Remote Interfacing Specification) ist erlaubt.
- In den Befehlszeilen-Utilities werden Informationen zur Nutzung veralteter Runtime-Erweiterungen ausgegeben.
- Im uninstall-Befehl wird eine Bestätigungsanfrage vor dem Entfernen von Runtime oder Runtime-Erweiterungen implementiert, die noch verwendet werden.
- Im Befehl „flatpak run“ wurde die Unterstützung der Option „—socket=gpg-agent“ hinzugefügt.
- In libostree wurde eine Sicherheitsanfälligkeit behoben, die es einem Benutzer möglicherweise ermöglicht, beliebige Dateien im System zu löschen, indem er den flatpak-system-helper manipuliert (indem er eine Anfrage zum Löschen mit einem speziell formulierten Branchnamen sendet). Das Problem tritt nur in älteren Versionen von Flatpak und libostree auf, die vor 2018 veröffentlicht wurden (< 0.10.2), und betrifft nicht die aktuellen Versionen.
Flatpak bietet Entwicklern die Möglichkeit, die Verbreitung ihrer Anwendungen zu vereinfachen, indem sie einen universellen Container erstellen, der keine separaten Builds für jede Distribution erfordert. Dies ist besonders vorteilhaft für Programme, die nicht in den Standard-Repositories der Distributionen enthalten sind. Für sicherheitsbewusste Nutzer ermöglicht Flatpak die Ausführung von potenziell unsicheren Anwendungen in einem Container, der nur Zugriff auf die benötigten Netzwerkfunktionen und die benutzerspezifischen Dateien gewährt, die mit der Anwendung verbunden sind. Technikbegeisterte können mit Flatpak die neuesten Test- und Stabilversionen von Anwendungen installieren, ohne dass Änderungen am System erforderlich sind. Beispielsweise werden Flatpak-Pakete für LibreOffice, Midori, GIMP, Inkscape, Kdenlive, Steam, 0 A.D., Visual Studio Code, VLC, Slack, Skype, Telegram Desktop, Android Studio usw. bereitgestellt.
Um die Paketgröße zu reduzieren, beinhaltet es nur anwendungsspezifische Abhängigkeiten, während grundlegende system- und grafikbezogene Bibliotheken (GTK, Qt, GNOME- und KDE-Bibliotheken usw.) in Form von modularen Laufzeitumgebungen bereitgestellt werden. Der wesentliche Unterschied zwischen Flatpak und Snap besteht darin, dass Snap Komponenten der Hauptsystemumgebung und eine Isolation durch Systemaufruf-Filterung verwendet, während Flatpak einen vom System getrennten Container erstellt und mit großen Laufzeitpaketen arbeitet, die nicht als Pakete, sondern als modulare Systemumgebungen bereitgestellt werden (z. B. alle Bibliotheken, die für die Ausführung von GNOME- oder KDE-Anwendungen erforderlich sind).
Neben der typischen Systemumgebung (Runtime), die über ein spezielles Repository installiert wird, werden zusätzliche Abhängigkeiten (Bundle) bereitgestellt, die für den Betrieb der Anwendung erforderlich sind. Insgesamt bilden Runtime und Bundle die Basis des Containers, wobei die Runtime separat installiert wird und mehreren Containern zugeordnet werden kann, was eine Duplizierung gemeinsamer Systemdateien für die Container vermeidet. In einem System können verschiedene Runtimes (GNOME, KDE) oder mehrere Versionen einer Runtime (GNOME 3.40, GNOME 3.42) installiert sein. Der Container mit der Anwendung als Abhängigkeit verwendet nur die Bindung zu einer bestimmten Runtime, ohne die einzelnen Pakete zu berücksichtigen, aus denen die Runtime besteht. Alle fehlenden Elemente werden direkt zusammen mit der Anwendung verpackt. Beim Erstellen des Containers wird der Inhalt der Runtime als das Verzeichnis \/usr gemountet, während das Bundle im Verzeichnis \/app gemountet wird.
Die Runtime und die Anwendung Container werden mithilfe der OSTree-Technologie erstellt, bei der das Abbild atomar aus einem Git-ähnlichen Repository aktualisiert wird. Dies ermöglicht es, Methoden der Versionskontrolle auf die Komponenten des Distributionspakets anzuwenden (zum Beispiel kann das System schnell auf einen früheren Zustand zurückgesetzt werden). RPM-Pakete werden mittels einer speziellen Schicht namens rpm-ostree in das OSTree-Repository übertragen. Eine separate Installation und Aktualisierung von Paketen innerhalb der Arbeitsumgebung wird nicht unterstützt; das System wird nicht auf Komponentenbasis aktualisiert, sondern vollständig, wobei sein Zustand atomar geändert wird. Es stehen Werkzeuge zur inkrementellen Anwendung von Updates zur Verfügung, die die Notwendigkeit einer vollständigen Ersetzung des Abbilds bei jedem Update beseitigen.
Die isolierte Umgebung wird unabhängig vom verwendeten Distribution vollständig erstellt. Bei entsprechender Konfiguration des Pakets hat sie keinen Zugriff auf die Dateien und Prozesse des Benutzers oder des Hauptsystems und kann nicht direkt auf die Hardware zugreifen, mit Ausnahme von Ausgaben über DRI und Anfragen an die Netzwerksubsystem. Die Grafikausgabe und die Eingabesteuerung werden über das Wayland-Protokoll oder durch Durchreichen eines X11-Sockets realisiert. Die Interaktion mit der externen Umgebung basiert auf dem DBus-Nachrichtenaustauschsystem und einer speziellen API für Portale.
Zur Isolation wird eine Schicht aus Bubblewrap und traditionelle Linux-Technologien der Container-Virtualisierung eingesetzt, die auf cgroups, Namespaces, Seccomp und SELinux basieren. Für die Audioausgabe kommt PulseAudio zum Einsatz. Dabei kann die Isolation deaktiviert werden, was von Entwicklern vieler populärer Pakete genutzt wird, um vollständigen Zugriff auf das Dateisystem und alle Geräte im System zu erhalten. Beispiele hierfür sind Pakete wie GIMP, VSCodium, PyCharm, Octave, Inkscape, Audacity und VLC, die im eingeschränkten Isolierungsmodus angeboten werden und vollen Zugriff auf das Home-Verzeichnis lassen. Im Falle einer Kompromittierung dieser Pakete mit Zugriff auf das Home-Verzeichnis reicht es einem Angreifer, den ~/.bashrc-Datei zu ändern, selbst wenn im Paketbeschreibung das Label „sandboxed“ vermerkt ist. Ein weiteres Anliegen ist die Überwachung von Änderungen an den Paketen und das Vertrauen in die Paketbauer, die häufig nicht mit dem Hauptprojekt oder den Distributionen verbunden sind.
Quelle: opennet.ru
