Skip to content

Как работает сборка в ALT Hub? ​

Данный раздел посвящён описанию внутренних процессов сборки/пересборки компонентов для ALT Hub.

Все инструменты, используемые для развития и поддержания инфраструктуры ALT Hub находятся в организации alt-hub на ALT Linux Space.

Сборка приложений ​

  • Проверка содержимого YAML-манифеста — имеет поле id
  • Очистка сборочной среды (при использовании флага --clean)
    • Не очищаются уже пересобранные пакеты, OSTree-репозиторий и OCI-контейнер
  • Подготовка rootfs
  • Работа с 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-контейнер

Общие шаги ​

Преобразование манифеста ​

На этапе преобразования манифеста происходит удаление служебных конструкций из манифеста (modules).

Затем добавляется modules, который содержит модуль типа simple, копирующий чрут Hasher.

Пересборка пакетов ​

  • По packages формируется список пакетов для пересборки
    • Если пакет имеет тип binary, то он просто распаковывается в rootfs через mkaptbox
  • Из репозитория получаются хеш-суммы пакетов
  • По полученным хеш-суммам проверяется, был ли пакет уже пересобран (находится в кеше)
  • Пакет будет пересобран, если:
    • пакет не найден в кеше;
    • хеш пакета или патча на уровне ALT Hub (если такой есть) не совпали с содержимым кеша;
  • Удовлетворение зависимостей
  • После пересборки пакетов, которые не были в кеше, они распаковываются в rootfs

Удовлетворение зависимостей ​

  • Через mkaptbox формируется список зависимостей для пакетов из packages
  • Через Flatpak формируется список пакетов, которые входят в платформу и её расширений
    • Flatpak-репозиторий, содержащий платформу и расширения указывается через флаг --remote-repo при запуске
  • Список пакетов из платформы и её расширений вычитается из списка зависимостей для пакетов из 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-файл