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