So arbeiten Sie mit Snap-Paketen unter Linux

Die Installation von Linux-Software über Snap-Pakete bietet eine elegante Lösung für das Problem der Abhängigkeitshölle, die oft zu Konflikten und dem Ausfall anderer Programme führen kann. Ursprünglich für Ubuntu konzipiert, sind Snap-Pakete mittlerweile eine beliebte Option auf vielen verschiedenen Linux-Distributionen.

Was genau sind Snap-Pakete?

In der Vergangenheit war die Softwareinstallation unter Linux nicht immer einfach. Oftmals stieß man auf fehlende oder veraltete Bibliotheken und Abhängigkeiten. Die Suche und Installation dieser fehlenden Ressourcen konnte dann wiederum Probleme mit anderen Anwendungen verursachen, die auf andere Versionen dieser Bibliotheken angewiesen waren. Ein ewiger Kreislauf von Reparatur und Bruch.

Moderne Paketverwaltungssysteme wie apt, dnf und pacman haben diese Situation zwar verbessert, aber Schwierigkeiten bleiben, wenn unterschiedliche Versionen derselben Anwendung benötigt werden oder wenn Anwendungen aufgrund inkompatibler Bibliotheksversionen kollidieren.

Eine Antwort auf diese Herausforderungen sind Systeme zur Anwendungsverpackung und -bereitstellung. Snappy ist ein weit verbreitetes Beispiel. Es baut auf dem Click-Paketierungs- und Bereitstellungssystem auf, das ursprünglich für die Ubuntu-Touch Initiative entwickelt wurde. Andere bekannte Systeme sind AppImage und Flatpak.

Diese Systeme verpacken eine Anwendung zusammen mit allen ihren Abhängigkeiten und anderen notwendigen Ressourcen in einer einzigen komprimierten Datei. Die Anwendung wird dann in einer Art „Mini-Container“ ausgeführt, einer Sandbox, die sie von anderen Anwendungen isoliert. Die Bibliotheken und Ressourcen, die die Anwendung benötigt, sind ausschließlich für sie zugänglich.

Da diese Anwendungen nicht im traditionellen Sinne installiert werden, gibt es keine Konflikte mit anderen Programmen, die auf unterschiedliche Versionen derselben Ressourcen angewiesen sind. Selbst Anwendungen, die widersprüchliche Bibliotheksversionen benötigen, können problemlos nebeneinander existieren, da jede in ihrer eigenen isolierten Umgebung arbeitet.

Aber wie werden diese Anwendungen behandelt, wenn sie nicht konventionell installiert sind? Die Paketdatei wird heruntergeladen, entpackt und als SquashFS virtuelles Dateisystem eingebunden. Dem Benutzer wird dann eine virtuelle Umgebung bereitgestellt. Dieser Prozess erfolgt im Hintergrund. Für den Anwender ist es lediglich so, als hätte man eine Anwendung installiert und könnte sie sofort benutzen.

Da jede Paketdatei alle benötigten Ressourcen enthalten muss, kann sie recht umfangreich sein. Es kommt auch vor, dass Ressourcen, die normalerweise nur einmal installiert werden müssten, wie MySQL oder Apache, dupliziert werden. Wenn zwei verschiedene Snap-Anwendungen die gleichen Ressourcen benötigen, bringt jede ihre eigene Version mit.

Dies ist jedoch der Kompromiss zwischen einfacher Installation und dem Vermeiden von Ressourcenkonflikten.

Installation von snapd

Snappy wurde mit Ubuntu 16.04 eingeführt. Wenn Sie diese oder eine neuere Version verwenden, ist es wahrscheinlich schon einsatzbereit. Auf dem Testsystem mit Manjaro 18.04 war es bereits installiert, aber unter Fedora 31 musste es manuell eingerichtet werden.

„snap“ ist der Name der Paketdateien und gleichzeitig der Befehl zur Interaktion mit ihnen. Der Snapd-Daemon, der ebenfalls „snapd“ heißt, muss installiert werden, falls Snappy noch nicht auf Ihrem Rechner vorhanden ist.

Um Snapd unter Fedora zu installieren, geben Sie folgenden Befehl ein:

sudo dnf install snapd

Für Manjaro verwenden Sie diese Befehle:

sudo pacman -Sy snapd
sudo systemctl enable --now snapd.socket

Mit dem Befehl `snap version` können Sie die Version des Snap-Clients, des Snapd-Daemons, die Seriennummer der Software, sowie Name und Release Ihrer Linux-Distribution und die Kernel-Version anzeigen.

Geben Sie dazu folgendes ein:

snap version

Installation von Snap-Paketen

Die Installation eines Snap-Pakets ist unkompliziert. Zunächst sucht man mit `snap` nach dem gewünschten Paket und installiert es anschließend.

Um nach dem Gimp-Bildeditor zu suchen und ihn zu installieren, geben Sie folgendes ein:

snap find gimp

Der Befehl `snap` sucht nach Übereinstimmungen mit dem Suchbegriff „gimp“ und listet die Ergebnisse auf. Es werden alle Treffer angezeigt, die den Suchbegriff enthalten oder erwähnen.

Um ein Paket zu installieren, verwenden Sie den Wert aus der Spalte „Name“, wie hier gezeigt:

sudo snap install gimp

Während des Downloads wird der Fortschritt in Prozent und durch einen Fortschrittsbalken im Terminal angezeigt. Nach Abschluss der Installation erscheint eine Meldung, die die erfolgreiche Installation des Pakets bestätigt.

Mit dem Befehl `df` können Sie die Kapazität und Nutzung der verschiedenen Dateisysteme auf Ihrem Linux-System anzeigen. Wenn wir die Ausgabe von `df` durch den `grep`-Befehl leiten und nach „gimp“ suchen, können wir den Eintrag für das Paket isolieren, das wir gerade installiert haben.

Geben Sie dazu folgendes ein:

df | grep gimp

Dies zeigt, dass das Snap-Paket als Dateisystem eingehängt wurde. Der Mountpunkt befindet sich im Snap-Verzeichnis: `/snap/gimp/252`. „252“ ist die Release-Nummer dieser Gimp-Version.

Das Dateisystem wird als `/dev/loop18` aufgeführt. Loop-Gerätedateien ermöglichen den Zugriff auf reguläre Dateien als Blockgeräte. Sie werden normalerweise zum Mounten von Dateisystemen in Disk-Images verwendet. In diesem Fall werden sie verwendet, um das SquashFS-Dateisystem innerhalb des Snap-Pakets zu mounten. Die „18“ bedeutet, dass dies die 18. `/dev/loop`-Gerätedatei ist, die auf diesem Linux-Rechner verwendet wird.

Mit dem Befehl `df` können wir dies schnell überprüfen. Mit der Option `-t` (Typ) beschränken wir die Ausgabe auf SquashFS-Dateisystemtypen.

Geben Sie dazu folgendes ein:

df -t squashfs

Die eingebundenen SquashFS-Dateisysteme werden angezeigt. Jedes wird von einer `/dev/loop`-Gerätedatei verwaltet, von denen es 18 gibt.

Jedes Dateisystem wird in einem Verzeichnis innerhalb des `/snap`-Verzeichnisses eingehängt. Dies bedeutet jedoch nicht, dass auf diesem Computer 18 verschiedene Snap-Pakete installiert sind. Es handelt sich um eine Ubuntu-Distribution, daher sind einige Snap-Pakete bereits vorinstalliert, und wir haben gerade ein weiteres hinzugefügt.

Zusätzlich werden bei der Installation von `snapd` einige Kern-Snap-Pakete installiert, um die Anforderungen anderer Snap-Pakete zu erfüllen.

Mit dem Befehl `snap list`, wie hier gezeigt, können Sie die installierten Snap-Pakete anzeigen:

snap list

Die Ausgabe war etwas breit, daher wird das Ende der Liste unten angezeigt.

Hier ist die gesamte Auflistung:

Name                 Version                    Rev   Tracking  Publisher    Notes
core                 16-2.43.3                  8689  stable    canonical*   core
core18               20200124                   1668  stable    canonical*   base
gimp                 2.10.18                    252   stable    snapcrafters -
gnome-3-26-1604      3.26.0.20191114            98    stable/…  canonical*   -
gnome-3-28-1804      3.28.0-16-g27c9498.27c9498 116   stable    canonical*   -
gnome-calculator     3.34.1+git1.d34dc842       544   stable/…  canonical*   -
gnome-characters     v3.32.1+git3.b9120df       399   stable/…  canonical*   -
gnome-logs           3.34.0                     81    stable/…  canonical*   -
gnome-system-monitor 3.32.1-3-g0ea89b4922       127   stable/…  canonical*   -
gtk-common-themes    0.1-28-g1503258            1440  stable/…  canonical*   -

Wie Sie sehen, sind 10 Snap-Pakete installiert, nicht 18. Diese 10 Pakete haben jedoch zu den 18 SquashFS-Dateisystemen geführt. Die Tabellenspalten sind ziemlich selbsterklärend, aber hier einige Erläuterungen:

Name: Der Name des installierten Snap-Pakets.
Version: Die Versionsnummer der Software im Snap-Paket.
Rev: Die Revisionsnummer des Snap-Pakets.
Tracking: Der Kanal, über den dieses Snap-Paket nach Updates sucht. Es gibt vier:
Stabil: Der Standardkanal. Er enthält, wie der Name schon sagt, die stabilsten Pakete.
Kandidat: Dieser Kanal ist weniger stabil, aber sehr nahe dran, da er Software auf Release-Kandidaten-Ebene enthält, die Code-vollständig ist. Sie durchläuft letzte Tests, bevor sie in den stabilen Kanal verschoben wird.
Beta: Dieser Kanal hat die Qualität eines späten Entwicklungszyklus, aber es kann nicht garantiert werden, dass er stabil ist.
Edge: Für frühe Build-Tester. Sie sollten diesen Kanal nicht für wichtige Arbeiten oder auf einem Produktionscomputer verwenden. Hier gibt es unfertigen Code und potenzielle Fehler!

Herausgeber: Die Person, das Unternehmen oder die Organisation, die das Snap-Paket veröffentlicht hat. Wenn es sich um einen verifizierten Herausgeber handelt (und Ihr Terminalfenster unterstützt Unicode), wird neben dem Namen des Herausgebers ein grünes Häkchen angezeigt. Wenn kein Häkchen angezeigt werden kann, sehen Sie ein Sternchen.

Hinweise: Hier werden alle Kommentare oder zusätzlichen Informationen angezeigt.

Die Snap-Kanäle

Mit der Option „info“ erhalten Sie eine Beschreibung eines Snap-Pakets.

snap info gtk-common-themes

Hier sehen Sie, welchen Kanal das Paket verfolgt und welche Softwareversionen in den Snap-Paketen in jedem der vier Kanäle verfügbar sind. In den meisten Fällen sollten Sie beim stabilen Kanal bleiben.

Ein Snap-Paket überprüft viermal täglich, ob eine neuere Softwareversion auf dem Kanal verfügbar ist, den es abonniert hat. Wenn Sie den Kanal eines Snap-Pakets ändern möchten, können Sie die Optionen `refresh` und `–channel` verwenden.

sudo snap refresh gtk-common-themes --channel=beta

Wenn eine neuere Softwareversion verfügbar war, wäre diese installiert worden, aber das war hier nicht der Fall. Das Snap-Paket verfolgt nun den Beta-Kanal. Sobald eine neue Beta-Version veröffentlicht wird, wird sie automatisch heruntergeladen und aktualisiert.

Mit der Option `–list` können Sie prüfen, ob Updates für installierte Snap-Pakete verfügbar sind.

sudo snap refresh --list

Sie werden informiert, wenn einer der Kanäle, die die Snap-Pakete auf Ihrem Computer verfolgen, neuere Softwareversionen enthält.

sudo snap refresh gtk-common-themes

Entfernen eines Snap-Pakets

sudo snap remove gimp

Der Snap-Spickzettel

Die Verwendung von Snap-Paketen ist sehr einfach. Hier ist eine Liste der wichtigsten Befehle:

Nach einem Paket suchen: snap find paketname
Ein Paket installieren: sudo snap install paketname
Alle installierten Pakete anzeigen: snap list
Informationen über ein einzelnes Paket erhalten: snap info paketname
Den Kanal ändern, den ein Paket für Updates verfolgt: sudo snap refresh paketname –channel=kanalname
Prüfen, ob Updates für installierte Pakete verfügbar sind: sudo snap refresh –list
Ein Paket manuell aktualisieren: sudo snap refresh paketname
Ein Paket deinstallieren: sudo snap remove paketname