8de32eb611
# Conflicts: # .gitignore # infra/cloud-init/node.yaml.tmpl
infra/cloud-init —— 节点一段式安装
加速节点开机即用所需的全部物料。控制面(或 #14 弹性开机)在创建节点前,用 sed
把模板里的 __PLACEHOLDER__ 替换成真实值(沿用 deploy/ 渲染约定),再作为
user-data 注入。
文件
node.yaml.tmpl—— cloud-config 模板。写入/etc/pangolin-agent/agent.env(含一次性 bootstrap token,0600),下载并按 SHA-256 校验install-node.sh后执行。install-node.sh—— 幂等安装脚本:下载锁定版本的sing-box+pangolin-agent二进制并校验 SHA-256,装 systemd 单元(agent 拉管 sing-box),生成 Hy2 自签证书, 启动 agent(首启即 Enroll/Register)。shellcheck -S warning通过。
占位符
| 占位符 | 含义 |
|---|---|
__CONTROL_PLANE__ |
控制面 gRPC 地址 host:port |
__SERVER_NAME__ |
校验控制面证书的 TLS SNI(留空取 host) |
__BOOTSTRAP_TOKEN__ |
一次性引导 token(mtls.BootstrapTokenManager,15min TTL) |
__DERIVE_KEY__ |
Hy2 口令派生密钥(与控制面同源,见 agentd.DeriveHy2Password) |
__AGENT_VERSION__ |
agent 版本(与产物命名 + SHA 一致) |
__SINGBOX_VERSION__ / __SINGBOX_SHA256__ |
sing-box 版本与校验和 |
__AGENT_SHA256__ |
agent 二进制校验和 |
__ARTIFACT_BASE__ |
二进制 + 安装脚本下载根 URL |
__INSTALL_SHA256__ |
install-node.sh 自身的 SHA-256(防篡改) |
可复现性
版本与 SHA-256 全部锁定:install-node.sh 顶部的版本/校验和占位符由发布流水线渲染
为固定值并随产物一起发布;cloud-init 下载脚本后先校验脚本 SHA-256 再执行,脚本再逐个
校验二进制 SHA-256。任何一环不匹配即 set -e 中止,保证整链可复现、不可被中间人替换。
无状态红线
节点除 /etc/pangolin-agent/{node.key,node.crt,ca.crt,state.json} 与 /etc/sing-box
外不落任何持久数据;state.json 仅含 dp_uuid + expires_at,无任何账号/设备/目的地址/
DNS 信息,亦无访问日志(见 doc/04 §2、doc/06 §3)。