Äußerlich unterscheidet sich Snap kaum von der etablierten Konkurrenz. Ähnlich wie "apt", "zypper" und Co verwaltet das Kommandozeilenprogramm "snap" die Pakete. Der folgende Befehl installiert etwa die Datenbank CouchDB:
sudo snap install couchdb
Standardmäßig zapft "snap" den von Canonical betriebenen Ubuntu Store an. Dort kann jeder Entwickler seine Snaps nach einer Registrierung hochladen. Ähnlich wie im Apple Store oder bei Google Play durchläuft das Snap vor der Veröffentlichung einen automatisierten Review-Prozess. Den kompletten Ubuntu Store durchsuchen Sie mit "snap find" (Bild 1). Während einige Snap-Unterkommandos wie "find" auch Benutzer aufrufen können, gelingt die Installation oder die Deinstallation nur mit Root- beziehungsweise Systemverwalterrechten.
Ein aus dem Internet heruntergeladenes Snap spielen Sie analog ein, das Snap "foo.snap" etwa mit »sudo snap install foo.snap
«
. Sollte "snap" dabei eine fehlende Signatur bemängeln, müssen Sie diese separat herunterladen. Die entsprechende Datei trägt in der Regel die Endung ".assert", die Sie Snap mit »sudo snap ack foo.assert
«
zuführen. Anschließend sollte "snap" das Snap-Paket klaglos installieren. Alternativ können Sie das Paket via »sudo snap install --force-dangerous foo.snap
«
einspielen. Der Parameter hebelt dabei die Verifikation aus, weshalb die Snap-Entwickler davon abraten.
In jedem Fall verrät »snap list
«
alle derzeit installierten Snaps, die wiederum der Befehl »sudo snap refresh
«
aktualisiert. Zumindest unter Ubuntu stößt ein entsprechender Systemd-Timer diesen Befehl einmal in der Woche automatisch an. Sollte beim Update eines Snaps ein Fehler auftreten, kehrt »sudo snap revert couchdb
«
zur letzten Version vor dem Update zurück – im Beispiel zur letzten CouchDB-Version.
Für Administratoren interessant sind die Kommandos »snap disable
«
und »snap enable
«
, über die sich ein Snap schnell deaktivieren und später wieder aktivieren lässt. Via »sudo snap disable couchdb
«
können Sie so vorübergehend die Datenbank lahmlegen. Der Befehl »sudo remove couchdb
«
löscht schließlich das CouchDB-Snap komplett von der Festplatte. Bietet ein Snap einen Dienst an, lässt er sich manuell mit »snap start
«
, »snap stop
«
und »snap restart
«
kontrollieren.
In den Ubuntu Store können Entwickler auch Snaps mit Vorab- oder Testversionen ihrer Software hochladen. Dies soll Anwendern und Administratoren die Möglichkeit geben, das Programm unkompliziert zu testen. Damit Nutzer des Stores nicht versehentlich eine Vorabversion eines Snaps einspielen, bietet der Store vier verschiedene Kanäle an: Standardmäßig holt Snap nur stabile Software aus dem "stable"-Channel. In den Kanälen "candidate" und "beta" liegen die Release Candidates und Beta-Versionen der Software. Schließlich gibt es noch den "edge"-Kanal, in dem Daily Builds bereitstehen. Wenn Sie eine Beta-Version installieren möchten, müssen Sie mit "--channel" explizit in den entsprechenden Kanal wechseln:
$ sudo snap install couchdb --channel=beta
Entwickler erstellen Snaps mit dem Werkzeug "snapcraft", das die Anwendung und ihre Abhängigkeiten in ein komprimiertes "squashfs"-Dateisystem verpackt. In dem so geschnürten Snap liegt auch immer eine Textdatei "snap.yaml". Sie enthält Metadaten für die Snap-Paketverwaltung, wie etwa eine Beschreibung der Anwendung oder die benötigte Prozessorarchitektur. Des Weiteren bekommt das Snap darin einen Namen, über den die Benutzer später das Programm aufrufen.
Jedes Snap darf zudem mehrere Anwendungen enthalten. Das ist etwa bei Datenbanken wie MySQL nützlich, bei denen das Snap neben dem eigentlichen Datenbank-Daemon auch die verschiedenen Kommandozeilenprogramme enthält. In "snap.yaml" erhält jedes dieser Programme einen eigenen Namen, der nicht mit dem Dateinamen des Binary übereinstimmen muss. Anwender rufen dann die einzelnen Programme über den entsprechenden Namen auf, dem sie zusätzlich den Namen des Snaps voranstellen. Für dieses etwas verwirrende Konzept stellt Canonical mit dem Snap "hello-world" ein einfaches Beispiel bereit, dessen "snap.yaml" Listing 1 zeigt.
Listing 1: Inhalt von snap.yaml für das "hello-world"-Snap
name: hello-world version: 6.3 architectures: [ all ] summary: The 'hello-world' of snaps description: | This is a simple snap example that includes a few interesting binaries to demonstrate snaps and their confinement. * hello-world.env - dump the env of commands run inside app sandbox * hello-world.evil - show how snappy sandboxes binaries * hello-world.sh - enter interactive shell that runs in app sandbox * hello-world - simply output text apps: env: command: bin/env evil: command: bin/evil sh: command: bin/sh hello-world: command: bin/ech
Nachdem Sie das Snap mit »sudo snap install hello-world
«
installiert haben, können Sie die im Snap enthaltene Shell ("bin/sh") mit »hello-world.sh
«
starten. Im Gegensatz zu einer normalen per "/bin/sh" gestarteten Shell läuft die so geöffnete Shell in einer abgeschotteten Sandbox. Wenn Sie nur hello-world aufrufen, startet automatisch das Programm, das in "snap.yaml" den gleichen Namen wie das Snap trägt. Im "hello-world"-Beispiel startet folglich "echo". Mit diesem Mechanismus kann der Entwickler unter anderem geschickt verstecken, dass im Hintergrund nicht ein Programm, sondern etwa nur ein Shell-Skript startet.