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

UnixForum





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

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

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

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

Фактически, специфичными для приложения "Словарь GNOME" являются:

  • Идентификатор приложения
  • Строка URL для загрузки файла архива с исходными кодами приложения
  • Имя бинарного файла приложения
  • Необходимые для корректной работы приложения права доступа

Чем это объясняется?

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

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

Эквивалентом действий, выполняемых в ручном режиме во второй статье серии, является следующий документ формата json:

{ 
  "app-id": "org.gnome.Dictionary", 
  "runtime": "org.gnome.Platform", 
  "runtime-version": "3.20", 
  "sdk": "org.gnome.Sdk", 
  "command": "gnome-dictionary", 
  "finish-args": [ 
     "--socket=x11", 
     "--share=network"  
  ], 
  "modules": [ 
    { 
      "name": "gnome-dictionary", 
      "sources": [ 
        { 
          "type": "archive", 
          "url": "https://download.gnome.org/sources/gnome-dictionary/3.20/gnome-dictionary-3.20.0.tar.xz", 
          "sha256": "efb36377d46eff9291d3b8fec37baab2355f9dc8bc7edb791b6a625574716121" 
        } 
      ] 
    } 
  ] 
}

Если вы сохраните приведенный выше текст в файле с именем org.gnome.Dictionary.json, вы сможете собрать и экспортировать приложение с помощью следующей команды:

$ xdg-app-builder --repo=repo appdir3 org.gnome.Dictionary.json

Для тестирования корректности сборки приложения вы можете воспользоваться следующими командами:

$ xdg-app --user update org.gnome.Dictionary 
$ xdg-app run org.gnome.Dictionary

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

Однако, даже в случае использования данного простого файла осуществляется ряд дополнительных полезных операций:

  • Проверяется контрольная сумма загруженных архивов с исходными кодами приложения и модулей с использованием алгоритма sha256.
  • Сборка всех программных компонентов из их исходных кодов осуществляется в рамках одной и той же директории (/run/build) для гарантии лучшей повторяемости сборок.
  • В процессе сборки программных компонентов сборочным инструментам не предоставляется доступ к каким-либо элементам файловой системы используемой для сборки машины за исключением директории, в которую распаковываются исходные коды этих компонентов. Это обстоятельство сводит на нет фактор влияния особенностей файловой системы используемой для сборки машины на процесс сборки и результирующее приложение.
  • Вся отладочная информация из бинарных файлов автоматически извлекается в отдельные файлы, которые перемещаются в отдельное устанавливаемое окружение исполнения под названием org.gnome.Dictionary.Debug.
  • Файлы переводов также перемещаются в отдельные устанавливаемые окружения исполнения с именами org.gnome.Dictionary.Locale.$язык.
  • На каждом этапе сборки осуществляется кэширование данных, поэтому в том случае, если вы захотите пересобрать приложение, будут пересобраны лишь те модули, исходный код которых подвергся изменениям.

При этом инструмент xdg-app-builder имеет ряд полезных функций. Одной из самых очевидных является функция сборки множества модулей вместе с приложением, причем для сборки каждого из модулей могут использоваться несколько источников исходных кодов. Сами источники исходных кодов могут быть различных типов. На данный момент поддерживаются как архивы различных форматов (файлы с расширениями .tar, .zip), так и репозитории исходного кода git, bzr, файлы патчей, а также команды командной оболочки.

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

"cleanup": [ "/include", "/bin/foo-*", "*.a" ] 
"cleanup-commands": [ "sed s/foo/bar/ /bin/app.sh" ]

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

Другая полезная функция данного инструмента связана со свойствами rename-icon, rename-desktop-file и rename-appdata, которые позволяют переименовывать файлы иконок, элементов меню приложений и описаний приложений с целью соответствия идентификаторам приложений. Вам придется выполнять эти операции, так как в большинстве случаев разработчики приложений не используют их идентификаторы в качестве префиксов имен упомянутых файлов, что противоречит правилам экспорта фалов приложений в изолированное окружение xdg-app.

Инструмент xdg-app-builder уже используется для создания всех ночных сборок приложений проекта GNOME, поэтому по данному адресу вы можете найти множество примеров файлов описания сборок формата json, одним из которых является файл описания сборки версии "Словаря GNOME" из git. Я также подготовил несколько дополнительных примеров этих файлов, которые доступны по данному адресу.

Для ознакомления со всеми свойствами, поддерживаемыми инструментом xdg-app-builder, следует обратиться к странице руководства man xdg-app-builder.

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