Website-Suche

So erstellen Sie ein Flatpak-Paket


Wir haben bereits in einem früheren Tutorial über die Verwendung von Flatpak-Paketen gesprochen: Mit dieser Technologie verteilen wir universell Anwendungen, die zusammen mit ihren Abhängigkeiten verpackt sind und in einer Sandbox laufen, isoliert vom Rest des Systems. In diesem Tutorial sehen wir, wie Sie eine Anwendung in einem Flatpak erstellen und verteilen.

In diesem Tutorial lernen Sie:

  • So installieren Sie Flatpak und Flatpak-Builder auf den am häufigsten verwendeten Linux-Distributionen
  • Erstellen und Füllen einer Manifestdatei mit den erforderlichen Parametern
  • Erstellen, Installieren und Ausführen der erstellten Anwendung

Verwendete Softwareanforderungen und Konventionen

Installation der erforderlichen Software

Das erste, was wir tun müssen, um mit der Erstellung eines Flatpak-Pakets für eine Anwendung zu beginnen, ist die Installation der Software, die zum Erstellen und Ausführen von Flatpaks benötigt wird: flatpak und flatpak-builder. Wir können einen solchen Vorgang mit dem Paketmanager unserer bevorzugten Linux-Distribution durchführen. Auf Fedora müssen wir ausführen:

sudo dnf install flatpak flatpak-builder

Auf Debian oder einer der vielen Distributionen, die darauf basieren, stattdessen:

sudo apt-get update && sudo apt-get install flatpak flatpak-builder

Unter Archlinux können wir pacman verwenden, um die gleiche Operation durchzuführen:

sudo pacman -Sy flatpak flatpak-builder

In vielen Fällen hängt das flatpak-builder-Paket bereits von flatpak ab, so dass es überflüssig sein könnte, letzteres explizit anzugeben; Es sollte sowieso als Abhängigkeit installiert werden.

Erstellen eines Flatpaks: die Grundlagen

Der gesamte Prozess des Verpackens einer Anwendung in ein Flatpak basiert auf einer Manifestdatei. Eine Manifestdatei kann im YAML- oder JSON-Format geschrieben werden. In diesem Tutorial werden wir sehen, wie man ein Flatpak für ffmpeg erstellt: Für diejenigen unter Ihnen, die es nicht kennen, ist es ein vollständiges Framework, das zum Konvertieren und Streamen von Audio und Video verwendet werden kann. Die Manifestdatei muss Informationen wie die ID der Anwendung, die Laufzeit und das von ihr verwendete SDK, den Befehl, der zum Aufrufen der Anwendung nach der Erstellung verwendet werden soll, die Liste der Module, die zum Erstellen mit dem flatpak-builder-Paket verwendet wurden, und die Berechtigungen, die die Anwendung haben sollte, enthalten. In einem Moment werden wir uns diese Parameter im Detail ansehen, aber zuerst erstellen wir ein Verzeichnis für unser Projekt, wir nennen es ffmpeg-flatpak:

mkdir ffmpeg-flatpak

Erstellen und Auffüllen der Manifestdatei

Im Projektverzeichnis müssen wir unser Manifest erstellen. Wie benenne ich die Manifest-Datei? Die Manifestdatei sollte nach der Anwendungs-ID benannt werden: Jede Flatpak-Anwendung muss über eine eindeutige ID verfügen, die mit einem Reverse-DNS-Stil erstellt wird. Es besteht aus zwei Abschnitten:

  1. Vom Projekt kontrollierte Domäne
  2. Der spezifische Projektname

Die Anwendungs-ID für die Anwendung gnome-dictionary lautet z. B. org.gnome.Dictionary. Für dieses Tutorial werden wir die ID org.linuxconfig.FFmpeg verwenden, um unser Flatpak zu erstellen. In unserem Projektverzeichnis erstellen wir die org.linuxconfig.FFmpeg.yml Datei und beginnen mit dem Melden der ID der Anwendung als Wert des Parameters app-id:

app-id: org.linuxconfig.FFmpeg

Nach der Anwendungs-ID sollten wir die Laufzeit und die Laufzeitversion angeben, die von der Anwendung verwendet werden. Was ist es? Eine Runtime ist im Grunde die "Umgebung", in der die Anwendung ausgeführt wird, und enthält eine Reihe wichtiger Bibliotheken und Dienste. Derzeit stehen 3 Runtimes zur Verfügung:

  1. Frei verfügbar
  2. GNOM
  3. KDE

Die erste enthält eine Reihe von wesentlichen Bibliotheken und Diensten, die anderen beiden basieren darauf und erweitern sie um eine Reihe von Dienstprogrammen und Bibliotheken für die spezifischen Umgebungen, die sie repräsentieren.

Welche davon sollten wir als Beispiel nehmen? Da die Anwendung, die wir über Flatpak (ffmpeg) zu erstellen und zu verteilen versuchen, keine spezifischen Anforderungen an die Desktop-Umgebung hat, können wir die Verwendung der GNOME- oder KDE-Laufzeiten vermeiden und einfach org.freedesktop.Platform verwenden. In der Regel stehen viele Versionen einer Runtime zur Verfügung. In diesem Fall verwenden wir die Version 21.08 des Freedesktops. In der Manifestdatei wird die Laufzeitversion über den Parameter runtime-version angegeben:

app-id: org.linuxconfig.FFmpeg
runtime: org.freedesktop.Platform
runtime-version: '21.08'

Nach der Laufzeit müssen wir auch das passende SDK angeben. Was ist ein SDK? Jede Runtime, die wir oben gesehen haben, verfügt über ein passendes SDK, das alles enthält, was in der Umgebung enthalten ist, sowie zusätzlich Entwicklungstools und Paketheader. In unserem Fall verwenden wir das org.freedesktop.Sdk SDK:

app-id: org.linuxconfig.FFmpeg
runtime: org.freedesktop.Platform
runtime-version: '21.08'
sdk: org.freedesktop.Sdk

Die angegebene Runtime und das angegebene SDK werden nicht automatisch installiert, wir müssen dies manuell tun. Um sie nur für unseren Benutzer aus dem Flathub-Repository zu installieren, verwenden wir den folgenden Befehl:

flatpak install flathub --user org.feedesktop.Platform.ffmpeg-full//21.08 org.freedesktop.Sdk//21.08

Nachdem wir die app-id, die Runtime, die runtime-version und das SDK angegeben haben, sollten wir den Namen der Hauptbinärdatei der Anwendung angeben. Wir tun dies über den Befehlsparameter:

app-id: org.linuxconfig.FFmpeg
runtime: org.freedesktop.Platform
runtime-version: '21.08'
sdk: org.freedesktop.Sdk
command: ffmpeg

Die App-Module

Eine weitere sehr wichtige Sache, die wir in der Manifestdatei angeben müssen, ist die Liste der Module, die erstellt werden sollen. Das wichtigste Modul ist dasjenige, das der Anwendung selbst gewidmet ist (in diesem Fall ffmpeg), die (eventuellen) anderen sind ihren Abhängigkeiten gewidmet. Module werden unter dem modules-Parameter der Manifestdatei aufgeführt:

app-id: org.linuxconfig.FFmpeg
runtime: org.freedesktop.Platform
runtime-version: '21.08'
sdk: org.freedesktop.Sdk
modules:
  - name: ffmpeg
    sources:
      - type: archive
        url: https://www.ffmpeg.org/releases/ffmpeg-4.4.1.tar.xz
        sha256: eadbad9e9ab30b25f5520fbfde99fae4a92a1ae3c0257a8d68569a4651e30e02
    config-opts:
      - --enable-gpl
      - --enable-libmp3lame
      - --enable-libopus
      - --enable-libvpx
      - --enable-libx264
      - --disable-static
      - --enable-shared
      - --disable-doc

Lassen Sie uns analysieren, was wir im Manifest im Abschnitt modules hinzugefügt haben. Zuerst haben wir den Namen des Moduls, ffmpeg, angegeben. Wir haben dann das Quellenverzeichnis hinzugefügt, in dem wir verschiedene Parameter angegeben haben. Zunächst einmal die Art der Quelle, die eine der folgenden sein kann:

  • Archiv (wir verwenden dies für Quellen in tar-Archiven)
  • git (zum Klonen eines Git-Repositorys)
  • file (für lokale Dateien)
  • dir (für lokale Verzeichnisse)
  • Skript (Array von Shell-Befehlen)
  • shell (Array von Shell-Befehlen, die während der Quellextraktion ausgeführt werden)
  • Flicken
  • extra-data (zusätzliche Daten, die bei der Installation heruntergeladen werden müssen)

In unserem Fall haben wir archive als Quelltyp verwendet, da wir das Archiv mit dem ffmpeg-Quellcode herunterladen möchten. Mit dem URL-Schlüssel haben wir die URL des Archivs angegeben, und mit dem Parameter sha256 die Prüfsumme, die zur Überprüfung verwendet wird (die vollständige Liste der Parameter, die für einen Quelltyp verwendet werden können, finden Sie hier. Wir haben dann eine Liste von config-opts angegeben, die wir beim manuellen Erstellen der Anwendung an das ./configure-Skript übergeben würden.

Hinzufügen der Sandbox-Berechtigungen

Flatpak-Anwendungen werden in einer Sandbox ausgeführt, die vom Hauptsystem isoliert ist, und sind so konzipiert, dass sie so wenig Zugriff wie möglich auf den Host haben. Wenn die Anwendung, die wir verpacken, bestimmte Berechtigungen benötigt, müssen wir diese in der Manifestdatei angeben. In unserem Fall muss die Anwendung beispielsweise Dateien lesen und in das Host-Dateisystem schreiben. Berechtigungen werden als Liste unter dem Parameter finish-args angegeben:

app-id: org.linuxconfig.FFmpeg
runtime: org.freedesktop.Platform
runtime-version: '21.08'
sdk: org.freedesktop.Sdk
modules:
  - name: ffmpeg
    sources:
      - type: archive
        url: https://www.ffmpeg.org/releases/ffmpeg-4.4.1.tar.xz
        sha256: eadbad9e9ab30b25f5520fbfde99fae4a92a1ae3c0257a8d68569a4651e30e02
    config-opts:
      - --enable-gpl
      - --enable-libmp3lame
      - --enable-libopus
      - --enable-libvpx
      - --enable-libx264
      - --disable-static
      - --enable-shared
      - --disable-doc
finish-args:
  - --filesystem=home:rw

In diesem Fall haben wir die --filesystem=home:rw-Berechtigungen verwendet: Dies gewährt der gepackten Anwendung vollen Zugriff (Lesen und Schreiben) auf Dateien in unserem Home-Verzeichnis. Das könnte zu viel sein, ist aber für dieses Tutorial in Ordnung. Eine umfassende Liste der verfügbaren Berechtigungen, die in diesem Abschnitt angegeben werden können, finden Sie auf der entsprechenden Seite der offiziellen Dokumentation. Das Prinzip ist jedoch einfach: Geben Sie einer Anwendung die geringstmöglichen Rechte.

Erstellen der Anwendung

Zu diesem Zeitpunkt haben wir theoretisch alles, was wir brauchen, um das Flatpak zu erstellen, im Manifest. Wir öffnen ein Terminal in dem Verzeichnis, in dem sich die Manifestdatei befindet, und führen den folgenden Befehl aus:

flatpak-builder build org.linuxconfig.Ffmpeg.yml

Der Befehl flatpak-builder verwendet als erstes Argument das Verzeichnis, in dem der Build erfolgen soll, und als zweites Argument das Manifest der Anwendung. Wenn wir den Befehl jedoch mit unserem aktuellen Manifest starten, werden wir über einen Fehler benachrichtigt:

ERROR: libx264 not found

Warum ist das passiert? Da wir die Konfigurationsoption --enable-libx264 für ffmpeg im Manifest angegeben haben, sollten wir auch ein Modul hinzufügen, um die Bibliothek zu erstellen, die von ffmpeg benötigt wird. Lass uns das machen. Unser Manifest wird:

app-id: org.linuxconfig.FFmpeg
runtime: org.freedesktop.Platform
runtime-version: '21.08'
sdk: org.freedesktop.Sdk
modules:
  - name: x264
    sources:
      - type: git
        url: https://code.videolan.org/videolan/x264.git
    config-opts:
      - --enable-shared
  - name: ffmpeg
    sources:
      - type: archive
        url: https://www.ffmpeg.org/releases/ffmpeg-4.4.1.tar.xz
        sha256: eadbad9e9ab30b25f5520fbfde99fae4a92a1ae3c0257a8d68569a4651e30e02
    config-opts:
      - --enable-gpl
      - --enable-libmp3lame
      - --enable-libopus
      - --enable-libvpx
      - --enable-libx264
      - --disable-static
      - --enable-shared
      - --disable-doc
finish-args:
  - --filesystem=home:rw

In diesem Fall haben wir zum Klonen des Repositorys, das die x264-Quellen enthält, git als Quellentyp angegeben und die URL des Repositorys angegeben. Versuchen wir, die Anwendung erneut zu erstellen. Dieses Mal fügen wir dem Befehl die Option --force-clean hinzu, um das Build-Verzeichnis zu bereinigen, das bereits Dinge enthält (andernfalls würde ein Fehler generiert werden):

flatpak-builder build org.linuxconfig.FFmpeg.yml --force-clean

Dieses Mal sollte der Build-Prozess erfolgreich abgeschlossen werden.

Installieren und Ausführen der Anwendung

Sobald die Anwendung erstellt ist, können wir sie installieren. Alles, was wir tun müssen, ist, den folgenden Befehl auszuführen:

flatpak-builder --user --install build --force-clean org.linuxconfig.FFmpeg.yml

Nachdem die Installation durchgeführt wurde, können wir testen, ob die Anwendung wie vorgesehen funktioniert. Als Beispiel können wir versuchen, eine flac-Musikdatei in das vorbis-opus-Format zu konvertieren. Hier ist, was wir ausführen würden:

flatpak run org.linuxconfig.FFmpeg \
  -i /home/egdoc/bk/Music/ripped/ac_dc/highway_to_hell/01_highway_to_hell.flac \
  -acodec libopus \
  -b:a 192K \
  01_highway_to_hell.opus

Mit dem obigen Befehl haben wir die flac-Datei /home/egdoc/bk/Music/ripped/ac_dc/highway_to_hell/01_highway_to_hell.flac in opus (-acodec libopus) mit einer variablen Bitrate von 192K (-b:a 192K) konvertiert und als 01_highway_to_hell.opus gespeichert. Alles sollte korrekt funktioniert haben!

Schlüsse

Die Flatpak-Technologie bietet eine universelle Methode zur Verteilung von Anwendungen, die mit all ihren benötigten Abhängigkeiten verpackt sind. In diesem Tutorial haben wir gesehen, wie man ein Flatpak-Paket für eine Anwendung (ffmpeg) erstellt: Wir haben gesehen, wie man die benötigte Software auf den am häufigsten verwendeten Linux-Distributionen installiert, wie man die Datei "manifest" erstellt und mit allen benötigten Parametern füllt (konsultieren Sie das Handbuch flatpak-manifest für die vollständige Liste der Parameter, die in einem Manifest verwendet werden können), und schließlich, wie Sie die Anwendung erstellen, installieren und ausführen.

Verwandte Artikel: