- /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 项接线断言)。
63 lines
2.9 KiB
Bash
Executable File
63 lines
2.9 KiB
Bash
Executable File
#!/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
|