Snap ist eine Technologie, die von Canonical entwickelt wurde, um die Installation von Software in der Ubuntu-Distribution zu erleichtern. Es handelt sich um eine relativ neue Entwicklung. Die Entwicklung von Snap erstreckte sich über mehrere Jahre, aber erst mit der Veröffentlichung von Ubuntu 16.04 wurde sie in einen Zustand versetzt, in dem sie für die breite Masse nutzbar ist.
Der Hauptvorteil von Snap ist die Möglichkeit, Programme ohne Abhängigkeiten zu installieren. Alle erforderlichen Bibliotheken sind bereits im Paket mit dem Programm enthalten, und das System muss nichts tun, um es auszuführen. Bei der Aktualisierung muss der Benutzer nur ein Snap-Paket aktualisieren, ohne Änderungen am System vorzunehmen, und kann im Falle von Fehlern und Störungen das Paket auf die vorherige Version zurücksetzen. Im Internet stößt man oft auf Diskussionen unter den Benutzern darüber, ob die Snap-Technologie wirklich gut ist oder ob sie zugunsten von Deb-Paketen
aufgegeben werden sollte. Aber die Zeit und das Testen werden es zeigen. Als Nächstes werden wir uns in diesem Artikel mit der Erstellung von Snap-Paketen
befassen. Die Erstellung von Snap-Paketen ist ein wenig einfacher als die von Deb-Paketen
.
Um Snap-Pakete
zu erstellen, werden wir ein spezielles Werkzeug namens Snapcraft verwenden. Dies ist das offizielle Tool zur Erstellung von Snap-Paketen, das es dem Entwickler erlaubt, Programme zu paketieren, um die notwendigen Dateien im gesamten System zu erstellen. Mit Snapcraft können Sie nicht nur Dateien kopieren, sondern auch den Quellcode herunterladen und das Programm erstellen.
Sehen wir uns nun an, wie man Snap-Pakete
am Beispiel der Anwendung Samplenote erstellt.
Installieren Sie zunächst Snapcraft. Um die neueste Version zu erhalten, fügen Sie ein PPA zu unserem System hinzu:
$ sudo add-apt-repository ppa:snappy-dev/tools
Aktualisieren Sie nun die Paketliste und installieren Sie das Programm:
$ sudo apt-get update
$ sudo apt-get install snapcraft
Wenn die Installation von Snapcraft abgeschlossen ist, können wir uns den Quellcode des Programms besorgen. Laden Sie zunächst die Quellen von GitHub herunter und entpacken Sie sie:
$ wget https://github.com/Automattic/simplenote-electron/releases/download/v1.0.1/Simplenote-linux-x64.1.0.1.tar.gz
$ tar xvzf Simplenote-linux-x64.1.0.1.tar.gz
Da das Programm nicht kompiliert werden muss, ist unsere Aufgabe ein wenig einfacher. Wechseln Sie in den Ordner mit dem Programm und initialisieren Sie dort die Snapcraft-Build-Umgebung:
$ cd Simplenote-linux-x64
$ snapcraft init
Nach der Ausführung des letzten Befehls wird die Datei snapcraft.yml
im Ordner erscheinen. Bearbeiten Sie diese Datei und konfigurieren Sie den Prozess der Erstellung unseres Snap-Pakets. Wir benötigen eine Datei mit dem folgenden Inhalt:
name: simplenote
version: 1.0.1
summary: The simplest way to keep notes.
description: The simplest way to keep notes. Light, clean, and free.
apps:
simplenote:
command: usr/bin/wrapper
plugs:
- unity7
- opengl
- network
parts:
simplenote:
plugin: copy
stage-packages:
- libnss3
- fontconfig-config
- gnome-themes-standard
files:
Simplenote: Simplenote
wrapper: usr/bin/wrapper
icudtl.dat: icudtl.dat
snapshot_blob.bin: snapshot_blob.bin
natives_blob.bin: natives_blob.bin
resources*: resources
libnode.so: usr/lib/x86_64-linux-gnu/libnode.so
libffmpeg.so: usr/lib/x86_64-linux-gnu/libffmpeg.so
Die ersten vier Zeilen enthalten Informationen über das Paket selbst, den Namen des Programms, die Version und eine kurze und vollständige Beschreibung.
Command - dies ist der Befehl zum Starten des Programms, außerdem werden wir den Skript-Warpper
verwenden, da wir zusätzliche Umgebungsvariablen angeben müssen.
Plugs
- das sind die Schnittstellen, die vom Programm genutzt werden können. Der Punkt ist, dass Snap-Programme in einer isolierten Umgebung arbeiten, von wo aus sie keinen Zugriff auf Hardware und persönliche Daten haben. Damit unser Programm richtig funktioniert, muss es Zugang zu den Schnittstellen Opengl
, Unity7
und Netzwerk
haben.
Sie können die verfügbaren Schnittstellen und die Programme, die sie verwenden, sehen, indem Sie den Befehl ausführen:
$ snap interfaces
In der Sektion parts
müssen Sie die Programmdateien angeben. Genauer gesagt, was snapcraft
tun muss, wenn es ein Paket erstellt. Da wir nichts kompilieren müssen, verwenden wir das Kopier-Plugin, um Dateien zu kopieren. Die Dateien, die kopiert werden müssen, sind im Abschnitt files
aufgeführt. Dabei handelt es sich nicht nur um ausführbare Dateien, sondern auch um alle notwendigen Bibliotheken, so dass das Programm alle Komponenten erhält, die es benötigt.
Das Format des Eintrags ist wie folgt:
system_file: snap_package_file_path
Es gibt einen nicht standardisierten Eintrag:
resources*: resources
Das Platzhalterzeichen *
erlaubt es, das gesamte Verzeichnis zu kopieren. Um zu vermeiden, dass alle Dateien vom System kopiert werden, gibt es im Abschnitt site-packages eine Option, mit der Sie dem Programm mitteilen können, welche Pakete im snap-Paket installiert werden sollen, in unserem Fall sind das libnss3
, fontconfig-config-config
und gnome-themes-standard
.
Um zu sehen, welche Bibliotheken das Programm verwendet, können Sie den Befehl verwenden:
ldd Simplenote | grep Simplenote
libnode.so => /home/sergiy/test/Simplenote/Simplenote-linux-x64/./libnode.so (0x00007f05fb477000)
libffmpeg.so => /home/sergiy/test/Simplenote/Simplenote-linux-x64/./libffmpeg.so (0x00007f05f61ec000)
Wichtig ist, dass diese Bibliotheken mit dem Programm ausgeliefert werden, wir müssen sie also in der Konfigurationsdatei snapcraft.yaml
angeben. Alle anderen Bibliotheken sind auf dem System verfügbar und werden von snapcraft
automatisch erkannt.
Als nächstes müssen wir die Wrapper-Datei
erstellen:
!/bin/sh
export FONTCONFIG_PATH=$SNAP/etc/fonts
export FONTCONFIG_FILE=$SNAP/etc/fonts/fonts.conf
export XDG_DATA_HOME=$SNAP/usr/share
export LD_LIBRARY_PATH=$SNAP_LIBRARY_PATH:$SNAP/usr/lib/x86_64-linux-gnu/
exec "$SNAP/Simplenote" "$@"
Das ist hier ganz einfach - ein Bash-Skript
. Legen Sie die Pfade für die Schriftarten fest und sagen Sie dem Programm, wo es nach den Bibliotheken suchen soll, damit libnote.
so
und libffmpeg.so
erfolgreich gefunden werden. Und die letzte Zeile startet simplenote
.
Als Nächstes müssen Sie diese Datei ausführbar machen:
$ chmod +x wrapper
Führen Sie aus, um mit der Erstellung des Pakets zu beginnen:
$ snapcraft
Der Build kann einige Zeit in Anspruch nehmen, und sobald der Build abgeschlossen ist, können Sie das Paket installieren:
$ sudo snap install simplenote_1.0.1_amd64.snap
Sie können den üblichen Befehl verwenden, um das Programm auszuführen:
$ simplenote
Jetzt ist das Programm installiert. Sie können genau dieselbe Methode zur Erstellung von Snap-Paketen
verwenden, um Ihre Anwendungen zu paketieren.