Как работает сборка в ALT Hub?
Данный раздел посвящён описанию внутренних процессов сборки/пересборки компонентов для ALT Hub.
Все инструменты, используемые для развития и поддержания инфраструктуры ALT Hub находятся в организации alt-hub на ALT Linux Space.
Сборка приложений
- Проверка содержимого YAML-манифеста — имеет поле
id - Очистка сборочной среды (при использовании флага
--clean)- Не очищаются уже пересобранные пакеты, OSTree-репозиторий и OCI-контейнер
- Подготовка rootfs
- Если в манифесте отсутствует раздел
packages, то напрямую происходит сборка через Flatpak Builder с преобразованием манифеста (см. раздел «Преобразование манифеста») - В ином случае происходит пересборка пакетов (см. раздел «Пересборка пакетов»)
- Если в манифесте отсутствует раздел
- Работа с rootfs
- Выполнение кода из
build-commands - Обновление GSchema
- Проверка на наличие
.desktop- и.metainfo.xml-файлов
- Выполнение кода из
- Формирование артефакта сборки
Сборка платформы
- Проверка содержимого YAML-манифеста — имеет поле
platform-id - Очистка сборочной среды (при использовании флага
--clean)- Не очищаются уже пересобранные пакеты, OSTree-репозиторий и OCI-контейнер
- Подготовка rootfs
- Инициализация Hasher
- Установка пакетов из списка
packages - Фильтрация списка пакетов
- Работа с rootfs
- Копирование файлов из rootfs по белому списку
- Создание ссылки
/usr -> / - Создание каталогов для расширений внутри rootfs
- Обновление
/etc/ld.so.conf
- Формирование расширения с переводами
- Формирование файла матаданных для рантайма, который содержит список задействованных пакетов
- Формирование артефакта сборки
Сборка расширения
Подсказка
Тип расширения (для приложения или для платформы) определяется по тому, есть у него id или platform-id
- Проверка содержимого YAML-манифеста — имеет
build-extension: true - Очистка сборочной среды (при использовании флага
--clean)- Не очищаются уже пересобранные пакеты, OSTree-репозиторий и OCI-контейнер
- Подготовка rootfs
- Работа с rootfs
- Выполнение кода из
build-commands - Обновление GSchema
- Выполнение кода из
Общие шаги
Преобразование манифеста
На этапе преобразования манифеста происходит удаление служебных конструкций из манифеста (modules).
Затем добавляется modules, который содержит модуль типа simple, копирующий чрут Hasher.
Пересборка пакетов
- По
packagesформируется список пакетов для пересборки- Если пакет имеет тип
binary, то он просто распаковывается в rootfs черезmkaptbox
- Если пакет имеет тип
- Из репозитория получаются хеш-суммы пакетов
- По полученным хеш-суммам проверяется, был ли пакет уже пересобран (находится в кеше)
- Пакет будет пересобран, если:
- пакет не найден в кеше;
- хеш пакета или патча на уровне ALT Hub (если такой есть) не совпали с содержимым кеша;
- Удовлетворение зависимостей
- После пересборки пакетов, которые не были в кеше, они распаковываются в rootfs
Удовлетворение зависимостей
- Через
mkaptboxформируется список зависимостей для пакетов изpackages - Через Flatpak формируется список пакетов, которые входят в платформу и её расширений
- Flatpak-репозиторий, содержащий платформу и расширения указывается через флаг
--remote-repoпри запуске
- Flatpak-репозиторий, содержащий платформу и расширения указывается через флаг
- Список пакетов из платформы и её расширений вычитается из списка зависимостей для пакетов из
packages - Пакеты из списка зависимостей скачиваются через
curl - Скачанные зависимости распаковываются в rootfs через
bsdtar, заменяя/usrна/app
Формирование расширения с переводами
- Локали копируются
/share/localeв директорию расширения/usr/share/runtime/locale - Создаются ссылки
/share/locale/<LANG> ->/usr/share/runtime/locale/<LANG>, где<LANG>— код языка - В директории
extensions/<ID>.Locale(где<ID>— идентификатор платформы) создаётся файл.metainfo.xmlс информацией о расширении
Формирование артефакта сборки
- По умолчанию будет сформирован OCI-контейнер
- Если был указан флаг
--ostree, дополнительно будет формирован OSTree-репозиторий - Если был указан флаг
--with-bundle, дополнительно будет формирован.flatpak-файл