diff --git a/compilation/install_linux_client.sh b/compilation/install_linux_client.sh index 61110a5..934479d 100644 --- a/compilation/install_linux_client.sh +++ b/compilation/install_linux_client.sh @@ -31,16 +31,46 @@ echo "[+] Installing LOGAR Client..." mkdir -p "${INSTALL_DIR}" "${CONFIG_DIR}/certs" chmod 700 "${CONFIG_DIR}/certs" -if [ -f "dist/Linux_Client.bin" ]; then +BIN_INSTALLED=0 +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" + +if [ -f "${SCRIPT_DIR}/Linux_Client.bin" ]; then + cp "${SCRIPT_DIR}/Linux_Client.bin" "${INSTALL_DIR}/Linux_Client" + BIN_INSTALLED=1 +elif [ -f "${SCRIPT_DIR}/Linux_Client" ]; then + cp "${SCRIPT_DIR}/Linux_Client" "${INSTALL_DIR}/Linux_Client" + BIN_INSTALLED=1 +elif [ -f "dist/Linux_Client.bin" ]; then cp dist/Linux_Client.bin "${INSTALL_DIR}/Linux_Client" + BIN_INSTALLED=1 elif [ -f "dist/Linux_Client" ]; then cp dist/Linux_Client "${INSTALL_DIR}/Linux_Client" -else - echo "[!] Warning: dist/Linux_Client binary not found in current directory. Continuing with existing binary if present." + BIN_INSTALLED=1 +elif [ -f "Linux_Client.bin" ]; then + cp Linux_Client.bin "${INSTALL_DIR}/Linux_Client" + BIN_INSTALLED=1 +elif [ -f "Linux_Client" ]; then + cp Linux_Client "${INSTALL_DIR}/Linux_Client" + BIN_INSTALLED=1 fi -if [ -f "${INSTALL_DIR}/Linux_Client" ]; then +# If binary is not available locally, fetch standalone binary from LOGAR Hub +if [ "${BIN_INSTALLED}" -eq 0 ] && [ ! -f "${INSTALL_DIR}/Linux_Client" ]; then + echo "[*] Client binary not found locally. Fetching standalone Linux client binary from LOGAR Hub (${HUB_URL}/api/client/update/download?os=linux)..." + if command -v curl >/dev/null 2>&1; then + curl -fsSL "${HUB_URL}/api/client/update/download?os=linux" -o "${INSTALL_DIR}/Linux_Client" || true + elif command -v wget >/dev/null 2>&1; then + wget -qO "${INSTALL_DIR}/Linux_Client" "${HUB_URL}/api/client/update/download?os=linux" || true + fi +fi + +if [ -f "${INSTALL_DIR}/Linux_Client" ] && [ -s "${INSTALL_DIR}/Linux_Client" ]; then chmod +x "${INSTALL_DIR}/Linux_Client" + echo "[+] Standalone Linux Client executable installed at ${INSTALL_DIR}/Linux_Client" +else + echo "[-] Error: Failed to acquire LOGAR Linux client executable binary." >&2 + echo "[-] Please provide Linux_Client.bin in the installer directory or verify HUB_URL connectivity." >&2 + exit 1 fi # Bootstrap certificate if missing and enrollment secret is provided diff --git a/src/hub/update_manager.py b/src/hub/update_manager.py index 608b73a..363f5f8 100644 --- a/src/hub/update_manager.py +++ b/src/hub/update_manager.py @@ -199,8 +199,10 @@ class ServerUpdateManager: os_dir = os.path.join(self.update_dir, os_name) found_pkg = None if os.path.exists(os_dir): - for f in os.listdir(os_dir): - if f.endswith((".exe", ".bin", ".zip", ".tar.gz", ".sh")) and not f.startswith("."): + # Search by priority: .bin/.exe first, then archives, never .sh + valid_exts = (".exe", ".msi", ".zip") if os_name == "windows" else (".bin", ".tar.gz", ".tgz") + for f in sorted(os.listdir(os_dir), key=lambda x: (not x.endswith((".exe", ".bin")), x)): + if f.endswith(valid_exts) and not f.startswith(".") and not f.endswith(".sh"): found_pkg = os.path.join(os_dir, f) break @@ -209,9 +211,9 @@ class ServerUpdateManager: dist_dir = os.path.join(os.path.dirname(self.update_dir), "dist") if os.path.exists(dist_dir): patterns = [ - "LOGAR_Client_Setup.exe", "LOGAR_Client.exe", "Win_Client.exe" + "LOGAR_Client_Setup.exe", "LOGAR-Client-Setup.exe", "Win_Client.exe", "LOGAR_Client.exe", "LOGAR-Windows-Client.zip" ] if os_name == "windows" else [ - "Linux_Client.bin", "LOGAR_Client_Linux", "install_linux_client.sh" + "Linux_Client.bin", "Linux_Client", "LOGAR_Client_Linux", "LOGAR-Linux-Client.tar.gz" ] for pat in patterns: candidate = os.path.join(dist_dir, pat) @@ -329,13 +331,17 @@ class ServerUpdateManager: for asset in release_assets: name = (asset.get("name") or "").lower() download_url = asset.get("download_url") - if not download_url: + if not download_url or name.endswith(".sh") or "server" in name or "checksum" in name or "sha256" in name: continue target_os = None - if ("win" in name or name.endswith(".exe") or "setup" in name) and not results["windows"]: + if ("win" in name or "setup" in name or name.endswith((".exe", ".msi", ".zip"))) and "client" in name and not results["windows"]: target_os = "windows" - elif ("linux" in name or name.endswith((".bin", ".sh")) or "client_linux" in name) and not results["linux"]: + elif ("win" in name or name.endswith(".exe")) and not results["windows"]: + target_os = "windows" + elif ("linux" in name or name.endswith((".bin", ".tar.gz", ".tgz"))) and ("client" in name or "agent" in name) and not results["linux"]: + target_os = "linux" + elif name in ("linux_client.bin", "linux_client", "logar_client_linux") and not results["linux"]: target_os = "linux" if not target_os: