Files
codex-app-server/chv-guest
host c371bbdf1e feat: Cloud Hypervisor 执行器生产级 v1(cloud-hypervisor)
单任务单 VM:API 唤醒(preflight→vmm.ping→vm.create→vm.boot→SSH 就绪)、
暂停/快照/休眠等价/关闭/回收、预热快照池、每任务磁盘 copy、容量与磁盘配额门、
受控 egress fail-closed、VM 事件审计与分类失败;worker/server/autoscaler 接线
(executor=cloud-hypervisor,任务内 LLM 不可自选);默认关闭,不进生产路由。
未做真实 VM 验证:生产主机与本 VM 均无 /dev/kvm、无嵌套虚拟化,验证为 mock +
干跑命令 + 单元测试;真 VM、快照恢复、压测、安全审计见
docs/chv-production-readiness.md。CI 账单故障仍是硬门禁,本提交只到 PR OPEN。
2026-10-30 18:54:16 +00:00
..

Cloud Hypervisor 客机镜像(chv-guest)——内容清单与版本化构建说明

本目录只有清单与构建脚本骨架,镜像本身不在本轨内实际构建 发布。原因写在前面,不藏着:当前没有带 /dev/kvm 的宿主 可以构建并实测 VM 镜像(生产主机是 CVM、无嵌套虚拟化; 本 VM 容器内同样无 /dev/kvm)。构建与实测见 docs/chv-production-readiness.md 的“需镜像构建 / 需 KVM 宿主实测”项,绝不在本轨声称镜像已建成、已发布、已跑通。

1. 镜像定位

  • 基础:Ubuntu 云镜像(与 cloud/docker/Dockerfile 的任务镜像 对齐能力,不是另起一套环境口径)。
  • 载体:Cloud Hypervisor 直接内核启动(vmlinux)+ raw 磁盘 镜像,执行器用 CHV_KERNEL / CHV_ROOTFS 指向它们。
  • 客内 host.py 位置:/app/host.py(与 Docker 的 /app:ro 同款约定,只是载体从容器只读挂载换成 VM 镜像内置代码; 代码版本 = 构建时仓库 commit,见 §3 版本化)。
  • 绝不进镜像的东西:任何模型 key、系统 key、用户账号数据、 生产凭证。模型 key 由客机 cloud-init 预置的运行环境变量名 注入(与 Docker 的 -e <名> 同款惯例),不写进镜像层。

2. 内容清单(按现有 Docker 任务镜像能力对齐)

类别 内容 来源/版本口径
语言与工具链 Python 3.12、git、Node.js(Playwright 驱动用) 与任务镜像同款大版本,构建时钉小版本并记入构建日志
文档/图片工具 pandoc、poppler-utils(pdftotext)、latexmk、texlive-latex-base、python-docx、openpyxl、python-pptx、PyMuPDF、Pillow 逐项照抄 cloud/docker/Dockerfile 的 apt/pip 清单,不擅自加减
agent 引擎 codex、codex-code-mode-host、codex-resources/bwrap(成套,约 367M,缺 sibling 直接构建失败) codex 0.164.0-alpha.9(与生产任务镜像一致);CODEX_BIN_DIR 由构建方提供,bin/ 不进仓库
浏览器 Playwright + Chromium(浏览器自动化 MCP 用) 与生产 playwright 镜像同款:浏览器装在固定路径、供租户用户可读;本骨架只列清单,浏览器版本在构建时钉死
客机基础 openssh-server(SSH 通道用)、cloud-init、qemu-guest-agent(可选,宿主信息用) sshd 默认只允许 key 登录,禁止密码登录
任务代码 codex-app-server 仓库代码置于 /app(host.py 入口) 版本见 §3,不挂载宿主代码目录(VM 与宿主无共享路径)

中文 LaTeX 说明:与 Docker 镜像同款口径——xelatex + CJK 字体会再增数百 MB,本清单不默认包含;需要时单独一版镜像, 不在本轨悄悄加。

3. 版本化

镜像 tag 格式(构建时三项缺一即失败,不生成无版本镜像):

chv-guest-<ubuntu 版本>-<codex 版本>-<仓库 commit 短 hash>

例如(示例格式,非已建成):chv-guest-24.04-0.164.0-alpha.9-aebc623。

构建产物清单(构建方必须输出,执行器用它做 preflight 之外的 版本核对,v1 执行器暂不校验 tag,见就绪清单):

  • vmlinux(与 Ubuntu 云镜像配套的内核)
  • disk.raw(根文件系统镜像)
  • BUILDINFO.json:{ubuntu, codex_version, repo_commit, built_at, contents: [清单逐项版本]}

4. 构建脚本骨架

见 build.sh:只做参数校验、产物路径与版本 tag 计算、以及 “需要 KVM 宿主 / virt-customize 才能执行的步骤”占位。脚本在 无 KVM 的机器上运行时应在第一步就明确退出(CHV_GUEST_BUILD needs a KVM host),绝不假装构建成功。

5. 与执行器的对接

  • 执行器 preflight 只校验内核/镜像文件存在且可读,不校验镜像 内容版本——内容版本核对(BUILDINFO)是镜像发布流程的责任, 在就绪清单里标为“需镜像构建”项,不在本轨假装已做。
  • 每任务磁盘:执行器 copy 模式下把 disk.raw 复制为每任务 磁盘,任务之间文件系统独立;reuse 模式仅单租户实验,生产禁用。
  • 快照基准:CHV_SNAPSHOT_URL 指向的快照必须由本镜像的干净 启动状态制成(pause 后 snapshot),预热池用它做干净 VM 来源。