diff --git a/aggregator-server/internal/services/templates/install/scripts/linux.sh.tmpl b/aggregator-server/internal/services/templates/install/scripts/linux.sh.tmpl index 5f605c5..e597f2f 100644 --- a/aggregator-server/internal/services/templates/install/scripts/linux.sh.tmpl +++ b/aggregator-server/internal/services/templates/install/scripts/linux.sh.tmpl @@ -2,6 +2,7 @@ # RedFlag Agent Installer - Linux # Generated for agent: {{.AgentID}} # Platform: {{.Platform}} +# Architecture: {{.Architecture}} # Version: {{.Version}} set -e @@ -11,8 +12,11 @@ BINARY_URL="{{.BinaryURL}}" CONFIG_URL="{{.ConfigURL}}" INSTALL_DIR="/usr/local/bin" CONFIG_DIR="/etc/redflag" +OLD_CONFIG_DIR="/etc/aggregator" SERVICE_NAME="redflag-agent" VERSION="{{.Version}}" +LOG_DIR="/var/log/redflag" +BACKUP_DIR="${CONFIG_DIR}/backups/backup.$(date +%s)" echo "=== RedFlag Agent v${VERSION} Installation ===" echo "Agent ID: ${AGENT_ID}" @@ -20,23 +24,121 @@ echo "Platform: {{.Platform}}" echo "Installing to: ${INSTALL_DIR}/${SERVICE_NAME}" echo -# Step 1: Create directories +# Step 1: Detect existing installation +echo "Detecting existing RedFlag installations..." +MIGRATION_NEEDED=false + +if [ -f "${CONFIG_DIR}/config.json" ]; then + echo "✓ Existing installation detected at ${CONFIG_DIR}" + MIGRATION_NEEDED=true +elif [ -f "${OLD_CONFIG_DIR}/config.json" ]; then + echo "⚠ Old installation detected at ${OLD_CONFIG_DIR} - MIGRATION REQUIRED" + MIGRATION_NEEDED=true +else + echo "✓ Fresh installation" +fi + +# Step 2: Create backup if migration needed +if [ "${MIGRATION_NEEDED}" = true ]; then + echo + echo "=== Migration Required ===" + echo "Agent will migrate on first start. Backing up configuration..." + sudo mkdir -p "${BACKUP_DIR}" + + if [ -f "${OLD_CONFIG_DIR}/config.json" ]; then + echo "Backing up old configuration..." + sudo cp -r "${OLD_CONFIG_DIR}"/* "${BACKUP_DIR}/" 2>/dev/null || true + fi + + if [ -f "${CONFIG_DIR}/config.json" ]; then + echo "Backing up current configuration..." + sudo cp "${CONFIG_DIR}/config.json" "${BACKUP_DIR}/config.json.backup" 2>/dev/null || true + fi + + echo "Migration will run automatically when agent starts." + echo "View migration logs with: sudo journalctl -u ${SERVICE_NAME} -f" + echo +fi + +# Step 3: Stop existing service +if systemctl is-active --quiet ${SERVICE_NAME} 2>/dev/null; then + echo "Stopping existing RedFlag agent service..." + sudo systemctl stop ${SERVICE_NAME} +fi + +# Step 4: Create directories echo "Creating directories..." sudo mkdir -p "${CONFIG_DIR}" +sudo mkdir -p "${CONFIG_DIR}/backups" sudo mkdir -p "/var/lib/redflag" sudo mkdir -p "/var/log/redflag" -# Step 2: Download agent binary +# Step 5: Download agent binary echo "Downloading agent binary..." sudo curl -sSL -o "${INSTALL_DIR}/${SERVICE_NAME}" "${BINARY_URL}" sudo chmod +x "${INSTALL_DIR}/${SERVICE_NAME}" -# Step 3: Download configuration -echo "Downloading configuration..." -sudo curl -sSL -o "${CONFIG_DIR}/config.json" "${CONFIG_URL}" +# Step 6: Handle configuration +# IMPORTANT: The agent handles its own migration on first start. +# We either preserve existing config OR create a minimal template. +if [ -f "${CONFIG_DIR}/config.json" ]; then + echo "[CONFIG] Upgrade detected - preserving existing configuration" + echo "[CONFIG] Agent will handle migration automatically on first start" + echo "[CONFIG] Backup created at: ${BACKUP_DIR}" +else + echo "[CONFIG] Fresh install - generating minimal configuration with registration token" + # Create minimal config template - agent will populate missing fields on first start + sudo cat > "${CONFIG_DIR}/config.json" <