macOS(edge,仅开发)
ongrid-edge 二进制交叉编译到 darwin/amd64 和 darwin/arm64。Makefile 作为 make build-edge-all 的一部分构这两个:
build-edge-darwin-amd64 → bin/darwin-amd64/ongrid-edge
build-edge-darwin-arm64 → bin/darwin-arm64/ongrid-edge这两个二进制存在是为了开 agent 的工程师能在 Mac 上迭代,不用起 Linux VM。 它们不是受支持的生产目标。
macOS 上能用什么
- agent 进程能起、从 shell 读
ONGRID_EDGE_*env 变量、给 manager 开 geminio tunnel。 - 生命周期 RPC 能用:agent 注册、发心跳、接 manager 发起的 tool 调用。
bash技能(cmdpolicy 门控)能在 host 上跑:ls、ps、df、uname以及一份精挑细选的只读集如广告所说工作。- 内嵌的 gopsutil 收集器支持
host_info、get_host_load、get_host_processes。它们返真实数字。 - 对
127.0.0.1:22的 WebSSH 能用(假设你在 System Settings 里开了 Remote Login)。
macOS 上不行的
| 能力 | 为什么 |
|---|---|
promtail 日志插件 | Grafana 不在 release tarball 里发 darwin promtail 二进制。make fetch-promtail 步骤只拉 Linux。 |
node_exporter 主机指标插件 | 同样的上游空白 —— node_exporter 只发 Linux release。 |
process-exporter 进程指标插件 | 同样的上游空白。 |
otelcol-contrib 链路插件 | 只为 Linux 打包 —— 让 release tarball 大小可控。 |
| curl-pipe 安装器 | deploy/install/edge/install.sh 显式报 only linux is supported by this installer; got: darwin。 |
| systemd 风格监管 | macOS 用 launchd。release 不带 launchd plist。 |
journald 日志源 | macOS 用 unified log(os_log);就算 promtail 有二进制,日志插件也需要不同的 reader。 |
| ADR-024 staged-bundle 升级 hook | hook 是 Linux shell 脚本接到 ExecStartPre= 里。没有等价路径。 |
实际意味着:如果你 make build-edge-darwin-arm64 在 Mac 上跑 ./bin/darwin-arm64/ongrid-edge,你会在 manager UI 的 Edges 页看到你的 laptop,可以跟 agent 聊让它跑 ls、ps、df,但那台 edge 的 Logs 页、 Monitor 页的 host 面板、Traces 页都会空着。
在 Mac 上跑 agent
# 1. cross-compile (or just `go build`, since you're already on darwin)
make build-edge-darwin-arm64
# 2. point at your manager
export ONGRID_EDGE_CLOUD_ADDR=ongrid.example.com:40012
export ONGRID_EDGE_ACCESS_KEY=<from manager UI: Edges → New>
export ONGRID_EDGE_SECRET_KEY=<from manager UI; shown once>
# 3. run it in the foreground
./bin/darwin-arm64/ongrid-edgeagent 打到 stderr。没有 /var/log/ongrid-edge/,因为没人创它;想要日志 文件就重定向:./ongrid-edge 2>&1 | tee ~/ongrid-edge.log。
launchd?还没有
launchd plist 能给你登录启动加自动重启。我们没发是因为:
- 四个插件 macOS 上都跑不了,所以那里有监管的 agent 给你一个难以推理的功 能子集。
- 生产环境的 macOS host 极少。我们宁可不承诺一个半支持的平台。
自己开发想要的话,下面是个最小例子。存成 ~/Library/LaunchAgents/io.ongrid.edge.plist:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key><string>io.ongrid.edge</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/ongrid-edge</string>
</array>
<key>EnvironmentVariables</key>
<dict>
<key>ONGRID_EDGE_CLOUD_ADDR</key><string>ongrid.example.com:40012</string>
<key>ONGRID_EDGE_ACCESS_KEY</key><string>...</string>
<key>ONGRID_EDGE_SECRET_KEY</key><string>...</string>
</dict>
<key>RunAtLoad</key><true/>
<key>KeepAlive</key><true/>
<key>StandardOutPath</key><string>/tmp/ongrid-edge.out.log</string>
<key>StandardErrorPath</key><string>/tmp/ongrid-edge.err.log</string>
</dict>
</plist>然后 launchctl load ~/Library/LaunchAgents/io.ongrid.edge.plist。
代码签名 / Gatekeeper
agent 未签名。第一次跑时 macOS 会拒绝,说 "cannot be opened because the developer cannot be verified"。要么:
xattr -d com.apple.quarantine ./ongrid-edge移除 quarantine 标,要么- 在 Finder 里右键 → Open 一次,之后它记住你的选择。
在你自己 Mac 上从源码构建(go build ./cmd/ongrid-edge)完全避开 quarantine 标。
生产用 macOS 吗?
不。用 Linux 盒子。agent 在 5 美元/月的 Linux VM 上完美跑;在 Mac mini 上 跑做 homelab 行,但你失去四个插件 —— 它们供给 Ongrid 80% 的价值(主机指 标、日志、链路)。
仅开发路径存在是为了我们开发时 dogfooding agent。它不是部署目标。