Приложение из пакета репозитория#

Пример проходит весь путь для самого частого случая: программа есть в репозиториях Astra, нужно получить из неё Flatpak-приложение, установить и запустить. За основу взят текстовый редактор с графическим интерфейсом на GTK.

Разбор перед сборкой#

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

aft-app analyze --package gedit

Анализ выводит определённый тип источника, угаданные метаданные, список сред-кандидатов с покрытием зависимостей, разбор зависимостей на покрытые средой и недостающие, предложенные разрешения и найденные имена D-Bus.

Для программы на GTK в списке кандидатов первой окажется org.astra.Gtk: она закрывает и сам GTK, и вытянутые за ним библиотеки. Чтобы посчитать покрытие для конкретной версии:

aft-app analyze --package gedit --runtime org.astra.Gtk --runtime-version 1.8.6

Из вывода берутся три вещи: имя среды, список того, что придётся доложить, и черновик разрешений.

Сборка флагами#

Быстрый путь - собрать сразу командой package. Сборка меняет систему и требует прав администратора:

sudo aft-app package \
    --id ru.example.Gedit \
    --name "Текстовый редактор" \
    --version 46.2 \
    --runtime org.astra.Gtk --runtime-version 1.8.6 \
    --package gedit \
    --command gedit \
    --socket wayland --socket fallback-x11 \
    --device dri \
    --share ipc \
    --filesystem xdg-documents \
    --filesystem xdg-download \
    --persist .config/gedit \
    -o ./repo

Разрешения перечислены по минимуму: графика через Wayland с откатом на X11, доступ к видеокарте, обмен данными между процессами, две пользовательские папки и свой каталог настроек. Доступ ко всей домашней папке приложению не нужен.

Переход на манифест#

Те же флаги можно выгрузить в манифест и дальше вести сборку через него. Команда не собирает, права администратора не нужны:

aft-app generate-yaml \
    --id ru.example.Gedit \
    --name "Текстовый редактор" \
    --runtime org.astra.Gtk --runtime-version 1.8.6 \
    --package gedit --command gedit \
    --socket wayland --socket fallback-x11 --device dri \
    --filesystem xdg-documents \
    --out-yaml gedit.yaml

Получится файл, который дальше правится руками и хранится вместе с остальными файлами проекта:

version: "1.0"

metadata:
  id: ru.example.Gedit
  name: "Текстовый редактор"
  version: "46.2"
  arch: amd64
  branch: stable

runtime:
  id: org.astra.Gtk
  version: "1.8.6"
  sdk: org.astra.gtkSdk

source:
  type: repository
  repository:
    package: gedit
    version: latest
    components: [main]

dependencies:
  analyze: true

files:
  command: gedit

permissions:
  sockets: [wayland, fallback-x11]
  devices: [dri]
  shares: [ipc]
  filesystems: [xdg-documents, xdg-download]
  persist: [.config/gedit]

build:
  sbom: true

export:
  repository: ./repo
  generate-static-deltas: true

Проверка и сборка по манифесту:

aft-app validate gedit.yaml
sudo aft-app build gedit.yaml

Установка и запуск#

Собранное лежит в каталоге ./repo. Чтобы поставить его на этой же машине, репозиторий подключается как локальный:

sudo flatpak remote-add --if-not-exists --no-gpg-verify local-repo ./repo
sudo flatpak install -y local-repo ru.example.Gedit
flatpak run ru.example.Gedit

Ключ --no-gpg-verify уместен только для проверки на своей машине. Для раздачи пользователям репозиторий подписывается, как описано в разделе Репозиторий вендора.

Проверка результата#

Установленное приложение стоит прогнать через анализатор: он разбирает метаданные, desktop-файл, иконки, разрешения, бинарники, библиотеки и подписи:

aft-analyzer ru.example.Gedit

Код возврата 0 означает успех, 1 - предупреждения, 2 - ошибки. Отчёт с подробностями и картой зависимостей формируется флагом --report.

Поиск известных уязвимостей по составу ПО:

aft-scanner scan ru.example.Gedit --fail-on=high

Если чего-то не хватает#

Приложение запускается, но не видит своих файлов - значит пути зашиты в бинарник. Что именно программа ищет, покажет aft-app analyze в разделе про astra-shim; как это закрыть, описано в разделе Совместимость с песочницей (astra-shim).

Приложение не стартует и жалуется на отсутствующую библиотеку - её нет ни в среде, ни в сборке. Пакет добавляется в dependencies.additional; если он есть в среде, но нужен своей версией, то в dependencies.force.

Окно не появляется и в журнале видны ошибки доступа - не хватает разрешения. Проверить, с какими разрешениями приложение установлено, можно так:

flatpak info --show-permissions ru.example.Gedit