Snap е технология, разработена от Canonical за улесняване на инсталирането на софтуер в дистрибуцията Ubuntu. Тя е сравнително нова разработка. Разработката на Snap продължи няколко години, но едва с излизането на Ubuntu 16.04 тя се появи в състояние, в което е готова за масова употреба.
Основното предимство на Snap е възможността да се инсталират програми без зависимости. Всички необходими библиотеки вече са в пакета с програмата и не се изисква нищо от системата, за да я стартирате. При актуализация потребителят трябва да актуализира един пакет Snap, без да прави промени в системата, а в случай на неуспехи и грешки може да върне пакета към предишната версия. В интернет често може да се срещнат спорове между потребителите за това дали технологията snap е наистина добра или трябва да бъде изоставена в полза на пакетите deb
. Но времето и тестовете ще покажат това. В следващата част на тази статия ще разгледаме процеса на създаване на snap
пакети. Създаването им е малко по-лесно, отколкото на същите deb
пакети.
За да създадем snap
пакети, ще използваме специален инструмент, наречен Snapcraft. Това е официалният инструмент за създаване на snap пакети, който позволява на разработчика да пакетира програми, за да изгради необходимите файлове в цялата система. Snapcraft ви позволява не само да копирате файлове, но и да изтеглите изходния код и да изградите програмата.
След това нека видим как да създадем snap
пакети, като използваме за пример приложението Samplenote.
Първо, инсталирайте Snapcraft. За да получите най-новата версия, добавете PPA в нашата система:
$ sudo add-apt-repository ppa:snappy-dev/tools
Сега актуализирайте списъка с пакети и инсталирайте програмата:
$ sudo apt-get update
$ sudo apt-get install snapcraft
Когато инсталацията на Snapcraft приключи, можем да преминем към получаване на изходния код на програмата. Първо изтеглете изходните файлове от GitHub и ги разархивирайте:
$ 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
Тъй като не е необходимо програмата да се компилира, задачата ни е малко по-лесна. Отидете в папката с програмата и инициализирайте там средата за изграждане на Snapcraft:
$ cd Simplenote-linux-x64
$ snapcraft init
След изпълнението на последната команда в папката ще се появи файлът snapcraft.yml
. Като редактираме файла, нека конфигурираме процеса на създаване на нашия пакет Snap. Ще ни е необходим файл със следното съдържание:
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
Първите четири реда са информация за самия пакет, името на програмата, версията и кратко и пълно описание.
Команда - това е командата за стартиране на програмата, по-нататък ще използваме скрипта warpper
, защото трябва да посочим допълнителни променливи на средата.
Втулки
- това са интерфейсите, които могат да се използват от програмата. Въпросът е, че снап програмите работят в изолирана среда, откъдето не могат да получат достъп до хардуер и лични данни. За да може нашата програма да работи правилно, тя трябва да даде достъп до opengl
, unity7
и мрежовите
интерфейси.
Можете да видите наличните интерфейси и програмите, които ги използват, като изпълните командата:
$ snap interfaces
В частта parts
трябва да посочите файловете на програмата. По-конкретно, какво трябва да направи snapcraft
при създаването на пакет. Тъй като не е необходимо да компилираме нищо, използваме приставката copy за копиране на файлове. Файловете, които трябва да бъдат копирани, са изброени в раздела за файлове
. Там има не само изпълними файлове, но и всички необходими библиотеки, така че програмата ще получи всички компоненти, от които се нуждае.
Форматът на записа е следният:
system_file: snap_package_file_path
Има един нестандартен запис:
resources*: resources
Заместващият символ *
ви позволява да копирате цялата директория. За да се избегне копирането на всички файлове от системата, в раздела site-packages (Пакети на сайта) има опция, която указва на програмата кои пакети трябва да бъдат инсталирани в пакета snap, в нашия случай това са libnss3
, fontconfig-config-config
и gnome-themes-standard
.
За да видите кои библиотеки използва програмата, можете да използвате командата:
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)
Важното е, че тези библиотеки се доставят с програмата, така че трябва да ги посочим в конфигурационния файл snapcraft.yaml
. Всички останали библиотеки са налични в системата и ще бъдат открити автоматично от snapcraft
.
След това нека създадем файла за обвивка
:
!/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" "$@"
Това е просто - скрипт на Bash
. Задайте пътищата за шрифтовете и кажете на програмата къде да търси библиотеките, така че libnote.
so
и libffmpeg.so
да бъдат успешно намерени. И последният ред стартира simplenote
.
Следващото нещо, което остава да направите, е да направите този файл изпълним:
$ chmod +x wrapper
За да започнете изграждането на пакета, изпълнете:
$ snapcraft
Изграждането може да отнеме известно време и след като приключи, можете да инсталирате пакета:
$ sudo snap install simplenote_1.0.1_amd64.snap
Можете да използвате обичайната команда, за да стартирате програмата:
$ simplenote
Сега програмата е инсталирана. Можете да използвате абсолютно същия метод за създаване на snap
пакети, за да пакетирате своите приложения.