[[Vorlage(Getestet, focal, jammy)]] {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] [:mit Root-Rechten arbeiten:] [:Editor: Einen Editor verwenden] }}} [[Inhaltsverzeichnis(3)]] 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 [https://snapcraft.io/docs/installing-snapd andere Linux-Distributionen] {en} 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 [wikipedia:Internet_der_Dinge: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 [#Bezugsquelle-snapcraft-io 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 [https://www.gnu.org/licenses/gpl-3.0.de.html 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 [#Benutzung `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 [:mount:eingehängt], der Einhängepunkt ist das [https://forum.snapcraft.io/t/the-system-snap-directory/2817 Verzeichnis '''/snap/'''] {en} 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 [#desktop-snap 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: {{{#!vorlage Befehl 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] {en} zur Verfügung stellen. Snaps aktualisieren sich im Hintergrund automatisch, dabei bleibt bei Ubuntu nach der Aktualisierung (mindestens) eine [#Anzahl-der-installierten-Versionen-begrenzen ä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 [#Schnittstellen-Interfaces-Slots-und-Plugs 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-Interfaces-Slots-und-Plugs 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 [#Snap-Tracks-und-Channels 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] {{{#!vorlage Befehl snap debug confinement }}} im Terminal abfragen. Als Ausgabe sollte man normalerweise `strict` erhalten. Detailliertere Erklärungen findet man im Blogartikel [https://snapcraft.io/blog/demystifying-snap-confinement Demystifying Snap Confinement] {en}. == 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 [https://snapcraft.io/docs/supported-interfaces Standardschnittstellen] {en}, welche Snaps zur Verfügung stehen. Normalerweise legt der Ersteller eines Snaps fest, welche Schnittstellen benötigt und vom Snap genutzt werden. Die [#Berechtigungen-verwalten Berechtigungen] können aber auch manuell abgefragt und geändert werden – was aber in der Regel nicht nötig ist. ##der Anker wird weiter oben im Artikel benötigt! [[Anker(desktop-snap)]] 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 [https://support.mozilla.org/de/kb/versionszyklus-von-firefox-esr Extended Support Release] {en} 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 == [https://snapcraft.io Snapcraft.io] {en} 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 [https://snapcraft.io/snapcraft gleichnamigen Kommandozeilenwerkzeug] {en} 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. [https://pypi.org/ PyPi] {en}, [https://www.npmjs.com/ NPM] {en}), 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. {{{#!vorlage Warnung Besondere Vorsicht ist bei der Nutzung von [wikipedia:Kryptowährung: Crypto] Wallet (englisch Wallet ‚Brieftasche‘) Anwendungen aus dem Snap Store geboten. Im Februar und März 2024 sind gefälschte Anwendungen aufgetaucht, deren Nutzung zum total Verlust der Einlagen führte. Der ehemalige Canonical Mitarbeiter Alan Pope hat darüber auf seinem Blog berichtet. * [https://popey.com/blog/2024/02/exodus-bitcoin-wallet-490k-swindle/ Exodus Bitcoin Wallet: $490K Swindle] {en} * [https://popey.com/blog/2024/03/exodus-wallet-part-three/ Guess Who's Back? Exodus Scam BitCoin Wallet Snap!] {en} }}} = 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]: {{{#!vorlage Paketinstallation 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: [[Vorlage(Befehl, "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: [[Vorlage(Befehl, "snap help" ) ]] Detaillierte Hilfe inkl. der jeweils möglichen Optionen zu einem BEFEHL zeigt dieser Befehl an: [[Vorlage(Befehl, "snap help BEFEHL" ) ]] Man kann auch die [:Manpage:] des Programms lesen: [[Vorlage( Befehl, "man snap" ) ]] Die wichtigsten aus den ca. 50 Befehlen werden anschließend vorgestellt. == Installierte Snaps anzeigen == Der Befehl [[Vorlage(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`: [[Vorlage(Befehl, "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 [[Vorlage(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 [https://snapcraft.io/store snapcraft.io] {en} möglich. == Informationen zu einem Snap anzeigen == Mit dem Befehl [[Vorlage(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 [#Snap-installieren 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 [:Howto/Android-Bildschirm-Übertragung_mit_scrcpy:scrcpy] mit Ausgabe: {{{#!vorlage Befehl 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] [#Andere-Installationsmethoden installieren] kann. == ein Snap installieren == Das Installieren eines Snaps erfolgt mit einem Befehl: [[Vorlage(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: [[Vorlage(Befehl, "sudo snap install NameDesSnaps --TRACK/CHANNEL" ) ]] . Erfolgt keine Angabe des Tracks, wird automatisch `latest` benutzt. Beispiele: * [[Vorlage(Befehl, "sudo snap install vlc --beta" ) ]] installiert die Betaversion von [:VLC:] aus dem Track `latest`. * [[Vorlage(Befehl, "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: [[Vorlage(Befehl, "sudo snap install NAME_DER_SNAPDATEI.snap --dangerous")]] Der bessere Weg führt aber über vorherige Aktivierung der beim [#Snap-herunterladen Download] erhaltenen Signatur: {{{#!vorlage Befehl 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 [https://ubuntu.com/core Ubuntu Core] {en} 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 [[Vorlage(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: [[Vorlage(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 [[Vorlage(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: {{{#!vorlage Befehl sudo snap remove NameDesSnaps }}} Um gezielt ältere installierte Versionen eines Snaps zu deinstallieren, muss dessen Revision mit angegeben werden, welche man über [#Installierte-Snaps-anzeigen die Liste der installierten Snaps] erfährt. Die ältere `gnome-calculator` Revision aus dem Beispiel entfernt man so: {{{#!vorlage Befehl snap remove --revision 154 gnome-calculator }}} == Berechtigungen verwalten == {{{#!vorlage Warnung 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 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: {{{#!vorlage Befehl snap interfaces }}} Um zu sehen, welche Plugs welches Snaps bereits mit welchem Slot verbunden sind, dient der Befehl {{{#!vorlage 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: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl sudo snap disconnect NAME_DES_SNAP slot:plug }}} Eine ausführlichere Einführung und Erklärung ist in der Dokumentation in der Sektion [https://docs.snapcraft.io/interface-management/6154 Interface Management] {en} zu finden. {{{#!vorlage 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:Ubuntu Software], also eigentlich [:snap-store: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 `) 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-Dateien: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/typische_Anwendungsfälle/#PATH-erweitern: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:Systemd-Unit]. Eine Übersicht über die laufenden Units von Snaps liefert der Befehl: [[Vorlage(Befehl, "systemctl list-units snap.*" ) ]] Den automatischen Start eines solchen Snaps deaktiviert der Befehl: [[Vorlage(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 [https://snapcraft.io/docs/snapcraft snapcraft] {en}. = 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 [:Dienste:Dienst] `snapd` zu [#snapd-deaktivieren 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 [:systemd/systemctl:systemctl] deaktiviert werden: {{{#!vorlage befehl 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: {{{#!vorlage befehl 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: [[Vorlage(Befehl, "systemd-analyze critical-chain" ) ]] 1. Wenn eine Systemd-Unit von `snapd` angezeigt vwird, deaktiviert man diese und startet den Rechner neu. 1. 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: [[Vorlage(Befehl, "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/#unsquashfs-Dateisystem-entpacken:] 1. Alle Dateien aus diesem Dateisystem unter Erhaltung der Hierarchie in einen beschreibbaren temporären Ordner kopieren. 1. Im temporären Ordner ändern, was man ändern möchte. 1. Aus dem temporären Ordner wieder ein Snap bauen: [#Eigenes-Snap-erstellen Eigenes Snap erstellen] 1. Wenn man alles richtig gemacht hat, kann man sein eigenes Snap installieren: [#Andere-Installationsmethoden 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'''. = Links = == intern == * [:snap/Updateverwaltung:] - weiterführende Informationen zur Updateverwaltung von snaps * [:snap/Debugging:] - Hinweise zur Fehlersuche in snaps * [:Howto/snaps_parallel_installieren_und_nutzen:] * [:Howto/snap testen:] - ein snap testweise installieren * [:SquashFS:] - Wikiartikel zum SquashFS-Dateisystem, was snap auch nutzt * [:snap/snapd_deinstallieren/:] - alles Snaps und die Laufzeitumgebung für Snaps vollständig aus dem System entfernen == extern == * [https://snapcraft.io/docs umfangreiche, offizielle Dokumentation] {en} zu Snaps * [github:snapcore/snapd:Projektseite] bei Github * [launchpad:snapd:] bei Launchpad * [wikipedia_en:Snap_(package_manager):snap-Seite] in der englischen Wikipedia # tag: Ubuntu, System, snap