Отладка и подготовка репозиториев#

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

Отладка приложений#

Запуск оболочки внутри песочницы#

Для интерактивной отладки вместо основного приложения можно запустить оболочку:

flatpak run --command=bash org.example.MyApp

Откроется bash внутри песочницы приложения с теми же разрешениями и той же файловой системой, которые видит само приложение. Можно исследовать содержимое /app и /usr и проверить наличие библиотек и конфигурации. Если bash в рантайме нет, используется sh:

flatpak run --command=sh org.example.MyApp

Режим разработки#

Флаг --devel снимает часть ограничений песочницы и монтирует SDK вместо рантайма (если SDK установлен):

flatpak run --devel org.example.MyApp

В этом режиме доступны инструменты разработки из SDK (компиляторы, отладчики) и разрешён системный вызов трассировки. В сочетании с оболочкой:

flatpak run --devel --command=bash org.example.MyApp

Подробный вывод#

Детальная информация о процессе запуска включается переменной окружения:

FLATPAK_DEBUG=1 flatpak run org.example.MyApp

Для отладки приложений GTK:

flatpak run --env=G_MESSAGES_DEBUG=all org.example.MyApp

Для отладки приложений Qt:

flatpak run --env=QT_LOGGING_RULES='*.debug=true' org.example.MyApp

Информация о приложении#

Общая информация:

flatpak info org.example.MyApp

Разрешения, метаданные и путь к файлам приложения:

flatpak info --show-permissions org.example.MyApp
flatpak info --show-metadata org.example.MyApp
flatpak info --show-location org.example.MyApp

Подключение к работающему приложению#

Команда flatpak enter подключается к песочнице уже запущенного приложения:

flatpak enter <PID> /bin/bash

Идентификатор процесса получают командой flatpak ps. Команда flatpak enter требует прав суперпользователя.

Переопределение разрешений#

Команда flatpak override меняет разрешения без пересборки приложения. Добавить разрешение:

flatpak override --user --share=network org.example.MyApp

Убрать разрешение:

flatpak override --user --nofilesystem=home org.example.MyApp

Посмотреть текущие переопределения и сбросить их:

flatpak override --user --show org.example.MyApp
flatpak override --user --reset org.example.MyApp

Переопределения сохраняются между запусками. Флаг --user применяет изменения только для текущего пользователя; без него изменения глобальны и требуют прав суперпользователя.

Типичные проблемы#

Приложение не запускается без сообщений об ошибке. Запустить оболочку и проверить наличие и зависимости бинарного файла:

flatpak run --command=bash org.example.MyApp
ls -la /app/bin/
ldd /app/bin/myapp

Отсутствует библиотека. Проверить, есть ли она в рантайме или приложении:

flatpak run --command=bash org.example.MyApp
find /usr/lib /app/lib -name "libexample*"

Приложение не видит файлы пользователя. Проверить разрешения файловой системы:

flatpak info --show-permissions org.example.MyApp | grep filesystems

Нет звука, сети или видеоускорения. Проверить наличие соответствующих разрешений (pulseaudio, network, dri) и при необходимости добавить их через flatpak override.

Подготовка репозиториев#

Файлы .flatpakrepo#

Файл .flatpakrepo упрощает подключение репозитория для пользователя. Это текстовый файл в формате INI со всеми параметрами подключения:

[Flatpak Repo]
Title=Название репозитория
Url=https://repo.example.com/flatpak
Homepage=https://example.com
Comment=Краткое описание репозитория
Description=Подробное описание репозитория
Icon=https://example.com/icon.png
GPGKey=<ключ в кодировке base64>

Обязательные поля - Title (отображаемое название) и Url (адрес репозитория). Остальные поля необязательны: адрес сайта, краткое и подробное описание, иконка и публичный GPG-ключ репозитория в кодировке base64.

Представление GPG-ключа в base64 получают так:

gpg --export <ключ> | base64 --wrap=0

Подключение репозитория через файл:

flatpak remote-add --if-not-exists <имя> <путь-или-url>.flatpakrepo

Файл можно разместить на веб-сервере. При открытии в браузере (если в системе установлен Flatpak) пользователю предложат подключить репозиторий.

flatpak build-sign#

Команда подписывает существующие коммиты в репозитории GPG-ключом. Применяется, когда коммит был экспортирован без подписи или нужно добавить подпись другим ключом.

Синтаксис:

flatpak build-sign [ПАРАМЕТРЫ] РЕПОЗИТОРИЙ [ИДЕНТИФИКАТОР [ВЕТКА]]

Если идентификатор не указан, подписываются все коммиты. Параметры: --gpg-sign=<ключ> (повторяемо), --gpg-homedir=<путь>, --runtime (подписать рантайм), --arch=<архитектура>.

Подписать конкретное приложение и все коммиты:

flatpak build-sign --gpg-sign=<ключ> repo org.example.MyApp stable
flatpak build-sign --gpg-sign=<ключ> repo

flatpak build-commit-from#

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

Синтаксис:

flatpak build-commit-from [ПАРАМЕТРЫ] DST-REPO DST-REF

Позиционные аргументы: целевой репозиторий и целевая ссылка (например, app/org.example.MyApp/x86_64/stable).

Основные параметры:

  • --src-repo=<путь> и --src-ref=<ссылка> - исходный репозиторий и ссылка, если отличаются от целевых.

  • --untrusted - не доверять источнику (пересчитать контрольные суммы).

  • --force - перезаписать существующий коммит.

  • --subject=<текст> (-s) и --body=<текст> (-b) - описание коммита.

  • --update-appstream - обновить данные AppStream.

  • --gpg-sign=<ключ> и --gpg-homedir=<путь> - подпись коммита.

  • --end-of-life=<причина> и --end-of-life-rebase=<идентификатор> - пометить как снятое с поддержки.

  • --collection-id=<идентификатор> - идентификатор набора репозитория.

Копирование приложения между репозиториями:

flatpak build-commit-from \
    --src-repo=repo-staging \
    --src-ref=app/org.example.MyApp/x86_64/beta \
    --gpg-sign=<ключ> \
    repo-production app/org.example.MyApp/x86_64/stable

Переподпись существующего коммита:

flatpak build-commit-from \
    --gpg-sign=<новый-ключ> \
    repo app/org.example.MyApp/x86_64/stable

Пометка приложения как устаревшего с перенаправлением:

flatpak build-commit-from \
    --end-of-life-rebase=org.example.NewApp \
    repo app/org.example.OldApp/x86_64/stable

Рабочий процесс публикации#

Типичный процесс подготовки репозитория к распространению:

  1. Сборка и экспорт - приложение собирается и экспортируется в локальный репозиторий командой flatpak build-export или инструментами AFT (см. Создание приложений (aft-app)).

  2. Подпись коммитов, если они не были подписаны при экспорте:

    flatpak build-sign --gpg-sign=<ключ> repo
    
  3. Обновление метаданных - пересоздание индекса и подпись summary:

    flatpak build-update-repo \
        --title="Название репозитория" \
        --generate-static-deltas \
        --gpg-sign=<ключ> \
        --prune \
        repo
    

    Подробное описание параметров flatpak build-update-repo - в блоке Ручная сборка командами flatpak build.

  4. Формирование файла .flatpakrepo для удобного подключения.

  5. Размещение - репозиторий и файл .flatpakrepo выкладываются на сервер.

  6. По желанию - создание бандлов для автономного распространения командой flatpak build-bundle (см. Ручная сборка командами flatpak build).