Сборочная ферма¶
Практическое руководство по настройке и масштабированию сборочных машин (билдеров) в zoryn. Если вы собираете только на своей рабочей станции — эту страницу можно пропустить, zoryn build использует встроенный билдер local безо всякой настройки. Переходите сюда, когда потребовалось:
- Собирать под архитектуры, которых нет на вашей рабочей станции (ARM64, i586, RISC-V, e2k).
- Параллельные сборки — несколько hasher'ов на одной машине собирают разные пакеты/ветки одновременно.
- Разные билдеры по умолчанию для разных веток —
sisyphusна одном узле,p11на другом.
См. zoryn builder для полного справочника по команде.
Как устроены билдеры¶
| Понятие | Смысл |
|---|---|
| Билдер | Именованная конфигурация hasher. Хранится как .conf-файл в ~/.config/zoryn/builders.d/. |
| Local | Запускает hsh на вашей машине. Встроенный local существует всегда; можно добавить ещё несколько с разными hasher_number / архитектурами. |
| Remote | Запускает hsh на другом хосте через SSH. Тарболл загружается, результирующие RPM возвращаются по rsync. |
| Hasher number | hasher_number = N позволяет сосуществовать нескольким параллельным hasher'ам на одном хосте. Требует hasher-useradd --number=N на этом хосте. |
| Ферма | Набор билдеров, покрывающий нужные вам архитектуры / ветки. |
Выбор билдеров — через паттерны -b/--builder, см. Паттерны билдеров. @all — все настроенные билдеры.
Подготовка¶
На вашей машине¶
Пользователя — в группу hashman:
Для параллельных локальных hasher'ов понадобятся --number=N — см. ниже.
На каждом удалённом хосте¶
# На удалённом хосте (однократно, под root или через sudo)
apt-get install hasher rsync openssh-server
hasher-useradd # satellite-пользователи для hasher_number=1
Настройте вход по SSH-ключу с вашей машины на удалённую — ssh remote.host true должен работать без запроса пароля. Пользователь на удалённой машине тоже должен быть в hashman.
В /etc/hasher-priv/user.d/<user> на удалённом хосте allowed_mountpoints и allowed_devices должны включать всё, что использует команда сборки (например, /proc,/dev/pts,/dev/kvm). zoryn проверяет это перед каждой сборкой и показывает, что именно нужно добавить, если чего-то не хватает.
Шаг 1 — Добавить один удалённый hasher¶
Типичный случай — одна дополнительная машина (часто ARM64 в домашней сети или корпоративный сервер), на которой хочется собирать.
Интерактивно¶
zoryn спросит имя, хост, архитектуру, каталог hasher и репозиторий для конфигурации apt. Архитектура определяется автоматически с хоста. На запрос репозитория — TAB дополняет пути как локально, так и по SSH на удалённой машине.
Неинтерактивно (для скриптов или dotfiles)¶
zoryn builder add \
--name arm64 \
--host arm.internal \
--arch aarch64 \
--repo /srv/repo/sisyphus \
-y
Что произойдёт:
- zoryn создаст
~/.config/zoryn/builders.d/arm64.conf. - Запустит
sudo hasher-useraddнаarm.internal, если satellite-пользователи ещё не созданы (--no-create-hasher-usersотключает этот шаг). - Определит ветку из
release-файла репозитория. - Сгенерирует
apt.conf/sources.list/preferencesлокально в~/.config/zoryn/builders.d/arm64/apt/— они синхронизируются на удалённую машину перед каждой сборкой.
Проверка¶
zoryn builder list
zoryn builder status -b arm64
zoryn builder shell -b arm64 # sanity: зайти в chroot удалённого hasher
Первая сборка¶
В каталоге пакета:
Тарболл создаётся локально через gear --commit, загружается rsync-ом, собирается в удалённом hasher, готовые RPM возвращаются в {git_root}/hasher_out/.
Шаг 2 — Добавить локальные hasher'ы для параллельных сборок¶
Один hasher работает над одним пакетом за раз. Чтобы запускать две или больше сборок параллельно на той же машине — нужны дополнительные наборы hasher-пользователей, каждый со своим hasher_number.
Создать satellite-пользователей¶
На машине (однократно для каждого параллельного слота):
Зарегистрировать слоты в zoryn¶
zoryn builder add --name local2 --type local --number 2 -y
zoryn builder add --name local3 --type local --number 3 -y
zoryn builder add --name local4 --type local --number 4 -y
Каждый создаёт отдельный .conf со своим hasher_dir, раскрытым из шаблона {hasher_number} — chroot'ы не конфликтуют.
Альтернатива — одной командой через массовое создание:
zoryn builder add --name local --type local --multi-add 3 --start-number 2 \
--repo /srv/repo/sisyphus -y
# создаст local2, local3, local4
Использовать¶
zoryn build -b local2 # конкретный слот
zoryn build -b 'local[2-4]' -p # все три, параллельно
zoryn build -b @all -p --top # все билдеры, параллельно, htop-подобный TUI
С --parallel (или parallel = "on" в секции [builders] файла ~/.zoryn) zoryn распределяет сборку на все подходящие билдеры одновременно.
Шаг 3 — Масштабировать до фермы¶
Когда вы выходите за пределы «одна машина + удалённая» и строите настоящую мульти-арх ферму, появляются три дополнительные настройки: дефолты по веткам, массовое создание билдеров и --multi-add для параллельных remote-слотов.
Дефолты по веткам¶
Разные билдеры для разных веток:
# ~/.zoryn
[builders]
default = "local, arm64"
default_arch = ["x86_64", "aarch64"]
[builders.p11]
default = "p11-x86, p11-arm"
default_arch = ["x86_64", "aarch64"]
[builders.p10]
default = "p10-x86"
default_arch = "x86_64"
Теперь:
zoryn build→ sisyphus наlocal+arm64, параллельно.zoryn build -B p11→p11-x86+p11-arm.zoryn build -B p10→ толькоp10-x86.
Массовое создание удалённых билдеров¶
Поднять 5 параллельных hasher-слотов и для sisyphus, и для p11 на мощном сборочном сервере:
zoryn builder add --name farm --host buildnode.internal --multi-add 5 \
--repo /srv/repo/sisyphus --repo /srv/repo/p11 -y
# создаст 10 билдеров: farm1..farm5 (sisyphus) + farm6..farm10 (p11),
# ветки определяются автоматически из каждого --repo
zoryn также сделает sudo hasher-useradd --number=N на удалённом хосте для каждого отсутствующего слота. Предпросмотр без создания — добавьте --dry-run.
Примеры ферм¶
Это отправные точки. Подкрутите количество hasher-слотов под ваш объём RAM (~1-2 ГБ на параллельный слот — разумно для большинства пакетов).
3 архитектуры — типичный сетап мейнтейнера¶
Рабочая станция (x86_64) + один ARM64 + один i586 — покрывает три архитектуры, под которые обязан собираться каждый пакет ALT Linux.
# local — встроенный билдер, x86_64 с рабочей станции
zoryn builder add --name arm64 --host arm.internal \
--repo /srv/repo/sisyphus -y
zoryn builder add --name i586 --host i586.internal --arch i586 \
--repo /srv/repo/sisyphus -y
# ~/.zoryn
[builders]
default = "local, arm64, i586"
default_arch = ["x86_64", "aarch64", "i586"]
parallel = "on"
zoryn build собирает на всех трёх одновременно. zoryn up -b @all -p --top даёт живой TUI для всех трёх.
4 архитектуры — добавить RISC-V¶
Добавим RISC-V (обычно — удалённая VM или реальная плата):
zoryn builder add --name riscv64 --host riscv.internal --arch riscv64 \
--repo /srv/repo/sisyphus -y
[builders]
default = "local, arm64, i586, riscv64"
default_arch = ["x86_64", "aarch64", "i586", "riscv64"]
parallel = "on"
5 архитектур — полное современное покрытие ALT¶
Добавим e2k (Эльбрус) — предполагает, что на хосте есть рабочий chroot hasher для Эльбруса:
[builders]
default = "local, arm64, i586, riscv64, e2k"
default_arch = ["x86_64", "aarch64", "i586", "riscv64", "e2k"]
parallel = "on"
[builders.p11]
default = "p11-x86, p11-arm64, p11-i586, p11-riscv"
default_arch = ["x86_64", "aarch64", "i586", "riscv64"]
zoryn build теперь запускает sisyphus-сборки на всех пяти архах параллельно; zoryn build -B p11 — на четырёх (e2k не входит).
5 архитектур с плотной параллельностью¶
Один жирный сборочный сервер (скажем, 64 ГБ RAM, 32 ядра) и вы хотите и мульти-арх, и параллельные пакеты внутри каждой архитектуры:
zoryn builder add --name node --host bignode.internal \
--multi-add 4 --repo /srv/repo/sisyphus --repo /srv/repo/p11 -y
# создаст node1..node4 (sisyphus) + node5..node8 (p11)
zoryn builder add --name arm --host bignode-arm.internal \
--multi-add 4 --repo /srv/repo/sisyphus -y
# создаст arm1..arm4 (sisyphus)
# … повторить для i586, riscv, e2k
С parallel = "on" и default, указывающим на @host:bignode,@host:bignode-arm,…, один zoryn task batch php-8.4 займёт десятки hasher-слотов по всей ферме.
Полезные паттерны¶
zoryn build -b @all,^local— все кроме рабочей станции (offload на ферму).zoryn build -b @host:bignode[2-4]— слоты 2, 3, 4 на конкретном хосте.zoryn build -b @all --arch=aarch64— все ARM-билдеры, без разницы на каком хосте.zoryn builder status— посмотреть, какие билдеры свободны/заняты перед постановкой в очередь.zoryn builder clean --all-remote --dry-run— предпросмотр очистки удалённых chroot'ов.
Полный DSL — см. Паттерны билдеров.
Troubleshooting¶
- «Builder mountpoint not allowed». Добавьте недостающие записи в
/etc/hasher-priv/user.d/<user>на хосте; zoryn подскажет точные строки. - Нет satellite-пользователей hasher на удалённом хосте. Перезапустите
builder add(идемпотентно) или вручную:sudo hasher-useradd --number=N. - Первая сборка зависает на rsync. Проверьте SSH ControlMaster-сокеты —
ls $XDG_RUNTIME_DIR/zoryn/. Удалите залипшие; мультиплексирование SSH включено по умолчанию. - «Parallel = on», но сборки идут последовательно. В матче — один билдер. Проверьте
zoryn builder listс вашим паттерном. - Конфликт слотов на локальном мульти-hasher. Разные
hasher_numberтребуют разныхhasher_dir— используйте шаблон~/hasher_{hasher_number}(по умолчанию при--multi-add).