# Сборка 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](MONTANAOS_VERSIONS.template) и синхронизирует дерево 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](MONTANAOS_RELEASE_KEY.pub) содержит только заглушку. После закрытия Фазы 6 — отдельная процедура подписи, описанная в разделе 7.3 спецификации.