fix(chv-guest): apt 用 --no-install-recommends(B-21)

Round 6 真机构建在 Playwright 步 ENOSPC 失败:--install 默认装
Recommends,python3-pip 连带拉入 python3-dev → gcc/g++/
build-essential 全套,根分区 2.4G 用到 2.2G(95M 空闲),
headless-shell 下到 70% 写满。改走 --run-command apt-get
install --no-install-recommends,必需项显式列出(fontconfig、
openssh-client),两轮 apt 后 apt-get clean + 清 lists 收尾。
buildinfo contents 与 README 同步加 openssh-client/fontconfig。
This commit is contained in:
host committed 2026-11-06 10:29:59 +00:00
1 parent 5206dfbc43
commit 4c8e4eac7b
3 files changed
+21 -14

No files matched your search

+18 -11
View File
@@ -199,17 +199,20 @@ run qemu-img convert -f qcow2 -O raw "$IMG" "$OUT/disk.raw"
# 轻量版不扩盘:Minimal 底座根分区 2.4G、实测 1.9G 空闲,
# 轻量清单(见下)装完仍有余量;全量版 B-16 的 +12G 扩盘
# 已删除——扩盘会把 raw 表观顶到 16G,与 raw ≤2G 目标直接冲突。
# 清单软件(轻量口径,2026-11-06 用户定):
# git、openssh-server、cloud-init、python3、python3-pip、
# curl、ca-certificates、xz-utils、fonts-wqy-microhei(最小
# 中文字体,中文能看;不要全套 fonts-noto-cjk)。
# 已裁剪:pandoc、poppler-utils、latexmk、texlive-latex-base、
# python-docx、openpyxl、python-pptx、PyMuPDF、Pillow、
# qemu-guest-agent(CHV 不用它;薄客机 agent 是 /app/host.py)。
# 中文 LaTeX(xelatex)仍不装。
# B-21:apt 必须 --no-install-recommends。virt-customize
# --install 默认装 Recommends,python3-pip 会连带拉入
# python3-dev → gcc/g++/build-essential 全套工具链,根分区
# 2.4G 被顶到 96%(实测 2.2G/95M 空闲),Playwright 下载
# headless-shell 到 70% 时 ENOSPC 失败(round 6)。改走
# --run-command apt-get install --no-install-recommends,
# 并把会被 Recommends 带进来的必需项显式列出:fontconfig
# (字体发现,没有它 Chromium 找不到中文字体)、openssh-client
# (git 的 Recommends,agent 任务可能要 ssh 出站)。
# apt-get clean 只清 .deb 缓存、不动 lists(playwright
# --with-deps 稍后还要 apt 装浏览器依赖);lists 在最后一步清。
# Playwright 默认开启(PLAYWRIGHT=0 可显式关掉),浏览器只装
# chromium-headless-shell(不要完整 Chromium)。
# 单次 virt-customize:apt 安装、pip、拷入、sshd 加固、git 占位、
# chromium-headless-shell(不要完整 Chromium)。单次
# virt-customize:apt 安装、pip、拷入、sshd 加固、git 占位、
# gt 安装、chv-sync、版本读回都在同一次定制里按参数顺序跑;
# Playwright 装在第一次 freeze 之后、最终 freeze 之前(B-08:
# 最终 freeze 须在 Playwright 安装之后,否则
@@ -218,7 +221,7 @@ run qemu-img convert -f qcow2 -O raw "$IMG" "$OUT/disk.raw"
# 写进 /app/guest-versions-chromium.txt)。
GT_INSTALL_CMD="curl -fsSL -o /tmp/gt-install.sh https://gitea.com/gitea/cli/raw/branch/main/scripts/install.sh && echo \"${GT_INSTALL_SH_SHA256} /tmp/gt-install.sh\" | sha256sum -c - && GITEA_CLI_VERSION=${GT_VERSION} GITEA_CLI_INSTALL_DIR=/usr/local/bin sh /tmp/gt-install.sh && rm -f /tmp/gt-install.sh && /usr/local/bin/gt version"
VC_ARGS=(-a "$OUT/disk.raw"
--install git,openssh-server,cloud-init,python3,python3-pip,curl,ca-certificates,xz-utils,fonts-wqy-microhei
--run-command 'apt-get update -qq && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends git openssh-server openssh-client cloud-init python3 python3-pip curl ca-certificates xz-utils fonts-wqy-microhei fontconfig && apt-get clean'
--copy-in "$CODEX_BIN_DIR/codex:/usr/local/bin/"
--copy-in "$CODEX_BIN_DIR/codex-code-mode-host:/usr/local/bin/"
--copy-in "$CODEX_BIN_DIR/codex-resources:/usr/local/bin/"
@@ -241,6 +244,10 @@ if [ "${PLAYWRIGHT:-1}" = "1" ]; then
--run-command 'dpkg-query -W -f "\${Package} \${Version}\n" > /app/guest-versions-dpkg.txt; pip3 freeze > /app/guest-versions-pip.txt || true'
--run-command 'ls /root/.cache/ms-playwright/ > /app/guest-versions-chromium.txt 2>/dev/null || true')
fi
# B-21 收尾:清掉两轮 apt 的缓存与 lists(--with-deps 装完后
# 不再有 apt 活动),把空间还给镜像。
VC_ARGS+=(
--run-command 'apt-get clean && rm -rf /var/lib/apt/lists/*')
run virt-customize "${VC_ARGS[@]}"
# B-18:virt-get-kernel 的 -o 是输出目录(不是文件),它在
# 目录里下载 vmlinuz-<ver> 与 initrd.img-<ver>;旧写法