Манифесты

Входными данными для flatpak-builder является файл JSON или YAML, который описывает параметры для создания приложения, а также инструкции для каждого из модулей, которые должны быть построены. Этот файл называется манифестом.

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

Файлы манифеста должны получить названия с использованием идентификатора приложения. Например, файл манифеста для словаря GNOME называется org.gnome.Dictionary.yml. Эта страница использует этот файл манифеста, для всех своих примеров.

Полный список всех свойств, которые могут быть указаны в файлах манифеста, можно найти в Справочник команд Flatpak Builder, а также на странице руководства``flatpak-manifest``.

Основные свойства

Each manifest file should specify basic information about the application that is to be built, including the id, runtime, runtime-version, sdk and command parameters. These properties are typically specified at the beginning of the file.

Например, манифест GNOME Dictionary включает:

id: org.gnome.Dictionary
runtime: org.gnome.Platform
runtime-version: '45'
sdk: org.gnome.Sdk
command: gnome-dictionary

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

Переименование файла

Экспорт - это файлы приложения, которые доступны хосту, и включают такие вещи, как файл и значок приложения .desktop.

Имена файлов, экспортируемых Flatpak, должны иметь префикс с использованием идентификатора приложения, например org.gnome.Dictionary.desktop. Лучший способ сделать это - переименовать эти файлы прямо в папке приложения.

Если переименование экспортируемых файлов для использования идентификатора приложения невозможно, flatpak-builder позволяет их переименовывать в процессе сборки. Это можно сделать, указав одно из следующих свойств в манифесте:

  • rename-icon - переименовать значок приложения

  • rename-desktop-file - переименовать имя файла .desktop

  • rename-appdata-file - rename the MetaInfo file

Каждое из этих свойств принимает имя исходного файла, который нужно переименовать. Затем flatpak-builder автоматически переименовывает файл в соответствии с идентификатором приложения. Обратите внимание, что этот метод переименования может вызвать внутренние конфликты именования, и поэтому переименование файлов в дереве является наиболее надежным подходом.

Завершение

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

Раздел манифеста окончательной обработки использует свойство finish-args, которое можно увидеть в файле манифеста словаря:

finish-args:
  # X11 + XShm access
  - --share=ipc
  - --socket=fallback-x11
  # Wayland access
  - --socket=wayland
  # GPU acceleration if needed
  - --device=dri
  # Needs to talk to the network:
  - --share=network
  # Needs to save files locally
  - --filesystem=xdg-documents

Guidance on which permissions to use can be found in the Разрешения песочницы.

Если вас интересует последний аргумент finish, см. Это сообщение в блоге.

Очистка

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

Во-первых, можно включить список шаблонов имен файлов:

cleanup:
  - '/include'
  - '/bin/foo-*'
  - '*.a'

Второе свойство очистки - это список команд, которые выполняются на этапе очистки:

cleanup-commands:
  - 'sed s/foo/bar/ /bin/app.sh'

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

Модули

В списке модулей указывается каждый из модулей, которые должны быть построены как часть процесса сборки. Один из этих модулей - это само приложение, а другие модули - это зависимости и библиотеки, которые входят в состав Flatpak. В то время как простые приложения могут указывать только один или два модуля и, следовательно, иметь короткие разделы модулей, некоторые приложения могут объединять множество модулей и, следовательно, иметь длинные разделы модулей.

Раздел модулей GNOME Dictionary’s короткий, поскольку он содержит только само приложение и выглядит так:

modules:
  - name: gnome-dictionary
    buildsystem: meson
    config-opts:
      - -Dbuild_man=false
    sources:
      - type: archive
        url: https://download.gnome.org/sources/gnome-dictionary/3.26/gnome-dictionary-3.26.1.tar.xz
        sha256: 16b8bc248dcf68987826d5e39234b1bb7fd24a2607fcdbf4258fde88f012f300
      - type: patch
        path: appdata_oars.patch

Как видно, у каждого указанного модуля есть имя (которое может быть присвоено произвольно) и список источники У каждого источника есть тип, и доступные типы включают:

  • archive - .tar или .zip архивные файлы

  • git - Репозитории Git

  • bzr - репозитории Bazaar

  • file - локальные/удаленные файлы (они копируются в исходный каталог)

  • dir - локальные каталоги (они копируются в исходный каталог)

  • script - список команд оболочки (они помещаются в файл сценария оболочки)

  • shell - массив команд оболочки, которые запускаются во время извлечения исходного кода

  • patch - патч (применяются к исходному каталогу)

  • extra-data - данные, которые можно загрузить во время установки; может включать архивные или пакетные файлы

Different properties are available for each source type, which are listed in the Module Sources.

Поддерживаемые системы сборки

Модули могут быть построены с использованием различных систем сборки, в том числе:

Также доступен «простой» метод сборки, который позволяет указать серию команд.

Общие модули

Общие модули (или общие модули) — это репозиторий, содержащий различные манифесты для создания общих библиотек. Он предназначен для использования в качестве подмодуля git.

Чтобы добавить его в свой репозиторий, выполните следующую команду:

git submodule add https://github.com/flathub/shared-modules.git

Затем добавьте любой модуль, который вы хотите. В этом примере мы будем использовать gtk2:

modules:
  - shared-modules/gtk2/gtk2.json

Чтобы обновить подмодуль, выполните эту команду:

git submodule update --remote --merge

Чтобы удалить подмодуль, выполните следующие команды:

git submodule deinit -f -- shared-modules
rm -rf .git/modules/shared-modules
git rm -f shared-modules
rm .gitmodules

Инструменты для создания Flatpak

Flatpak Builder Tools (или flatpak-builder-tools) <https://github.com/flatpak/flatpak-builder-tools> — это набор скриптов, помогающих использовать flatpak-builder. В этом репозитории каждый каталог содержит инструкции по созданию манифеста для соответствующей платформы.

Примеры манифестов

Полный манифест для словаря GNOME, созданный на основе Git <https://github.com/flathub/org.gnome.Dictionary/blob/master/org.gnome.Dictionary.yml>`_. Также можно просматривать все манифесты, размещенные на Flathub <https://github.com/flathub>`_.