Отладка и подготовка репозиториев#
После сборки приложение нужно проверить в песочнице, а перед распространением - подготовить репозиторий. Здесь собраны штатные средства 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
Рабочий процесс публикации#
Типичный процесс подготовки репозитория к распространению:
Сборка и экспорт - приложение собирается и экспортируется в локальный репозиторий командой
flatpak build-exportили инструментами AFT (см. Создание приложений (aft-app)).Подпись коммитов, если они не были подписаны при экспорте:
flatpak build-sign --gpg-sign=<ключ> repo
Обновление метаданных - пересоздание индекса и подпись summary:
flatpak build-update-repo \ --title="Название репозитория" \ --generate-static-deltas \ --gpg-sign=<ключ> \ --prune \ repo
Подробное описание параметров
flatpak build-update-repo- в блоке Ручная сборка командами flatpak build.Формирование файла
.flatpakrepoдля удобного подключения.Размещение - репозиторий и файл
.flatpakrepoвыкладываются на сервер.По желанию - создание бандлов для автономного распространения командой
flatpak build-bundle(см. Ручная сборка командами flatpak build).