#!/usr/bin/env bash # Despliega metrics_agent en un móvil Android/Termux como servicio supervisado # (termux-services / runit) con arranque en boot (Termux:Boot) y wake-lock. # # Uso: ./deploy_agent_termux.sh # # Requisitos: # - Binario en apps/metrics_agent/dist/metrics_agent_arm64 # (CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -ldflags="-s -w" -o dist/metrics_agent_arm64 .) # - `pass fleet/ingest-pass`. # - En el móvil: Termux + Termux:Boot + Termux:API instalados, paquetes # `termux-services` y `termux-api`, y un alias SSH al sshd de Termux. set -euo pipefail NODE="${1:?uso: deploy_agent_termux.sh [role]}" HOST="${2:?uso: deploy_agent_termux.sh [role]}" ROLE="${3:-movil}" HUB="https://metrics-dxaqj3ina6eqd5pjt85wkrrj.organic-machine.com/api/v1/import/prometheus" LOKI="https://logs-wmaxecsjcfnocz81d5luca92.organic-machine.com/loki/api/v1/push" PW="$(pass show fleet/ingest-pass | head -1)" BIN="$(cd "$(dirname "$0")/.." && pwd)/apps/metrics_agent/dist/metrics_agent_arm64" [ -f "$BIN" ] || { echo "ERROR: falta el binario $BIN (compílalo primero)"; exit 1; } echo ">> copiando binario a $HOST" ssh -o BatchMode=yes "$HOST" 'mkdir -p ~/fleet-agent' scp -q -o BatchMode=yes "$BIN" "$HOST:fleet-agent/metrics_agent" echo ">> instalando servicio Termux en $NODE ($HOST)" ssh -o BatchMode=yes "$HOST" "NODE='$NODE' PW='$PW' HUB='$HUB' LOKI='$LOKI' ROLE='$ROLE' bash -s" <<'OUTER' set -e PREFIX=/data/data/com.termux/files/usr HM=/data/data/com.termux/files/home chmod +x "$HM/fleet-agent/metrics_agent" cat > "$HM/fleet-agent/agent.json" < "$PREFIX/var/service/fleet-agent/run" <&1 termux-wake-lock exec $HM/fleet-agent/metrics_agent -config $HM/fleet-agent/agent.json RUN chmod +x "$PREFIX/var/service/fleet-agent/run" # Helper shell de batería: el exec de sh SÍ funciona en Termux (el bloqueado es # el pidfd_open de Go). Escribe el JSON de termux-battery-status cada 20s. mkdir -p "$PREFIX/var/service/fleet-battery" cat > "$PREFIX/var/service/fleet-battery/run" <&1 termux-wake-lock while true; do termux-battery-status > $HM/fleet-agent/battery.json.tmp 2>/dev/null && mv $HM/fleet-agent/battery.json.tmp $HM/fleet-agent/battery.json sleep 20 done RUN chmod +x "$PREFIX/var/service/fleet-battery/run" # Helper shell de logcat: vuelca el log de Android a fichero rotado (cap ~4MB). # El agente Go lo tail-ea sin exec. mkdir -p "$PREFIX/var/service/fleet-logcat" cat > "$PREFIX/var/service/fleet-logcat/run" <&1 termux-wake-lock exec logcat -v epoch -f $HM/fleet-agent/logcat.log -r 2048 -n 2 RUN chmod +x "$PREFIX/var/service/fleet-logcat/run" # Arranque en boot (Termux:Boot): wake-lock + runsvdir vía profile. mkdir -p "$HM/.termux/boot" cat > "$HM/.termux/boot/start-fleet.sh" </dev/null 2>&1; then nohup runsvdir "$PREFIX/var/service" >/dev/null 2>&1 & sleep 6 fi export SVDIR="$PREFIX/var/service" for s in fleet-logcat fleet-battery fleet-agent; do sv up "$s" 2>/dev/null || true; done sleep 5 for s in fleet-logcat fleet-battery fleet-agent; do echo -n "$s: "; sv status "$s" 2>/dev/null || echo "N/A"; done OUTER echo ">> $NODE desplegado"