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 |