Wie kann ich beim Erstellen eines Snaps schneller iterieren?

10

Ich arbeite an einem Snap einer größeren Software und das Erstellen des Snaps, das Entfernen des alten und das Installieren des neuen dauert nur sehr lange.

Ich würde gerne wiederholen, wie der Snap erstellt und die Dinge schneller getestet werden. Ich weiß, dass der Snap gut funktioniert, jetzt bin ich daran interessiert, Dinge wie das Starten der App und ihre Integration zu testen. Gibt es eine Möglichkeit, dies zu tun?

Dholbach
quelle

Antworten:

8

Vorwort

Eine Möglichkeit, dies zu tun, ist die Verwendung snap try. Aus seiner --helpNachricht:

The try command installs an unpacked snap into the system for testing
purposes. The unpacked snap content continues to be used even after 
installation, so non-metadata changes there go live instantly. Metadata
changes such as those performed in snap.yaml will require reinstallation 
to go live.

Es kommt auch mit einer Option:

--devmode     Install in development mode and disable confinement

Dies ist besonders hilfreich, wenn Sie Begrenzungsbits testen und die Verwendung von Schnittstellen richtig gestalten möchten.

Verwendung

Die Verwendung ist einfach. Führen Sie einfach Folgendes aus:

snapcraft prime
snap try prime/

Im ersten Schritt weisen Sie an, das snapcraftzu tun

Final copy and preparation for the snap.

Und im zweiten Schritt snapdwird der Inhalt des Verzeichnisses verwendet, um den Snap zu "installieren". Jetzt können Sie mit dem Paket herumspielen und trotzdem Änderungen daran vornehmen.

Beispiel

Lassen Sie uns ein Beispiel aus dem Snappy Playpen verwenden, um zu zeigen, wie dies verwendet wird.

Wir verwenden Consul, da es relativ schnell zu erstellen und zu verwenden ist:

$ git clone https://github.com/ubuntu/snappy-playpen
$ cd snappy-playpen/consul/
snappy-playpen/consul$ snapcraft prime
Preparing to pull consul 
[...]
Staging consul 
Priming consul 
snappy-playpen/consul$ 

Stellen wir nun sicher, dass keine andere Version installiert ist, und fahren Sie mit der Installation fort.

snappy-playpen/consul$ which consul
snappy-playpen/consul$ snap try prime

Name    Version  Rev  Developer  Notes
consul  0.6.4    x1              try
snappy-playpen/consul$ consul --help
usage: consul [--version] [--help] <command> [<args>]

Available commands are:
    agent          Runs a Consul agent
[...]
snappy-playpen/consul$ 

So weit, ist es gut. Es scheint gut zu funktionieren. Ersetzen wir es jetzt durch, um /bin/echozu sehen, wie die Dinge funktionieren:

snappy-playpen/consul$ cp /bin/echo prime/bin/consul 
snappy-playpen/consul$ consul --help
Usage: /snap/consul/x1/bin/consul [SHORT-OPTION]... [STRING]...
   or:  /snap/consul/x1/bin/consul LONG-OPTION
Echo the STRING(s) to standard output.
[...]
daniel@daydream:/tmp/test/snappy-playpen/consul$  

Wie Sie sehen können, können wir Änderungen am Live-System vornehmen, primewährend die Dinge noch unter Beschränkung ausgeführt werden. Dies ist im Allgemeinen ein guter Weg, um den Snap zum Laufen zu bringen und schnell vollständig zu testen.

Hinweis: Mit snapdvor 2.0.10 (2016.07.09), hatte man das Snap temove vor dem Laufen snapcraft cleanoder snapdwürde in einem schlechten Zustand und Heulen bekommen über nicht in der Lage montiert schnappt zu finden. Für 2.0.11 stehen weitere Korrekturen an, die ebenfalls in wenigen Tagen landen sollten.

Dholbach
quelle
1
Sie könnten erwägen zu erwähnen, dass der Snap entfernt werden sollte, bevor er ausgeführt wird snapcraft cleanoder Snapd derzeit in einen schlechten Zustand gerät und darüber jammert, dass gemountete Snaps nicht gefunden werden können. Das Update ist in Bearbeitung, aber noch nicht veröffentlicht.
Kyle
Schön! Info jetzt hinzufügen.
Dholbach
1
Ja, "Snap Try" ist genau für diesen Anwendungsfall. Sie können damit ein Verzeichnis erstellen und Ihren Snap darin erstellen, ohne die Squashfs weiter erstellen und erneut bereitstellen zu müssen. Sie iterieren nur, indem Sie in diesem Verzeichnis arbeiten (Sie haben effektiv einen Lese- / Schreib-Snap), bis Sie zufrieden sind, und machen dann die Squashfs aus diesem Verzeichnis.
Mark Shuttleworth