Как создать Snap пакет Ubuntu 16.04

Технология Snap разработанная в Canonical для облегчения установки программного обеспечения в дистрибутиве Ubuntu появилась совсем недавно. Она разрабатывалась на протяжении последних нескольких лет, но только к релизу 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

Первые четыре строчки - это информация о самом пакете, название программы, версия и краткое и полное описание.

Command - это команда запуска программы, мы будем использовать скрипт warpper, потому, что нам нужно указать дополнительные переменные окружения.

plugs - это интерфейсы, которые может использовать программа. Дело в том, что программы snap работают в изолированной среде, откуда они не могут получить доступ к оборудованию и персональным данным. Чтобы наша программа могла нормально работать ей нужно дать доступ к интерфейсу opengl, unity7 и network.

Посмотреть доступные интерфейсы, и программ, которые их используют можно выполнив команду:

snap interfaces

В разделе parts мы указываем сами файлы программы. А если точнее, то что нужно сделать snapcraft при создании пакета. Поскольку нам ничего компилировать не нужно, мы будем использовать плагин copy, для копирования файлов. Файлы, которые нужно скопировать, перечислены в разделе files. Там есть не только исполняемые файлы, но и все необходимые библиотеки, так что программа получит все необходимые ей компоненты.

Формат записи такой:

файл_в_системе: адрес_файла_в_пакете_snap

Есть одна нестандартная запись:

resources*: resources

Символ подстановки * позволяет скопировать весь каталог. Чтобы не копировать все файлы из системы, мы можем в секции site-packages сказать программе, какие пакеты следует установить в пакет snap, в нашем случае это libnss3 , fontconfig-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 автоматически.

Далее создадим файл 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

Вот и все, программа установлена и работает. Точно такой же способ создания snap пакетов вы можете использовать для упаковки своих программ.

Выводы

Несмотря на то, что snap довольно спорная технология, ее уже используют многие разработчики программ, в том числе разработчики популярного браузера Firefox. Если вы разрабатываете свое программное обеспечение, то вполне можете создать snap пакеты. Учитывая, что snap скоро будет поддерживать и другие дистрибутивы, то это вполне неплохая затея. Более подробную информацию вы можете получить в официальной документации по snapcraft.

Оцените статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (3 оценок, среднее: 5,00 из 5)
Загрузка...

14 комментариев

  1. Аватар KRoman 20 июня, 2016 Ответить
  2. Аватар Андрей 21 июня, 2016 Ответить
    • Аватар admin 22 июня, 2016 Ответить
      • Аватар Андрей 23 июня, 2016 Ответить
        • Аватар admin 1 июля, 2016 Ответить
          • Аватар Alexey Ananyev 3 июля, 2016
  3. Аватар vshmuk 23 июня, 2016 Ответить
  4. Аватар fess 4 июля, 2016 Ответить
  5. Аватар Михаил 7 сентября, 2016 Ответить

Ответить

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: