#!/usr/bin/env bash set -euo pipefail # ATSFlare Agent Installer # Usage: # curl -fsSL https://raw.githubusercontent.com/Rain-kl/ATSFlare/main/scripts/install-agent.sh | bash -s -- \ # --server-url http://your-server:3000 \ # --discovery-token your-token INSTALL_DIR="/opt/atsflare-agent" REPO="Rain-kl/ATSFlare" SERVER_URL="" DISCOVERY_TOKEN="" AGENT_TOKEN="" CREATE_SERVICE="true" SERVICE_NAME="atsflare-agent" usage() { cat </dev/null 2>&1; then SYSTEMCTL_AVAILABLE="true" fi # Get latest release download URL echo "Fetching latest release from ${REPO}..." RELEASE_INFO=$(curl -fsSL "https://api.github.com/repos/${REPO}/releases/latest") DOWNLOAD_URL=$(echo "$RELEASE_INFO" | grep -o "\"browser_download_url\"[[:space:]]*:[[:space:]]*\"[^\"]*${ASSET_NAME}\"" | grep -o 'https://[^"]*' || true) if [[ -z "$DOWNLOAD_URL" ]]; then echo "Error: no matching asset '${ASSET_NAME}' found in latest release" exit 1 fi TAG=$(echo "$RELEASE_INFO" | grep -o '"tag_name"[[:space:]]*:[[:space:]]*"[^"]*"' | grep -o '"[^"]*"$' | tr -d '"') echo "Latest release: ${TAG}" # Create install directory echo "Installing to ${INSTALL_DIR}..." mkdir -p "${INSTALL_DIR}/data" # Download binary echo "Downloading ${ASSET_NAME}..." TMP_BINARY="$(mktemp "${INSTALL_DIR}/atsflare-agent.tmp.XXXXXX")" cleanup() { rm -f "$TMP_BINARY" } trap cleanup EXIT curl -fsSL -o "$TMP_BINARY" "$DOWNLOAD_URL" chmod +x "$TMP_BINARY" SERVICE_WAS_ACTIVE="false" if [[ "$OS" == "linux" && "$SYSTEMCTL_AVAILABLE" == "true" ]] && systemctl is-active --quiet "$SERVICE_NAME"; then SERVICE_WAS_ACTIVE="true" echo "Stopping running service before upgrade..." systemctl stop "$SERVICE_NAME" fi mv -f "$TMP_BINARY" "${INSTALL_DIR}/atsflare-agent" trap - EXIT # Generate config CONFIG_FILE="${INSTALL_DIR}/agent.json" if [[ ! -f "$CONFIG_FILE" ]]; then echo "Generating agent.json..." if [[ -n "$AGENT_TOKEN" ]]; then cat > "$CONFIG_FILE" < "$CONFIG_FILE" < /etc/systemd/system/atsflare-agent.service <