系统基建线(agent-139): svcd subreaper加固 + meow_sysui总监 + 启动链

- svcd: 审计确认现网已子进程化(fork+execv+setpgid+waitpid+SIGCHLD+set_cloexec,无system()); 增量 prctl(PR_SET_CHILD_SUBREAPER) 代收孤儿孙进程 → fb2d608b
- meow_sysui(新增): 系统进程总监, 仿svcd成熟模式(信号自管道/poll/双探测kill/waitpid/subreaper/状态机), 监护自己fork+exec进程, 按sysui.d/<name>.conf逐条拉起, 无级联/有限次兜底/主循环绝不exit/空配置空转 → 173013cc
- 启动链 S70meow_sysui → S89meow_svcd → S90meow_bootmenu; svcd拉起权判归(sysui在→交监管,不在→回退现网重挂循环)
- 宿主集成测试过(常崩/稳定隔离/无级联/subreaper收尸/端到端); meow_ui.a未动
- 需加到固件打包(build_fw_apps_m267.sh): sysui→/usr/bin/meow_sysui, svcd覆盖(fb2d608b), S70+S89; 校验 svcd 762e84d0→fb2d608b, 新增 sysui 173013cc
This commit is contained in:
MeowOS committed 2026-08-30 19:07:47 +08:00
1 parent c4e648be0e
commit 2a6c4e97c5
9 files changed
+1391 -8

No files matched your search

+92
View File
@@ -0,0 +1,92 @@
#!/bin/sh
#
# S70meow_sysui - MeowOS 系统进程总监(Supervisor Tree 顶层)
#
# 位置:**最早**(早于 S84ssh / S89meow_svcd / S90meow_bootmenu)。
# * 定案启动链:meow_sysui 先起(S70)→ meow_svcd(由 sysui 拉起)→ 各项服务子进程。
# * S90meow_bootmenu 里 `exec /usr/bin/meow_bootmenu --fork` 会阻塞 rcS,故任何 S90 之后
# 的 init.d 都不执行——sysui 必须排在 S90 之前(S70 满足)。
#
# 职责:监管系统进程(launcher / meow_svcd / meow_mdns / …),一个崩只拉起它、绝不级联。
# 本脚本只做三件事:
# 1) 预置板载监管配置 /usr/data/meow/sysui.d/*.conf(首启建,已存在不覆盖);
# 2) 拉起 meow_sysui(默认后台 daemon);
# 3) stop 时优雅停 sysui(其会 SIGTERM 被监管的 svcd 并收尸)。
#
# 红线:不 killall、不碰播放器信号、不刷机、不碰 recovery_all。sysui 自身最小依赖,
# 失败兜底(某被监管进程起不来 → 仅记日志 + 有限次重试,不阻塞其它/不拖垮自身)。
#
case "$1" in
start)
echo -n "Starting meow_sysui (S70): "
# 1) 预置板载监管配置(Data 区可写才建;已存在不覆盖)
if [ -d /usr/data/meow ] && [ -w /usr/data/meow ]; then
mkdir -p /usr/data/meow/sysui.d
if [ -f /usr/data/meow/sysui.d/svcd.conf ]; then
echo -n "svcd.conf exists "
else
cat > /usr/data/meow/sysui.d/svcd.conf <<'EOF'
# meow_sysui 监管条目:meow_svcd(服务管理器)。系统进程总监 → svcd 被监管 → 服务为 svcd 子进程。
# 语义同 services.d:key=value,'#'/';' 注释,未知键忽略。无 trigger——enabled=1 即常驻监护。
exec=/usr/bin/meow_svcd
args=-f
enabled=1
restart=always
backoff_ms=3000
max_restart=5
EOF
chmod 644 /usr/data/meow/sysui.d/svcd.conf
echo -n "provisioned svcd.conf "
fi
# launcher 当前由 S90meow_bootmenu 的 exec 拥有生命周期;待 bootmenu 让位后交 sysui。
# 此处仅登记(enabled=0),避免双重拉起。mdns 是 svcd 的服务子进程,由 svcd 负责,
# 本阶段不直接监管(或作兜底条目,默认关)。
if [ -f /usr/data/meow/sysui.d/launcher.conf ]; then
echo -n "launcher.conf exists "
else
cat > /usr/data/meow/sysui.d/launcher.conf <<'EOF'
# 预留:launcher(系统 UI 渲染宿主)。现网由 S90meow_bootmenu exec 拥有 → 启用前需 bootmenu 让位。
# 真把 launcher 交给 sysui 监管后,把 enabled=1(并停用 bootmenu 的 exec launcher 路径)。
exec=/usr/bin/meow_launcherd
args=
enabled=0
restart=always
backoff_ms=3000
max_restart=5
EOF
chmod 644 /usr/data/meow/sysui.d/launcher.conf
echo -n "provisioned launcher.conf "
fi
else
echo -n "skip provision (/usr/data/meow not writable) "
fi
# 2) 拉起 meow_sysui(默认后台 daemon;S89meow_svcd 会因 sysui 在而把 svcd 拉起权交还 sysui)
rm -f /tmp/meow_sysui.stop
if [ -x /usr/bin/meow_sysui ]; then
if [ -f /tmp/meow_sysui.pid ] && kill -0 "$(cat /tmp/meow_sysui.pid 2>/dev/null)" 2>/dev/null; then
echo "already running"
else
/usr/bin/meow_sysui
echo "started"
fi
else
echo "MISSING /usr/bin/meow_sysui"
fi
;;
stop)
echo -n "Stopping meow_sysui: "
touch /tmp/meow_sysui.stop
for p in $(ps | grep "[m]eow_sysui" | awk '{print $1}'); do kill "$p" 2>/dev/null; done
echo "OK"
;;
restart|reload)
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
;;
esac
exit 0