No description
  • Shell 93.6%
  • Go Template 6.4%
Find a file
2026-10-18 22:18:10 +03:00
.forgejo/workflows База под init-файлы: cloud-init + seed-шаблоны, маркер загрузки, lxc-healthcheck, манифест/release 2026-10-13 10:25:44 +03:00
docs Приёмка launch-ом в CI: инстанс на складе + пробы checks.txt роли; складской remote — skld00 2026-10-12 15:02:26 +03:00
images схема: вопрос маршрутизации инстансов закрыт (macvlan: LAN по DHCP + P2P статикой); в eth0.network отмечено, чем живёт LAN-плечо сервисов 2026-10-13 14:38:59 +03:00
README.md схема: конфиги узла в git, наблюдаемость источники→получатели, полные имена сервисов 2026-10-18 22:18:10 +03:00
актуальная схема.md схема: конфиги узла в git, наблюдаемость источники→получатели, полные имена сервисов 2026-10-18 22:18:10 +03:00
старая схема.md Доки: две схемы — архив роль-образов и актуальная (база-артефакт + init-файлы) 2026-10-12 16:11:47 +03:00

lxc-build

Сборка образов для системных LXC-контейнеров Incus: базовый образ Leap 16 (артефакт CI, раздаётся складом) — и архивная ролевая часть, которая больше не развивается.

Статус (2026-10-13): схема изменилась и уже работает. Актуальная схема — базовый образ как артефакт CI (раздаётся складом skld00) + init-файлы в git с провижинингом через cloud-init: новый сервис = один файл, отдельные образы под сервисы не собираются — актуальная схема.md. Ролевая часть этого репозитория (роль-образы victoriametrics, victorialogs, пайплайн build-roles.yml) в архиве: как она работала, что давала и чего стоила — старая схема.md.

Первые два сервиса живут по новой схеме: инстансы victorialogs1 (VictoriaLogs) и victoriametrics1 (VictoriaMetrics) на skld00 подняты декларациями из homelab-deploy/servers/skld00/services/ через хостовый контур reconcile.sh.

Что остаётся живым: базовый образ leap16-base и его пайплайн, склад skld00 (https://172.20.50.1:8443, паспорт homelab-deploy/servers/skld00/), зеркала leap16-oss/leap16-non-oss в Хражевнике и личный rpm-md с -loc-пакетами.

Схема пайплайнов — как у остальных сборок (bin-build, container-build, pacman-pkg-build): ручной workflow_dispatch, job-контейнер из Nora, пакеты — из Хражевника, доверие к step-ca.

Запуск (2 кнопки)

Forgejo → Build/lxc-build → Actions → Build Role Images → Run workflow:

  1. role — выпадающий список: all (по умолчанию, все роли матрицей) или конкретная роль (см. таблицу ниже);
  2. force_rebuild — оставить false: скип-гейт сам решит, что уже собрано.

Базовый образ — там же, Build LXC Base Image (Leap 16), вход только force_rebuild.

Повторный запуск с той же меткой — зелёный скип (как «уже собрано» в container-build).

Два пайплайна

Build LXC Base Image Build Role Images
Что собирает leap16-base из пакетов Хражевника (zypper --root → rpm) роль-образы: готовая база со склада + готовые -loc-пакеты одной rpm-транзакцией
Метка git_sha + sha256 repomd leap16-oss/leap16-non-oss на роль: git_sha + fingerprint базы + sha256 repomd личного rpm-md
Скип-гейт по тройке свойств образа по четвёрке (+ role)
Публикация алиас leap16-base, откат leap16-base-prev, две версии алиас = имя роли, откат <role>-prev, две версии
Приёмка структурная: метаданные, члены тарболла, генерация структурная + launch на складе: инстанс acc-<роль>-<прогон> поднимается, systemd, пробы роли из checks.txt, инстанс удаляется
Новая сущность — каталог images/roles/<имя>/ (включая checks.txt) + строка в options: дропдауна

Импорт всегда без --reuse (reuse-семантика deleteImagesByAliases удаляет прежний образ при совпадении набора алиасов — несовместимо с держанием отката); перенавеску алиаса делает сам import, ротацию ведёт CI.

Роли

Роль Пакет Что даёт Алиас на складе
victoriametrics victoriametrics-loc single-node TSDB, порт 8428 victoriametrics
victorialogs victorialogs-loc single-node log DB, порт 9428 victorialogs
далее: следующий близнец

Новая роль = 5 файлов + 1 строка (пайплайны не плодятся): каталог images/roles/<имя>/ с packages.txt, units.txt, repos/*.repo, meta/ (metadata.yaml + templates) и checks.txt (пробы для приёмки launch-ом, по строке на проверку), плюс строка в options: дропдауна build-roles.yml. Механика общая: images/roles/build-role.sh (ROLE=<имя>), юниты включаются симлинками в multi-user.target.wants (в -loc-пакетах нет systemd-preset — репорт владельцу пакетов; пока сборка кладёт симлинки сама).

Документация

  • актуальная схема.md — как система работает сейчас (база-артефакт + init-файлы, обновление, живость, GC);
  • старая схема.md — архив: роль-образы в CI, что давали и чего стоили;
  • docs/step-1-distro.md — выбор базы (Leap 16 / Slowroll), правило «по хосту», KMP, репозитории;
  • docs/step-2-sborka-i-sklad.md — формат образа, склад артефактов на skld00;
  • docs/podgotovka.md — чек-лист подготовки (исторический: открытые вопросы в нём закрыты);
  • docs/role-images-vm-vl.md — решение по VM/VL (вариант B) + постскриптум реализации;
  • images/leap16/README.md — рецепт и грабли базового образа;
  • images/roles/victoriametrics/README.md — устройство первого роль-образа;
  • images/roles/victorialogs/README.md — вторая роль (близнец VM) и её приёмка.

Общая схема системы и справочник проверенных фактов — в ../lxc-base/doc/ (design.md, facts.md), только чтение.

Зафиксированные решения

Вопрос Решение
База Leap 16 (специальная, для Leap Micro-хостов); Slowroll — позже
Репозитории внутри контейнера Хражевник: leap16-oss + leap16-non-oss (rpm-md, pull-through) + личный rpm-md для ролей; апстрима в пути нет
Сборщик не distrobuilder для LXC: свой скрипт (zypper --root → rpm), т.к. distrobuilder требует chroot/mknod; distrobuilder остаётся для ВМ-образов
Роль-образ (вариант Б) не пересборка с нуля: export готовой базы со склада → одна rpm-транзакция готовых пакетов → repack. Метка включает fingerprint базы — движение базы = автопересборка ролей
CI job-контейнер nora.panelka.yadr01.internal/opensuse/leap:16.0 (root с полным subuid/subgid → верные gid)
MAC в образ не берём: apparmor/selinux-policy не ставятся, MAC навешивает хост
Сеть в контейнере udev + systemd-networkd + systemd-resolved в образе, профиль eth0.network как в официальном рецепте 16.0
CA внутри образа update-ca-certificates --root "$R" из окружения сборки + hashed-каталог для libzypp
Шаблоны метаданных meta/templates/*.tpl → обязаны лежать в ./templates/ метатарболла, иначе launch падает
Публикация склад skld00; доверие CI — постоянный клиентский сертификат (INCUS_CONF, секреты SKLD00_CLIENT_CRT/SKLD00_CLIENT_KEY), одноразовый токен не годится

Состав

images/leap16/          базовый образ: packages.txt, repos/, meta/ (+templates/), files/, build.sh, README.md
images/roles/           build-role.sh (общий) + каталог роли на каждую роль
.forgejo/workflows/     build-leap16-base.yml — база; build-roles.yml — все роли (один, роль — дропдаун)
docs/                   документация решений

План

Шаг Что Статус
1 Репозиторий и точка входа пайплайна сделано
2 Зеркало Leap 16 в Хражевнике (leap16-oss, leap16-non-oss) сделано, remote'ы живые
3 Рецепт базового образа images/leap16/ сделано
4 Публикация в Incus-склад сделано 2026-10-11
5 Приёмка launch-ом и починка базового образа сделано 2026-10-11: три дефекта закрыты
6 Роль-образы: общий пайплайн + первая роль сделано 2026-10-12: victoriametrics опубликована зелёным прогоном
7 Роль victorialogs (близнец VM) сделано 2026-10-12: заведена, принята launch-ом локально, опубликована зелёным прогоном
8 Приёмка launch-ом в CI (сейчас — ручная/структурная) и init-файлы в homelab-deploy приёмка launch-ом в ролевом пайплайне — сделана; приёмка базового пайплайна расширена (cloud-init, seed-шаблоны, защитные элементы); init-файлы — в homelab-deploy/servers/skld00/services/
9 Модернизация базы под init-файлы (cloud-init + seed-шаблоны, маркер загрузки, lxc-healthcheck, манифест/release, проверки) сделано 2026-10-13: опубликована (76,99 МиБ против 50,03 МиБ), приёмка launch-ом пройдена
10 GitOps-агент узла skld00 (webhook :9002 + sync-state.sh + reconcile.sh) сделано 2026-10-13: хук на push, системный юнит под root, выключатель /etc/lxc-automation.off
11 Первые сервисы из init-файлов: victorialogs1 (VictoriaLogs), victoriametrics1 (VictoriaMetrics) сделано 2026-10-13: обе строки create ok, пробы сервисов прошли
12 Путь recreate: снапшот датасета и инстанса → пересоздание → проба → откат ждёт
13 Ночной контур обновления (zypper dup со снапшотом) и GC снапшотов (rollback_window/N=3) ждёт