Snap je technologie vyvinutá společností Canonical, která usnadňuje instalaci softwaru do distribuce Ubuntu. Jedná se o relativně nový vývoj. Vývoj Snapu probíhal několik let, ale teprve s vydáním Ubuntu 16.04 se objevil ve stavu, kdy je připraven k masovému použití.
Hlavní výhodou Snapu je možnost instalovat programy bez závislostí. Všechny potřebné knihovny jsou již v balíčku s programem a k jeho spuštění není od systému nic vyžadováno. Při aktualizaci stačí uživateli aktualizovat jeden balíček Snap, aniž by provedl změny v systému, a v případě selhání a chyb může balíček vrátit na předchozí verzi. Na webu lze často narazit na spory uživatelů o to, zda je technologie snap skutečně dobrá, nebo zda by se od ní mělo upustit ve prospěch balíčků deb
. To však ukáže až čas a testování. V příštím díle se podíváme na proces vytváření balíčků snap
. Jejich vytváření je o něco jednodušší než u stejných balíčků deb
.
K vytvoření snap
balíčků použijeme speciální nástroj Snapcraft. Jedná se o oficiální nástroj pro vytváření snap balíčků, který umožňuje vývojáři vytvářet balíčky programů tak, aby se v celém systému vytvořily potřebné soubory. Snapcraft umožňuje nejen kopírovat soubory, ale také stáhnout zdrojový kód a sestavit program.
Dále si ukážeme, jak vytvářet snap
balíčky na příkladu aplikace Samplenote.
Nejprve nainstalujte aplikaci Snapcraft. Pro získání nejnovější verze přidejte do našeho systému PPA:
$ sudo add-apt-repository ppa:snappy-dev/tools
Nyní aktualizujte seznam balíčků a nainstalujte program:
$ sudo apt-get update
$ sudo apt-get install snapcraft
Po dokončení instalace programu Snapcraft můžeme přejít k získání zdrojového kódu programu. Nejprve stáhněte zdrojové kódy z GitHubu a rozbalte 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
Protože program není třeba kompilovat, je náš úkol o něco snazší. Přejděte do složky s programem a inicializujte v ní prostředí pro sestavení programu Snapcraft:
$ cd Simplenote-linux-x64
$ snapcraft init
Po provedení posledního příkazu se ve složce objeví soubor snapcraft.yml
. Úpravou souboru nakonfigurujeme proces vytváření našeho balíčku snap. Budeme potřebovat soubor s následujícím obsahem:
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
První čtyři řádky jsou informace o samotném balíčku, název programu, verze a krátký a úplný popis.
Příkaz - jedná se o příkaz ke spuštění programu, dále budeme používat skript warpper
, protože potřebujeme zadat další proměnné prostředí.
Zásuvné moduly
- jedná se o rozhraní, která může program používat. Jde o to, aby snap programy pracovaly v izolovaném prostředí, odkud nemohou získat přístup k hardwaru a osobním údajům. Aby náš program správně fungoval, musí mít přístup k rozhraním opengl
, unity7
a síťovému
rozhraní.
Dostupná rozhraní a programy, které je používají, si můžete prohlédnout po spuštění příkazu:
$ snap interfaces
V části parts
je třeba zadat soubory programu. Konkrétně to, co snapcraft
potřebuje udělat při vytváření balíčku. Protože nepotřebujeme nic kompilovat, použijeme ke kopírování souborů zásuvný modul copy. Soubory, které je třeba zkopírovat, jsou uvedeny v části files
. Jsou zde nejen spustitelné soubory, ale také všechny potřebné knihovny, takže program získá všechny komponenty, které potřebuje.
Formát záznamu je následující:
system_file: snap_package_file_path
Je zde jedna nestandardní položka:
resources*: resources
Zástupný znak *
umožňuje zkopírovat celý adresář. Aby se nemusely kopírovat všechny soubory ze systému, je v sekci site-packages možnost sdělit programu, které balíčky mají být nainstalovány v balíčku snap, v našem případě jsou to libnss3
, fontconfig-config-config
a gnome-themes-standard
.
Chcete-li zjistit, které knihovny program používá, můžete použít příkaz:
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)
Důležité je, že tyto knihovny jsou dodávány s programem, takže je musíme zadat v konfiguračním souboru snapcraft.yaml
. Všechny ostatní knihovny jsou v systému k dispozici a snapcraft
je rozpozná automaticky.
Dále vytvoříme obalový
soubor:
!/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" "$@"
Zde je to jednoduché - skript Bash
. Nastavte cesty pro písma a sdělte programu, kde má hledat knihovny, aby byly úspěšně nalezeny libnote.
so
a libffmpeg.so.
A poslední řádek spustí simplenote
.
Další věcí, kterou zbývá udělat, je zajistit, aby byl tento soubor spustitelný:
$ chmod +x wrapper
Chcete-li zahájit sestavování balíčku, spusťte:
$ snapcraft
Sestavování může nějakou dobu trvat a po jeho dokončení můžete balíček nainstalovat:
$ sudo snap install simplenote_1.0.1_amd64.snap
Ke spuštění programu můžete použít obvyklý příkaz:
$ simplenote
Nyní je program nainstalován. Přesně stejnou metodu vytváření balíčků snap
můžete použít k vytváření balíčků pro své aplikace.