4.0 KiB
Сборка 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 спецификации.