montana/_internal-private/MontanaOS-archived-20260521/BUILD.md
2026-05-26 21:14:51 +03:00

4.0 KiB
Raw Blame History

Сборка MontanaOS

Привязка к спецификации: MontanaOS v0.2, раздел 7.

Системные требования

Подробности — раздел 7.1 спецификации, не дублируется здесь.

Кратко: Debian 12 «bookworm» или Ubuntu 22.04 LTS, тридцать два гигабайта оперативной памяти, четыреста гигабайт свободного диска, восемь и более ядер процессора, стабильное соединение для синхронизации дерева исходников.

Шаги сборки

Подготовка окружения

./scripts/setup-build-env.sh

Устанавливает: openjdk-21-jdk-headless, repo, базовые средства сборки и зависимости AOSP. Точный список пакетов — в самом скрипте.

Синхронизация исходников

./scripts/sync-grapheneos.sh

Скрипт читает MONTANAOS_VERSIONS.lock и синхронизирует дерево GrapheneOS на зафиксированный коммит. До закрытия Фазы 1 lock-файла нет, скрипт откажется работать. Это намеренно: воспроизводимая сборка невозможна без зафиксированных хэшей.

Применение патчей MontanaOS

./scripts/apply-patches.sh

Сборка под целевое устройство

./scripts/build-montanaos.sh komodo

Список целевых устройств — раздел 4 спецификации, не дублируется здесь.

Скрипт требует чистого рабочего дерева репозитория MontanaOS. Источник детерминизма метки времени — переменная SOURCE_DATE_EPOCH, рассчитанная из метки времени коммита HEAD репозитория MontanaOS. Имя выходного файла включает короткий хэш этого коммита.

Кэш компиляции (ccache) выключен в этом режиме (см. раздел 7.2 спецификации).

Итоговый образ помещается в каталог out/target/product/<кодовое-имя>/ с именем вида MontanaOS-<кодовое-имя>-<короткий-хэш>.zip.

Прошивка на устройство

fastboot flash bootloader bootloader.img
fastboot reboot bootloader
fastboot flash radio radio.img
fastboot reboot bootloader
fastboot --skip-reboot update MontanaOS-<кодовое-имя>-<короткий-хэш>.zip

Подробные инструкции по прошивке наследуются из документации GrapheneOS.

Проверка воспроизводимости

Двое разработчиков, исполнившие одни и те же скрипты на чистом окружении Debian 12 с одним и тем же коммитом репозитория MontanaOS, обязаны получить побайтово идентичные итоговые образы, включая имя файла. Любое отличие — блокирующая регрессия.

Проверка через sha256sum итогового zip-файла на двух разных машинах. Хэши обязаны совпасть.

Подпись

До закрытия Фазы 6 — неподписанные сборки. Скрипт сборки не пытается подписывать образ, файл MONTANAOS_RELEASE_KEY.pub содержит только заглушку.

После закрытия Фазы 6 — отдельная процедура подписи, описанная в разделе 7.3 спецификации.