Процесс сборки среды выполнения#
Когда запускается сборка среды (команда build, create или import), aft-runtime выполняет несколько шагов и показывает их ход в журнале. Понимание этих шагов помогает читать журнал и находить причину, если сборка остановилась.
Шаги сборки#
Журнал нумерует восемь шагов; поиск уязвимостей идёт после них и своего номера не имеет.
Создание базовой системы. В зависимости от источника система собирается через debootstrap, извлекается из Docker-образа или импортируется из готового rootfs.
Настройка системы. Подключаются дополнительные репозитории, устанавливаются пакеты среды, выполняются команды настройки, очищается кэш пакетов и, если включено, удаляется документация.
Создание структуры runtime. Система приводится к структуре Flatpak-runtime, формируются метаданные, включая объявленные точки расширения и переменные окружения.
Создание SDK. Если включено, отдельно собирается SDK-вариант с заголовками, компиляторами и инструментами разработки.
Генерация состава ПО. Если включена, создаётся состав ПО со всеми установленными пакетами и встраивается в среду.
Подписание ELF. Если включена подпись по ГОСТ, бинарники подписываются через bsign.
Экспорт ключей bsign. Публичные ключи выкладываются в среду, чтобы подпись можно было проверить на целевой системе.
Экспорт в репозиторий. Среда и SDK экспортируются в репозиторий OSTree, при необходимости подписываются ключом GPG, обновляются метаданные репозитория.
После экспорта, если поиск уязвимостей включён, готовая среда прогоняется через проверку.
Какие шаги выполняются, зависит от настроек: SDK, состав ПО, подпись и поиск уязвимостей делаются только если их включили.
Настройка системы идёт в изолированном окружении, которому на время сборки подставляются разрешение имён и минимальный набор узлов устройств. Подставленное снимается после настройки и в готовую среду не попадает. Сбой обновления списков пакетов останавливает сборку сразу, не доводя до установки пакетов.
Где искать результат#
Готовая среда попадает в репозиторий OSTree (по умолчанию ./repo).
Промежуточные файлы остаются в рабочем каталоге (по умолчанию ./build_dir);
удалить их можно командой clean. Если сборка остановилась с ошибкой, её причина
видна в журнале на соответствующем шаге.