ubuntuusers.de

snap

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


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.

Snap ist ein Paketformat, das maßgeblich von Canonical entwickelt und konfliktfrei neben DEB-Paketen aus normalen Paketverwaltung installiert und genutzt werden kann; es ist für Ubuntu und auch für viele andere Linux-Distributionen 🇬🇧 verfügbar.

Eine in Form eines Snap-Pakets verteilte Applikation bezeichnet man ebenfalls kurz als "Snap".

Ursprünglich waren Snaps vor allem für den Einsatz im Server- bzw. Cloudumfeld und auch für das Internet of Things gedacht. Inzwischen ist es aber auch in den Desktopversionen zu finden, und über Snaps lassen sich auch Programme mit grafischer Benutzeroberfläche, Anwendungen für die Kommandozeile, Umgebungen für Programmiersprachen etc. installieren. Der Vorteil von Snaps ist, dass aktuelle Versionen von Anwendungssoftware installierbar sind, auch wenn die Linuxdistribution – wie Ubuntu und dessen offizielle Derivate – eine "fixed release distribution" ist, d.h. bei Paketen aus den offiziellen Paketquellen gibt es normalerweise keine Versionssprünge.

Snaps können aus dem zentralen Snap-Server bezogen werden, welcher von Canonical betrieben wird. Alternative Server gibt es zur Zeit nicht. Die Installation von lokal heruntergeladenen Snaps ist aber grundsätzlich auch möglich.

Dieser Artikel beschreibt nach den Grundlagen den praktischen Umgang mit Snaps unter Verwendung des dafür vorgesehenen Dienstprogramms snap.

snapd, der Client-Dienst, der für Snap(s) zuständig ist, ist größtenteils in Go implementiert, quelloffen und steht unter GPL-3.0 Lizenz.

Technik und Sicherheit

Die Grundlage, auf der alle Snaps laufen, heißt einfach "core". Dies ist eine Laufzeitumgebung für Snaps, welche ebenfalls als Snap installiert ist. Die Laufzeitumgebung core ist ein minimales Betriebssystem auf Basis von Ubuntu 16.04; es gibt aber inzwischen weitere Versionen core18, core20, core22 usw., welche aus neueren Versionen von Ubuntu LTS abgeleitet wurden. Bei der Installation eines Snaps wird automatisch auch die jeweilig benötigte Version der Laufzeitumgebung besorgt, wenn diese noch nicht installiert ist.

Um die Verwaltung etc. der Snaps kümmert sich der im Hintergrund laufende Dienst namens snapd, welcher selbst auch als Snap installiert ist.

Ausserdem ist immer auch eine Applikation bare installiert, die gar nichts macht, aber von anderen Snaps als Testobjekt verwendet werden kann.

Die Installation und Verwaltung von Snaps erfolgt über den Kommandozeilenbefehl snap. Snaps können alternativ auch über Gnome-Software bzw. seit Ubuntu 20.04 über den Snapstore installiert werden.

Aufbau, Ausführung, Speicherbedarf

Technisch gesehen sind Snaps eine einzelne Datei, die ein SquashFS Dateisystem beinhaltet, welches wiederum das Programm, die benötigten Bibliotheken, Man-Pages etc. enthält. Beim Systemstart wird die jeweils aktuelle Version aller aktiven Snaps eingehängt, der Einhängepunkt ist das Verzeichnis /snap/ 🇬🇧 mit der Struktur /snap/NameDesSnaps/Versionsnummer.

Wird das im Snap enthaltene Programm aufgerufen, werden transparent zur Laufzeit die benötigten Dateien aus dem Snap entpackt, ins RAM geladen und ausgeführt. Dadurch könnte es vorkommen, dass manche Snaps langsamer starten als über die Paketverwaltung installierte Programme, welche unkomprimiert gespeichert sind. Dies hängt letztendlich maßgeblich von der Anzahl der zu entpackenden Dateien und der Geschwindigkeit des Prozessors ab.

Da alle Snaps auf der minimalen Laufzeitumgebung core laufen, bringen Snaps in der Regel alle Abhängigkeiten (Dateien, Bibliotheken etc.) mit, die sie benötigen. Eine Ausnahme sind Bibliotheken von Desktopumgebungen wie z.B. Gnome. Diese sind als separates Snap verfügbar, welches von anderen Snaps genutzt werden kann.

Snaps können, müssen aber nicht größer sein als entsprechende DEB-Pakete. Gespeichert sind alle Snaps unter /var/lib/snapd/snaps. Die Struktur für die Namen der jeweiligen Dateien ist NameDesSnaps_Versionsnummer.snap. Den belegten Platz auf dem Laufwerk eines oder mehrerer Snaps kann man mittels du mit den folgenden Befehlen ermitteln:

du -h /var/lib/snapd/snaps/NameDesSnaps_Versionsnummer.snap    # für ein bestimmtes Snap
# bzw.
du -hc /var/lib/snapd/snaps/NameDesSnaps_*.snap                # für alle Versionen eines bestimmten Snaps
# bzw.
du -hc /var/lib/snapd/snaps/*.snap                             # für alle Snaps 

Im Gegensatz zu Programmen, die aus der normalen Paketverwaltung installiert werden, können bei Snaps mehrere Versionen desselben Programms installiert sein. So ist es auch möglich, ältere Versionen eines Programms oder auch Beta- oder Entwicklerversionen zu nutzen. Letztere aber nur, wenn die Entwickler die Beta- oder Entwicklerversion auf https://snapcraft.io 🇬🇧 zur Verfügung stellen. Snaps aktualisieren sich im Hintergrund automatisch, dabei bleibt bei Ubuntu nach der Aktualisierung (mindestens) eine ältere Version erhalten.

Abschottung von Snaps: Confinements

Snaps sind untereinander und gegen das System grundsätzlich abgeschottet. Die Snaps laufen in einem "Confinement" (deutsch: Einsperrung, Haft; sinngemäß übersetzt: eingeschränkter Raum). Zur Abschottung der Snaps wird primär auf AppArmor gesetzt. Der Zugriff von einem Snap auf andere (z.B. damit Snap A eine Bibliothek von Snap B nutzt) ist ebenfalls grundsätzlich unterbunden – kann aber bei Notwendigkeit gegebenenfalls manuell hergestellt werden.

Snaps kennen drei verschiedene Confinements:

  • strict: Der strikte Modus ist die Voreinstellung für alle Snaps. Es gelten alle oben genannten Einschränkungen. Dem Snap können aber über die vorhandenen Schnittstellen gezielt Rechte eingeräumt werden.

  • classic: Im klassischen Modus verhält sich das Snap wie ein aus den Paketquellen installiertes Programm, d.h. das via Snap ausgeführte Programm darf alles, was die Rechte des Nutzers, der das Snap ausführt, zulassen. Wenn ein Snap im classic-Modus installiert werden muss, muss der Entwickler dies explizit deklarieren, wenn er das Snap nach snapcraft.io hochlädt. Snaps, die den classic-Modus benötigten, bekommen einen zusätzlich, manuellen Review-Prozess, bevor diese bei snapcraft.io veröffentlicht werden.

  • devmode: Der devmode (devmode: Kurzform für "developer mode", deutsch "Entwicklermodus") ist primär für Entwickler zum Testen und Debuggen von Snaps gedacht. Normale Snaps aus dem stable-Kanal lassen sich sowieso nicht im devmod installieren. Der Devmod ist nur für Snaps aus dem Beta- oder Developmentkanal möglich.

Das voreingestellte Confinement der Installation kann man über den Befehl[2]

snap debug confinement 

im Terminal abfragen. Als Ausgabe sollte man normalerweise strict erhalten.

Detailliertere Erklärungen findet man im Blogartikel Demystifying Snap Confinement 🇬🇧.

Schnittstellen: Interfaces, Slots und Plugs

Snaps können über "Interfaces" (auf Deutsch: Schnittstellen) mit Hilfe von "slots" (auf Deutsch: Steckplätze) und "plugs" (deutsch: Stecker) gezielt mit Rechten (wie z.B. dem Zugriff auf das Verzeichnis /home) ausgestattet werden.

Es gibt eine ganze Reihe von Standardschnittstellen 🇬🇧, welche Snaps zur Verfügung stehen. Normalerweise legt der Ersteller eines Snaps fest, welche Schnittstellen benötigt und vom Snap genutzt werden. Die Berechtigungen können aber auch manuell abgefragt und geändert werden – was aber in der Regel nicht nötig ist.

⚓︎ Des Weiteren können Snaps ihrerseits Slots anbieten, an denen sich andere Snaps mit Plugs anschließen können. Beispiele dafür sind z.B. das Snap gnome-3-28-1804 oder auch gtk-3-themes. Diese Snaps stellen Schnittstellen bereit, die Programmen für den Gnomedesktop Zugriff auf die notwendigen Bibliotheken und Themes geben, so dass nicht jedes Snap die komplette Desktopumgebung mitbringen muss. Es gibt auch ein Snap für das KDE-Framework, welches die Schnittstellen für KDE-basierte Programme bereit stellt.

Varianten von Snaps: Tracks und Channels

Snaps kennen weiterhin das Konzept von "Tracks" und "Channels. Ein Track ist dabei eine Variante des Programms für einen bestimmten Einsatzzweck. Die Standardvariante, welche immer existieren muss, ist dabei immer der Track "latest" (deutsch: neuste). Ob es noch weitere Varianten gibt, hängt vom Entwickler ab, der die Snaps packt. Beim Snap Firefox von Mozilla gibt es beispielsweise noch den Track "esr" des Browsers, mit dem der Extended Support Release 🇬🇧 statt der aktuellen Version installiert wird.

Innerhalb eines Tracks gibt es noch verschiedene Channels (auf deutsch: Kanäle) zur Unterscheidung des Entwicklungsstandes:

  • stable: enthält die aktuelle, stabile Version des Programms

  • candidate: enthält den Release Candidate, der die nächste, stabile Version des Programms werden soll

  • beta: enthält die Betaversion des Programms

  • edge: enthält die neueste, ggf. instabile Entwicklungsversion des Programms.

Den Kanal "stable" gibt es für jedes Snap. Ob in einem oder mehreren der anderen Kanäle eine anderer Stand des Programms bereit steht, hängt vom Entwickler bzw. dem Bereitstellenden des Snaps an.

Per Voreinstellung wird bei der Installation eines Snaps immer die Version aus "latest/stable" installiert, also die aktuelle stabile Version.

Bezugsquelle: snapcraft.io

Snapcraft.io 🇬🇧 ist der zentrale, von Canonical betriebene Server, von dem Snaps installiert werden. Grundsätzlich kann jeder Snaps bauen und, nach einer Registrierung bei snapcraft.io, dort mit dem gleichnamigen Kommandozeilenwerkzeug 🇬🇧 hochladen und zur Verfügung stellen. Vor der Veröffentlichung eines Snaps wird es automatisiert geprüft; Details dazu sind jedoch nicht bekannt. D.h. wenn man ein Snap installiert, vertraut man auch darauf, dass der Bereitstellende des Snaps keine Schadsoftware u.ä. eingebaut hat. Vom Prinzip her ist es also dasselbe Vertrauen, dass man auch beim Installieren von Fremdpaketen, Fremdsoftware in Form von Binaries, Installation von Software aus anderen Quelle (wie z.B. PyPi 🇬🇧, NPM 🇬🇧), Einbinden von Fremdquellen etc. hat. Durch die Sicherheitsmechanismen von Snaps ist es allerdings schwieriger bis unmöglich, dass Snaps das System korrumpieren oder unbrauchbar machen – zumindest dann, wenn sie im Confinement "strict" installiert werden.

Einige Snaps sind bei snapcraft.io als besonders vertrauenswürdig gekennzeichnet, nämlich solche, die direkt von einem verifizierten Upstreamentwickler bereit gestellt werden. Dazu gehören z.B. Mozilla mit dem Firefox, Snaps von Microsoft, die Snaps VLC und Inkscape sowie die von Canonical bereitgestellten wie z.B. Chromium. Verifizierte Upstreamentwickler erkennt man in der Ausgabe von "snap info NameDesSnaps" am grünen Häkchen am Ende der Zeile "Publisher". Dieses grüne Häkchen sieht man auch rechts neben dem Entwicklernamen, wenn man die Seite des Snaps auf "https://snapcraft.io/NameDesSnaps" aufruft.

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

In den Ubuntu Paketquellen wird immer die neusten, stabile Version bereitgestellt, und zwar für alle Ubuntu Versionen. Das heißt, dass auch neue Befehle, funktionelle Erweiterungen hinzu kommen könnten, wenn ein Update für das Paket installiert wird.

Dienstprogramm snap benutzen

Mit dem Dienstprogramm für die Kommandozeile[2] snap kann man Snaps installieren, konfigurieren, aktualisieren und entfernen. Allgemeine Syntax:

snap BEFEHL [OPTIONEN] 

Je nach Befehl werden zusätzlich Root-Rechte[3] benötigt (z.B. zur Installation und Deinstallation von Snaps).

Der Befehl help listet alle Befehle auf:

snap help 

Detaillierte Hilfe inkl. der jeweils möglichen Optionen zu einem BEFEHL zeigt dieser Befehl an:

snap help BEFEHL 

Man kann auch die Manpage des Programms lesen:

man snap 

Die wichtigsten aus den ca. 50 Befehlen werden anschließend vorgestellt.

Installierte Snaps anzeigen

Der Befehl

snap list 

listet die installierten Snaps auf. Dabei werden standardmäßig Name, Version, Revision, Track/Channel, Entwickler, und Anmerkungen des Snaps angezeigt. Es werden jedoch nur die neueste (aktuell genutzte) Revision an, alle installierten Revisionen bekommt man durch Angabe der Option --all:

snap list --all 

Eine Beispielausgabe kann so aussehen:

snap list --all
Name                  Version    Rev   Tracking          Developer   Notes
bare                  1.0        5     latest/stable     canonical✓  base
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✓  -
snapd                 2.58.2     18357 latest/stable     canonical✓  snapd

Hier sind zwei Revisionen von core und zwei Revisionen des gnome-calculator installiert.

Snaps suchen

Mit dem Befehl

snap find SUCHBEGRIFF(e) 

werden alle auf snapcraft.io enthaltenen Snaps, auf die der Suchbegriff SUCHBEGRIFF passt, angezeigt. Der Suchbegriff muss aus mindestens einem konkreten Zeichen bestehen, Suchen mit Wildchars wie z.B. * oder mit regulären Ausdrücken ist nicht möglich. Man kann mehrere Suchbegriffe angeben, die dann alle gemeinsam zutreffen.

Mit diesem Befehl kann man sich leider nicht alle verfügbaren Snaps anzeigen lassen. Dies ist aber z.B. online über die Webseite snapcraft.io 🇬🇧 möglich.

Informationen zu einem Snap anzeigen

Mit dem Befehl

snap info NamesDesSnaps 

werden detaillierte Information zum Snap NameDesSnaps angezeigt. Hier ist auch auflistet, welche Varianten des Programms in den Tracks und Channels des Snaps verfügbar sind.

ein Snap herunterladen

Normalerweise ist der separate Download eines Snaps nicht erforderlich, das dies bei der Installation automatisch erfolgt. Wer jedoch dauerhaft mit einer bestimmten Version des Snaps arbeiten will, auch nachdem bereits eine neuere Version auf dem Snap-Server verfügbar ist, muss die alte Version selber als Datei aufbewahren und diese dafür zur rechten Zeit herunter laden. Beispiel scrcpy mit Ausgabe:

snap download scrcpy 
Snap "scrcpy" holen
Zusicherungen für "scrcpy" werden abgerufen
Snap installieren mit:
   snap ack scrcpy_399.assert
   snap install scrcpy_399.snap

Man erhält zwei Dateien, aus denen man das Programm mit den genannten Befehlen mit Root-Rechten[3] installieren kann.

ein Snap installieren

Das Installieren eines Snaps erfolgt mit einem Befehl:

sudo snap install NamesDesSnaps 

. Per Voreinstellung wird die Version aus latest/stable ausgewählt.

Um eine andere Programmversion zu installieren – sofern der Entwickler diese als Snap zur Verfügung stellt – muss bei der Installation zusätzlich der Channel und ggf. der Track angegeben werden.

Allgemeine Syntax:

sudo snap install NameDesSnaps --TRACK/CHANNEL 

. Erfolgt keine Angabe des Tracks, wird automatisch latest benutzt.

Beispiele:

  • sudo snap install vlc --beta 

    installiert die Betaversion von VLC aus dem Track latest.

  • sudo snap install firefox --channel=esr/candidate 

    installiert den Release Candidate der ESR-Version des Firefox.

Andere Installationsmethoden

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 des Snaps vertraut. Um ein manuell heruntergeladenes Snap zu installieren, führt man im Verzeichnis, in dem die Datei liegt diesen Befehl aus:

sudo snap install NAME_DER_SNAPDATEI.snap --dangerous 

Der bessere Weg führt aber über vorherige Aktivierung der beim Download erhaltenen Signatur:

sudo snap ack NAME_DER_SNAPDATEI.assert
sudo snap install NAME_DER_SNAPDATEI.snap 

Wie man mehrere Versionen desselben Programms als Snaps parallel installieren kann ist im Howto/snaps parallel installieren und nutzen erklärt.

Snaps können auch nur testweise installiert werden. Information dazu sind im Howto/snap testen zu finden.

Anzahl der installierten Versionen begrenzen

Bei der Installation einer neueren Version eines Snaps werden nicht alle alten Versionen automatisch entfernt. Standardmäßig wird bei Ubuntu Desktops Servern die vorherige aktuelle Version behalten. Dies lässt sich auch nicht reduzieren, d.h. es ist nicht möglich, nur die aktuelle Version des Snaps zu haben. Bei Ubuntu Core 🇬🇧 werden drei Versionen des Snaps behalten.

Man kann aber die Anzahl der älteren Versionen, die behalten werden sollen, aber erhöhen.

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 es gilt die Vorgabe 2 (d.h. die aktuelle und eine ältere Version).

Eine Änderung des Werts (hier beispielhaft auf 3) erfolgt über den Befehl:

sudo snap set system refresh.retain=3 

Damit würde die Anzahl der Versionen auf 3 geändert (aktuelle und zwei nicht verwendete). Ändert man den Wert von einem höheren auf einen niedrigeren, also z.B. wieder von 3 auf 2, dann werden die zu alten Versionen nicht sofort, aber bei der nächsten automatischen Aktualisierung entfernt.

Snaps aktualisieren

Snaps werden unter Ubuntu automatisch aktualisiert. Dabei bleibt die bisher benutzte Version (und konfigurierbar ggf. weitere ältere Versionen) erhalten und kann reaktiviert werden.

Weitere Informationen zur (auch manuellen) Aktualisierung von Snaps, der Konfiguration der Aktualisierung, Zurückhalten von Aktualisierungen und Ausgabe einer Historie der Änderungen von Snaps findet man im Artikel snap/Updateverwaltung.

ein Snap deinstallieren

Hierfür gibt es die Befehle revert und remove.

Mit revert kann man zu einer älteren Version zurückkehren, wenn z.B. die aktuelle Version eines Snaps nicht wie gewünscht funktioniert oder Fehler hat. Das funktioniert aber nur, wenn die ältere Version noch lokal installiert ist. Die Installation einer älteren Version von snapcraft.io ist nicht möglich, wohl aber aus einer lokal vorhanden Datei. Der Befehl

sudo snap revert NameDesSnaps 

setzt das Snap NameDesSnaps auf die vorherige Version zurück. Als Ausgabe erhält man dann z.B.

NameDesSnaps reverted to 1.9.4

Mit remove entfernt man alle installierten Versionen eines Snaps:

sudo snap remove NameDesSnaps 

Um gezielt ältere installierte Versionen eines Snaps zu deinstallieren, muss dessen Revision mit angegeben werden, welche man über die Liste der installierten Snaps erfährt. Die ältere gnome-calculator Revision aus dem Beispiel entfernt man so:

snap remove --revision 154 gnome-calculator 

Berechtigungen verwalten

Achtung!

Fehlende Berechtigungen können die Funktionsweise eines Snaps einschränken oder es gänzlich unbrauchbar machen. Bei der Installation erteilte Rechte sollten deshalb nicht entzogen werden.

Wie im Abschnitt Technik und Sicherheit bereits erwähnt, kennt Snap das Konzept von Slots und Plugs. Um sich alle verfügbaren Schnittstellen anzeigen zu lassen, nutzt man den Befehl:

snap interfaces 

Um zu sehen, welche Plugs welches Snaps bereits mit welchem Slot verbunden sind, dient der Befehl

sudo snap connections 

Ist dem Namen des Slots ein Doppelpunkt : vorangestellt, ist dies ein Slot, der von core, also der Laufzeitumgebung für Snaps, bereitgestellt wird. Ansonsten ist die Namensstruktur NameDesSnaps:NameDesSlots, also z.B. gtk-common-themes:icon-themes.

Normalerweise werden die notwendigen Verbindungen 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, sondern nur die in der Konfigurationsdatei des Snaps explizit erlaubten Kombinationen. 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.

Hinweis:

Eine einfache grafische Möglichkeit zum Ansehen und Ändern der Zugriffsrechte einer Snap-Anwendung gibt es seit Ubuntu 20.04 in Ubuntu Software (Ubuntu Software, also eigentlich snap-store): Dort die Anwendung suchen und auf "Berechtigungen" klicken. Es öffnet sich ein Fenster, in dem man die aktuellen Rechte sieht (ähnlich wie von sudo snap interfaces <snap-Anwendung>) und ändern kann. Die Zuweisungen von Plugs zu Slots sind jedoch nicht änderbar.

Snap als Programm starten

Programme, die via snap installiert wurden, lassen sich wie alle anderen Programme manuell oder automatisch starten. Unter Ubuntu wird für ein Anwendungsprogramm bei der Installation als Snap auch eine Desktop-Datei im Ordner /var/lib/snapd/desktop/applications/ angelegt; daher sind diese Snaps auch in der Anwendungsansicht enthalten. Außerdem können sie über die Umgebungsvariable PATH gefunden werden, in der das Verzeichnis /snap/bin/ bereits enthalten ist.

Snap manuell starten

In der GUI startet man ein Snap durch Klick auf das Ikon in der Anwendungsübersicht oder aus dem Menü.

Auf der Kommandozeile startet man ein Snap über seinen Namen, so wie der von "snap list" angezeigt wird.

Automatisches Starten von Snaps verhindern / aktivieren

Hat man via snap eine Serveranwendung installiert (wie z.B. einen Datenbankserver), dann startet dieser beim Systemstart automatisch, sofern der Entwickler des Snaps dies so konfiguriert hat. Der Start erfolgt über eine Systemd-Unit. Eine Übersicht über die laufenden Units von Snaps liefert der Befehl:

systemctl list-units snap.* 

Den automatischen Start eines solchen Snaps deaktiviert der Befehl:

sudo snap disable NamesDesSnaps 

Zum Aktivieren nutzt man den Befehl mit enable.

Eigenes Snap erstellen

Es ist auch möglich, eigene Snaps zu erstellen. Dazu dient das Programm snapcraft 🇬🇧.

Probleme und Lösung

allgemeines Debugging

snap bietet einige Möglichkeiten zur Fehlersuche / zum Debugging von snaps, wenn die nur mit Fehler oder eventuell gar nicht laufen. Die Möglichkeiten sind in snap/Debugging aufgeführt.

Ich will gar keine Snaps benutzen

Meistens reicht es aus, den Dienst snapd zu deaktivieren. Das komplette Entfernen von snapd inklusive aller Snaps ist im Artikel snap/snapd deinstallieren erklärt.

snapd deaktivieren

Möchte man den Dienst snapd nicht beim Hochlauf automatisch starten, müssen folgende systemd/Units mit dem Werkzeug systemctl deaktiviert werden:

sudo systemctl disable snapd.service
sudo systemctl disable snapd.socket 

Optional können noch weitere sonst beim Hochlauf automatisch startende, aber ohne snapd nutzlose Systemd-Units deaktiviert werden. Man erhält dann u.U. ein etwas schneller startendes System und spart Ressourcen. Beispiele:

sudo systemctl disable snapd.seeded.service
sudo systemctl disable snapd.apparmor.service 

Systematisch erkundet man die verzichtbaren System-Units mit dieser Prozedur:

  1. Nach dem Start lässt man sich den zeitkritschen Pfad anzeigen:

    systemd-analyze critical-chain 
  2. Wenn eine Systemd-Unit von snapd angezeigt vwird, deaktiviert man diese und startet den Rechner neu.

  3. Dies wiederholt man solange zeitfressende Systemd-Units von snapd angezeigt werden.

Außerdem kann man optional auch noch die Systemd-mount-Units für die Snaps deaktivieren. Diese liegen aber in der Regel nicht im zeitkritischen Pfad.

Nach einem Neustart werden die Änderungen übernommen und bei Bedarf kann man den Dienst dann immer noch manuell starten:

sudo systemctl start snapd.service 

Dies gilt, wenn man die oben als optional deaktivierbar genannten Systemd-Units nicht deaktiviert hat, anderenfalls muss man diese vorher wieder starten.

Um das Deaktivieren rückgängig zu machen, muss in den oben genannten Befehlen das disable durch enable ersetzt werden.

Ich will die interne Konfiguration eines Snaps anpassen

Das ist im Grunde nicht vorgesehen. Es erfordert die Erstellung eines eigenen Snaps:

  1. Das vorhandene Snap muss als Dateisystem SquashFS eingebunden werden: SquashFS (Abschnitt „unsquashfs-Dateisystem-entpacken“)

  2. Alle Dateien aus diesem Dateisystem unter Erhaltung der Hierarchie in einen beschreibbaren temporären Ordner kopieren.

  3. Im temporären Ordner ändern, was man ändern möchte.

  4. Aus dem temporären Ordner wieder ein Snap bauen: Eigenes Snap erstellen

  5. Wenn man alles richtig gemacht hat, kann man sein eigenes Snap installieren: Snap als Datei installieren

Konfigurationsdaten zwischen Programmen aus den Quellen und Snaps übernehmen

Hat man ein Programm zuerst aus den Paketquellen installiert und wechselt dann auf eine Version des Programms als Snap (oder umgekehrt), dann werden Konfigurationseinstellungen des Programms (wie z.B. Profile von Firefox oder Thunderbird) nicht übernommen. Dies liegt daran, dass Snaps und Paketverwaltung und darüber installierte Dateien unabhängig voneinander sind. Die benutzerspezifischen Konfigurationsdateien von Snaps liegen unterhalb des Verzeichnisses ~/snap, die via Paketverwaltung installierter Programme unterhalb von ~/.config oder in ~/.PROGRAMMNAME.

intern

extern

Diese Revision wurde am 23. Dezember 2023 14:25 von noisefloor erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Ubuntu, System, snap