Jak mogę iterować szybciej podczas tworzenia przystawki?

10

Pracuję nad przystawką większego oprogramowania i buduję przystawkę, usuwając starą, instalowanie nowej zajmuje bardzo dużo czasu.

Chciałbym powtórzyć tworzenie przystawki i szybsze testowanie. Wiem, że przystawka działa dobrze, teraz jestem zainteresowany testowaniem takich rzeczy, jak uruchomienie aplikacji i jej integracja. Czy jest na to sposób?

dholbach
źródło

Odpowiedzi:

8

Przedmowa

Jednym ze sposobów obejścia tego jest użycie snap try. Z jego --helpwiadomości:

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.

Ma również opcję:

--devmode     Install in development mode and disable confinement

Jest to szczególnie przydatne, jeśli chcesz przetestować bity ograniczające i odpowiednio wykorzystać interfejsy.

Stosowanie

Sposób użycia tego jest prosty, wystarczy uruchomić:

snapcraft prime
snap try prime/

W pierwszym kroku każesz snapcraftzrobić

Final copy and preparation for the snap.

W drugim kroku snapdwykorzystuje zawartość katalogu do „instalacji” przystawki. Teraz możesz bawić się pakietem, wciąż będąc w stanie wprowadzać w nim zmiany.

Przykład

Użyjmy przykładu z Snappy Playpen, aby pokazać, jak tego używać.

Używamy konsula, ponieważ jest on stosunkowo szybki do zbudowania i użycia:

$ 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$ 

Teraz upewnijmy się, że nie mamy zainstalowanej innej wersji, a następnie kontynuuj instalację.

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$ 

Na razie w porządku. Wygląda na to, że działa dobrze. Teraz zastąpmy to, /bin/echoaby zobaczyć, jak to działa:

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$  

Jak widać, możemy wprowadzać zmiany w systemie na żywo, primewciąż działając pod kontrolą. Jest to ogólnie dobry sposób na szybkie uruchomienie i pełne przetestowanie.

Uwaga: W snapdwersjach wcześniejszych niż 2.0.10 (2016-07-09) trzeba było przetestować przystawkę przed uruchomieniem snapcraft cleanlub wpadać snapdw zły stan i narzekać na niemożność znalezienia zamontowanych przystawek. Kolejne poprawki są w kolejce do wersji 2.0.11, która również powinna wylądować za kilka dni.

dholbach
źródło
1
Możesz rozważyć wspomnienie, że snap powinien zostać usunięty, zanim się uruchomi snapcraft cleanlub snapd znajdzie się obecnie w złym stanie i narzeka na niemożność znalezienia zamontowanych snapów. Poprawka jest w toku, ale jeszcze nie wydana.
Kyle
Niezłe! Dodawanie informacji teraz.
dholbach,
1
Tak, „szybka próba” dotyczy właśnie tego przypadku użycia. Pozwala ci stworzyć katalog i zbudować w nim przystawkę, bez konieczności robienia squashfs i ponownego montowania. Iterujesz po prostu pracując w tym katalogu (faktycznie masz snap do odczytu i zapisu), dopóki nie będziesz zadowolony, a następnie wykonaj squashfs z tego katalogu.
Mark Shuttleworth