Skip to content

macOS (edge, solo dev)

El binario ongrid-edge cross-compila a darwin/amd64 y darwin/arm64. El Makefile construye 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

Los binarios existen para que los ingenieros que trabajan en el agente puedan iterar en una Mac sin levantar una VM Linux. No son un target de producción soportado.

Qué funciona en macOS

  • El proceso del agente arranca, lee env vars ONGRID_EDGE_* desde tu shell y abre el túnel geminio al manager.
  • Los RPCs de ciclo de vida funcionan: el agente se registra, envía heartbeats, acepta tool calls iniciadas por el manager.
  • El skill bash (gateado por cmdpolicy) corre contra el host: ls, ps, df, uname y un set curado read-only funcionan como anunciado.
  • El collector gopsutil embebido respalda host_info, get_host_load, get_host_processes. Devuelven números reales.
  • WebSSH contra 127.0.0.1:22 funciona (asumiendo que has habilitado Remote Login en System Settings).

Qué NO funciona en macOS

CapacidadPor qué
plugin promtail de logsGrafana no publica un binario promtail darwin en sus release tarballs. El paso make fetch-promtail solo fetchea Linux.
plugin node_exporter de host-metricsMismo gap upstream — node_exporter distribuye releases Linux-only.
plugin process-exporter de proc-metricsMismo gap upstream.
plugin otelcol-contrib de trazasBundled solo para Linux — mantiene el tarball de release bajo control.
El installer curl-pipedeploy/install/edge/install.sh explícitamente erra con only linux is supported by this installer; got: darwin.
Supervisión estilo systemdmacOS usa launchd. No se envía plist launchd en el release.
Log source journaldmacOS usa el log unificado (os_log); el plugin de logs necesitaría un reader distinto incluso si promtail tuviera un binario.
El hook de upgrade de bundle staged de ADR-024El hook es un script shell Linux cableado a ExecStartPre=. No hay path equivalente.

Lo que esto significa en la práctica: si haces make build-edge-darwin-arm64 y ejecutas ./bin/darwin-arm64/ongrid-edge en tu Mac, verás tu laptop aparecer en la página Edges del manager UI, puedes chatear con el agente y hacer que corra ls, ps, df, pero las páginas Logs, los paneles de host de Monitor y la página Trazas todas quedarán vacías para ese edge.

Corriendo el agente en una Mac

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

El agente loguea a stderr. No hay /var/log/ongrid-edge/ porque nada lo crea; si quieres un logfile, redirige: ./ongrid-edge 2>&1 | tee ~/ongrid-edge.log.

¿launchd? Todavía no

Un plist launchd te daría arrancar-al-login más restart automático. No lo hemos enviado porque:

  • Los cuatro plugins no corren en macOS de todos modos, así que un agente supervisado ahí te da un subset de features que es difícil de razonar.
  • Los hosts macOS en producción son extremadamente raros. Preferimos no comprometernos a una plataforma medio-soportada.

Si quieres uno para tu propio desarrollo, aquí hay un ejemplo mínimo. Guarda 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>

Luego launchctl load ~/Library/LaunchAgents/io.ongrid.edge.plist.

Codesigning / Gatekeeper

El agente no está codesigned. La primera vez que lo corras, macOS rehusará con "cannot be opened because the developer cannot be verified". O bien:

  • xattr -d com.apple.quarantine ./ongrid-edge para quitar el flag de quarantine, o
  • Right-click → Open en Finder una vez, luego recuerda tu elección.

Construir desde fuente (go build ./cmd/ongrid-edge) en tu propia Mac evita el flag de quarantine totalmente.

¿Deberías usar macOS en producción?

No. Usa una caja Linux. El agente corre perfecto en una VM Linux de $5/mes; correrlo en un Mac mini funciona para un homelab pero pierdes los cuatro plugins que suministran 80% del valor que Ongrid entrega (host metrics, logs, trazas).

La ruta dev-only existe para que podamos dogfoodear el agente durante desarrollo. No es un target de despliegue.