diff --git a/docs/chv-muse-p2-gap.md b/docs/chv-muse-p2-gap.md index 3238b70..c753117 100644 --- a/docs/chv-muse-p2-gap.md +++ b/docs/chv-muse-p2-gap.md @@ -125,3 +125,38 @@ CDP 由单元外 broker 管理。 只做 uid 检查并打日志——该降级须在日志里可见)。 - 性能记录(只记录、不设门):单元启动到 codex 就绪耗时、veth+NAT 下 模型调用往返、qcow2 实际占用(systemd-container 与新脚本的增量)。 + +## 6. round-11 part 4 补记(2026-11-07,RETEST3 的 3 个 cell 新缺陷) + +RETEST3 证实 `--volatile=yes` + 只遮 /usr 的形状本身生效(遮蔽经 +mount/ls 实测有效),但引出三个阻塞缺陷,本轮按报告方向修: + +1. **启动竞态**:`run_cell` 原顺序是 Popen → 配网 → 单次找 init pid, + 快 payload 在配网完成前退出即撞墙(`run -- true` 11 次只成 6 次)。 + 修:payload 包一层 sh 起步门(等 `/run/chv/.cell-gate-` + 出现再 exec),配网完成后才开门;`find_cell_init_pid` 改带超时 + 轮询;nspawn 已死时返回它的退出码而不是抛错;veth 等待放宽到 + 20 秒。验收:连续 15 次 `run -- true` 计数(cellrace4)。 +2. **volatile 空根缺文件**:单元根是基本空的 tmpfs,`/app`、 + `/etc/resolv.conf`、`/etc/hosts`、`/etc/ssl/certs` 全无,执行器 + 单元路径一律 ENOENT、DNS/TLS 不可用。修:`--bind-ro=/app` 与 + `--bind-ro=/etc/ssl/certs` 固定绑;resolv.conf/hosts 由 run_cell + 按客机有效 DNS 生成单元专属文件(`/run/chv/resolv.conf.`、 + `hosts.`,0644)再只读绑——客机 resolv.conf 可能是 + systemd-resolved stub(127.0.0.53),单元内无 resolved,直接绑 + 即 DNS 全灭。不绑 nsswitch.conf(客机版可能含 resolve 模块, + glibc 默认 files+dns 正是单元需要的)。P2-8 的 example 腿换 + v4 目标(gitea.tose.top)。 +3. **并发 cell 撞毁**:固定 `ve-chv-cell` 名 + 固定 10.200.0.1/24, + 第二个 cell 在 nspawn 建 veth 时即 `File exists`。修:每次 + run_cell 在锁下分配唯一身份(CellNet:machine `chv-cell-`、 + `ve-chv-cell-`、10.200.``.0/24;machine 名 11 字符, + ve- 前缀后 14 字符,符合接口名 15 字符上限;扫描活接口 + 地址 + + machinectl 在册名避让注销滞后)。broker 的 pid ns 对照改成 + 多 cell 版(`cell-.pid` glob + 兼容旧 `cell.pid`,对端 + ns 与任一活单元同 ns 即放行;旧单文件仍由 run_cell 写最新单元, + P2-9 驱动仍读它)。 + +另:执行器 `_boot_vm` 的 vm.create/vm.boot 失败消息现在带截断后 +的响应体(`_truncate_api_body`,500 字符;只留 status 即无法定位 +间歇 500 的根因,两轮已提)。