86 lines
3.1 KiB
Shell
Executable file
86 lines
3.1 KiB
Shell
Executable file
#!/bin/bash
|
||
# 宿主闸门 · 本机绑定检查 · 铸渊短剧视频AI参数管线
|
||
# 冰朔 2026-08-25 立:管线只从她本机走;不是本机 → 拒绝 + 回执给当前人类。
|
||
# 用法: host-gate.sh [--json] ;退出码 0=通过 1=拒绝
|
||
set -uo pipefail
|
||
|
||
EXPECTED_UUID="5F2970E6-6F76-5378-AA65-25B08E06FC88"
|
||
EXPECTED_USER="bingshuolingdianyuanhe"
|
||
JZAO_MOUNT="/Volumes/JZAO"
|
||
ANCHOR_LEDGER="$JZAO_MOUNT/HoloLake/persona-runtime/task-language-anchors/zcode/ZCODE-TASK-20260824-001"
|
||
TS="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
|
||
|
||
FAILURES=()
|
||
CHECKS=()
|
||
|
||
# 1. 硬件 UUID
|
||
HW_UUID="$(system_profiler SPHardwareDataType 2>/dev/null | awk -F': ' '/Hardware UUID/{print $2}' | tr -d ' ')"
|
||
if [ "$HW_UUID" = "$EXPECTED_UUID" ]; then
|
||
CHECKS+=("hardware_uuid:PASS")
|
||
else
|
||
CHECKS+=("hardware_uuid:FAIL(got=${HW_UUID:-ABSENT})")
|
||
FAILURES+=("硬件指纹不符: 本机不是冰朔的Mac mini")
|
||
fi
|
||
|
||
# 2. 系统用户
|
||
CUR_USER="$(id -un)"
|
||
if [ "$CUR_USER" = "$EXPECTED_USER" ]; then
|
||
CHECKS+=("os_user:PASS")
|
||
else
|
||
CHECKS+=("os_user:FAIL(got=$CUR_USER)")
|
||
FAILURES+=("用户不符")
|
||
fi
|
||
|
||
# 3. JZAO 盘与锚点册
|
||
if [ -d "$JZAO_MOUNT" ] && [ -f "$ANCHOR_LEDGER/task.json" ]; then
|
||
CHECKS+=("jzao_and_anchor_ledger:PASS")
|
||
else
|
||
CHECKS+=("jzao_and_anchor_ledger:FAIL")
|
||
FAILURES+=("JZAO盘未挂载或锚点册不可读")
|
||
fi
|
||
|
||
# 4. 新加坡大脑服务器 SSH 登记
|
||
if [ -f "$HOME/.ssh/config" ] && grep -q "guanghu-lang-sg-001" "$HOME/.ssh/config" && [ -f "$HOME/.guanghu/ssh/guanghu_direct" ]; then
|
||
CHECKS+=("sg_brain_server_ssh:PASS")
|
||
else
|
||
CHECKS+=("sg_brain_server_ssh:FAIL")
|
||
FAILURES+=("新加坡大脑服务器SSH登记缺失")
|
||
fi
|
||
|
||
# 5. 平台
|
||
if [ "$(uname -s)" = "Darwin" ]; then
|
||
CHECKS+=("platform:PASS(darwin)")
|
||
else
|
||
CHECKS+=("platform:FAIL")
|
||
FAILURES+=("非macOS宿主")
|
||
fi
|
||
|
||
VERDICT="PASS"
|
||
[ ${#FAILURES[@]} -gt 0 ] && VERDICT="REJECT"
|
||
|
||
if [ "${1:-}" = "--json" ]; then
|
||
python3 -c "
|
||
import json
|
||
print(json.dumps({
|
||
'schema': 'guanghu.zhuyuan-host-gate-receipt/v1',
|
||
'gate': 'zy-drama-video-pipeline-host-bind',
|
||
'checked_at': '$TS',
|
||
'verdict': '$VERDICT',
|
||
'checks': '$(IFS=,; echo "${CHECKS[*]}")'.split(','),
|
||
'failures': '''$(printf '%s|' "${FAILURES[@]:-}")'''.strip('|').split('|') if '$VERDICT'=='REJECT' else [],
|
||
'human_message': '宿主闸门通过:这是冰朔的本机,管线允许执行。' if '$VERDICT'=='PASS' else '宿主闸门拒绝:当前电脑不是冰朔的本机(或关键依赖缺失)。按冰朔指令,短剧视频AI参数管线只从她的本机执行。换电脑需要先重建:本机密钥、JZAO盘挂载、服务器SSH登记、锚点册。本次不执行任何管线步骤。'
|
||
}, ensure_ascii=False, indent=1))
|
||
"
|
||
else
|
||
echo "=== 铸渊短剧管线 · 宿主闸门 ==="
|
||
for c in "${CHECKS[@]}"; do echo " $c"; done
|
||
if [ "$VERDICT" = "PASS" ]; then
|
||
echo "判定: PASS — 这是冰朔的本机,管线允许执行。"
|
||
else
|
||
echo "判定: REJECT — 不是冰朔的本机,管线拒绝执行。"
|
||
for f in "${FAILURES[@]}"; do echo " 原因: $f"; done
|
||
echo "回执: 换电脑需要先重建本机密钥、JZAO挂载、服务器SSH登记与锚点册。"
|
||
fi
|
||
fi
|
||
|
||
[ "$VERDICT" = "PASS" ] && exit 0 || exit 1
|