[2026-10-02] eagle: personal/projects/virfield.md
This commit is contained in:
1 parent
2059eeb21a
commit
130dbb2fd2
1 file changed
+25
-4
@@ -7,7 +7,7 @@ tags: [virfield, macos, vm, go, infrastructure]
|
||||
---
|
||||
# Virfield — текущий статус и продолжение
|
||||
|
||||
**Следующее действие:** проверить доступность точного Xcode 13.4.1 / 13F100 archive и диагностировать шифрование Monterey System/Data перед новым live-прогоном.
|
||||
**Следующее действие:** изучить реализацию авторизации и загрузки в исходниках `XcodesOrg/xcodes` и `XcodesOrg/XcodesApp`; затем реализовать в Virfield вход через ссылку для пользователя и автоматическую загрузку Xcode 13.4.1 без ожидания файла в папке хоста.
|
||||
|
||||
**Кандидат ещё не production-ready.** Sequoia 15.2 прошла clean portable publish → GHCR pull-back → два обычных clone workload → cleanup. Monterey и реальный Xcode workflow ещё не приняты; release gates ниже остаются.
|
||||
|
||||
@@ -75,7 +75,28 @@ Virfield v2 — Go control plane для golden images и одноразовых
|
||||
|
||||
Virfield MCP в Codex и Claude Code ещё не зарегистрирован; это отложено до приёмки кандидата. Balda/Broker могут использовать тот же пул: их состояние и задачи проверять отдельно, чужие VM не останавливать.
|
||||
|
||||
## 3. Полный оставшийся план
|
||||
## 3. Хэндоф: авторизация Xcode через ссылку (остановка 2026-10-02)
|
||||
|
||||
**Последнее требование пользователя:** Balda через Mattermost запускает создание Monterey golden с Xcode 13.4.1, присылает ссылку для входа Apple; после прохождения ссылки Virfield должен сам скачать Xcode и продолжить установку. Пользователь **отклонил** предложенное ожидание XIP в папке загрузок хоста. Перед реализацией требуется смотреть код существующих загрузчиков `xcodes`/XcodesApp и добиваться поведения, похожего на OAuth. На этом сессия остановлена по просьбе пользователя; Xcode auth flow не реализован, полный Monterey прогон не готов. Не выдавать архивный импорт или cookie file за исполнение этого требования.
|
||||
|
||||
### Что выяснено и что уже работает
|
||||
|
||||
- Каталог Xcode **уже подключён** в `internal/catalog/catalog.go` через `https://xcodereleases.com/data.json`; macOS IPSW берутся из IPSW.me. `image_catalog` MCP выдаёт доступные версии/совместимость, `image_create` принимает `macos`, точный `xcode`, `security`, `location`, idempotency key и создаёт durable job. Но каталог пока не сообщает отдельно состояние локальной загрузки/установки и ссылку/состояние авторизации. Это нужно добавить и описать для агента.
|
||||
- Для 13.4.1 / 13F100 каталог даёт Apple XIP `https://download.developer.apple.com/Developer_Tools/Xcode_13.4.1/Xcode_13.4.1.xip`, SHA-1 `40e8628555b6231b361471183f3ce17b378036fd`, минимум macOS 12.0. [Xcode Releases](https://xcodereleases.com/) ведёт браузер по `https://developer.apple.com/services-account/download?path=%2FDeveloper_Tools%2FXcode_13.4.1%2FXcode_13.4.1.xip`; неавторизованного пользователя Apple перенаправляет на `idmsa.apple.com`, затем браузер начинает загрузку. Прямой запрос XIP без Apple-сессии ранее возвращал 302 на `/unauthorized/`.
|
||||
- `internal/images/xcode.go` уже умеет резюмируемую прямую загрузку с операторским Netscape cookie file, импорт точного XIP из `image_tools.xcode_archives`, SHA-1, XIP signature, codesign/version/build проверку, распаковку и установку в гостя по SSH (`provision.go`). Если Apple отклоняет прямой запрос, выходит `apple_auth_required`; job требует ручного recovery. **Ссылки, callback и автоматического продолжения после входа нет.** VirtioFS в Monterey 12 не служит готовым решением.
|
||||
- Найден [Homebrew `xcodes`](https://formulae.brew.sh/formula/xcodes) и [исходный проект](https://github.com/XcodesOrg/xcodes); README описывает Apple ID/пароль, 2FA, хранение пароля в Keychain и сессионную загрузку. [XcodesApp](https://github.com/XcodesOrg/XcodesApp) — второй источник для анализа. Это пока только обзор README, **исходный код auth/download не разобран**. Не утверждать, что у Apple есть стандартный OAuth grant для Developer Downloads: официальные Sign in with Apple документы описывают identity, не такой download grant. Нужно проверить точный механизм/ограничения до архитектурного решения, в том числе доступность browser/passkey flow. Не передавать пароль/2FA коды Балде, MCP-агенту, в job/event/log или в URL.
|
||||
- Локальный API Virfield на `127.0.0.1:7780` защищён bearer token, cookies/query tokens не использует; установленный runtime `689904e` старее checkout. Mattermost-ссылка должна работать на машине пользователя и безопасно передавать результат авторизации Virfield; пока не доказано, как отдать браузерную сессию загрузчику без секрета/ручного импорта. Нельзя считать обычный Apple download URL достаточным: он запускает скачивание **в браузере**, а не в daemon.
|
||||
|
||||
### План следующей сессии
|
||||
|
||||
1. Открыть и прочитать исходники `XcodesOrg/xcodes` и `XcodesOrg/XcodesApp`: auth/session, 2FA, cookies, запросы Apple download, redirect и возобновление загрузки. Сравнить с официальным браузерным `services-account/download` flow; документировать подтверждённые возможности и ограничения, не называть его OAuth без реального grant/callback.
|
||||
2. Спроектировать и реализовать **авторизованную ссылку с возвратом управления Virfield** и последующей прямой загрузкой демоном; одноразовое ограниченное состояние, защита от утечки Apple credentials/session, отказ при истечении и restart-safe job. Если Apple не поддерживает такой обмен без ввода Apple ID в сторонний клиент, доказать это исходниками/протоколом и предложить честный эквивалент на согласование до реализации. Не возвращаться самовольно к watcher папки хоста.
|
||||
3. Вывести через MCP/HTTP каталог macOS/Xcode с состояниями «доступно / локально загружено / установлено», совместимостью и параметрами `image_create`; выдать Балде понятные auth actions/link и job progress. Обновить `docs/AGENT-GUIDE.md`, `docs/IMAGE-PIPELINE.md`, `docs/OPERATIONS.md`, embedded `virfield_help` и проверки безопасности/интеграции.
|
||||
4. Прогнать auth/download/install Xcode 13.4.1 на совместимом госте, затем Mattermost → Balda → MCP → ссылка → Apple вход → daemon download → Xcode install. **Отдельный блокер Monterey:** native 12.6 до сих пор даёт `Encryption=true` на System/Data при FileVault Off; clone gate это отвергает. Не ослаблять disk policy и не объявлять полный Monterey golden готовым, пока этот блокер не устранён и не пройдён live E2E.
|
||||
|
||||
Попытка текущей сессии добавить `browser_downloads`/watcher и поля catalog status отменена после явного отказа пользователя; по завершении `git status --short` должен быть пустым, HEAD остаётся `340c6f9`. Новых коммитов, push, deployment и live-прогонов в этой сессии не было. Два заданных уточняющих вопроса (про приемлемость upload и где открывается ссылка) ответа не получили; последний запрет на watcher имеет приоритет. Записи о Xcode в дальнейших разделах этой заметки относятся к старому ручному пути и не означают готовности нового flow.
|
||||
|
||||
## 4. Полный оставшийся план
|
||||
|
||||
### 1. Закрыть Monterey и реальный Xcode workflow
|
||||
|
||||
@@ -101,7 +122,7 @@ Agent guide должен содержать все 17 tools, inputs, job polling
|
||||
|
||||
Установить именно выпущенный artifact, проверить hashes/runtime manifest/schema, MCP и короткий smoke. Обновить README/Operations/Image pipeline/Agent guide/Verification и эту заметку так, чтобы published release, checkout и deployment были различимы. Production-ready объявлять только с перечислением реально прошедшей матрицы и оставшихся ограничений.
|
||||
|
||||
## 4. Действующие pitfalls и правила продолжения
|
||||
## 5. Действующие pitfalls и правила продолжения
|
||||
|
||||
- Golden/import/export требует эксклюзивного свободного пула. Другие задачи активно используют Virfield. `capacity_exhausted` при 2/2 — ожидаемый отказ; очередь принадлежит Broker. Не останавливать чужие VM и не редактировать SQLite ради освобождения слота.
|
||||
- Импортированный native account нельзя перезаписывать offline setup: это ломало credential rotation/Secure Token. Registry imports должны уже иметь SSH и native `lume/lume`; готовятся через SSH. Чужой registry config из HOME не должен менять source/storage: настройки Lume изолированы на job.
|
||||
@@ -109,7 +130,7 @@ Agent guide должен содержать все 17 tools, inputs, job polling
|
||||
- `sysadminctl -autologin` может вернуть error:22 с exit code 0 и оставить старый пароль. Текущий код записывает guest `kcpassword` root:wheel/0600 и loginwindow preference, затем проверяет decoded password по pinned SSH без вывода секрета. Реальный reboot/Finder обязателен; проверка одного exit code не годится.
|
||||
- Неизвестный исход мутации — `needs_attention` и inspection exact VM/job. Не повторять clone/start/delete/upload вслепую. Работать только после lease `ready`, выгружать артефакты до `release`. Приватные logs могут содержать чувствительный контекст; не копировать их целиком. `/private/tmp/virfield-lume-source` содержит отклонённые экспериментальные изменения: не собирать оттуда зависимость, использовать pinned recipe репозитория.
|
||||
|
||||
## 5. Где читать дальше
|
||||
## 6. Где читать дальше
|
||||
|
||||
Каноническая текущая документация находится в локальном checkout (новые коммиты ещё не запушены):
|
||||
|
||||
|
||||
Reference in new issue
Block a user