Files
obsidian-vault/personal/projects/virfield.md
T

85 lines
9.7 KiB
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: Virfield
namespace: personal
updated: '2026-10-07'
status: virfield-3-stage-1-in-progress
tags:
- virfield
- macos
- vm
- go
- infrastructure
---
# Virfield 3.0 — handoff checkpoint — 2026-10-07 15:35 Bishkek
**Текущий статус: Stage 1 (Tart/Orchard migration) в работе; продолжать в `/Users/admin/Developer/virfield-v3`, branch `codex/virfield-v3-stage1`.** Это актуальная запись состояния; ниже сохранена история v2 от 2026-10-03.
## Что проверено сейчас
- Worktree: HEAD `8830ad9` (`Add Tart and Orchard runtime providers`), родительский план `6013310`. Восемь файлов modified и не закоммичены: `cmd/virfieldd/main.go`, `internal/config/config.go`, `internal/httpapi/server.go`, `internal/tart/client.go`, `internal/tart/client_test.go`, `internal/web/app.js`, `internal/web/index.html`, `internal/web/style.css`. Не откатывать и не считать эти изменения заведомо своими без проверки.
- `http://127.0.0.1:7780` отвечает HTTP 200 и отдаёт v3 UI (Fleet / Images / Activity, Hosts & storage). Факт подтверждён запросом к live-сервису.
- Live `virfieldd`: launchd label `system/ai.virfield.virfieldd`, PID 54497 на момент проверки, пользователь `admin`; plist `/Library/LaunchDaemons/ai.virfield.virfieldd.plist` запускает `~/.virfield-v2/bin/virfieldd -config ~/.virfield-v2/config.json`. Имя `virfield-v2` — legacy путь развертывания, не доказательство версии исходников.
- Точная ревизия уже работающего процесса не установлена. Не заявлять, что бинарник на 7780 собран из HEAD `8830ad9`.
- Текущий dirty source успешно компилируется командой `go build -trimpath -o /private/tmp/virfieldd-v3-check ./cmd/virfieldd`. Полный `make check` после этих восьми изменений ещё не запускался. Предыдущий passing `make check` относится к исходной реализации до текущих правок.
## Следующее действие
1. Разобрать каждое из восьми незакоммиченных изменений и сохранить нужное; проверить владельца/намерение, не затирать.
2. Прогнать `make check` в этом worktree и устранить регрессии.
3. Собрать `make build`; сохранить копию текущего deployment binary для отката, заменить `~/.virfield-v2/bin/virfieldd` собранным бинарником.
4. Перезапуск текущего launchd job пока не проверен. Для контролируемой проверки после сборки:
```sh
pgrep -x virfieldd
# Убедиться, что найден ровно один PID текущего сервиса.
kill -TERM PID
launchctl print system/ai.virfield.virfieldd | rg 'state =|pid =|runs ='
curl -fsS http://127.0.0.1:7780/ | rg 'v3|Fleet|Hosts & storage'
```
Причина ожидания автоматического старта: plist имеет `KeepAlive=true`, процесс работает от `admin`, а deployment directory принадлежит `admin`. Это ожидаемый способ без `sudo`, но пока не подтверждён живой проверкой. Если launchd не поднял новый PID, остановиться и диагностировать; не запускать второй daemon.
Сборка/установка (после успешных проверок; перед заменой сохранить бинарник для rollback):
```sh
cd /Users/admin/Developer/virfield-v3
make check
make build
cp -p /Users/admin/.virfield-v2/bin/virfieldd /private/tmp/virfieldd-before-v3
install -m 755 bin/virfieldd /Users/admin/.virfield-v2/bin/virfieldd
```
До live-проверки не объявлять обновление завершённым. Общий install/runbook находится в `docs/OPERATIONS.md`; он описывает регистрацию system LaunchDaemon с `sudo`, но не dev-перезапуск существующего job без `sudo`.
5. После подтверждения записать точный commit/build и результат live-проверки здесь. До этого не создавать второй listener и не менять порт.
## План и границы
- `docs/VIRFIELD-3-PLAN.md` — целевая архитектура и план, не журнал выполненных этапов.
- `docs/VERIFICATION.md` — acceptance evidence, не доказывает приёмку текущих Tart/Orchard dirty changes.
- В committed v3 уже есть провайдеры Tart и Orchard, host/storage/capacity UI и опциональный WoL по реализации базового коммита. Текущие незакоммиченные правки расширяют/исправляют это; перед claims сверить код и тесты.
- Источник кода — worktree `virfield-v3`; live deployment — `~/.virfield-v2`; это разные копии. Обновление source само по себе не обновляет процесс на 7780.
---
# Virfield — статус 2026-10-03
**Следующее действие:** проверить загрузку, работу и удаление временного клона из нового чистого образа Monterey/Xcode.
## Состояние
- Monterey 12.6 + Xcode 13.4.1: образ `image_ready`, временный legacy-клон прошёл загрузку, компиляцию Swift, SSH, выгрузку артефакта и очистку. Тест `TestLiveLeaseSSH` прошёл за 86,99 с 2026-10-03.
- Исходный образ `macos-12.6-xcode-13.4.1` остановлен и сохранён. Временный клон удалён; активных заданий и занятых слотов нет.
- Release-ready: нет. Чистая сборка прошла; клон нового образа и полный путь Balda/Broker ещё не приняты.
- Ветка `codex/versioned-images`: локальный коммит `19e01ac`; push не сделан.
## Установка Xcode и размер диска
- macOS 13+ использует VirtioFS. Monterey не монтирует VirtioFS; его путь передаёт проверенный XIP по закреплённому SSH и сверяет SHA-1 в госте.
- На существующей 80 GB VM `xip` отказался распаковываться при ~42 GiB свободного места. Фолбэк передал проверенный Xcode.app по SSH без macOS tar metadata; гостевая подпись Apple и точная версия прошли проверку.
- XIP занимает ~10 GB. Кэшированный Xcode.app занимает ~17 GB на хосте; несжатый поток файлов составил ~32 GiB. Готовая 80 GB VM занимает на хосте ~49 GiB.
- Новые macOS 11/12 VM с Xcode получают разреженный виртуальный диск 120 GB. Чистая сборка подтвердила, что XIP распаковывается на нём без фолбэка; готовый новый диск занимает 34,8 GiB на хосте. Существующая 80 GB VM не увеличивалась.
## Legacy-клон и проверки
- `legacy_uuid` допускает APFS encryption at rest при выключенном FileVault и только одного активного worker. Registry publish для этого образа запрещён.
- Первый живой клон не загрузился: Lume поменял `machineIdentifier` и MAC-адрес. Он был удалён. Virfield теперь восстанавливает оба значения из остановленного образа до запуска копии и проверяет наличие скопированного NVRAM. Обычные клоны сохраняют новую идентичность.
- Повторный клон подтвердил Xcode 13.4.1 / 13F100, Swift, SIP, Finder, политику диска, закреплённый SSH, отказ ключу исходного образа, туннель и SCP-артефакт. Второму одновременному legacy worker отказано. После теста исходный образ остался `image_ready`.
- Чистая сборка `macos-12.6-xcode-13.4.1-clean-20261003` завершилась без ручного восстановления: задача `job-ca072dfb3bfee011bd7ee9fcd28d8f46` succeeded, образ `image_ready` и остановлен. Первый запуск через `image-create` был отклонён из-за APFS: эта команда не задаёт `legacy_uuid`; неудачная VM удалена с разрешения пользователя. Повторная сборка использовала профиль в `config.json` с legacy UUID.
- `make check` и `make build` прошли; установленный менеджер обновлён. Подробные результаты — `docs/VERIFICATION.md`; контракт установки — `docs/IMAGE-PIPELINE.md`.