Der Autor wählte die Electronic Frontier Foundation, um eine Spende im Rahmen des Programms Write for DOnations zu erhalten.
Eine der größten Herausforderungen in der Anwendungsentwicklung ist der letzte Schritt der Verteilung des fertigen Produkts an Ihre Benutzer oder Kunden. Viele bestehende Methoden zur Anwendungsbereitstellung sind nicht benutzerfreundlich und sicher oder bieten keine Methoden zur automatischen Aktualisierung einer Anwendung nach ihrer Installation.
Snap ist ein modernes Anwendungsverpackungsformat mit leistungsstarken Sandboxing- und Sicherheitsfunktionen, u. a. Dateisystem-Isolation, automatische Updates und integriertes Abhängigkeitsmanagement. Snap-Anwendungen, die als Snaps bezeichnet werden, können ähnlich wie apt
oder yum
mit einem Befehlszeilenprogramm heruntergeladen und installiert werden. Ubuntu wird mit vorinstalliertem Snap bereitgestellt, was bedeutet, dass es ein breites Publikum für Snap-Anwendungen gibt.
In diesem Tutorial werden Sie eine Snap-Anwendung erstellen und im Snap Store veröffentlichen.
Um diesem Tutorial zu folgen, benötigen Sie:
Einen Ubuntu-18.04-Server, der gemäß Ersteinrichtung eines Servers mit Ubuntu 18.04 eingerichtet wurde, einschließlich eines Benutzers ohne Root- und mit sudo-Berechtigungen.
Eine Anwendung, die Sie paketieren und als Snap freigeben möchten. Dabei kann es sich um eine komplexe Anwendung handeln, die Sie erstellt haben, um ein gemeinsames Open-Source-Projekt oder um ein einfaches „Hello, World!“-Programm. Wenn Sie noch keine Anwendung haben, wird in Schritt 1 dieses Tutorials behandelt, wie Sie ein Hello World-Programm in Go erstellen können.
Ein Konto auf dem Snapcraft Developer Dashboard.
Sobald Sie diese zur Verfügung haben, melden Sie sich zunächst als Benutzer ohne Root-Berechtigung auf Ihrem Server an.
Zunächst bereiten Sie Ihre Anwendung für die Paketierung als Snap-Anwendung vor, indem Sie sicherstellen, dass alles Erforderliche in einem einzigen Verzeichnis vorhanden ist.
Beginnen Sie mit der Erstellung eines neuen Verzeichnisses für Ihr Snap und wechseln Sie in dieses:
- mkdir ~/your-snap
- cd ~/your-snap
Wenn Sie bereits eine Anwendung haben, legen Sie als Nächstes eine vollständige Kopie des Quellcodes Ihrer Anwendung in dem Verzeichnis ab, das Sie gerade erstellt haben. Der Prozess wird je nach der genauen Anwendung, die Sie paketieren, erheblich variieren. Für den Fall, dass der Quellcode in einem Git-Repository gespeichert ist, können Sie mit dem Befehl git init
ein Repository im Verzeichnis anlegen und den gesamten relevanten Code abrufen.
Wenn Sie noch keine Anwendung haben, die Sie paketieren möchten, können Sie ein Hello World-Programm erstellen, das Sie stattdessen verwenden. Wenn Sie mehr Kontext zum Schreiben dieses Programms mit Go wünschen, lesen Sie das Tutorial So schreiben Sie ein ersten Programm in Go.
Sie können dies tun, indem Sie zuerst eine neue Go-Datei erstellen und mit Ihrem bevorzugten Texteditor öffnen:
- nano helloworld.go
Fügen Sie als Nächstes den folgenden Code in die Datei ein:
package main
import "fmt"
func main() {
fmt.Println("Hello, world!")
}
Speichern und schließen Sie die Datei dann.
Wenn Sie Go nicht installiert haben, können Sie es mit dem folgenden Befehl installieren:
- sudo apt install golang-go
Nachdem Go installiert ist, können Sie Ihr neues Programm ausführen, um zu überprüfen, ob es funktioniert:
- go run helloworld.go
Sie sehen die folgende Ausgabe:
OutputHello, world!
Sie haben Ihre Anwendung für die Paketierung als Snap vorbereitet. Als Nächstes installieren Sie die Software, die für den Beginn des Paketierungsvorgangs erforderlich ist.
In diesem Schritt laden Sie Snapcraft, das offizielle Snap-Anwendungs-Paketierungs-Tool, herunter und installieren es. Snapcraft ist über den Snap Store verfügbar, der standardmäßig in Ubuntu integriert ist. Das bedeutet, dass Sie Snapcraft von der Befehlszeile aus mit dem Befehl snap
installieren können.
Der Befehl snap
entspricht dem Befehl apt
, jedoch können Sie ihn zur Installation von Software aus dem Snap Store anstelle von Paketen aus den Apt-Repositorys verwenden.
Um Snapcraft zu installieren, führen Sie den folgenden Befehl aus:
- sudo snap install snapcraft --classic
Verwenden Sie das Befehlsargument --classic
, sodass Snapcraft ohne die strengen Sandboxing-Funktionen installiert wird, die Snaps normalerweise verwenden. Snapcraft benötigt dieses Argument, da es einen privilegierten Zugriff auf Ihr System erfordert, um Anwendungen zuverlässig zu paketieren.
Sobald Sie Snapcraft installiert haben, sehen Sie Folgendes:
Outputsnapcraft 3.9.8 from Canonical✓ installed
Abschließend können Sie die Snapcraft-Installation überprüfen, indem Sie Folgendes ausführen:
- snapcraft --version
Dadurch wird in etwa Folgendes angezeigt:
Outputsnapcraft, version 3.9.8
Nachdem Sie Snapcraft installiert haben, können Sie nun die Konfiguration und Metadaten für Ihre Snap-Anwendung definieren.
In diesem Schritt werden Sie zunächst die Konfiguration, die Struktur und die Metadaten für Ihre Snap-Anwendung definieren.
Stellen Sie zuerst sicher, dass Sie immer noch in Ihrem Snap-Anwendungsverzeichnis arbeiten:
- cd ~/your-snap
Erstellen und bearbeiten Sie als Nächstes die Datei snapcraft.yaml
mit Ihrem bevorzugten Texteditor:
- nano snapcraft.yaml
Sie verwenden die Datei snapcraft.yaml
, um die gesamte Konfiguration für Ihre Snap-Anwendung zu speichern, einschließlich des Namens, der Beschreibung und der Version, sowie Einstellungen im Zusammenhang mit der Abhängigkeitsverwaltung und dem Sandboxing.
Beginnen Sie mit der Definition des Namens, der Zusammenfassung, der Beschreibung und der Versionsnummer für Ihre Anwendung:
name: your-snap
summary: A summary of your application in 78 characters or less.
description: |
A detailed description of your application.
The description can have multiple lines.
version: '1.0'
Der Name Ihres Snap muss eindeutig sein, wenn Sie es im Snap Store veröffentlichen möchten – suchen Sie nach anderen Anwendungen mit demselben Namen, um sicherzustellen, dass er nicht bereits vergeben ist.
Als Nächstes können Sie den/die Befehl(e) definieren, den/die Sie mit Ihrer Anwendung verknüpfen möchten. Dadurch kann Ihr Snap direkt von der Bash-Befehlszeile aus als normaler Befehl verwendet werden.
Fügen Sie Folgendes zu Ihrer Datei snapcraft.yaml
hinzu:
. . .
apps:
your-snap-command:
command: your-snap
your-snap-command
ist der Name des Befehls, den Sie definieren möchten. Beispielsweise können Sie den Befehl helloworld
verwenden, um Ihr Hello World-Programm auszuführen.
Verwenden Sie command: your-snap
, um Snapcraft mitzuteilen, was zu tun ist, wenn der Anwendungsbefehl ausgeführt ist. Im Fall des Hello World-Programms würden Sie den Wert helloworld
verwenden, um auf die Datei helloworld.go
zu verweisen, die Snapcraft die erfolgreiche Ausführung Ihres Programms ermöglicht.
Daraus ergibt sich die folgende Beispielkonfiguration:
apps:
helloworld:
command: helloworld
Wenn der Befehlsname genau mit dem Namen des Snaps übereinstimmt, können Sie ihn direkt von der Befehlszeile aus ausführen. Wenn der Befehl nicht mit dem Snap-Namen übereinstimmt, wird dem Befehl automatisch der Name des Snaps vorangestellt. Beispielsweise helloworld.command1
.
Abschließend können Sie die Teile definieren, aus denen sich Ihre Snap-Anwendung zusammensetzt. Snap-Anwendungen bestehen aus mehreren Teilen, die alle die Komponenten Ihrer Anwendung darstellen. In vielen Fällen gibt es nur einen Teil, nämlich die Anwendung selbst.
Jeder Teil hat ein zugehöriges Plugin. Beispielsweise wird für in Ruby geschriebene Komponenten Ihrer Anwendung das Plugin ruby
verwendet, und für in Go geschriebene Komponenten wird das Plugin go
verwendet.
Sie können den Snapcraft-Befehl list-plugins
verwenden, um das/die richtigen Plugin(s) für Ihre Anwendung zu identifizieren:
- snapcraft list-plugins
Dadurch wird in etwa folgende Liste ausgegeben:
Outputant catkin-tools conda dump gradle make nil python rust
autotools cmake crystal go kbuild maven nodejs qmake scons
catkin colcon dotnet godeps kernel meson plainbox-provider ruby waf
Die am häufigsten verwendeten Plugins sind solche für gängige Programmiersprachen wie Go, Rust, Ruby oder Python.
Sobald Sie die richtigen Plugins für Ihre Anwendung identifiziert haben, können Sie damit beginnen, die Konfiguration parts
zu Ihrer Datei snapcraft.yaml
hinzuzufügen:
. . .
parts:
your-snap:
plugin: plugin-name
source: .
Verwenden Sie den Konfigurationsparameter source
, um den relativen Pfad zu dem Quellcode Ihrer Anwendung anzugeben. Normalerweise ist dies das gleiche Verzeichnis wie die Datei snapcraft.yaml
selbst, sodass der Wert für source
ein einzelner Punkt (.
) ist.
Anmerkung: Wenn Ihre Anwendungskomponente Abhängigkeiten hat, die für das Erstellen oder Ausführen der Anwendung erforderlich sind, können Sie diese mit den Attributen build-packages
und stage-packages
angeben. Die angegebenen Namen der Abhängigkeiten werden dann automatisch von dem Standard-Paketmanager für Ihr System abgerufen.
Beispiel:
parts:
your-snap:
plugin: plugin-name
source: .
build-packages:
- gcc
- make
stage-packages:
- libcurl4
Einige Snapcraft-Plugins haben ihre eigenen spezifischen Optionen, die für Ihre Anwendung erforderlich sein können. Daher ist es sinnvoll, die entsprechenden Handbuchseiten für Ihr Plugin hinzuzuziehen.
- snapcraft help plugin-name
Im Fall von Go-Anwendungen würden Sie auch den go-importpath
angeben. Für die Hello World-Konfiguration ergibt sich daraus die folgende Beispielkofiguation:
parts:
helloworld:
plugin: go
source: .
go-importpath: helloworld
Sie können Ihre Datei snapcraft.yaml
offen lassen, um im nächsten Schritt weitere Konfigurationen hinzuzufügen.
Sie haben die Basiskonfiguration für Ihre Snap-Anwendung definiert. Als Nächstes konfigurieren Sie die Sicherheits- und Sandboxing-Aspekte Ihrer Anwendung.
Snap-Anwendungen sind so konzipiert, dass Sie in einer Sandbox-Umgebung ausgeführt werden können. In diesem Schritt konfigurieren Sie also Sandboxing für Ihr Snap. Als Erstes müssen Sie das Sandboxing für Ihre Anwendung aktivieren, was innerhalb von Snapcraft als confinement
bekannt ist.
Fügen Sie Folgendes zu Ihrer Datei snapcraft.yaml
hinzu:
. . .
confinement: strict
Dadurch wird das Sandboxing für Ihre Anwendung aktiviert und verhindert, dass sie auf das Internet, andere laufende Snaps oder das Host-System selbst zugreifen kann. In den meisten Fällen müssen Anwendungen jedoch außerhalb ihrer Sandbox kommunizieren können, beispielsweise wenn sie auf das Internet zugreifen oder im Dateisystem lesen/schreiben müssen.
Diese Berechtigungen, die innerhalb von Snapcraft als Schnittstellen bekannt sind, können Ihrer Snap-Anwendung mit Plugs gewährt werden. Mithilfe von Plugs können Sie eine sehr feine Kontrolle über das Sandboxing für Ihre Anwendung ausüben, um ihr nur den benötigten Zugriff zu geben und nicht mehr (Prinzip der geringsten Privilegien).
Die genau benötigten Schnittstellen hängen von Ihrer Anwendung ab. Einige der am häufigsten verwendeten Schnittstellen sind:
audio-playback
– Erlaubt die Audio-Ausgabe/Wiedergabe von Sounds.audio-record
– Erlaubt die Audio-Eingabe/Aufnahme.camera
– Erlaubt den Zugriff auf verbundene Webcams.home
– Erlaubt den Zugriff auf nicht versteckte Dateien in Ihrem Home-Verzeichnis.network
– Erlaubt den Zugriff auf das Netzwerk/Internet.network-bind
– Erlaubt die Bindung an Ports, um als Netzwerkdienst zu arbeiten.system-files
– Erlaubt den Zugriff auf das gesamte Dateisystem des Host-Rechners.Die vollständige Liste der verfügbaren Schnittstellen ist in der Snapcraft-Dokumentation unter Unterstützte Schnittstellen zu finden.
Sobald Sie alle erforderlichen Schnittstellen für Ihre Anwendung identifiziert haben, können Sie damit beginnen, diese den Plugs
innerhalb Ihrer Datei snapcraft.yaml
zuzuweisen.
Die folgende Beispielkonfiguration ermöglicht der Anwendung den Zugriff auf das Netzwerk und den Home-Bereich der Benutzer:
. . .
plugs:
your-snap-home:
interface: home
your-snap-network:
interface: network
Speichern und schließen Sie Ihre Datei.
Der Name des Plug sollte ein beschreibender Name sein, um Benutzern die Identifizierung des Zwecks des Plug zu erleichtern.
Sie haben das Sandboxing für Ihr Snap aktiviert und einige Plugs konfiguriert, um begrenzten Zugriff auf System-Ressourcen zu gewähren. Als Nächstes werden Sie die Erstellung Ihrer Snap-Anwendung abschließen.
Nachdem Sie nun die gesamte erforderliche Konfiguration für Ihr Snap geschrieben haben, können Sie mit der Erstellung und dem lokalen Testen des Snap-Paketes fortfahren.
Wenn Sie diesem Tutorial mit einem Hello World-Programm als Ihre Anwendung gefolgt sind, sieht Ihre vollständige Datei snapcraft.yaml
nun in etwa wie folgt aus:
name: helloworld
summary: A simple Hello World program.
description: |
A simple Hello World program written in Go.
Packaged as a Snap application using Snapcraft.
version: '1.0'
confinement: strict
apps:
helloworld:
command: helloworld
parts:
helloworld:
plugin: go
source: .
go-importpath: helloworld
plugs:
helloworld-home:
interface: home
helloworld-network:
interface: network
Um Ihre Snap-Anwendung zu erstellen, führen Sie den Befehl snapcraft
aus dem Verzeichnis für Ihr Snap aus:
- snapcraft
Snapcraft startet dann automatisch einen virtuellen Rechner (VM) und beginnt mit der Erstellung Ihres Snap. Sobald die Erstellung abgeschlossen ist, wird Snapcraft beendet und Sie sehen in etwa Folgendes:
OutputSnapped your-snap_1.0_amd64.snap
Jetzt können Sie Ihr Snap lokal installieren, um zu überprüfen, ob es funktioniert:
- sudo snap install your-snap.snap --dangerous
Das Befehlsargument --dangerous
ist erforderlich, da Sie ein lokales Snap installieren, das nicht signiert wurde.
Outputyour-snap 1.0 installed
Sobald der Installationsvorgang abgeschlossen ist, können Sie Ihr Snap mit dem zugehörigen Befehl ausführen. Beispiel:
- helloworld
Im Fall des Beispielprogramms Hello World würde sich die folgende Ausgabe ergeben:
OutputHello, world!
Sie können ebenfalls die Sandboxing-Richtlinie für Ihr Snap anzeigen, um sicherzustellen, dass die zugewiesenen Berechtigungen ordnungsgemäß erteilt wurden:
- snap connections your-snap
Dadurch wird eine Liste von Plugs und Schnittstellen ausgegeben, die in etwas wie folgt aussieht:
Outputsnap connections your-snap
Interface Plug Slot Notes
home your-snap:your-snap-home :home -
network your-snap:your-snap-network :network -
In diesem Schritt haben Sie Ihr Snap erstellt und lokal installiert, um zu testen, ob es funktioniert. Als Nächstes veröffentlichen Sie Ihr Snap im Snap Store.
Nachdem Sie Ihre Snap-Anwendung erstellt und getestet haben, ist es nun an der Zeit, sie im Snap Store zu veröffentlichen.
Melden Sie sich mit der Snapcraft-Befehlszeilenanwendung an Ihrem Snap Developer-Konto an:
- snapcraft login
Folgen Sie den Eingabeaufforderungen, um Ihre E-Mail-Adresse und Ihr Passwort einzugeben.
Als Nächstes müssen Sie den Namen der Anwendung im Snap Store registrieren:
- snapcraft register your-snap
Sobald Sie den Snap-Namen registriert haben, können Sie das erstellte Snap-Paket mithilfe von Push in den Shop übertragen:
- snapcraft push your-snap.snap
Sie sehen eine Ausgabe, die der folgenden ähnelt:
OutputPreparing to push 'your-snap_1.0_amd64.snap'.
Install the review-tools from the Snap Store for enhanced checks before uploading this snap.
Pushing 'your-snap_1.0_amd64.snap' [===================================================================================================] 100%
Processing...|
Ready to release!
Revision 1 of 'your-snap' created.
Bei jeder Push-Übertragung in den Snap Store wird die Versionsnummer erhöht, beginnend mit eins. Dies ist nützlich, um die verschiedenen Builds Ihres Snap zu identifizieren.
Abschließend können Sie Ihr Snap für die Öffentlichkeit freigeben:
- snapcraft release your-snap revision-number channel
Wenn dies Ihre erste Push-Übertragung in den Snap Store ist, wird die Versionsnummer 1
sein. Sie können auch zwischen der Freigabe in den Kanälen stable
, candidate
, beta
und edge
wählen, wenn Sie mehrere Versionen Ihrer Anwendung in verschiedenen Entwicklungsstufen haben.
Mit dem folgenden Befehl wird beispielsweise die Version 1
des Hello World-Snap für den Kanal stable
freigegeben:
- snapcraft release helloworld 1 stable
Sie sehen eine Ausgabe, die der folgenden ähnelt:
OutputTrack Arch Channel Version Revision
latest amd64 stable 1.0 1
candidate ^ ^
beta ^ ^
edge ^ ^
The 'stable' channel is now open.
Sie können nun im Snap Store nach Ihrer Anwendung suchen und auf einem Ihrer Geräte installieren.
In diesem letzten Schritt haben Sie Ihr erstelltes Snap-Paket in den Snap Store hochgeladen und für die Öffentlichkeit freigegeben.
In diesem Artikel haben Sie eine Snap-Anwendung konfiguriert und erstellt und über den Snap Store für die Öffentlichkeit freigegeben. Sie verfügen nun über die grundlegenden Kenntnisse, die für die Wartung Ihrer Anwendung und die Erstellung neuer Anwendungen erforderlich sind.
Wenn Sie Snaps weiter erkunden möchten, können Sie den gesamten Snap Store durchsuchen. Vielleicht möchten Sie auch die Snapcraft YAML-Referenz durchsehen, um mehr darüber zu erfahren und zusätzliche Attribute für Ihre Snap-Konfiguration zu identifizieren.
Wenn Sie sich näher über die Snap-Entwicklung informieren möchten, empfehlen wir Ihnen, mehr über Snap Hooks und deren Implementierung zu lesen. Sie ermöglichen es Snaps, dynamisch auf Systemänderungen wie Upgrades oder Anpassungen der Sicherheitsrichtlinien zu reagieren.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!