docs(p0): 记录 QEMU OOM 的最终解决——改用原生 arm64 runner(v1.4.4 闭环)

This commit is contained in:
Gloridust
2026-07-08 03:57:12 +08:00
parent 5aa0ce0414
commit d29ea66730

View File

@@ -16,8 +16,13 @@
- **修复**:
1. Dockerfile 合并两个 apt 层为一次 update+install、装完即移除 snapshot 源、`Acquire::Languages=none`+`Retries=3` → 砍掉 QEMU 下的内存/网络峰值。**本机原生 arm64 构建 + 全套探针验证通过**;
2. `resolveInstanceImage()` 兜底:偏好的版本 tag 在本地和 registry 都不可达 → 回退 `:latest`,保证功能永不因版本错配而瘫痪(已运行时验证)。
- **仍待办(未在本次)**:改用**原生 arm64 runner**(`ubuntu-24.04-arm`)替代 QEMU,从根上消除模拟内存问题并提速;matrix 失败应联动(实例发不出就别单独发面板)。
- **守则**:R1;门禁原则补充——**门禁必须覆盖所有发布架构**,不能只测 amd64。
- **最终解决(v1.4.4)**:源精简只降概率、不治本——v1.4.3 又栽在 snapshot InRelease 的同类 OOM。确认根因是
**QEMU 用户态模拟 apt 的内存天花板**(不确定触发),遂**彻底弃用 QEMU**:release.yml 重写为每个 (镜像×架构)
在**原生 runner**(amd64=ubuntu-latest、arm64=ubuntu-24.04-arm,公开仓库免费)构建、按 digest 推 GHCR,再
merge job 合成多架构 manifest 打 tag(imagetools 顺带把 blob 复制到 Docker Hub)。教训:① 没直接发版赌运气,
先 workflow_dispatch 验证流水线,当场逮到「github.repository_owner 含大写 Gloridust → docker ref 非法」——
actionlint 查不出这类语义错,**只有真跑一遍才发现**;② 修完再验一轮全绿才发 v1.4.4。三次连环构建失败自此闭环。
## 2026-07-07 · v1.4.0 CI 镜像浏览器实例仍黑屏(Chromium 150 漂移)