Приложение из пакета репозитория#
Пример проходит весь путь для самого частого случая: программа есть в репозиториях 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