Metody płatności Abuse

Jak utworzyć pakiet Snap Ubuntu 16

11.06.2021, 19:26

Snap to technologia opracowana przez Canonical w celu ułatwienia instalacji oprogramowania w dystrybucji Ubuntu. Jest to stosunkowo nowe rozwiązanie. Rozwój Snap miał miejsce przez kilka lat, ale dopiero w wydaniu Ubuntu 16.04 pojawił się w stanie, w którym jest gotowy do masowego użytku.

Główną zaletą Snap jest możliwość instalowania programów bez zależności. Wszystkie niezbędne biblioteki są już w pakiecie z programem i nic nie jest wymagane od systemu, aby go uruchomić. Podczas aktualizacji użytkownik musi zaktualizować jeden pakiet snap bez wprowadzania zmian w systemie, a w przypadku awarii i błędów może przywrócić pakiet do poprzedniej wersji. W sieci często można natknąć się na spory wśród użytkowników na temat tego, czy technologia snap jest naprawdę dobra, czy też powinna zostać porzucona na rzecz pakietów deb. Ale czas i testy pokażą. W następnym artykule przyjrzymy się procesowi tworzenia pakietów snap. Tworzenie ich jest nieco łatwiejsze niż tych samych pakietów deb.

Tworzenie pakietów snap w Ubuntu 16.04

Do tworzenia pakietów snap użyjemy specjalnego narzędzia o nazwie Snapcraft. Jest to oficjalne narzędzie do tworzenia pakietów snap, które umożliwia deweloperowi pakowanie programów w celu zbudowania niezbędnych plików w całym systemie. Snapcraft pozwala nie tylko kopiować pliki, ale także pobierać kod źródłowy i budować program.

Następnie zobaczmy, jak tworzyć pakiety snap na przykładzie aplikacji Samplenote.

Najpierw zainstaluj Snapcraft. Aby uzyskać najnowszą wersję, dodaj PPA do naszego systemu:

$ sudo add-apt-repository ppa:snappy-dev/tools

Teraz należy zaktualizować listę pakietów i zainstalować program:

$ sudo apt-get update
$ sudo apt-get install snapcraft

Po zakończeniu instalacji Snapcrafta możemy przejść do pobrania kodu źródłowego programu. Najpierw należy pobrać źródła z GitHub i rozpakować je:

$ 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

Ponieważ program nie wymaga kompilacji, nasze zadanie jest nieco łatwiejsze. Przechodzimy do folderu z programem i inicjalizujemy w nim środowisko kompilacji Snapcraft:

$ cd Simplenote-linux-x64
$ snapcraft init

Po wykonaniu ostatniego polecenia w folderze pojawi się plik snapcraft.yml. Edytując plik, skonfigurujmy proces tworzenia naszego pakietu snap. Potrzebny nam będzie plik o następującej zawartości:

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

Pierwsze cztery linie to informacje o samym pakiecie, nazwa programu, wersja oraz krótki i pełny opis.

Command - jest to komenda uruchamiająca program, dalej użyjemy script warpper, ponieważ musimy określić dodatkowe zmienne środowiskowe.

Wtyczki - są to interfejsy, z których może korzystać program. Chodzi o to, że programy snap działają w odizolowanym środowisku, z którego nie mają dostępu do sprzętu i danych osobowych. Aby nasz program działał poprawnie, musi mieć dostęp do interfejsów opengl, unity7 i sieciowych.

Możesz zobaczyć dostępne interfejsy i programy, które ich używają, wykonując polecenie:

$ snap interfaces

W sekcji parts należy określić pliki programu. Konkretnie, co snapcraft musi zrobić podczas tworzenia pakietu. Ponieważ nie musimy niczego kompilować, do kopiowania plików używamy wtyczki copy. Pliki, które należy skopiować, są wymienione w sekcji plików. Znajdują się tam nie tylko pliki wykonywalne, ale także wszystkie niezbędne biblioteki, dzięki czemu program otrzyma wszystkie potrzebne komponenty.

Format wpisu jest następujący:

system_file: snap_package_file_path

Istnieje jeden niestandardowy wpis:

resources*: resources

Znak wieloznaczny * umożliwia skopiowanie całego katalogu. Aby uniknąć kopiowania wszystkich plików z systemu, w sekcji site-packages znajduje się opcja informująca program, które pakiety powinny zostać zainstalowane w pakiecie snap, w naszym przypadku są to libnss3, fontconfig-config i gnome-themes-standard.

Aby zobaczyć, z jakich bibliotek korzysta program, można użyć polecenia:

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)

Ważną rzeczą jest to, że biblioteki te są dostarczane wraz z programem, więc musimy je określić w pliku konfiguracyjnym snapcraft.yaml. Wszystkie pozostałe biblioteki są dostępne w systemie i zostaną automatycznie wykryte przez snapcraft.

Następnie utwórzmy plik wrapper:

!/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" "$@"

Tutaj sprawa jest prosta - skrypt Bash. Ustaw ścieżki dla czcionek i powiedz programowi, gdzie szukać bibliotek, aby libnote .so i libffmpeg.so zostały pomyślnie znalezione. Ostatnia linia uruchamia simplenote.

Następną rzeczą do zrobienia jest uczynienie tego pliku wykonywalnym:

$ chmod +x wrapper

Aby rozpocząć budowanie pakietu, uruchom:

$ snapcraft

Budowanie może zająć trochę czasu, a po jego zakończeniu można zainstalować pakiet:

$ sudo snap install simplenote_1.0.1_amd64.snap

Możesz użyć zwykłego polecenia, aby uruchomić program:

$ simplenote

Teraz program jest zainstalowany. Dokładnie tej samej metody tworzenia pakietów snap można użyć do spakowania aplikacji.