Перейти к содержанию
zoryn/ maintainer-assistant

Сборочная ферма

Практическое руководство по настройке и масштабированию сборочных машин (билдеров) в 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 numberhasher_number = N позволяет сосуществовать нескольким параллельным hasher'ам на одном хосте. Требует hasher-useradd --number=N на этом хосте.
ФермаНабор билдеров, покрывающий нужные вам архитектуры / ветки.

Выбор билдеров — через паттерны -b/--builder, см. Паттерны билдеров. @all — все настроенные билдеры.

Подготовка

На вашей машине

apt-get install hasher bubblewrap rsync openssh-clients

Пользователя — в группу hashman:

sudo hasher-useradd          # создать satellite-пользователей для hasher_number=1

Для параллельных локальных 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 builder add

zoryn спросит имя, хост, архитектуру, каталог hasher и репозиторий для конфигурации apt. Архитектура определяется автоматически с хоста. На запрос репозитория — TAB дополняет пути как локально, так и по SSH на удалённой машине.

Неинтерактивно (для скриптов или dotfiles)

zoryn builder add \
  --name arm64 \
  --host arm.internal \
  --arch aarch64 \
  --repo /srv/repo/sisyphus \
  -y

Что произойдёт:

  1. zoryn создаст ~/.config/zoryn/builders.d/arm64.conf.
  2. Запустит sudo hasher-useradd на arm.internal, если satellite-пользователи ещё не созданы (--no-create-hasher-users отключает этот шаг).
  3. Определит ветку из release-файла репозитория.
  4. Сгенерирует 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

Первая сборка

В каталоге пакета:

zoryn build -b arm64

Тарболл создаётся локально через gear --commit, загружается rsync-ом, собирается в удалённом hasher, готовые RPM возвращаются в {git_root}/hasher_out/.

Шаг 2 — Добавить локальные hasher'ы для параллельных сборок

Один hasher работает над одним пакетом за раз. Чтобы запускать две или больше сборок параллельно на той же машине — нужны дополнительные наборы hasher-пользователей, каждый со своим hasher_number.

Создать satellite-пользователей

На машине (однократно для каждого параллельного слота):

sudo hasher-useradd --number=2
sudo hasher-useradd --number=3
sudo hasher-useradd --number=4

Зарегистрировать слоты в 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 p11p11-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 для Эльбруса:

zoryn builder add --name e2k --host elbrus.internal --arch e2k \
  --repo /srv/repo/sisyphus -y
[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).