Grok Bot 0.18 全本地重建(grok-bot-0.18-reconstructed) 所需 Linux arm64 / amd64 基础镜像的源码、构建配方与固定归档。
内容为 2026-08 对 Grok Bot 0.18 沙箱计算机的黑盒观察仿写(端口公式、桌面进程、
浏览器启动器的观察记录见主仓库 docs/ARCHIVE-ASSETS.md 的对齐表):
box-image/Dockerfile—— debian:trixie / arm64、amd64 全套桌面(Xvfb、xfwm4、x11vnc、noVNC、 Chromium、CJK 字体)+ 开发试验场工具链(Go、Rust、Python、bun、uv、gh…), bun / uv 版本与 SHA-256 固定,Playwright 固定版本;约 31 个构建步骤。box-image/bin/—— 容器内治理脚本:box-init(入口)、start-desktop.sh(每屏进程监督表)、start-window/stop-window(副屏生命周期与 owner token)、box-chrome(浏览器启动器, CDP 9222+N)、sand-window-router.mjs(1339 显示路由)、session-sync.mjs(登录态同步守护)。box-service/—— 容器内窗口服务(base 镜像的box-init依赖它存在)。.dockerignore—— 构建上下文排除项(须位于上下文根)。
主仓库在 macOS 上默认使用项目专用的 Colima grokbot profile;运行时可通过
GROKBOT_COLIMA_PROFILE 选择其他名称,显式设置 DOCKER_HOST 时以它为准。
Windows x64 使用 Docker Desktop 的 Linux containers。
基础镜像把主屏 Chromium profile 链接到 /home/box/sand-data/chrome-profile。
主仓库在父目录 /home/box/sand-data 挂载持久数据卷,登录状态随容器替换保留;启动入口在空卷上建立目录,
并清理前一次 Chromium 遗留的 Singleton 锁。副屏继续从主屏共享登录所需文件。
本仓库的 artifacts/manifest.json 统一登记基础镜像和原版 0.18.0 安装包的获取地址、大小与 SHA-256。
基础镜像的完整归档分别保存在 arm64 Release 和 amd64 Release。
原版安装包使用清单中的官方地址下载,仍受原发布者条款约束。
获取脚本需要 Node.js 22 或更新版本和 curl;继续构建主仓库时使用其要求的 Node.js 26.5.0。 macOS Apple Silicon 使用 Colima:
git clone http://github.com/2217173240/grok-bot-box-image.git
cd grok-bot-box-image
colima start --profile grokbot --cpu 4 --memory 6 --disk 30 --arch aarch64
export DOCKER_HOST="unix://$HOME/.colima/grokbot/docker.sock"
node scripts/fetch-artifact.mjs base-arm64 --loadWindows x64 在 Docker Desktop 中启用 Linux containers 后执行:
git clone https://github.com/2217173240/grok-bot-box-image.git
cd grok-bot-box-image
node scripts/fetch-artifact.mjs base-amd64 --load脚本先验证下载归档的大小与 SHA-256,随后导入 Docker,并核对 manifest digest、平台与源码 label。
归档只包含镜像层,不包含容器状态、数据卷、浏览器会话或宿主机凭据。
省略 --load 时只下载并校验;重复执行会校验并复用已有文件,损坏文件明确报错。
导入不会启动或替换正在运行的容器。
归档保留 OCI manifest,需要启用支持该格式并保留 RepoDigest 的 containerd 镜像存储;arm64 已在 Colima 验证,amd64 已在 GitHub Linux runner 的空镜像存储中验证导入。
如果导入后的 digest 无法解析,脚本会报错,不能用改写主仓库 pin 的方式跳过校验。
原版应用输入也可以通过同一入口取得:
node scripts/fetch-artifact.mjs upstream-macos-0.18.0
node scripts/fetch-artifact.mjs upstream-windows-0.18.0文件保存在 .cache/artifacts/。主仓库 npm run bootstrap 本身支持从相同官方地址获取 macOS 构件;
已下载 DMG 可复制到主仓库 .cache/downloads/Grok_Bot_0.18.0.dmg,bootstrap 会再次校验。
Windows 构建使用清单中的原版 Windows 安装包,具体步骤见主仓库部署手册。
git clone http://github.com/2217173240/grok-bot-box-image.git
cd grok-bot-box-image
colima start --profile grokbot --cpu 4 --memory 6 --disk 30 --arch aarch64
export DOCKER_HOST="unix://$HOME/.colima/grokbot/docker.sock"
docker build --platform linux/arm64 --build-arg SOURCE_REVISION="$(git rev-parse HEAD)" -f box-image/Dockerfile -t grok-box-base:arm64 .上例使用 arm64;amd64 主机将平台改为 linux/amd64、镜像标签改为 grok-box-base:amd64。构建从公网拉取 Debian 软件包、
GitHub release(bun/uv,SHA 校验)、npm registry(Playwright 指定版本,ws 使用 8.x 范围)。
Debian 基础镜像使用固定 digest;APT 软件包来源会更新,同一份源码重新构建可能生成不同的镜像身份。
约 20-40 分钟。已有 grokbot profile 时直接使用它;构建不会自动修改主仓库固定的
基础镜像身份。更新主仓库的 docker/base-image.json 前,需核对新镜像内容与平台,
重新构建执行镜像,并完成主仓库的容器门禁和桌面验收。
base 镜像就位后,到主仓库执行 node docker/build-box.mjs --platform linux/arm64 或
node docker/build-box.mjs --platform linux/amd64,分别构建 grok-bot-exec-box:arm64 或
grok-bot-exec-box:amd64(Node 22 固定版本 + 仓库依赖),随后按主仓库
docs/DEPLOY-HANDBOOK.md §3/§4/§6 完成部署。完整部署手册见主仓库。
主屏 profile 链接由基础镜像维护。主仓库以 box-init-exec 启动本地模式,基础镜像的
box-init 与 box-service 仍服务于独立运行基础镜像的路径。
本地模式通过 SAND_SESSION_SYNC_STATE_FILE 读取 host 发布的忙态。状态超过十五秒、格式损坏、文件缺失或存在人工接管文件时暂停同步写入;全部 agent 空闲后再补齐数据。独立基础镜像继续从 box-service 查询状态。同步轮次串行执行,页内写入复查 origin,空页初始化每个浏览器实例与 origin 最多触发两次刷新。
镜像 label 记录源仓库及 SOURCE_REVISION。用于主仓库的正式构建需要干净的 Git 工作区,主仓库的基础镜像清单同时记录镜像 digest 与源码提交。真实双屏同步验收使用 box-image/bin/sync-probe.mjs,必须在没有生产数据、没有其他同步守护的隔离容器运行。
基础镜像通过真实容器验收后,设置 SOURCE_REVISION 为已审查的 40 位源码提交、
IMAGE_MANIFEST_DIGEST 为已审查的 sha256:… manifest digest,IMAGE_PLATFORM 为 linux/arm64 或 linux/amd64,使用 bash scripts/export-base.sh IMAGE OUTPUT.tar.gz 导出。
脚本在导出前核对 digest、平台与来源 label;
导出为已核对的不可变镜像 ID 建立唯一的 grok-box-base:export-… 临时 tag,保留导入时需要的仓库名称,结束时移除该临时 tag。用户已有 tag 保持不变。
归档生成后再次核对 OCI manifest 内容及 digest,并以 Gitleaks 8.30.1 检查镜像 config 与每个独立层,后续层删除的文件也接受检查。
本机需安装该版本的 Gitleaks,或通过 GITLEAKS_BIN 指定经过官方 SHA-256 校验的二进制。发现未审查命中、运行凭据路径或扫描失败时不生成正式导出文件。
核对归档中的 OCI manifest、平台、源码 label 和文件 SHA-256,再建立对应源码提交的 Release。
每个版本使用独立 tag 和文件名,发布后保留原资产。更新 artifacts/manifest.json 和 artifacts/SHA256SUMS,
并同步主仓库的基础镜像身份及验收结果。源码重新构建的镜像必须作为新身份评审,不能覆盖已发布版本。
导出回归验收使用 tests/test-export-roundtrip.py:DOCKER_HOST 指向源 Docker 服务,
EXPORT_TEST_DOCKER_HOST 必须指向专门准备的空 Docker 镜像存储,EXPORT_TEST_IMAGE 指定源镜像;
同时设置上述 SOURCE_REVISION、IMAGE_MANIFEST_DIGEST 和 GITLEAKS_BIN。
目标服务位于 VM 时,EXPORT_TEST_DOCKER_PREFIX 可用 JSON 参数数组指定执行入口,例如 colima ssh --profile grokbot --;VM 必须能读取同一路径下的测试归档。
测试 daemon 必须同时隔离网络、挂载命名空间和 containerd/data-root/socket;仅设置 --bridge=none --iptables=false 不能隔离宿主机网桥。
测试执行真实导出、逐层扫描和导入,验证 grok-box-base@sha256:…、来源 label、文件权限及源 tag 保留。
该测试不启动容器,测试服务及其导入镜像由验收者清理。
Git 排除运行配置、私钥和浏览器数据;Docker 构建上下文仅允许所需源码,CI 用真实 COPY 检查排除规则。Git 历史扫描与镜像扫描全量遮蔽匹配内容,不上传扫描报告或运行数据。
security/reviewed-image-materials.json 登记公开发行包材料的精确路径、规则与完整文件 SHA-256,包括系统源码、测试向量和 Chromium 公开服务配置。三项同时匹配才可接受,内容改变需要重新审查;用户凭据没有例外。arm64 固定归档的 16 层和 amd64 固定归档的 17 层均已逐层检查。
扫描覆盖 config 与层内普通文件;层内再次压缩的包、未知凭据格式和未被规则识别的内容不能据此宣称安全。浏览器 cookie/profile、用户数据卷和宿主账号目录始终属于运行数据,禁止用于镜像构建或发布。