Процесс сборки приложения#
Когда запускается сборка (команда build или package), aft-app выполняет несколько шагов и показывает их ход в журнале. Понимание этих шагов помогает читать журнал и находить причину, если сборка остановилась.
Шаги сборки#
Журнал нумерует двенадцать шагов; поиск уязвимостей идёт после них и своего номера не имеет.
Проверка окружения. Инструмент убеждается, что в системе есть всё нужное для выбранного источника: средства Flatpak и работы с пакетами, а для отдельных источников - curl, ldd, dpkg или каталог с исходниками.
Инициализация Flatpak. Создаётся каркас Flatpak-приложения под выбранную среду выполнения и SDK.
Анализ зависимостей. Для пакета из репозитория, локального deb и deb по ссылке строится дерево зависимостей. Для архива и сборки из исходников шаг пропускается, а для переноса из системы вместо дерева собираются файлы программы и её пакеты-владельцы.
Сравнение со средой выполнения. Из состава убирается то, что среда уже даёт; применяются дополнительные, принудительные и исключаемые пакеты.
Скачивание пакетов. Недостающие пакеты загружаются и кэшируются. Пакет, который не удалось скачать, останавливает сборку со списком имён.
Распаковка и организация. Содержимое раскладывается в структуру приложения, исправляются зашитые пути, desktop-файлы и иконки переименовываются под идентификатор приложения, в desktop-файле правятся строки запуска и иконки.
Генерация AppStream. Готовится или дополняется файл метаданных AppStream.
Финализация Flatpak. Приложению назначаются разрешения песочницы, точки расширения и команда запуска, наследуются точки расширения среды.
Подписание ELF. Если включена подпись по ГОСТ, исполняемые файлы подписываются через bsign.
Экспорт ключей bsign. Публичный ключ выкладывается в приложение, чтобы подпись можно было проверить на целевой системе.
Выполнение команд перед экспортом. Отрабатывают команды из
commands.pre-export.Экспорт в репозиторий. Приложение экспортируется в репозиторий OSTree, при необходимости подписывается ключом GPG, собирается одиночный файл .flatpak, обновляются метаданные репозитория.
После экспорта, если поиск уязвимостей включён, готовая сборка прогоняется через проверку.
Какие шаги выполняются, зависит от настроек: разбор зависимостей идёт не для всех источников, а подпись, поиск уязвимостей и одиночный файл - только если их включили.
Как читать счётчики сравнения#
Шаг сравнения со средой выполнения выводит три числа, и их легко прочитать наоборот. Они говорят не о том, чего не хватает для сборки, а о том, откуда возьмётся каждая зависимость:
В runtime - зависимости, которые уже даёт среда выполнения. В приложение они не попадут.
Отсутствует - зависимости, которых в среде нет. Именно их и предстоит скачать и вложить в приложение. Это рабочее состояние, а не ошибка.
Исключено - зависимости, убранные вручную через
dependencies.exclude.
Имена пакетов на этом шаге печатаются только в подробном режиме (-v или
--log-level debug). Без него имена видны на следующем шаге, по мере
скачивания.
Когда сборка останавливается#
Нехватка пакета всегда останавливает сборку, отдельного строгого режима для этого не нужно. Сборка прерывается, если:
основного пакета нет в подключённых репозиториях;
какой-то из нужных пакетов не удалось скачать. В сообщении перечислены имена;
пакет недоступен в компонентах, перечисленных в
source.repository.components. В сообщении перечислены имена и подсказка добавить нужный компонент;закреплённой версии пакета не существует (см. Источники программы);
файл, указанный в
source.local.additionalPaths, не найден.
Собранное наполовину приложение в репозиторий не попадает: проверки идут до экспорта.
Standalone-сборка идёт по своей последовательности из десяти шагов: вместо разбора зависимостей и скачивания пакетов в приложение импортируется готовая система, а в конце собираются и экспортируются встроенная среда выполнения и её SDK.
Где искать результат#
Готовое приложение попадает в репозиторий OSTree (по умолчанию ./repo).
Скачанные пакеты остаются в кэше (~/.cache/aft-app); очистить его можно
командой clean. Если сборка остановилась с ошибкой, её причина видна в журнале
на соответствующем шаге.