feat: CHV gap fill — worker breakpoint wiring, pool reconcile, per-VM host keys, egress validation, guest build script
Stack: #216 -> #221 -> this. Worker breakpoint branch now calls any executor providing goal_resume_breakpoint_task (Local keeps its original path, gateway tasks still loud-fail); WarmPool reconcile_orphans is called on CHV worker startup and close with audit-on-failure; per-VM SSH host keys are provisioned before VMM start via cloud-init NoCloud seed (keyscan kept only as weak fallback, CHV_HOST_KEY_MODE=provisioned|keyscan); CHV_NET_JSON is validated in preflight and explicit direct egress is audited; chv-guest/build.sh is now real steps with --dry-run and fails fast without /dev/kvm. Tests: new test_chv_gaps.py (18), cloud full 1514 OK (skipped=4). No real VM verification: no KVM host.
This commit is contained in:
1 parent
fde7bf4c3e
commit
22b83f118a
8 files changed
+922
-59
No files matched your search
@@ -49,10 +49,15 @@
|
||||
非 root 客机用户(CHV_SSH_USER,显式空串直接拒绝)与端口
|
||||
(CHV_SSH_PORT,1-65535)为显式配置。mock 只验证捕获→
|
||||
写文件→钉死选项的管线,不验证首次密钥真实性。
|
||||
- 🔒 首次信任边界未闭合:首次捕获是 TOFU,只防首次之后的
|
||||
替换,不验证首次本身;更强的方案是镜像构建/cloud-init 时
|
||||
把客机 host key 预置进 known_hosts,仍是待办,安全审计时
|
||||
须单独立项确认。
|
||||
- ✅🧪 Host key 预置方案(补缺口轨,替代 TOFU 为生产路径):
|
||||
宿主在启动前为每 VM 生成一次性 ed25519 host key 对,
|
||||
公钥立即写进该 VM 的 known_hosts 钉死,私钥只进 per-VM
|
||||
cloud-init seed(随 VM 关闭/回收而删),客机镜像硬性
|
||||
要求见 chv-guest/README.md §6(cloud-init NoCloud、
|
||||
首启先应用 seed 再起 sshd、不得无条件重生成 host key)。
|
||||
ssh-keyscan 首次捕获只保留为弱回落(CHV_HOST_KEY_MODE
|
||||
=keyscan),生产部署必须用 provisioned 模式;TOFU 首次
|
||||
真实性仍待预置 key 方案在真机上验证,安全审计时须单独立项确认。
|
||||
- 🔒 需安全审计:VM 逃逸面(virtio 设备、tap 桥接、SSH 配置)、
|
||||
客机 root 提权面、租户间东西向隔离的宿主网络配置,须由
|
||||
安全审计逐项确认,代码自查不能代替审计。
|
||||
@@ -114,8 +119,10 @@
|
||||
pandoc/poppler/latex、python-docx/openpyxl/pptx/PyMuPDF/
|
||||
Pillow、codex 0.164.0-alpha.9 成套、Playwright + Chromium、
|
||||
openssh-server、cloud-init)。
|
||||
- ✅ 构建脚本骨架:`chv-guest/build.sh`(参数校验、版本 tag
|
||||
格式、KVM 宿主检查、TODO 步骤清单)。
|
||||
- ✅ 构建脚本实做(补缺口轨):`chv-guest/build.sh`(参数校验、
|
||||
KVM 宿主检查、下载 Ubuntu 云镜像、qemu-img 转 raw、
|
||||
virt-customize 装清单、拷入 /app 代码、virt-get-kernel、
|
||||
BUILDINFO.json 生成与 tag 校验;--dry-run 只打印命令)。
|
||||
- 🏗️ 需镜像构建:镜像本身未构建、未发布;BUILDINFO 版本核对、
|
||||
浏览器版本钉死、中文 LaTeX 单独一版,均待构建时做。
|
||||
- ⏳ 需 KVM 宿主实测:镜像在真 VM 里启动、codex/Playwright/
|
||||
@@ -168,11 +175,14 @@
|
||||
egress_not_configured/api_timeout/guest_not_ready/vm_create_failed/
|
||||
vm_boot_failed/host_capacity_exceeded/disk_quota_exceeded),
|
||||
不笼统 failed。
|
||||
- ✅ 断点对齐:VM 快照/休眠与现有 task_checkpoints/task_attempts
|
||||
语义对齐(recycle 保留两者,丢失临时文件);goal 断点续跑
|
||||
方法(goal_resume_breakpoint_task)已实现,worker 层对非
|
||||
Local 执行器的断点续跑目前仍明确失败(见执行器 docstring),
|
||||
后续 worker 接线是单独一轨,不在本轨假装已通。
|
||||
- ✅ 断点对齐(补缺口轨已接线):VM 快照/休眠与现有
|
||||
task_checkpoints/task_attempts 语义对齐(recycle 保留两者,
|
||||
丢失临时文件);worker 通用分支对任何提供
|
||||
goal_resume_breakpoint_task 的执行器调用它(Local 仍走
|
||||
原路径,网关任务仍被 loud fail 守卫拦住);WarmPool
|
||||
reconcile_orphans 已由 worker 启动与关闭时显式调用,
|
||||
失败不炸主流程但进审计;VM 中途死亡改判 interrupted
|
||||
后走同一断点路径,不再落 failed 死信(见 §3 与新增测试)。
|
||||
- ⏳ 需 KVM 宿主实测:审计事件在真机任务 timeline 里的完整
|
||||
呈现、失败分类与真实故障的对应关系,均未验证。
|
||||
|
||||
|
||||
Reference in new issue
Block a user