Библиотека сайта 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
.