Skip to content

macOS (edge, só dev)

O binário ongrid-edge cross-compila para darwin/amd64 e darwin/arm64. O Makefile builda ambos como parte de make build-edge-all:

text
build-edge-darwin-amd64   → bin/darwin-amd64/ongrid-edge
build-edge-darwin-arm64   → bin/darwin-arm64/ongrid-edge

Os binários existem para que engenheiros trabalhando no agent possam iterar num Mac sem subir uma VM Linux. Eles não são um alvo suportado de produção.

O que funciona no macOS

  • O processo do agent inicia, lê env vars ONGRID_EDGE_* do seu shell, e abre o tunnel geminio ao manager.
  • RPCs de ciclo de vida funcionam: o agent registra, envia heartbeats, aceita tool calls iniciados pelo manager.
  • A skill bash (cmdpolicy-gated) roda contra o host: ls, ps, df, uname e um conjunto curado read-only funcionam como anunciado.
  • O collector gopsutil embarcado alimenta host_info, get_host_load, get_host_processes. Eles retornam números reais.
  • WebSSH contra 127.0.0.1:22 funciona (assumindo que você habilitou Remote Login em System Settings).

O que NÃO funciona no macOS

CapacidadePor quê
Plugin de logs promtailGrafana não publica um binário promtail darwin em seus tarballs de release. O passo make fetch-promtail só fetcha Linux.
Plugin de host-metrics node_exporterMesmo gap upstream — node_exporter distribui releases Linux-only.
Plugin de proc-metrics process-exporterMesmo gap upstream.
Plugin de traces otelcol-contribBundled só para Linux — mantém o tarball de release sob controle.
O instalador curl-pipedeploy/install/edge/install.sh explicitamente erra com only linux is supported by this installer; got: darwin.
Supervisão estilo systemdmacOS usa launchd. Nenhum plist launchd vem na release.
Fonte de log journaldmacOS usa o unified log (os_log); o plugin de logs precisaria de um reader diferente mesmo se o promtail tivesse binário.
O hook de upgrade staged-bundle do ADR-024O hook é um shell script Linux conectado em ExecStartPre=. Não há caminho equivalente.

O que isso significa na prática: se você make build-edge-darwin-arm64 e roda ./bin/darwin-arm64/ongrid-edge no seu Mac, vai ver seu laptop aparecer na página Edges da UI do manager, vai poder conversar com o agent e fazer ele rodar ls, ps, df, mas a página Logs, os painéis de host da página Monitor, e a página Traces vão ficar todas vazias para esse edge.

Rodando o agent num Mac

sh
# 1. cross-compile (ou só `go build`, já que você já está em darwin)
make build-edge-darwin-arm64

# 2. aponte para seu 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. rode em foreground
./bin/darwin-arm64/ongrid-edge

O agent loga em stderr. Não há /var/log/ongrid-edge/ porque nada o cria; se você quer um logfile, redirecione: ./ongrid-edge 2>&1 | tee ~/ongrid-edge.log.

launchd? Ainda não

Um plist launchd te daria start-on-login mais auto-restart. Não distribuímos um porque:

  • Os quatro plugins não rodam no macOS de qualquer jeito, então um agent supervisionado lá te dá um subconjunto de features que é difícil de raciocinar.
  • Hosts macOS em produção são extremamente raros. Preferimos não comprometer-se a uma plataforma meio-suportada.

Se você quer um para seu próprio desenvolvimento, aqui está um exemplo mínimo. Salve como ~/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>

Então launchctl load ~/Library/LaunchAgents/io.ongrid.edge.plist.

Codesigning / Gatekeeper

O agent não é codesigned. A primeira vez que você rodar, o macOS vai recusar com "cannot be opened because the developer cannot be verified". Ou:

  • xattr -d com.apple.quarantine ./ongrid-edge para remover a flag de quarentena, ou
  • Right-click → Open no Finder uma vez, então ele lembra sua escolha.

Buildar do source (go build ./cmd/ongrid-edge) no seu próprio Mac evita a flag de quarentena inteiramente.

Você deve usar macOS em produção?

Não. Use uma caixa Linux. O agent roda perfeitamente numa VM Linux de $5/mês; rodar num Mac mini funciona para um homelab mas você perde os quatro plugins que entregam 80% do valor que o Ongrid entrega (host metrics, logs, traces).

O caminho dev-only existe para que possamos fazer dogfood do agent durante desenvolvimento. Não é um alvo de deployment.