[[Vorlage(Getestet, bionic, xenial)]] {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] [:sudo: Root-Rechte] }}} [[Inhaltsverzeichnis(3)]] [[Bild(snappy.png,72,align=left)]] 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 [wikipedia:Internet_der_Dinge: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"). 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, ist das "Core OS" im Falle von Ubuntu "ubuntu-core". Um die Verwaltung etc. der snaps kümmert sich der im Hintergrund laufende Dienst [http://snapcraft.io/docs/core/snapd snapd] {en}. 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 dies snaps der Überwachung durch [:AppArmor:]. Diese verhindert unter Ubuntu und dessen Derivaten, dass snaps auf Systemverzeichnisse wie '''/var''', '''/etc''' oder '''/usr''' zugreifen können. 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 automatisch deinstalliert, diese müssen manuell [#snaps_deinstallieren deinstalliert werden]. == 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 anderen 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]: {{{#!vorlage Paketinstallation snapd snap-confine }}} = Benutzung = Der zentrale Kommandozeilenbefehl[2] ist `snap`, die allgemeine Syntax lautet[3]: {{{#!vorlage Befehl 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 {{{#!vorlage 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 [https://uappexplorer.com/snaps] {en} möglich. == snaps installieren == Das Installieren von snaps erfolgt mit einem Befehl: {{{#!vorlage 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 {{{#!vorlage 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: {{{#!vorlage Befehl 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 {{{#!vorlage 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`: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl sudo snap refresh }}} Man kann auch gezielt einzelne snaps aktualisieren. So würde {{{#!vorlage Befehl 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 {{{#!vorlage Befehl snap refresh --time }}} gibt aus, wann zuletzt automatisch nach Aktualisierungen gesucht wurde und für wann die nächste Suche terminiert ist. == Installierte snaps anzeigen == Der Befehl {{{#!vorlage Befehl snap list }}} listet alle installierten snaps auf. Dabei werden standardmäßig Name, Version, Revision, Entwickler und Notizen des snaps angezeigt. == snaps deinstallieren == Zur Deinstallation dient der Befehl `remove`. mit {{{#!vorlage Befehl 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 {{{#!vorlage Befehl mount | grep snap }}} Eine Beispielausgabe kann so aussehen: {{{ /var/lib/snapd/snaps/go_1333.snap on /snap/go/1333 type squashfs (ro,nodev,relatime) /var/lib/snapd/snaps/go_1473.snap on /snap/go/1473 type squashfs (ro,nodev,relatime) /var/lib/snapd/snaps/core_4206.snap on /snap/core/4206 type squashfs (ro,nodev,relatime) /var/lib/snapd/snaps/core_4110.snap on /snap/core/4110 type squashfs (ro,nodev,relatime) }}} Hier sind zwei Revisionen von`core` und zwei Revisionen des Go-snaps installiert. Das älteren Go-snap würde über den Befehl {{{#!vorlage Befehl snap remove --revision 1333 }}} entfernt. == zu älterer Version zurück kehren == Funktioniert eine neuere Version eines snaps nicht wie gewünscht oder hat Fehler, kann man zu einer älteren Version zurück kehren. 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 {{{#!vorlage 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 {{{#!vorlage 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 }}} = 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 [http://snapcraft.io/create/ snapcraft] {en}. [[Bild(how-it-works.png,200,align=right)]] = Links = * [ikhaya:2015/06/13/snappy-ubuntu-core:Snappy Ubuntu Core] * [wikipedia_en:Snappy_(package_manager):Snappy] * [uappexplorer::][https://uappexplorer.com/snaps uApp Explorer] * [launchpad:snappy:Snappy] * [github:ubuntu-core/snappy:Snappy] * [freenode:snappy:Snappy] * [youtube:lHO8j8uo5Z4:Snaps on classic Ubuntu Q&A with Olli Ries] * [http://snapcraft.io/docs/core/updates Transactional Updates] {en} - Erklärung, wie die Verwaltung der verschiedenen Versionen eines snaps funktioniert # tag: Snappy, Ubuntu, System, Paketverwaltung