Сборка из исходников¶
Сборка производит устанавливаемый ISO из тех же исходников, которые сопровождает проект. Пока не опубликован стабильный релиз, это поддерживаемый способ получить образ.
Сборочная машина¶
Сборочная машина обязана работать на той же версии FreeBSD, что и
цель. Это не стилистическое предпочтение — игнорирование этого правила
дало три паники ядра за время разработки. Этап кастомизации делает chroot
в целевой корень и запускает там zpool, который автозагружает
openzfs.ko изнутри chroot: свежесобранный модуль одной версии FreeBSD
оказывается в работающем ядре другой, и раскладка таблицы vnode-операций
не совпадает.
Практические требования — измеренные, а не угаданные:
| FreeBSD | stable/15, совпадает с целью |
| CPU | любое число ядер; больше — быстрее |
| RAM | 32 ГБ заведомо работают — см. примечание ниже |
| Диск | 320 ГБ. 120 ГБ не хватает |
| Swap | 16 ГБ на настоящем разделе |
О памяти точно: 16 ГБ с 1 ГБ swap не хватает — rust убивает
обработчик нехватки памяти. 32 ГБ с 12 параллельными сборщиками проходят;
это и есть измерение из таблицы. Сегодня оно консервативно: rust,
llvm, gcc и node теперь собираются на диске, а не в tmpfs, что
убрало главного потребителя, — но сборка на меньшем объёме не
предпринималась. Память масштабируется с числом параллельных сборщиков
(-J, по умолчанию половина ядер).
О диске: каждый make release оставляет в _BE/release порядка 1,3 ГБ,
и ничто это не удаляет. Когда раздел закончился во время разработки,
сборка упала через 4 часа 50 минут на семи внешне несвязанных портах —
настоящая причина была одна, ENOSPC, и видна она была только в dmesg.
Используйте tools/prune-builds.sh и проверяйте df -h / перед стартом.
Сборка¶
pkg install -y git gmake
git clone https://github.com/bsdnas/core-build.git
cd core-build
git checkout bsdnas
make bootstrap-pkgs
make checkout
make release
make checkout подтягивает остальные репозитории — форк базы FreeBSD,
middleware, веб-интерфейс — на ветках, закреплённых в
build/profiles/freenas/repos.pyd. Дерево портов не форкается:
квартальная ветка апстрима FreeBSD используется напрямую, NAS-специфичные
порты накладываются из репозитория middleware.
Полная сборка занимает несколько часов. Результат — ISO в
freenas/_BE/objs/.
Устройство репозиториев¶
| репозиторий | что это |
|---|---|
core-build |
сборочная система, профили, инструменты, документация |
os |
база FreeBSD с NAS-патчами, перебазированная на stable/15 |
middleware |
middleware, установщик, NAS-порты |
webui |
веб-интерфейс |
Как не отставать от апстрима¶
Смысл проекта в том, чтобы форк не отставал, поэтому инструменты для этого — часть репозитория, а не чья-то привычка:
tools/watch-upstream.sh доложить, что сдвинулось в апстриме
tools/watch-upstream.sh --ack отметить текущее состояние просмотренным
tools/prune-builds.sh --apply убрать артефакты старых сборок
tools/acceptance.sh install установить в VM и проверить через API
Наблюдатель следит за четырьмя вещами: новыми коммитами FreeBSD
stable/15 под набором патчей, бюллетенями безопасности FreeBSD,
открытием следующей квартальной ветки портов и релизами OpenZFS. Он
докладывает; решает человек. Pull request'ы он сознательно не открывает:
разрешение конфликтов при перебазировании — не то, что стоит
автоматизировать, и одна такая ошибка уже стоила сборки.