From 4c8e4eac7b384b292661927825b4e2987fe8699d Mon Sep 17 00:00:00 2001 From: host Date: Fri, 6 Nov 2026 10:29:59 +0000 Subject: [PATCH] =?UTF-8?q?fix(chv-guest):=20apt=20=E7=94=A8=20--no-instal?= =?UTF-8?q?l-recommends=EF=BC=88B-21=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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。 --- chv-guest/README.md | 2 +- chv-guest/build.sh | 29 ++++++++++++++++++----------- chv-guest/buildinfo.py | 4 ++-- 3 files changed, 21 insertions(+), 14 deletions(-) diff --git a/chv-guest/README.md b/chv-guest/README.md index 167a39c..066daf8 100644 --- a/chv-guest/README.md +++ b/chv-guest/README.md @@ -27,7 +27,7 @@ | 类别 | 内容 | 来源/版本口径 | | --- | --- | --- | -| 语言与工具链 | Python 3.12、git、curl、ca-certificates、xz-utils(Node.js 不装:Playwright 驱动是 Python playwright,见 PLAYWRIGHT=1 分支;任务镜像 Dockerfile 里也没有 Node.js,本清单不虚构它) | 构建时钉小版本并记入构建日志 | +| 语言与工具链 | Python 3.12、git、curl、ca-certificates、xz-utils、fontconfig、openssh-client(Node.js 不装:Playwright 驱动是 Python playwright,见 PLAYWRIGHT=1 分支;任务镜像 Dockerfile 里也没有 Node.js,本清单不虚构它) | 构建时钉小版本并记入构建日志;apt 用 --no-install-recommends(B-21:默认装 Recommends 会连带拉入 gcc 全套工具链顶满根分区) | | 文档/图片工具 | 已裁剪:pandoc、poppler-utils、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-headless-shell(默认装,不要完整 Chromium) | Python playwright 装当时的 headless-shell,版本以 ms-playwright 缓存目录名记入 BUILDINFO.versions.chromium | diff --git a/chv-guest/build.sh b/chv-guest/build.sh index 86635e3..15fa1a8 100755 --- a/chv-guest/build.sh +++ b/chv-guest/build.sh @@ -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- 与 initrd.img-;旧写法 diff --git a/chv-guest/buildinfo.py b/chv-guest/buildinfo.py index 56460a3..652ef33 100644 --- a/chv-guest/buildinfo.py +++ b/chv-guest/buildinfo.py @@ -24,9 +24,9 @@ import time # 最小中文字体;已裁剪 pandoc/texlive/python-docx 等文档工具 # 与 qemu-guest-agent。chv-sync 是仓库内脚本,版本随 repo_commit。 BASE_CONTENTS = [ - "git", "openssh-server", "cloud-init", + "git", "openssh-server", "openssh-client", "cloud-init", "python3", "python3-pip", "curl", "ca-certificates", - "xz-utils", "fonts-wqy-microhei", "codex", + "xz-utils", "fonts-wqy-microhei", "fontconfig", "codex", "codex-code-mode-host", "codex-resources/bwrap", "/app/host.py", "gt", "chv-sync", ]