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

Конфигурация

zoryn читает конфигурацию из трёх мест, по возрастанию специфичности:

ФайлНазначение
~/.zorynГлобальный пользовательский конфиг (TOML). Необходим для работы zoryn.
~/.config/zoryn/builders.d/*.confОдин .conf на каждый билдер — локальную или удалённую hasher-машину.
.gear/version-upПереопределения для конкретного пакета: маппинг upstream-версий, источники CVE, подсказки для merge.

Запустите zoryn gen environment для быстрого bootstrap ~/.zoryn плюс SSH, hasher и GPG-конфигов одним вызовом.

~/.zoryn

Минимальный пример — zoryn работает даже с такой конфигурацией:

[gitery]
remote = "gitery"

У всех остальных секций есть разумные значения по умолчанию. Переопределяйте только то, что действительно отличается.

Полный пример

[build]
command = "hsh -v --number={hasher_number} --mountpoint=/proc,/dev/pts,/dev/kvm --lazy-cleanup {hasher_dir}"
log_filename = "build.{batch}.{builder}.log"

[builders]
default = "local"
default_arch = "x86_64"
parallel = "off"
results_download_dir = "{git_root}/hasher_out"
batch_repo = "~/zoryn-batch-repo"

[gitery]
host = "gitery"
remote = "gitery"

[gyle]
host = "gyle"

[sources]
srpms_path = "/mnt/ftp/pub/distributions/ALTLinux/Sisyphus/files/SRPMS/"

[rebuild]
command = "hsh -v --mountpoint=/proc,/dev/pts,/dev/kvm --lazy-cleanup"
log_dir = "/tmp/rebuild-logs"

[add_changelog]
up_template = "- {old_version} -> {new_version} {cves}"

[ssh]
multiplexing = true   # повторное использование TCP через ControlMaster (по умолчанию: true)
persist = "2m"        # время жизни master-соединения (по умолчанию: 2m)

[notify]
enabled = true        # уведомления рабочего стола для долгих команд (по умолчанию: true)

[commands]
# Опционально: переопределение путей и аргументов для внешних команд
# git = "/usr/local/bin/git"
# git.fetch = "{git} fetch --prune"
# ssh = "ssh -o ConnectTimeout=10"
# ssh.gitery = "{ssh} -p 2222 -i ~/.ssh/alt_key"

Справочник секций

[build]

  • command — команда hsh для локальной сборки (по умолчанию: hsh --lazy-cleanup). Примечание: используйте hsh, а не gear-hsh — тарболл создаётся отдельно через gear --commit. Для параллельной сборки несколькими локальными hasher используйте плейсхолдеры {hasher_number} и {hasher_dir}.
  • log_filename — шаблон имени лог-файла (по умолчанию: build.{batch}.{builder}.log). Плейсхолдеры: {builder}, {batch}, {pkgname}.

[builders]

  • default — билдер(ы) по умолчанию, когда --builder не указан и нет настроек для ветки. Строка через запятую или TOML-массив ("local" или ["local", "arm-server"]).
  • default_arch — архитектура(ы) по умолчанию для multi-builder режима. Строка через запятую или TOML-массив. При указании нескольких архитектур автоматически включается multi-builder.
  • parallel — параллельный режим для multi-builder сборок (on или off, по умолчанию: off). Переопределяется флагами --parallel / --sequential.
  • results_download_dir — каталог для скачивания результатов удалённой сборки (по умолчанию: {git_root}/hasher_out). Поддерживает {git_root}.
  • batch_repo — каталог для накопления RPM при batch-сборке. Используется download_rpms / upload_rpms.

[builders.<ветка>] — настройки по веткам

[builders]
default = "sis-x86, sis-arm"
default_arch = "x86_64"

[builders.p11]
default = "p11-x86"
default_arch = "x86_64"

[gitery]

  • host — SSH-алиас для gitery. Должен соответствовать записи в ~/.ssh/config.
  • remote — имя git remote, указывающего на gitery. Используется для push.

[gyle]

  • host — SSH-алиас для системы сборки gyle.

[sources]

  • srpms_path — локальное зеркало SRPMS (требуется для zoryn task rebuild).

[rebuild]

  • command — команда hasher для пересборки пакетов (по умолчанию: hsh -v --mountpoint=/proc,/dev/pts,/dev/kvm --lazy-cleanup).
  • log_dir — базовый каталог для логов сборки (по умолчанию: /tmp/rebuild-logs).

[tasks]

  • api_url — базовый URL Tasks API (по умолчанию: https://git.altlinux.org/tasks/api).
  • user — имя пользователя girar для API-запросов (по умолчанию: извлекается из email %packager в ~/.rpmmacros).

[rdb]

  • api_url — базовый URL RDB API (по умолчанию: https://rdb.altlinux.org/api).

[add_changelog]

  • up_template — шаблон записи changelog для zoryn up (по умолчанию: - updated from {old_version} to {new_version} {cves}).
    • {old_version}, {new_version}, {cves} (последнее — (Fixes: CVE-...) или пустая строка).
    • Секция [add_changelog] в .gear/version-up имеет приоритет над ~/.zoryn.
    • Пробелы в конце обрезаются автоматически.

[submit]

  • run — запускать ли задание после создания/изменения (по умолчанию: false).
  • test_only — помечать ли задание как тестовое (по умолчанию: true).

Для восстановления старого поведения (run с --commit по умолчанию):

[submit]
run = true
test_only = false

[ssh]

  • multiplexing — включить мультиплексирование SSH через OpenSSH ControlMaster (по умолчанию: true). Повторно использует TCP-соединения, снижая задержки при многошаговых операциях сборки.
  • persist — время жизни master-соединения (по умолчанию: 2m). Формат — как ControlPersist в ssh_config(5).
  • Сокеты хранятся в $XDG_RUNTIME_DIR/zoryn/ (или $TMPDIR) и автоматически очищаются при выходе.

[notify]

  • enabled — включить уведомления рабочего стола для долгих команд (по умолчанию: true). Отправляет OSC 99 escape-коды (протокол kitty) + BEL в stderr. Kitty, WezTerm и foot показывают всплывающее уведомление; другие терминалы только BEL. Срабатывают при завершении: build, up, task rebuild, task test-rebuild, task batch.

[commands]

  • Переопределение путей и глобальных аргументов для внешних команд (git, ssh, gear-*, rpm и др.).
  • Подкоманды наследуют базовую: git.fetch = "{git} fetch --prune" — если git переопределён, git.fetch использует переопределение.
  • ~/ и $HOME раскрываются в абсолютные пути.
  • Shell-метасимволы (;, |, `, $()) отклоняются при запуске.

~/.config/zoryn/builders.d/

Каждый .conf файл определяет один билдер — локальную или удалённую hasher-машину.

# ~/.config/zoryn/builders.d/arm-server.conf
[builder]
name = "arm-server"
type = "remote"
arch = "aarch64"
branch = "sisyphus"
host = "builder-arm.internal"
hasher_dir = "~/hasher"
remote_dir = "~/build"
# hasher_number = 1  # для параллельных сборок (требует hasher-useradd --number=N)

[commands]
upload = "rsync -av {tarball} {host}:{remote_dir}/"
build = "hsh -v --lazy-cleanup --apt-config=$HOME/hasher_{hasher_number}.env/{branch}/apt.conf {hasher_dir} {remote_dir}/{tarball_name}"
# download использует умную загрузку по умолчанию (только новые пакеты)
cleanup = "ssh {host} \"rm -rf {remote_dir}/*\""
shell = "hsh-shell {hasher_dir}"
install = "hsh-install {hasher_dir} {packages}"

[builder]

  • name — имя билдера (используется в --builder).
  • typelocal или remote.
  • arch — целевая архитектура (x86_64, aarch64, i586, …).
  • branch — целевая ветка (sisyphus, p11, …).
  • host — SSH-хост для remote.
  • hasher_dir — рабочий каталог hasher (по умолчанию: ~/hasher).
  • remote_dir — рабочий каталог на удалённом хосте.
  • hasher_number — номер субконфига hasher для параллельных сборок.

[commands]

  • upload — загрузка тарболла (выполняется локально).
  • build — команда сборки (оборачивается в SSH для remote builders).
  • download — скачивание результатов (выполняется локально). По умолчанию — умная загрузка: только новые пакеты через rsync --files-from. Старые конфиги с полным скачиванием автоматически мигрируются.
  • list_rpms — список RPM с mtime в репозитории hasher (по умолчанию: find {hasher_dir}/repo -name '*.rpm' -printf '%P\t%T@\n'). Используется умной загрузкой.
  • cleanup — очистка после сборки.
  • shell — для zoryn builder shell.
  • install — для zoryn builder install.
  • check_busy, download_rpms, upload_rpms — генерируются автоматически, если не указаны.

Переменные в шаблонах:

{host}, {hasher_dir}, {remote_dir}, {tarball}, {tarball_name}, {results_download_dir}, {git_root}, {packages}, {batch_repo}, {arch}, {name}, {hasher_number}, {branch}.

См. zoryn builder add для интерактивного и массового создания.

.gear/version-up

Переопределения для пакета: как конвертировать upstream-тэги в RPM-версии, откуда брать CVE, подсказки для merge. TOML.

[version]
pattern = "{major:+}.{minor:+}.{patch:+}"
template = "{major}.{minor}.{patch}"
strip-prefix = "v"
create-alias = true
filter = "minor=4"

[changelog]
file = "CHANGELOG.md"
# или удалённый URL:
# url = "https://curl.se/docs/vuln.json"
# parser = "osv-json"
# cve-format = "extended"
# или OSV API для проектов без changelog-файлов (например, Wireshark):
# parser = "osv-api"
# osv-package = "gitlab.com/wireshark/wireshark"
# osv-ecosystem = "GIT"

[merge]
use-theirs = ["meson.build", "configure.ac"]
# scheme = "git-merge"  # переопределить авто-детекцию: "git-merge" или "tarball"

[tarball]
gear-update-opts = "--all"

Проверить конфиг — zoryn check version-up.

[version] — маппинг тэг → RPM-версия

Формат плейсхолдера: {name:length}

  • name — имя группы захвата (major, minor, patch, year, month, day).
  • length — спецификатор количества цифр:
    • + или * — одна или более цифр (regex [0-9]+).
    • N (число) — ровно N цифр (regex [0-9]{N}).

Литеральные символы: . — точка, -, _ — дефис/подчёркивание, остальные — как есть.

Поле template: имена групп без спецификатора длины — {major}, {minor}, …

Примеры pattern

Upstream-тэгpatterntemplateRPM-версия
v1.2.3v{major:+}.{minor:+}.{patch:+}{major}.{minor}.{patch}1.2.3
release-1.2release-{major:+}.{minor:+}{major}.{minor}1.2
20240115{year:4}{month:2}{day:2}{year}.{month}.{day}2024.01.15
2.0.0-rc1{major:+}.{minor:+}.{patch:+}-{pre:+}{major}.{minor}.{patch}2.0.0
camlidl113camlidl{major:1}{minor:2}{major}.{minor}1.13
RELEASE_8_4_5RELEASE_{major:+}_{minor:+}_{patch:+}{major}.{minor}.{patch}8.4.5
4.18 / 4.18_02{major:+}.{minor:+}(?:_{patch:+})?{major}.{minor}(?:.{patch})?4.18 / 4.18.02

Опциональные группы — через стандартный regex (?:...)?. Если опциональная часть отсутствует в тэге, соответствующий сегмент template пропускается.

Фильтрация тэгов

filter ограничивает, какие тэги рассматриваются. filter = "minor=4" — только тэги с minor == 4. Несколько фильтров: filter = "major=8, minor=4".

[changelog] — источник CVE

Распознаются форматы CVE-YYYY-NNNNN и CVE:YYYY-NNNNN (ISC), оба нормализуются в CVE-YYYY-NNNNN. Поддерживаются заголовки Product X.Y.Z (status) released on Date (ISC Kea/BIND).

  • file — локальный changelog (CHANGELOG.md, NEWS, ChangeLog).
  • url — URL с security advisory (например, https://curl.se/docs/vuln.json).
  • parser — тип парсера:
    • auto (по умолчанию) — автоопределение.
    • osv-json / json — OSV JSON (curl и др.).
    • markdown / md — стандартный markdown changelog.
    • html / html-table — HTML-таблица с CVE.
    • osv-api — запрос OSV API напрямую (требует osv-package).
    • oracle-csaf — Oracle CSAF JSON (для продуктов Oracle, например MySQL).
    • mozilla — Mozilla Foundation Security Advisories (структурированный YAML из mozilla/foundation-security-advisories). Для firefox, firefox-esr, thunderbird. Анонимные запросы к GitHub API ограничены ~60/час.
  • osv-package — имя пакета(ов) в OSV. Принимает одно имя, список через запятую или TOML-массив.
  • osv-ecosystem — экосистема OSV (по умолчанию: GIT; также PyPI, npm, crates.io, Go, Maven).
  • oracle-advisory-product — имя продукта Oracle для фильтрации (например, MySQL Server). Автоопределение по имени SRPM, если не указано.
  • oracle-advisory-max-body-size — макс. размер ответа при скачивании CSAF в байтах (по умолчанию: ~4 МБ).
  • mozilla-product — имя продукта Mozilla для сопоставления с fixed_in: из advisory (например, Firefox, Firefox ESR, Thunderbird). Если не указано, определяется по имени SRPM: firefoxFirefox, firefox-esrFirefox ESR, thunderbirdThunderbird.
  • cve_format — формат записей CVE в changelog пакета:
    • compact (по умолчанию) — в одну строку: (Fixes: CVE-..., CVE-...).
    • compact_continuation — строки продолжения, 4 CVE на строку: + (fixes: CVE-..., …).
    • extended — многострочный с описаниями из OSV: - Fixes: / * CVE-...: описание.
    • При compact и наличии spec формат определяется автоматически по стилю существующего changelog.

url имеет приоритет над file при обоих указанных. Для parser = osv-api и url, и file игнорируются. Для parser = oracle-csaf url необязателен — URL последнего квартального CPU генерируется автоматически. Для parser = mozilla url и file игнорируются — advisory берутся из репозитория mozilla/foundation-security-advisories; сканируется до трёх директорий announce/<год>/ назад, выбирается advisory, в fixed_in: которого упомянуто <mozilla-product> <new-version>.

Как найти osv-package

  1. Откройте osv.dev и найдите проект по имени (wireshark, curl).
  2. Откройте любую уязвимость этого проекта.
  3. В секции Affected packages указано имя пакета (например, gitlab.com/wireshark/wireshark для экосистемы GIT).
  4. Скопируйте имя пакета и экосистему в конфиг.

Или запросите API напрямую:

curl -s -X POST https://api.osv.dev/v1/query \
  -d '{"package":{"name":"gitlab.com/wireshark/wireshark","ecosystem":"GIT"},"version":"4.4.3"}' \
  | python3 -m json.tool | head -20
ЭкосистемаФормат имениПример
GIT (default)Путь из URL репоgitlab.com/wireshark/wireshark
PyPIИмя в PyPIrequests
npmИмя в npmexpress
crates.ioИмя крейтаtokio
GoПуть модуля Gogolang.org/x/net
Mavenгруппа:артефактorg.apache.logging.log4j:log4j-core

Полный список: https://ossf.github.io/osv-schema/#affectedpackage-field

[merge]

  • scheme — переопределить авто-детекцию схемы: "git-merge" или "tarball". Устанавливается автоматически флагом --switch-to-upstream-git.
  • use-theirs — файлы, которые при конфликте берутся из upstream (через запятую или пробел). Полезно для файлов с версиями: meson.build, configure.ac.

[tarball]

  • gear-update-opts — доп. опции для gear-update (например, --all для извлечения всех директорий из архива).
  • subdir — имя поддиректории внутри тарбола для извлечения (передаётся как gear-update --subdir=<value>). Поддерживает плейсхолдеры {version} и {name}, например subdir = "thunderbird-{version}". Полезно для тарболов с несколькими записями на верхнем уровне, такими как ./ и <name>-<version>/ (исходники Mozilla). Перед использованием проверяется на shell-метасимволы и разделители пути.

[add_changelog] — переопределение для пакета

  • up_template — шаблон записи changelog для zoryn up. Поддерживает {old_version}, {new_version}, {cves}. Например: up_template = "- {old_version} -> {new_version} {cves}".

Версии по дате — пример

[version]
pattern = "{year:4}{month:2}{day:2}"
template = "{year}.{month}.{day}"

Связанное

  • Хуки.gear/merge-up.d/, .gear/up.d/, подсветка синтаксиса, темы логов
  • Песочницаhybrid / bwrap / direct режимы для изоляции хуков