Snap - технология, разработанная специалистами Canonical с целью облегчения установки ПО в дистрибутиве Ubuntu. Она появилась относительно недавно. Разработка 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. Нам понадобится файл такого содержания:
Первые четыре строчки - это информация о самом пакете, название программы, версия и краткое и полное описание.
Command - это команда запуска программы, дальше станем использовать скрипт warpper, потому, что нам нужно указать дополнительные переменные окружения.
Посмотреть доступные интерфейсы, и программ, которые их используют можно выполнив команду:
$ snap interfaces
В разделе parts нужно указать файлы программы. Если быть точным, то что нужно сделать snapcraft при создании пакета. Поскольку нам ничего компилировать не нужно, задействуем плагин copy, для копирования файлов. Файлы, которые нужно скопировать, перечислены в разделе files. Там есть не только исполняемые файлы, но и все необходимые библиотеки, так что программа получит все необходимые ей компоненты.
Формат записи такой:
Есть одна нестандартная запись:
Символ подстановки * позволяет скопировать весь каталог. Чтобы не копировать все файлы из системы, есть возможность в секции site-packages сказать программе, какие пакеты следует установить в пакет snap, в нашем случае это libnss3 , fontconfig-config и gnome-themes-standard.
Чтобы посмотреть какие библиотеки использует программа, можно воспользоваться командой:
Важно то, что эти библиотеки поставляются вместе с программой, а поэтому нам нужно прописать их в конфигурационном файле snapcraft.yaml. Все остальные библиотеки доступны в системе и будут обнаружены snapcraft автоматически.
Далее создадим файл 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" "$@"
Здесь все просто - скрипт на Bash. Устанавливаем пути для шрифтов, и указываем программе где нужно искать библиотеки, чтобы libnote.so и libffmpeg.so были успешно найдены. А последняя строка запускает на выполнение simplenote.
Дальше осталось сделать этот файл исполняемым:
$ chmod +x wrapper
Для начала сборки пакета выполните:
$ snapcraft
Сборка может занять кое-какое время, а после завершения сборки вы сможете установить пакет:
$ sudo snap install simplenote_1.0.1_amd64.snap
Для запуска программы вы можете воспользоваться обычной командой:
$ simplenote
Примените скидку, вставив промокод в специальное поле при оформлении заказа: