Nach anderthalb Jahren Entwicklung wurde der neue stabile Branch des Flatpak-Tools 1.18 veröffentlicht. Diese bietet ein System zur Erstellung eigenständiger Pakete, die nicht an spezifische Linux-Distributionen gebunden sind und in einem speziellen Container ausgeführt werden, der die Anwendung vom Rest des Systems isoliert. Die Ausführung von Flatpak-Paketen wird für Fedora, CentOS, Debian, Arch Linux, Gentoo, Linux Mint, Alt Linux und Ubuntu unterstützt. Pakete mit Flatpak sind im Fedora-Repository enthalten und werden von den Standard-Anwendungsverwaltungssystemen GNOME und KDE unterstützt.
Die wichtigsten Neuerungen in der Flatpak 1.18-Version:
- Die Unterstützung für bedingte Berechtigungen (conditional permission) wurde implementiert, mit der Möglichkeit, bei Anfragen nach Berechtigungen bestimmte Funktionen im System oder zur Laufzeit zu überprüfen. Zum Beispiel kann anstelle von „—device=all“ die Berechtigung „—device-if=all:!has-input-device —device=input“ angefordert werden, die Zugriff nur auf Eingabegeräte gewährt oder auf den Zugriff auf alle Geräte zurückfällt, wenn die selektive Berechtigungsvergabe zur Laufzeit nicht unterstützt wird. Ähnlich kann der Zugriff auf USB-Geräte („has-usb-device“ und „has-usb-portal“) oder gemeinsam genutzte Subsysteme angefordert werden.
- Der Zugriff auf das Gerät /dev/ntsync wurde erlaubt, um auf
das NTSYNC-Kernelmodul zuzugreifen, das einen Satz von Primitiven zur Synchronisation implementiert, die im Windows NT-Kernel verwendet werden und die Leistung von Windows-Spielen, die mit Wine ausgeführt werden, erheblich steigern können. - Für die GPU Intel Xe wurde die Unterstützung der API VA-API für die hardwarebeschleunigte Videodekodierung aktiviert.
- Der Zugriff auf das Gerät /dev/kfd (Kernel Fusion Driver) kann jetzt unter Verwendung der für DRI-Geräte bereitgestellten Berechtigungen erfolgen. Der kfd-Treiber implementiert eine Schnittstelle zur direkten Ausführung von Berechnungen auf AMD-GPUs aus Anwendungen, die AMD ROCm, HIP und OpenCL verwenden.
- Die Unterstützung der Verwendung von Befehlszeilenoptionen zum Durchreichen des Zugriffs auf Verzeichnisse in isolierte Anwendungen wurde hinzugefügt.
- Die Unterstützung für das Verzeichnis "preinstall.d" wurde hinzugefügt, das eine Liste vorinstallierter Flatpak-Anwendungen definiert (um Flatpak-Anwendungen in das Betriebssystem zu integrieren).
- Die direkte Installation von Anwendungen aus OCI-Container-Images, die aus eigenen OCI-Repositorys und lokalen Archiven geladen werden können, ist jetzt erlaubt.
- Die Unterstützung für die URI "flatpak+https://" wurde zum Befehl "flatpak install --from" hinzugefügt.
- Die Option "--clear-env" wurde zum Befehl "flatpak run" hinzugefügt, um die Umgebungsvariablen vor dem Starten der Anwendung zu löschen.
- Es wurde die Möglichkeit geschaffen, das Wurzelverzeichnis der Host-Umgebung in eine isolierte Anwendungsumgebung mit Zugriff über das Verzeichnis /run/host/root zu exportieren.
- Es wurde die Möglichkeit hinzugefügt, die Ergebnisse der ausgeführten Befehle im JSON-Format auszugeben.
- Erweiterte Isolation der Build-Umgebung – der Befehl „flatpak build“ gewährt standardmäßig keinen Zugriff auf den Host.
- Der Befehl „reinstall“ wurde hinzugefügt, um Abhängigkeiten (Bundles) neu zu installieren.
- Die D-Bus-Einstellungen wurden standardmäßig von /etc nach /usr verschoben.
- Die Startzeit wurde bei Verwendung der Shell fish verkürzt.
- In libflatpak wurde eine Funktion hinzugefügt, um Informationen über den Erstellungszeitpunkt der Konfiguration abzurufen, was es Anwendungen wie GNOME Software ermöglicht, zu erkennen, dass ihre zwischengespeicherten Daten aktualisiert werden müssen.
- Die Build-Option http_backend wurde entfernt, stattdessen wird für das Herunterladen über HTTP/HTTPS die Bibliothek libcurl verwendet.
- Standardmäßig wird die Verwendung von Escape-Sequenzen zur Anzeige des Fortschritts der Operation aktiviert.
- Es ist erlaubt, Zugriffsrechte auf Geräte an verschachtelte Sandbox-Umgebungen zu übergeben, die über Flatpak-Ports erstellt wurden.
- Für Anwendungen, die als OCI-Images bereitgestellt werden, wurde ein Mechanismus für „extra-data“ implementiert, um beispielsweise die Wiedergabe von h.265-Videos in Fedora Linux Flatpak-Paketen zu ermöglichen.
- Die Unterstützung für die Komprimierung von Abhängigkeiten (OCI-Bundle) wurde hinzugefügt, unter Verwendung des zstd-Algorithmus, der Daten effizienter komprimiert. Standardmäßig wird weiterhin gzip zur Komprimierung verwendet, um maximale Kompatibilität zu gewährleisten.
Flatpak vereinfacht die Verteilung von Programmen, die nicht in den Standard-Repositories der Distributionen enthalten sind, durch die Erstellung eines universellen Containers, der Entwickelnden die Notwendigkeit erspart, separate Builds für jede Distribution zu erstellen. Benutzer, die Wert auf Sicherheit legen, können疑性质liche Anwendungen in einem Container ausführen und dadurch selektiven Zugriff auf notwendige Netzwerkfunktionen und Benutzerdaten ermöglichen. Für Benutzer, die an Neuheiten interessiert sind, ermöglicht es Flatpak, die neuesten Beta- und stabilen Versionen von Anwendungen zu installieren, ohne Änderungen am System vornehmen zu müssen. Beispielsweise werden Flatpak-Pakete für LibreOffice, GIMP, Inkscape, Kdenlive, Steam, 0 A.D., Visual Studio Code, VLC, Slack, Telegram Desktop, Android Studio usw. erstellt.
Um die Größe zu reduzieren, werden in das Paket nur die für die Anwendung spezifischen Abhängigkeiten aufgenommen. Grundlegende System- und Grafikbibliotheken (GTK, Qt, GNOME- und KDE-Bibliotheken usw.) werden als modulare standardisierte Runtime-Umgebungen bereitgestellt. Der entscheidende Unterschied zwischen Flatpak und Snap besteht darin, dass Snap die Komponenten der Basisumgebung und eine Isolierung auf der Grundlage von Systemaufruf-Filtern verwendet, während Flatpak einen vom System getrennten Container erstellt und mit umfangreichen Runtime-Sets arbeitet, die nicht als Pakete, sondern als standardisierte Systemumgebungen (z. B. alle für die Ausführung von GNOME- oder KDE-Anwendungen benötigten Bibliotheken) bereitgestellt werden.
Neben der standardisierten Systemumgebung (Runtime), die über ein spezielles Repository installiert wird, werden zusätzliche Abhängigkeiten (Bundle) geliefert, die für das Funktionieren der Anwendung erforderlich sind. Zusammen bilden „Runtime“ und „Bundle“ den Inhalt des Containers, wobei „Runtime“ separat installiert und sofort mit mehreren Containern verbunden wird, um eine Duplizierung gemeinsamer Systemdateien für die Container zu vermeiden.
In einem System können mehrere verschiedene „Runtime“-Umgebungen (GNOME, KDE) oder mehrere Versionen einer „Runtime“ (GNOME 50, GNOME 49) installiert werden. Der Container mit der Anwendung bezieht sich ausschließlich auf eine bestimmte „Runtime“, ohne Berücksichtigung einzelner Pakete, die die gewählte „Runtime“ bilden. Alle fehlenden Elemente werden zusammen mit der Anwendung verpackt. Beim Erstellen des Containers wird der Inhalt der „Runtime“ als der Abschnitt /usr gemountet, während das „Bundle“ im Verzeichnis /app montiert wird.
Die Ausstattung der „Runtime“ und der Anwendungscontainer erfolgt unter Verwendung der OSTree-Technologie, bei der das Abbild atomar aus einem git-ähnlichen Repository aktualisiert wird, was ermöglicht, Kontrollmethoden zur Versionsverwaltung auf die Komponenten der Distribution anzuwenden (zum Beispiel kann das System schnell auf einen früheren Zustand zurückgesetzt werden). RPM-Pakete werden über eine Schicht namens rpm-ostree in das OSTree-Repository übertragen.
Die selektive Installation und Aktualisierung von Paketen innerhalb der Arbeitsumgebung wird nicht unterstützt – das System wird nicht auf Ebene einzelner Komponenten, sondern vollständig aktualisiert, indem es atomar seinen Zustand ändert. Es stehen Mittel für die inkrementelle Anwendung von Aktualisierungen zur Verfügung, die eine vollständige Ersetzung des Images bei jeder Aktualisierung überflüssig machen.
Die gebildete isolierte Umgebung ist unabhängig von der verwendeten Distribution und hat bei ordnungsgemäßen Paketkonfigurationen keinen Zugang zu den Dateien und Prozessen des Benutzers oder des Hauptsystems. Zudem kann sie nicht direkt auf die Hardware zugreifen, außer über die Ausgabe von DRI. Die grafische Ausgabe und die Eingabeverwaltung werden durch das Wayland-Protokoll oder durch die Weiterleitung eines X11-Sockets realisiert. Die Interaktion mit der Außenwelt erfolgt über das DBus-Nachrichtensystem und eine spezielle API namens Portals.
Zur Isolierung wird eine Bubblewrap-Schicht und traditionelle Linux-Technologien der Container-Virtualisierung verwendet, die auf cgroups, Namespaces, Seccomp und SELinux basieren. Bei der Erstellung eines Pakets kann die Isolation deaktiviert werden, was von Entwicklern bestimmter Pakete genutzt wird, um vollen Zugriff auf das Dateisystem und alle Geräte im System zu erhalten.
Quelle: opennet.ru
