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

UnixForum





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

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

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

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

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

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

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

Фундаментальной концепцией технологии xdg-app является разделение окружений исполнения и приложений. Каждое из приложений должно зависеть от окружения исполнения, которое содержит основные используемые этим приложением библиотеки. Окружения исполнения обычно одновременно используются множеством приложений, причем пользователь может установить в свою систему сразу несколько окружений исполнения.

В данной статье мы будем использовать ночную сборку окружения исполнения проекта GNOME. Она доступна в репозитории xdg-app, расположенном по адресу sdk.gnome.org. Если вы уже пробовали работать с этим окружением исполнения, вам ничего не нужно делать, если нет - следует установить его в систему следующим образом:

$ wget https://people.gnome.org/~alexl/keys/nightly.gpg
$ xdg-app --user remote-add --gpg-key=nightly.gpg gnome-nightly http://sdk.gnome.org/nightly/repo
$ xdg-app --user install gnome-nightly org.gnome.Platform

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

$ xdg-app --user update org.gnome.Platform

Теперь у нас есть все необходимое для сборки простого приложения с целью последующего запуска в изолированном окружении. Для начала давайте создадим простейшее приложение. Сохраните следующие строки в файле с именем hello.sh:

#!/bin/sh
echo "Hello world, from a sandbox"

Теперь нужно систематизировать информацию, относящуюся к нашему приложению. В окружении xdg-app для хранения этой информации используется файл с парами "ключ-значение" с именем meta-data. В случае рассматриваемого простейшего приложения этот файл будет содержать достаточно малый объем информации, поэтому мы можем создать его вручную:

[Application]
name=org.test.Hello
runtime=org.gnome.Platform/x86_64/master
command=hello.sh

Как вы видите, в данном файле приводятся идентификаторы приложения (org.test.Hello), окружения исполнения, а также команда, с помощью которой должен осуществляться запуск приложения.

На самом деле, окружению xdg-app не требуется больший объем информации, но при этом каждое приложение и должно иметь собственную структуру директорий. Располагая этой информацией, мы можем создать директорию приложения appdir со следующей структурой поддиректорий и разместить исполняемый файл нашего приложения в одной из них следующим образом:

$ mkdir appdir
$ mkdir appdir/files
$ mkdir appdir/files/bin
$ mkdir appdir/export
$ cp metadata appdir/
$ cp hello.sh appdir/files/bin/
$ chmod a+x appdir/files/bin/hello.sh

Для того, чтобы утилита xdg-app могла установить наше приложение, мы должны разместить его в репозитории. Это делается с помощью команды build-export:

$ xdg-app build-export repo appdir

Данная команда позволит инициализировать локальный репозиторий в рамках директории "repo" и экспортировать приложение в него. Мы можем протестировать корректность ее работы с помощью следующих команд:

$ xdg-app --user remote-add --no-gpg-verify tutorial-repo repo
$ xdg-app --user install tutorial-repo org.test.Hello
$ xdg-app run org.test.Hello

В результате с помощью терминала должна быть выведена строка "Hello world, from a sandbox" и это означает, что мы только что создали, упаковали, установили в систему и запустили наше первое приложение для изолированного окружения xdg-app!

Если вы желаете немного изучить изолированное окружение, вы можете воспользоваться аргументом --command=sh утилиты xdg-app, который позволит вам воспользоваться командной оболочкой, запущенной в рамках этого окружения, для изучения его структуры. Например:

[alex@localhost ~]$ xdg-app run --command=sh org.test.Hello
sh-4.3$ ls -lR /app
/app:
total 0
drwxr-xr-x 1 alex wheel 16 jan 1 1970 bin
/app/bin:
total 4
-rwxr-xr-x 2 alex wheel 45 jan 1 1970 hello.sh
sh-4.3$ echo $PATH
/app/bin:/usr/bin
sh-4.3$ hello.sh
Hello world, from a sandbox
sh-4.3$ ls -la ~/
total 0
drwxr-xr-x 3 alex wheel 60 feb 19 16:11 .
drwxr-xr-x 3 alex wheel 60 feb 19 16:11 ..
drwxr-xr-x 3 alex wheel 60 feb 19 16:11 .var
sh-4.3$ ls ~/.var/app/org.test.Hello/
cache  config  data

Несложно догадаться, что в рамках изолированного окружения все файлы приложения расположены в директории /app, а переменная окружения PATH указывает на директорию /app/bin, что означает, что вы можете без проблем запустить его. Также очевидно, что по умолчанию приложение не имеет доступа к каким-либо файлам из домашней директории пользователя (она пуста) за исключением директории ~/.var/app/org.test.Hello, в которой оно хранит свои данные. Также вы можете исследовать директорию /usr, в которой хранятся файлы окружения исполнения.

На этом все. Это была лишь вводная статья из серии статей по сборке приложений для запуска в изолированном окружении xdg-app; в следующей статье мы рассмотрим вопрос использования команды xdg-app build и SDK для сборки более сложных приложений.