montana/_internal-private/MontanaOS-archived-20260521/BUILD.md

72 lines
4.0 KiB
Markdown
Raw Normal View History

2026-05-26 21:14:51 +03:00
# Сборка 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 спецификации.