diff --git a/PROGRESS.md b/PROGRESS.md index b5049a6..8bdd68f 100644 --- a/PROGRESS.md +++ b/PROGRESS.md @@ -23,6 +23,7 @@ ### 2026-07 +- **07-12 / 0.58.9**:**probe_mermaid.sh 用法注释修正**:临时容器跑法(case B)的 `docker run` 少了 `-i` —— 不带则容器 stdin 为空,bash 读 `/dev/stdin` 拿到空脚本**静默退出零输出**(服务器验证 0.58.8 时实测踩中,误以为探针跑完无异常)。仅注释修正,脚本本体不变。 - **07-11 / 0.58.8**:**mermaid 渲染必崩最终定案 + 根治**(9dcae061 三轮排查收官):真凶 = 7-08 镜像重建时 apt 烤进的 chromium 点版本 `150.0.7871.46` 自带启动即崩 bug(int3 自杀、零日志、strace 无失败 syscall;上游 `.100` 已修,容器内 `--only-upgrade chromium` 实测复活出图)。排查中被逐一洗清的:沙箱 hardening 六件套、seccomp、AppArmor(Ubuntu 24.04 userns 限制在开但无关)、overcommit/ulimit/max_map_count、QEMU EPYC vCPU、镜像环境(纯净 trixie 对照 rc=0 反转定位)。修复两件套:Dockerfile ① `ARG CHROMIUM_REFRESH=<日期>` cache-bust 旋钮(chromium 出问题改日期重建,pip 大层不动);② **build 末尾渲染 canary**(真渲一张中文最小图,chromium/字体链坏则 build 当场失败——有它 7-08 就不会把坏版本带上线)。RUN.md 故障兜底条目改写为最终版(两根因 + 判别特征 + "别再猜 hardening")、CHANGELOG 面向用户记修复。部署:服务器重建镜像(新 ARG 自然打穿 chromium 层 cache)+ 回收存量容器。 - **07-11 / 0.58.7**:round-3 第 3 步改从镜像内 puppeteer-core `revisions.js` 读 pinned 版本号直下(`@stable` tag 需先访问 Google 版本解析端点——被墙,上一轮三源全败的真因;`--base-url` 只管二进制不管解析),错误输出改 grep Error 行;加 `[步骤]` 参数支持只跑第 3 步。round-1/2 结论沉淀:崩溃无 FATAL 行(静默 CHECK)、gdb 栈无符号、CPU 无 pku/shstk/ibt(排除新安全特性交互)。 - **07-11 / 0.58.6**:round-3 探针下载源修正——npx 拉 `@puppeteer/browsers` 显式走阿里 npm registry,chrome-for-testing 二进制按 阿里 CDN → 阿里 registry binary → 官方 三级 fallback(服务器实测默认源下不动)。 diff --git a/core/__init__.py b/core/__init__.py index c34d457..81e6df9 100644 --- a/core/__init__.py +++ b/core/__init__.py @@ -1,3 +1,3 @@ # zcbot 版本号单一事实源:web/app.py 的 FastAPI version、/healthz 返回、前端展示都引这里。 # 改版本只动这一行。 -__version__ = "0.58.8" +__version__ = "0.58.9" diff --git a/deploy/sandbox/probe_mermaid.sh b/deploy/sandbox/probe_mermaid.sh index 5ca1180..ce9c8d5 100644 --- a/deploy/sandbox/probe_mermaid.sh +++ b/deploy/sandbox/probe_mermaid.sh @@ -5,8 +5,9 @@ # C=$(docker ps --filter "label=zcbot.product=sandbox" --format '{{.Names}}' | head -1) # docker cp deploy/sandbox/probe_mermaid.sh "$C":/tmp/probe.sh # docker exec "$C" bash /tmp/probe.sh -# B) 没有活容器时,起一个临时的(显式 NOT 传 --shm-size,复现线上 64MB): -# docker run --rm --read-only --tmpfs /tmp:exec,size=512m,mode=1777 \ +# B) 没有活容器时,起一个临时的(显式 NOT 传 --shm-size,复现线上 64MB; +# **-i 必须带** —— 不带则容器 stdin 为空,bash 读 /dev/stdin 拿到空脚本静默退出): +# docker run --rm -i --read-only --tmpfs /tmp:exec,size=512m,mode=1777 \ # --cap-drop=ALL --security-opt=no-new-privileges \ # --entrypoint bash zcbot-sandbox:latest /dev/stdin < deploy/sandbox/probe_mermaid.sh set -u