单任务单 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。
48 lines
2.1 KiB
Bash
Executable File
48 lines
2.1 KiB
Bash
Executable File
#!/bin/bash
|
||
# chv-guest 镜像构建脚本骨架(未在无 KVM 机器上实际执行过)。
|
||
#
|
||
# 用法(需要带 /dev/kvm 的宿主,见 README):
|
||
# CODEX_BIN_DIR=bin UBUNTU_VERSION=24.04 CODEX_VERSION=0.164.0-alpha.9 \
|
||
# REPO_COMMIT=$(git rev-parse --short HEAD) ./build.sh out/
|
||
#
|
||
# 本脚本只做三件事,绝不假装已建成镜像:
|
||
# 1. 参数校验(缺 CODEX_BIN_DIR 成套二进制、缺版本、缺 /dev/kvm
|
||
# 即退出,退出码非 0);
|
||
# 2. 算出版本 tag(chv-guest-<ubuntu>-<codex>-<commit>);
|
||
# 3. 列出仍需在 KVM 宿主上执行的步骤(下载 Ubuntu 云镜像、
|
||
# virt-customize 装清单软件、拷入 /app 代码、生成 vmlinux /
|
||
# disk.raw / BUILDINFO.json),每一步在骨架里以 TODO 标记,
|
||
# 不在本轨内静默跳过或谎称完成。
|
||
set -eu
|
||
|
||
OUT="${1:-out}"
|
||
: "${CODEX_BIN_DIR:?CODEX_BIN_DIR 未设:需 npm 安装 @openai/codex 后的配对二进制目录}"
|
||
: "${UBUNTU_VERSION:?UBUNTU_VERSION 未设}"
|
||
: "${CODEX_VERSION:?CODEX_VERSION 未设}"
|
||
: "${REPO_COMMIT:?REPO_COMMIT 未设:构建时仓库 commit 短 hash}"
|
||
|
||
for bin in codex codex-code-mode-host; do
|
||
if [ ! -x "$CODEX_BIN_DIR/$bin" ]; then
|
||
echo "缺少配对二进制:$CODEX_BIN_DIR/$bin,构建失败" >&2
|
||
exit 1
|
||
fi
|
||
done
|
||
if [ ! -d "$CODEX_BIN_DIR/codex-resources" ]; then
|
||
echo "缺少 codex-resources(bwrap 载体),构建失败" >&2
|
||
exit 1
|
||
fi
|
||
if [ ! -e /dev/kvm ]; then
|
||
echo "CHV_GUEST_BUILD needs a KVM host: /dev/kvm 不存在" >&2
|
||
exit 1
|
||
fi
|
||
|
||
TAG="chv-guest-${UBUNTU_VERSION}-${CODEX_VERSION}-${REPO_COMMIT}"
|
||
mkdir -p "$OUT"
|
||
echo "tag=$TAG"
|
||
echo "out=$OUT"
|
||
echo "TODO(KVM host): 下载 Ubuntu ${UBUNTU_VERSION} 云镜像并转 raw"
|
||
echo "TODO(KVM host): virt-customize 装 README §2 清单(git/python/pandoc/poppler/latex/codex/playwright/openssh)"
|
||
echo "TODO(KVM host): 拷入仓库代码到 /app(版本 $REPO_COMMIT),绝不拷入任何 key"
|
||
echo "TODO(KVM host): 生成 vmlinux + disk.raw + BUILDINFO.json,校验 tag 与清单版本"
|
||
echo "构建骨架结束:以上 TODO 步骤未执行,镜像未建成(见 README 与生产就绪清单)"
|