#!/usr/bin/env bash # # SoftSol NetXMS monitoring agent — macOS one-line installer. # # Canonical file (update here when changing the public installer): # midas/static/downloads/support-mac.txt # # Public install command: # curl -fsSL https://softsol.co.za/downloads/support-mac.txt | bash # # Agent packages (upload separately to /downloads/): # SoftSol-Agent-Mac-arm64.tar.gz — Apple Silicon (M1/M2/M3/M4) # SoftSol-Agent-Mac-x64.tar.gz — Intel Mac # # Does not install remote desktop / softsolrsup (Windows-only). set -euo pipefail SUPPORT_MAC_URL='https://softsol.co.za/downloads/support-mac.txt' DOWNLOAD_BASE='https://softsol.co.za/downloads' STAGE_DIR='' cleanup() { if [[ -n "${STAGE_DIR}" && -d "${STAGE_DIR}" ]]; then rm -rf "${STAGE_DIR}" fi } trap cleanup EXIT log() { printf '%s\n' "$*" } die() { log "ERROR: $*" >&2 exit 1 } require_root() { if [[ "${EUID:-$(id -u)}" -ne 0 ]]; then log '==> Mac administrator password required — re-running with sudo...' exec sudo -E bash -c "$(curl -fsSL "${SUPPORT_MAC_URL}")" fi } detect_arch_suffix() { case "$(uname -m)" in arm64) printf '%s' 'arm64' ;; x86_64) printf '%s' 'x64' ;; *) die "Unsupported Mac architecture: $(uname -m)" ;; esac } require_darwin() { [[ "$(uname -s)" == Darwin ]] || die 'This installer is for macOS only. On Windows use support.txt.' } brew_bin() { if [[ -x /opt/homebrew/bin/brew ]]; then printf '%s' /opt/homebrew/bin/brew elif [[ -x /usr/local/bin/brew ]]; then printf '%s' /usr/local/bin/brew fi } agent_needs_homebrew() { local nxagentd="$1" [[ -f "${nxagentd}" ]] || return 1 otool -L "${nxagentd}" 2>/dev/null \ | grep -qE '/(opt/homebrew|usr/local)/opt/(openssl@3|pcre2|libxml2|libxslt)' } run_brew_as_user() { local brew_cmd="$1" shift if [[ "${EUID:-$(id -u)}" -eq 0 && -n "${SUDO_USER:-}" && "${SUDO_USER}" != "root" ]]; then sudo -u "${SUDO_USER}" "${brew_cmd}" "$@" else "${brew_cmd}" "$@" fi } ensure_homebrew_deps_if_needed() { local nxagentd="$1" agent_needs_homebrew "${nxagentd}" || return 0 local brew_cmd brew_cmd="$(brew_bin || true)" if [[ -z "${brew_cmd}" ]]; then log '==> Agent package needs OpenSSL libraries — installing Homebrew (one-time)...' if [[ "${EUID:-$(id -u)}" -eq 0 && -n "${SUDO_USER:-}" && "${SUDO_USER}" != "root" ]]; then sudo -u "${SUDO_USER}" /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" else /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" fi brew_cmd="$(brew_bin)" || die 'Homebrew install did not complete — contact SoftSol IT.' fi log '==> Installing OpenSSL dependencies (one-time, legacy agent package)...' run_brew_as_user "${brew_cmd}" install openssl@3 pcre2 } log_hostname_info() { log " ComputerName: $(scutil --get ComputerName 2>/dev/null || echo unknown)" log " LocalHostName: $(scutil --get LocalHostName 2>/dev/null || echo unknown)" log " HostName: $(scutil --get HostName 2>/dev/null || hostname -s 2>/dev/null || hostname)" } install_softsol_agent_mac() { local arch pkg url extract_dir nxagentd require_darwin arch="$(detect_arch_suffix)" pkg="SoftSol-Agent-Mac-${arch}.tar.gz" url="${DOWNLOAD_BASE}/${pkg}" STAGE_DIR="$(mktemp -d /tmp/softsol-agent-mac.XXXXXX)" log '' log ' SoftSol monitoring agent — macOS' log " Architecture: ${arch}" log '' log "==> Downloading ${url}" curl -fsSL "${url}" -o "${STAGE_DIR}/${pkg}" log '==> Extracting agent package' extract_dir="${STAGE_DIR}/package" mkdir -p "${extract_dir}" tar xzf "${STAGE_DIR}/${pkg}" -C "${extract_dir}" if [[ ! -f "${extract_dir}/install_nxagent_macos.sh" ]]; then die "Package is missing install_nxagent_macos.sh — contact SoftSol IT." fi chmod +x "${extract_dir}/install_nxagent_macos.sh" nxagentd="${extract_dir}/netxms-macos-agent/bin/nxagentd" ensure_homebrew_deps_if_needed "${nxagentd}" log '==> Installing NetXMS agent (monitor.softsol.co.za, tunnel enabled)' bash "${extract_dir}/install_nxagent_macos.sh" "${extract_dir}" if ! /opt/netxms/bin/nxagentd -v >/dev/null 2>&1; then die 'nxagentd failed to start — check /var/log/nxagentd.stderr.log and contact SoftSol IT.' fi log '' log '==> Install finished.' log_hostname_info log ' Tell SoftSol: Mac model (Intel vs Apple Silicon), hostname above, and any errors.' } require_root "$@" install_softsol_agent_mac