Начини на плащане Abuse

Как да създам пакет Snap Ubuntu 16

11.06.2021, 19:26

Snap е технология, разработена от Canonical за улесняване на инсталирането на софтуер в дистрибуцията Ubuntu. Тя е сравнително нова разработка. Разработката на Snap продължи няколко години, но едва с излизането на Ubuntu 16.04 тя се появи в състояние, в което е готова за масова употреба.

Основното предимство на Snap е възможността да се инсталират програми без зависимости. Всички необходими библиотеки вече са в пакета с програмата и не се изисква нищо от системата, за да я стартирате. При актуализация потребителят трябва да актуализира един пакет Snap, без да прави промени в системата, а в случай на неуспехи и грешки може да върне пакета към предишната версия. В интернет често може да се срещнат спорове между потребителите за това дали технологията snap е наистина добра или трябва да бъде изоставена в полза на пакетите deb. Но времето и тестовете ще покажат това. В следващата част на тази статия ще разгледаме процеса на създаване на snap пакети. Създаването им е малко по-лесно, отколкото на същите deb пакети.

Създаване на Snap пакети в Ubuntu 16.04

За да създадем 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 пакети, за да пакетирате своите приложения.