108 lines
3.8 KiB
Bash
Executable File
108 lines
3.8 KiB
Bash
Executable File
#!/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 <node> <ssh_alias>
|
|
#
|
|
# 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 <node> <ssh_alias> [role]}"
|
|
HOST="${2:?uso: deploy_agent_termux.sh <node> <ssh_alias> [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" <<JSON
|
|
{
|
|
"node": "${NODE}",
|
|
"hub_url": "${HUB}",
|
|
"loki_url": "${LOKI}",
|
|
"user": "fleet",
|
|
"pass": "${PW}",
|
|
"interval_sec": 15,
|
|
"labels": { "role": "${ROLE}" },
|
|
"battery_file": "$HM/fleet-agent/battery.json",
|
|
"log_file": "$HM/fleet-agent/logcat.log"
|
|
}
|
|
JSON
|
|
chmod 600 "$HM/fleet-agent/agent.json"
|
|
|
|
# Servicio runit del agente Go (solo lee ficheros: métricas + battery.json + tail logcat.log).
|
|
mkdir -p "$PREFIX/var/service/fleet-agent"
|
|
cat > "$PREFIX/var/service/fleet-agent/run" <<RUN
|
|
#!$PREFIX/bin/sh
|
|
exec 2>&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" <<RUN
|
|
#!$PREFIX/bin/sh
|
|
exec 2>&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" <<RUN
|
|
#!$PREFIX/bin/sh
|
|
exec 2>&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" <<BOOT
|
|
#!$PREFIX/bin/sh
|
|
termux-wake-lock
|
|
. $PREFIX/etc/profile
|
|
BOOT
|
|
chmod +x "$HM/.termux/boot/start-fleet.sh"
|
|
|
|
# Arrancar ya sin esperar a un reinicio: asegurar runsvdir vivo.
|
|
if ! pgrep -f "runsvdir.*var/service" >/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"
|