#!/usr/bin/env bash set -euo pipefail # OpenFlare Agent Installer # Usage: # curl -fsSL https://raw.githubusercontent.com/Rain-kl/OpenFlare/main/scripts/install-agent.sh | bash -s -- \ # --server-url http://your-server:3000 \ # --discovery-token your-token INSTALL_DIR="/opt/openflare-agent" REPO="Rain-kl/OpenFlare" SERVER_URL="" DISCOVERY_TOKEN="" AGENT_TOKEN="" CREATE_SERVICE="true" SERVICE_NAME="openflare-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}" # Download binary echo "Downloading ${ASSET_NAME}..." TMP_BINARY="$(mktemp "/tmp/openflare-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 reinstall..." systemctl stop "$SERVICE_NAME" fi if [[ -d "$INSTALL_DIR" ]]; then echo "Removing existing installation directory: ${INSTALL_DIR}" rm -rf "$INSTALL_DIR" fi echo "Installing to ${INSTALL_DIR}..." mkdir -p "${INSTALL_DIR}/data" mv -f "$TMP_BINARY" "${INSTALL_DIR}/openflare-agent" trap - EXIT # Generate config CONFIG_FILE="${INSTALL_DIR}/agent.json" echo "Generating agent.json..." if [[ -n "$AGENT_TOKEN" ]]; then cat > "$CONFIG_FILE" < "$CONFIG_FILE" < /etc/systemd/system/openflare-agent.service <