Files
codex-app-server/chv-guest/chv-data-mount.sh
T
host eb495892e1 fix(chv): 阶段 3 live 根因——浏览器 socket 与数据盘 profile 的两处权限
- /run/chv 0755 root:root 时 chv-browser 建 browser.sock 报
  PermissionError、服务无限 crash-loop(P2 遗留,阶段 2 从未验
  过 browser.sock):tmpfiles 改 0775 root:chv-browser。
- /home/chv 默认 0750,chv-browser 穿不过家目录,ismount 判假、
  profile 静默回落本机盘:chv-data-mount 挂载成功后 chmod 0751
  /home/chv(只放行穿过,不放行列表)。
- 驱动:等 cloud-init done + 四服务 active 再验浏览器。
- 回归 97 项全过(新增 2 项接线断言)。
2026-11-08 09:45:00 +00:00

63 lines
2.9 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/sh
# chv-data-mount:把数据盘(LABEL=CHVDATA)挂到 /home/chv/workspace。
#
# 由镜像 99-chv-sync.cfg runcmd 在 chv-sync boot 之前调(final 阶段,
# 用户 chv 已存在,可 chown)。幂等:已挂载即返回;已有 CHVDATA
# 标签的盘即直接挂;无数据盘(copy 模式旧 VM 没有第三块盘)即
# 静默退出 0,不报错、不挡启动。
#
# 找盘不依赖 /dev/vd? 固定名:先按 LABEL 找;找不到则在所有整盘里
# 找一块无文件系统、不是根盘的盘——seed ISO 有 iso9660,不会被选
# 中;根盘本身无 fs,但按持有 / 分区的盘排除;分区(/dev/vda1 等)
# 不参与(glob 只取整盘名)。
#
# 阶段 1(feat-chv-opt-landing):工作区与浏览器 profile 的载体从
# 系统盘 overlay 里剥离出来,独立持久;快照只登记系统盘 overlay,
# 数据盘不进快照(见 cloud/chv/disk.py)。
set -u
MOUNT=/home/chv/workspace
LABEL=CHVDATA
log() { echo "chv-data-mount: $*"; }
mountpoint -q "$MOUNT" 2>/dev/null && { log "already mounted"; exit 0; }
DEV=$(blkid -L "$LABEL" 2>/dev/null || true)
if [ -z "$DEV" ]; then
ROOT_SRC=$(findmnt -n -o SOURCE / 2>/dev/null || echo "")
ROOT_DISK=$(printf '%s' "$ROOT_SRC" | sed -e 's/p[0-9]*$//' -e 's/[0-9]*$//')
for d in /dev/vd[a-z] /dev/sd[a-z] /dev/xvd[a-z]; do
[ -b "$d" ] || continue
[ "$d" = "$ROOT_DISK" ] && continue
TYPE=$(blkid -o value -s TYPE "$d" 2>/dev/null || echo none)
[ "$TYPE" = "none" ] || continue
DEV=$d
break
done
fi
[ -n "$DEV" ] || { log "no data disk found, skip"; exit 0; }
if [ "$(blkid -o value -s LABEL "$DEV" 2>/dev/null || echo "")" != "$LABEL" ]; then
log "formatting $DEV as $LABEL"
mkfs.ext4 -L "$LABEL" "$DEV" || { log "mkfs failed on $DEV"; exit 0; }
fi
mkdir -p "$MOUNT"
mount "LABEL=$LABEL" "$MOUNT" || { log "mount failed"; exit 0; }
chown chv:chv "$MOUNT" || true
# feat-chv-opt-landing(阶段 3):浏览器持久 profile 落数据盘。
# chv-browser 以 chv-browser 身份跑,工作区根属 chv、它写不进;
# 此处以 root 预建 profile 目录并定好属主与 0700,服务重启后
# 同一 profile 即登录态跨恢复保留。数据盘不在时浏览器服务
# 自己回落 /var/lib/chv-browser/profile(见 chv-browser.py)。
mkdir -p "$MOUNT/.chv-browser-profile" || true
chown chv-browser:chv-browser "$MOUNT/.chv-browser-profile" 2>/dev/null || true
chmod 0700 "$MOUNT/.chv-browser-profile" 2>/dev/null || true
# 阶段 3 live 实证(2026-11-08,构建 #8 驱动):/home/chv 默认
# 0750 chv:chv,chv-browser 穿不过家目录去够数据盘 profile——
# ismount 判假、profile 静默回落本机盘(服务本身不报错)。
# 放到 0751:只放行穿过(+x),不放行列表(无 r),
# chv-browser 能进已知子目录,看不见家目录内容。
chmod 0751 /home/chv 2>/dev/null || true
log "mounted $DEV -> $MOUNT"
exit 0