Перейти к содержанию

Сборка из исходников

Сборка производит устанавливаемый 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'ы он сознательно не открывает: разрешение конфликтов при перебазировании — не то, что стоит автоматизировать, и одна такая ошибка уже стоила сборки.