#!/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---); # 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 与生产就绪清单)"