snap
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 20.04 Focal Fossa
Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
- Technik und Sicherheit
- Installation
- Benutzung
- Programme starten
- Eigene snaps erstellen
- Probleme
- snapd deinstallieren inklusive aller insta...
- snapd deaktivieren
- Links
Snap Apps (kurz: snaps) sind ein Paketformat, das maßgeblich von Canonical entwickelt und konfliktfrei zur "normalen" Paketverwaltung installiert und genutzt werden kann.
Ursprünglich war es vor allem für den Einsatz im Server- bzw. Cloud-Umfeld, also auch für das Internet of Things gedacht, inzwischen ist es aber auch in den "normalen" Desktop-Distributionen zu finden.
Im Gegensatz zu DEB-Paketen, können snaps alle benötigten Dateien und Abhängigkeiten, wie z.B. Binaries, Bibliotheken und Konfigurationsdateien, enthalten. Alle Dateien sind nach der Installation in einem einzigen Verzeichnis vorhanden. snaps können teilweise oder komplett aktualisiert werden. Da jede Version eines snaps in ein neues Verzeichnis installiert wird, werden keine Dateien überschrieben und die alte Programmversion bleibt komplett erhalten. So kann man bei Problemen auf einfache Art und Weise die vorherige Version verwenden ("Rollback"). Dadurch, dass in jeder Version eines snap-Pakets alle benötigten Dateien enthalten sind, können mehrere Gigabyte an Daten im Verzeichnis /var/lib/snapd/snaps zusammenkommen. Man kann aber die Anzahl der alten Versionen begrenzen oder snaps manuell deinstallieren.
Sofern ein Entwickler keine aktuelle Version seines Programms zur Verfügung stellt, kann es vorkommen, dass veraltete und ggf. sicherheitsanfällige Programmteile installiert sind und verwendet werden - was aber grundsätzlich bei Programmen aus den Paketquellen auch passieren kann, zumindest bei Paketen aus universe oder PPAs.
Neben Snap-Apps gibt es Frameworks, welche ebenfalls als .snap-Paket angeboten werden. Diese beinhalten Ressourcen, die von anderen Anwendungen genutzt werden können. Für Frameworks gelten höhere Sicherheitsrichtlinien und können nur von Entwicklern hochgeladen werden, welche für Canonical arbeiten.
snaps können aus dem zentralen Snap-Store von Canonical bezogen werden. Die Installation von lokal heruntergeladenen snaps ist aber auch möglich.
Technik und Sicherheit¶
Die Grundlage, auf der alle snaps laufen, heißt einfach "core". Die ist die Laufzeitumgebung für snaps. Um die Verwaltung etc. der snaps kümmert sich der im Hintergrund laufende Dienst "snapd". snaps sind gegeneinander abgesichert und laufen in einer Umgebung Namens "snap confinement". Ein snap kann grundsätzlich nicht auf die Daten eines anderen snaps zugreifen. Technisch gesehen sind snaps ein Image mit squashfs-Dateisystem.
Außerdem unterliegen unter Ubuntu die snaps der Überwachung durch AppArmor. Diese verhindert unter Ubuntu und dessen Derivaten, dass snaps auf Systemverzeichnisse wie /var, /etc, /tmp oder /usr zugreifen können. Die Beschränkung bei /tmp verhindert z.B., dass ein per snap installiertes Gimp 2.10.8 auf Screenshots zugreifen kann, wenn diese per Default in /tmp abgelegt werden.
Im Dateisystem werden snaps im Verzeichnis /var/lib/snapd/snaps gespeichert. Die Dateien und Verzeichnisse, welche im snap enthalten sind, werden dann unterhalb von /snap eingebunden und werden somit auch bei Eingabe von mount
im Terminal angezeigt.
snaps aktualisieren sich im Hintergrund automatisch. Allerdings werden ältere Versionen nicht unbedingt automatisch deinstalliert, es wird eine einstellbare Zahl älterer Versionen erhalten, die gegebenenfalls manuell deinstalliert werden können.
Slots and Plugs¶
snaps können sich mit anderen snaps über "slots" und "plugs" verbinden. Ein Slot ist dabei eine Schnittstelle, die ein snap für andere snaps bereitstellen kann. Ein Plug (auf deutsch: Stecker) ist die Schnittstelle eines snaps, das in den Slot eines anderen Snaps "eingesteckt" werden kann.
Installation¶
Seit Ubuntu 16.04 sind die für snap benötigten Pakete bereits vorinstalliert. Ansonsten können diese aber auch nachträglich installiert werden[1]:
snapd
Befehl zum Installieren der Pakete:
sudo apt-get install snapd
Oder mit apturl installieren, Link: apt://snapd
Benutzung¶
Der zentrale Kommandozeilenbefehl[2] ist snap
, die allgemeine Syntax lautet[3]:
snap BEFEHL [OPTIONEN]
Je nach Befehl werden zusätzlich Root-Rechte[3] benötigt (z.B. zur Installation und Deinstallation von snaps).
snaps suchen¶
Mit dem Befehl
snap find SUCHBEGRIFF
werden alle im Snap-Store enthaltenen snaps, auf die der Suchbegriff SUCHBEGRIFF
passt, angezeigt. Der Suchbegriff muss aus mindestens einem Buchstaben bestehen, dass Suchen z.B. mit nur *
ist nicht möglich.
Mit dem Befehl snap find
ist es leider nicht möglich, sich alle verfügbaren snaps anzeigen zu lassen. Dies ist aber z.B. online über die Webseite snapcraft.io 🇬🇧 möglich.
snaps installieren¶
Das Installieren von snaps erfolgt mit einem Befehl:
sudo snap install SNAPNAME
So würde SNAPNAME
aus dem Snap-Store installiert.
Die Installation von lokal heruntergeladenen snaps funktioniert genauso, allerdings ist hier zwingend die Option --dangerous
erforderlich sofern vorher keine passende Signatur installiert wurde. Selbstverständlich sollte man dies nur tun, wenn man dem Ursprung der .snap-Datei vertraut. Um ein manuell heruntergeladenes snap zu installieren wechselt man ins Verzeichnis, in dem die Datei liegt und führt den Befehl
sudo snap install NAME_DER_SNAPDATEI.snap --dangerous
aus.
snaps aus anderen Channels installieren¶
Mit snap ist es möglich, snaps aus verschiedenen Channels (auf Deutsch: Kanälen) zu installieren - was natürlich voraussetzt, dass der Entwickler auch verschiedene Versionen seines snaps bereit stellt.
Standardmäßig wird der Channel stable
benutzt, welche eine stabile Version des Programms enthält.
Einige mögliche weitere Kanäle sind:
sudo snap install SNAPNAME --beta #für den Beta-Channel sudo snap install SNAPNAME --edge #für den Channel mit der neuesten (nicht stabilen) Version
Eine Übersicht über alle Channels gibt der Befehl
snap install --help
snaps im devmode Modus installieren¶
Wie oben bereits beschrieben greifen bei snaps diverse Sicherheitsmechanismen. Um diese für ein snap außer Kraft zu setzen, dient die Option --devmode
:
sudo snap install SNAPNAME --devmode
Wie der Name bereits sagt, ist dies interessant, wenn man eigene snaps entwickelt und sollte nicht aus Spaß gemacht werden. Verstöße gegen die Sicherheitmechanismen werden in /var/log/syslog geloggt. --devmode
impliziert automatisch auch die Option --dangerous
.
snaps aktualisieren¶
Der Befehl refresh
aktualisiert alle snaps:
sudo snap refresh
Man kann auch gezielt einzelne snaps aktualisieren. So würde
sudo snap refresh SNAPNAME
nur den snap SNAPNAME
aktualisieren. Dies funktioniert allerdings nur mit snaps, die aus dem Snap-Store installiert wurden. Eine regelmäßig Prüfung auf Aktualisierungen erfolgt auch regelmäßig im Hintergrund. Der Aufruf von
snap refresh --time
gibt aus, wann zuletzt automatisch nach Aktualisierungen gesucht wurde und für wann die nächste Suche terminiert ist. Zeitpunkt und Häufigkeit für die Suche können eingestellt werden, siehe offizielle Dokumentation 🇬🇧.
Installierte snaps anzeigen¶
Der Befehl
snap list
listet alle installierten snaps auf. Dabei werden standardmäßig Name, Version, Revision, Entwickler und Notizen des snaps angezeigt.
Anzahl der installierten Versionen begrenzen¶
Bei der Installation einer neueren Version eines snap-Pakets werden, wie oben erwähnt, alte Versionen nicht gleich automatisch entfernt. Standardmäßig wird eine nicht verwendete Version erhalten. Man kann aber die Anzahl der älteren Versionen, die behalten werden sollen, einstellen.
Die aktuelle Einstellung kann über den Befehl
sudo snap get system refresh.retain
abgefragt werden. Gibt dieser Befehl einen Fehler aus, so wurde der Wert noch nicht angelegt und der Default von 2 (eine nicht verwendete Version) wird verwendet.
Ein Änderung des Werts erfolgt über folgenden Befehl
sudo snap set system refresh.retain=2
Damit würde die Anzahl der Versionen auf 2 beschränkt (aktuelle und eine nicht verwendete), was gleichzeitig der minimale Wert ist. Ein Wert von 1 wird nicht akzeptiert. Ändert man den Wert von einem höheren auf einen niedrigeren, also z.B. von 4 auf 2, werden dann die beiden ältesten Version nicht direkt automatisch entfernt. Dies geschieht erst bei der nächsten Aktualisierung.
snaps deinstallieren¶
Zur Deinstallation dient der Befehl remove
. mit
sudo snap remove SNAPNAME
würde der snap SNAPNAME
entfernt.
Um gezielt ältere installierte Versionen eines snaps zu deinstallieren muss dessen Revision mit angegeben werden. Der Befehl snap list
zeigt nur die neueste (aktuell genutzte) Revision an, alle installierten Revisionen bekommt man über den Befehl
snap list --all
Eine Beispielausgabe kann so aussehen:
snap list --all Name Version Rev Tracking Developer Notes core 16-2.32.5 4486 stable canonical core,disabled core 16-2.32.8 4650 stable canonical core gnome-calculator 3.26.0 154 stable/… canonical disabled gnome-calculator 3.28.1 167 stable/… canonical -
Hier sind zwei Revisionen von core
und zwei Revisionen des gnome-calculator
installiert. Die ältere gnome-calculator
Revision würde über den Befehl
snap remove --revision 154 gnome-calculator
entfernt.
Zu älterer Version zurückkehren¶
Funktioniert eine neuere Version eines snaps nicht wie gewünscht oder hat Fehler, kann man zu einer älteren Version zurückkehren. Das funktioniert aber nur, wenn diese noch lokal installiert ist! Es ist nicht möglich, eine ältere Version aus dem Snap-Store zu installieren.
Der Befehl
snap revert SNAPNAME
würde das snap SNAPNAME
auf die vorherige Version zurück setzen. Als Ausgabe erhält man dann z.B.
SNAPNAME reverted to 1.9.4
Verlauf anzeigen¶
Der Befehl
snap changes
zeigt den Verlauf der Installationen, Deinstallationen etc. von snaps ein. Im folgenden ist eine Beispielausgabe gezeigt:
ID Status Spawn Ready Summary 103 Done 2018-03-17T17:53:47Z 2018-03-17T17:53:47Z Refresh all snaps: no updates 104 Done 2018-03-18T09:49:58Z 2018-03-18T09:49:58Z Refresh all snaps: no updates 105 Done 2018-03-18T10:35:08Z 2018-03-18T10:35:08Z Revert "go" snap 106 Done 2018-03-18T10:36:29Z 2018-03-18T10:36:29Z Revert "go" snap 107 Done 2018-03-18T10:37:01Z 2018-03-18T10:37:02Z Refresh "go" snap 108 Done 2018-03-18T10:56:17Z 2018-03-18T10:56:18Z Remove "go" snap 109 Done 2018-03-18T10:57:46Z 2018-03-18T10:57:47Z Remove "core" snap 110 Done 2018-03-18T11:01:07Z 2018-03-18T11:01:07Z Refresh all snaps: no updates
Berechtigungen¶
Slots und Plugs anzeigen und verbinden¶
Wie im Abschnitt Technik und Sicherheit bereits erwähnt, kennt snap das Konzept von Slots und Plugs. Um sich alle verfügbaren Slots (also Schnittstellen, mit denen sich snaps verbinden können) anzeigen zu lassen und zu sehen, welche Plugs welches snaps bereits verbunden sind, dient der Befehl
sudo snap connections
Die Ausgabe sieht z.B. so aus:
Slot Plug :account-control - :accounts-service - :alsa - :autopilot-introspection - :avahi-control - :avahi-observe - :bluetooth-control - :bluez - :broadcom-asic-control - :browser-support gnome-characters :calendar-service - ... gtk-common-themes:icon-themes gnome-calculator,gnome-characters,gnome-logs,gnome-system-monitor gtk-common-themes:sound-themes gnome-calculator,gnome-characters,gnome-logs,gnome-system-monitor ...
Slots, die mit einem Doppelpunkt :
sind solche, die von core bereitsgestellt werden. In der obigen Ausgabe ist z.B. das snap gnome-characters
mit dem Slot browsers-support
verbunden.
Normalerweise werden die notwendigen Verbindung von Slots und Plugs automatisch hergestellt. Sollte dies nicht der Fall sein, kann man dies manuell erledigen:
sudo snap connect MAME_DES_SNAP slot:plug
Zu beachten ist, dass man nicht die Plugs beliebiger snaps mit jedem Slot verbinden kann, diese muss in der Konfigurationsdatei des snaps explizit erlaubt sein. Die Konfigurationsdatei findet man unter /snap/NAME_DES_SNAPS/current/meta/snap.yaml, die erlaubten Plugs findet man im Abschnitt apps:plugs:
Um die Verbindung wieder zu lösen, dient der Befehl
sudo snap disconnect NAME_DES_SNAP slot:plug
Eine ausführlichere Einführung und Erklärung ist in der Dokumentation in der Sektion Interface Management 🇬🇧 zu finden.
Rechte verwalten (Interfaces)¶
Achtung!
Fehlende Berechtigungen können die Funktionsweise eines Programms einschränken oder es gänzlich unbrauchbar machen. Bei der Installation erteilte Rechte sollten deshalb nicht entzogen werden.
Über Ubuntu Software lassen sich die Berechtigungen installierter snaps anzeigen und bearbeiten. Auf der Übersichtsseite eines snaps erreicht man dies über die Schaltfläche Permissions. Die beiden Bilder zeigen dies am Beispiel des vorinstallierten Snaps für den Ubuntu Store.
Dort sieht man anschließend die bereits gewährten Rechte und kann zusätzliche Rechte erteilen oder entziehen.
Die Informationen stehen ebenfalls auf der Kommandozeile zur Verfügung:
$ snap interfaces NAME_DES_SNAP
Hinweis:
Bei fehlendem Schreibzugriff auf eingehängte Partitionen und externe Medien sollte das Recht lesend und schreibend auf entfernbare Speichermedien zuzugreifen gewährt werden.
Programme starten¶
Programme, die via snap
installiert wurden, lassen sich normalerweise wie alle anderen Programme auch starten. Unter Ubuntu mit Unity tauchen diese z.B. in der Dash auf.
Sollte dies nicht der Fall sein - was z.B. bei snaps passieren kann, die manuell lokal und nicht über das zentrale Snap-Store installiert wurden, dann kann man auch ins Verzeichnis /snap/bin/ wechseln und das Programm dann von dort manuell starten.
Eigene snaps erstellen¶
Es ist auch möglich, eigene snaps zu erstellen. Dazu dient das Programm snapcraft 🇬🇧.
Probleme¶
Problematisch wird gesehen, dass snap im Homeverzeichnis ein Verzeichnis ~/snap anlegt 🇬🇧 (anstelle eines sonst üblichen versteckten Verzeichnisses: ~/.snap), in dem es Konfigurationsdateien der installierten Software ablegt. Das hat zur Folge, dass mittels eines snaps installierte Software ihre Konfigurationsdateien auch in diesem Verzeichnis (~/snap) ablegt bzw. von dort lädt, anstatt in/von dem bisherigen Speicherort der Konfigurationsdateien. Das kann dazu führen, dass bei einem Systemupgrade die nun mittels eines snaps installierten Programme die vorhandenen Konfigurationsdateien, die von der gleichen Software allerdings ohne snap angelegt wurden (bspw. Profile von Thunderbird, in denen E-Mails, Adressbücher etc. gespeichert sind), nicht finden.
snapd deinstallieren inklusive aller installierten snaps¶
Möchte man snap inkl. aller installierten snaps deinstallieren, nutzt man den Befehl:
sudo apt purge snapd
Im Gegensatz zu sudo apt remove snapd
werden mit obigem Befehl auch alle installierten snaps inkl. aller Revisionen deinstalliert. Zusätzlich muss aber trotzdem noch im Homeverzeichnis das Verzeichnis snap inklusive der Unterverzeichnisse manuell gelöscht werden:
rm -fr ~/snap
snapd deaktivieren¶
Möchte man den Dienst nicht ganz deinstallieren sondern nur deaktivieren, müssen folgende systemd/Units mit dem Werkzeug systemctl und administrativen Rechten abgestellt werden:
sudo systemctl disable snapd.service sudo systemctl disable snapd.socket sudo systemctl disable snapd.seeded.service
Nach einem Neustart werden die Änderungen übernommen und bei Bedarf kann man den Dienst dann immer noch manuell starten:
sudo systemctl start snapd.service
Um das Deaktivieren rückgängig zu machen, muss in den oben genannten drei Befehlen das disable
durch enable
ersetzt werden.
Links¶
Offizielle Dokumentation 🇬🇧 zu snaps
Snaps on classic Ubuntu Q&A with Olli Ries 🇬🇧 - YouTube Video
Transactional Updates 🇬🇧 - Erklärung, wie die Verwaltung der verschiedenen Versionen eines snaps funktioniert