64 lines
1.6 KiB
Bash
64 lines
1.6 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
PANEL_URL=""
|
|
TOKEN=""
|
|
TELEMT_URL="${TELEMT_API_URL:-http://127.0.0.1:9091}"
|
|
STATE_DIR="/var/lib/telemt-panel-agent"
|
|
BIN_PATH="/usr/local/bin/telemt-panel-agent"
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case "$1" in
|
|
--panel-url) PANEL_URL="$2"; shift 2 ;;
|
|
--token) TOKEN="$2"; shift 2 ;;
|
|
--telemt-url) TELEMT_URL="$2"; shift 2 ;;
|
|
*) echo "Unknown arg: $1"; exit 1 ;;
|
|
esac
|
|
done
|
|
|
|
if [[ -z "$PANEL_URL" || -z "$TOKEN" ]]; then
|
|
echo "Usage: install-agent.sh --panel-url URL --token TOKEN"
|
|
exit 1
|
|
fi
|
|
|
|
mkdir -p "$STATE_DIR"
|
|
|
|
# Prefer shipping binary from panel releases; fallback: build if go present
|
|
if command -v curl >/dev/null; then
|
|
ARCH=$(uname -m)
|
|
case "$ARCH" in
|
|
x86_64|amd64) ARCH=amd64 ;;
|
|
aarch64|arm64) ARCH=arm64 ;;
|
|
esac
|
|
TMP=$(mktemp)
|
|
if curl -fsSL "${PANEL_URL}/releases/download/latest/telemt-panel-agent-linux-${ARCH}" -o "$TMP" 2>/dev/null; then
|
|
install -m 755 "$TMP" "$BIN_PATH"
|
|
rm -f "$TMP"
|
|
fi
|
|
fi
|
|
|
|
if [[ ! -x "$BIN_PATH" ]]; then
|
|
echo "Agent binary not found at $BIN_PATH — place telemt-panel-agent there or build apps/agent"
|
|
exit 1
|
|
fi
|
|
|
|
cat > /etc/systemd/system/telemt-panel-agent.service <<EOF
|
|
[Unit]
|
|
Description=Telemt Panel Agent
|
|
After=network-online.target
|
|
Wants=network-online.target
|
|
|
|
[Service]
|
|
ExecStart=${BIN_PATH} -panel-url ${PANEL_URL} -token ${TOKEN} -state ${STATE_DIR}/state.json -telemt-url ${TELEMT_URL}
|
|
Restart=always
|
|
RestartSec=5
|
|
StateDirectory=telemt-panel-agent
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
EOF
|
|
|
|
systemctl daemon-reload
|
|
systemctl enable --now telemt-panel-agent
|
|
echo "Agent installed and started."
|