diff --git a/agents/patchmon_install.sh b/agents/patchmon_install.sh index 1e31a15..0dd3adf 100644 --- a/agents/patchmon_install.sh +++ b/agents/patchmon_install.sh @@ -346,7 +346,41 @@ install_apk_packages() { fi info "Need to install: ${missing_packages[*]}" - apk add --no-cache "${missing_packages[@]}" + + # Update package index before installation + info "Updating package index..." + apk update -q || true + + # Build apk command + local apk_cmd="apk add --no-cache ${missing_packages[*]}" + + # Try to install packages + if eval "$apk_cmd" 2>&1 | tee /tmp/patchmon_apk_install.log; then + success "Packages installed successfully" + return 0 + else + warning "Package installation encountered issues, checking if required tools are available..." + + # Verify critical dependencies are actually available + local all_ok=true + for pkg in "${packages[@]}"; do + if ! command_exists "$pkg"; then + if [[ "$FORCE_INSTALL" == "true" ]]; then + error "Critical dependency '$pkg' is not available even with --force. Please install manually." + else + error "Critical dependency '$pkg' is not available. Try again with --force flag or install manually: apk add $pkg" + fi + all_ok=false + fi + done + + if $all_ok; then + success "All required tools are available despite installation warnings" + return 0 + else + return 1 + fi + fi } # Detect package manager and install jq, curl, and bc diff --git a/backend/src/services/agentVersionService.js b/backend/src/services/agentVersionService.js index bd2a53a..c6b13c8 100644 --- a/backend/src/services/agentVersionService.js +++ b/backend/src/services/agentVersionService.js @@ -1,6 +1,7 @@ const axios = require("axios"); const fs = require("node:fs").promises; const path = require("node:path"); +const os = require("node:os"); const { exec, spawn } = require("node:child_process"); const { promisify } = require("node:util"); const _execAsync = promisify(exec); @@ -106,10 +107,26 @@ class AgentVersionService { try { console.log("🔍 Getting current agent version..."); - // Try to find the agent binary in agents/ folder only (what gets distributed) + // Detect server architecture and map to Go architecture names + const serverArch = os.arch(); + // Map Node.js architecture to Go architecture names + const archMap = { + x64: "amd64", + ia32: "386", + arm64: "arm64", + arm: "arm", + }; + const serverGoArch = archMap[serverArch] || serverArch; + + console.log( + `🔍 Detected server architecture: ${serverArch} -> ${serverGoArch}`, + ); + + // Try to find the agent binary in agents/ folder based on server architecture const possiblePaths = [ - path.join(this.agentsDir, "patchmon-agent-linux-amd64"), - path.join(this.agentsDir, "patchmon-agent"), + path.join(this.agentsDir, `patchmon-agent-linux-${serverGoArch}`), + path.join(this.agentsDir, "patchmon-agent-linux-amd64"), // Fallback + path.join(this.agentsDir, "patchmon-agent"), // Legacy fallback ]; let agentPath = null; @@ -126,7 +143,7 @@ class AgentVersionService { if (!agentPath) { console.log( - "⚠️ No agent binary found in agents/ folder, current version will be unknown", + `⚠️ No agent binary found in agents/ folder for architecture ${serverGoArch}, current version will be unknown`, ); console.log("💡 Use the Download Updates button to get agent binaries"); this.currentVersion = null;