Конфигурация¶
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 работает даже с такой конфигурацией:
У всех остальных секций есть разумные значения по умолчанию. Переопределяйте только то, что действительно отличается.
Полный пример¶
[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 по умолчанию):
[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).type—localили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-тэг | pattern | template | RPM-версия |
|---|---|---|---|
v1.2.3 | v{major:+}.{minor:+}.{patch:+} | {major}.{minor}.{patch} | 1.2.3 |
release-1.2 | release-{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 |
camlidl113 | camlidl{major:1}{minor:2} | {major}.{minor} | 1.13 |
RELEASE_8_4_5 | RELEASE_{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:firefox→Firefox,firefox-esr→Firefox ESR,thunderbird→Thunderbird.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¶
- Откройте osv.dev и найдите проект по имени (
wireshark,curl). - Откройте любую уязвимость этого проекта.
- В секции Affected packages указано имя пакета (например,
gitlab.com/wireshark/wiresharkдля экосистемыGIT). - Скопируйте имя пакета и экосистему в конфиг.
Или запросите 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 | Имя в PyPI | requests |
npm | Имя в npm | express |
crates.io | Имя крейта | tokio |
Go | Путь модуля Go | golang.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}".