Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Сборка приложения для запуска в изолированном окружении xdg-app - часть 2

Оригинал: Building an xdg-app - part 2
Автор: Alexander Larsson
Дата публикации: 19 февраля 2016 г.
Перевод: А. Панин
Дата перевода: 19 апреля 2016 г.

И снова добро пожаловать в серию статей о сборке приложений для запуска в изолированном окружении xdg-app. В первой части мы установили все необходимые программные компоненты и собрали наше первое приложение в ручном режиме. В данной статье мы будем собирать более сложное приложение с помощью основных утилит xdg-app.

В качестве рассматриваемого приложения я выбрал "Словарь GNOME", так как это достаточно простое приложение без дополнительных зависимостей. Для сборки этого приложения мы будем использовать SDK (Software Development Kit - набор инструментов для разработки программного обеспечения), который соответствует окружению исполнения, установленному в предыдущей статье серии. SDK содержит инструментарий разработчика и заголовочные файлы, необходимые для сборки приложений, использующих библиотеки окружения исполнения в процессе работы.

В первую очередь нам придется установить SDK. Он включает большое количество различных программных компонентов, поэтому установка может занять некоторое время:

$ xdg-app --user install gnome org.gnome.Sdk 3.20

Кроме того, нам понадобятся исходные коды приложения, которое мы хотим собирать:

$ wget https://download.gnome.org/sources/gnome-dictionary/3.20/gnome-dictionary-3.20.0.tar.xz

Как и в прошлый раз, мы начнем работу с создания директории приложения, в которую оно будет установлено. Однако, в этот раз мы будем использовать команду build-init для автоматического создания этой директории:

$ xdg-app build-init appdir2 org.gnome.Dictionary org.gnome.Sdk org.gnome.Platform 3.20

В результате будет создана директория appdir2 с файлом метаданных и корректной структурой поддиректорий. Единственное отличие данной директории от директории, созданной в предыдущей статье серии, будет заключаться в содержании файла метаданных, а именно, в упоминании SDK наряду с окружением исполнения. По своей сути SDK является всего лишь окружением исполнения, которое используется в процессе сборки приложения, а не в процессе работы с ним пользователя.

После того, как мы указали требуемый SDK, мы можем использовать команду xdg-app build. Она очень похожа на команду xdg-app run, за исключением того, что она работает с директорией сборки приложения, а не с установленным приложением, а также использует SDK вместо обычного окружения исполнения. Кроме того, она позволяет работать со всеми файлами из изолированного окружения. Например, вы можете выполнить следующие команды:

$ xdg-app build appdir2 touch /app/some_file 
$ xdg-app build appdir2 ls -l /app 
total 0 
-rw-r--r-- 1 alex wheel 0 Feb 19 16:03 some_file

Очевидно, что с помощью первой команды в директории приложения создается файл appdir2/files/some_file.

С помощью данной команды вы также можете осуществить сборку приложения таким же образом, как это делается в обычных условиях, но в этот раз в изолированном окружении. Ввиду того, что все действия осуществляются в изолированном окружении, в процессе сборки приложения будут автоматически задействованы компилятор и другие инструменты из состава SDK. "Словарь GNOME" отлично собирается с помощью классической последовательности команд configure; make; make install, поэтому нам придется лишь добавить к каждой из перечисленных команд префикс xdg-app:

$ tar xvf gnome-dictionary-3.20.0.tar.xz 
$ cd gnome-dictionary-3.20.0/ 
$ xdg-app build ../appdir2 ./configure --prefix=/app 
$ xdg-app build ../appdir2 make 
$ xdg-app build ../appdir2 make install 
$ cd ..

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

$ xdg-app build-finish appdir2 --socket=x11 --share=network --command=gnome-dictionary

Данная команда добавляет дополнительную информацию в файл метаданных и создает директорию export, о которой мы поговорим позднее. Вы можете установить и протестировать работоспособность приложения с помощью следующей последовательности команд:

$ xdg-app build-export repo appdir2 
$ xdg-app --user install tutorial-repo org.gnome.Dictionary 
$ xdg-app run org.gnome.Dictionary

В процессе тестирования вы наверняка увидите предупреждения, так как мы пока не предоставили приложению доступ к базе данных настроек dconf, но в остальном приложение должно корректно выполнять свои функции.

Стоит остановиться подробнее и на упомянутой ранее директории директории export. Если вы используете команду для вывода структуры поддиректорий директории appdir2/export/, вы наверняка увидите следующую картину:

appdir2/export 
└── share 
    ├── applications 
    │   └── org.gnome.Dictionary.desktop 
    └── dbus-1 
        └── services 
            └── org.gnome.Dictionary.service

Причем после установки приложения соответствующая структура директорий вместе с файлами будет экспортирована в директорию ~/.local/share/xdg-app/exports/. Пакет xdg-app устанавливает переменную окружения XDG_DATA_DIRS для указания пути к этой директории и это означает, что ваше окружение рабочего стола наверняка будет использовать ее. Данные пояснения звучат по меньшей мере запутанно, но вам в любом случае стоит уяснить следующее: благодаря этой директории сразу же после установки приложения оно будет автоматически появляться в меню запуска приложений вашего окружения рабочего стола среди обычных приложений.

Существует и одно ограничение, относящееся к экспортируемым объектам файловой системы. Все имена файлов (но не имена директорий) должны включать идентификатор приложения в качестве префикса. Это требование выполняется и в нашем случае, ведь имя файла элемента меню приложений org.gnome.Dectionary.desktop содержит установленный нами идентификатор приложения. Данное ограничение позволяет гарантировать отсутствие конфликтов между приложениями, установленными в рамках изолированных окружений, а также в рамках системы.

Подводя итог, следует сказать о том, что мы успешно собрали простое приложение без зависимостей для запуска в изолированном окружении. В том случае, если бы приложение имело зависимости, не включенные в состав окружения исполнения, нам пришлось бы собирать и их. Следовательно, увеличилось бы количество циклов исполнения последовательности команд configure; make; make install. Хотя исполнение этих команд в большинстве случаев и не связано с какими-либо сложностями, в любом случае приходится выполнять большой объем однообразной работы в ручном режиме. В следующей статье серии мы рассмотрим методику автоматизации этой работы с помощью инструмента xdg-app-builder.