Skip to content

macOS(edge,仅开发)

ongrid-edge 二进制交叉编译到 darwin/amd64darwin/arm64。Makefile 作为 make build-edge-all 的一部分构这两个:

text
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 上跑:lspsdfuname 以及一份精挑细选的只读集如广告所说工作。
  • 内嵌的 gopsutil 收集器支持 host_infoget_host_loadget_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 升级 hookhook 是 Linux shell 脚本接到 ExecStartPre= 里。没有等价路径。

实际意味着:如果你 make build-edge-darwin-arm64 在 Mac 上跑 ./bin/darwin-arm64/ongrid-edge,你会在 manager UI 的 Edges 页看到你的 laptop,可以跟 agent 聊让它跑 lspsdf,但那台 edge 的 Logs 页、 Monitor 页的 host 面板、Traces 页都会空着。

在 Mac 上跑 agent

sh
# 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-edge

agent 打到 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
<?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。它不是部署目标。