From 98f1a6db6d72311284856200ded81ee818369310 Mon Sep 17 00:00:00 2001 From: edschuy95 Date: Tue, 2 Sep 2025 15:48:52 +0000 Subject: [PATCH] Add rmmagent-linux.sh --- rmmagent-linux.sh | 176 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 176 insertions(+) create mode 100644 rmmagent-linux.sh diff --git a/rmmagent-linux.sh b/rmmagent-linux.sh new file mode 100644 index 0000000..bd7bf3c --- /dev/null +++ b/rmmagent-linux.sh @@ -0,0 +1,176 @@ +#!/bin/bash + +if [[ $1 == "" ]]; then + echo "First argument is empty!" + echo "Type help for more information" + exit 1 +fi + +if [[ $1 == "help" ]]; then + echo "There is help but more information is available at github.com/ZoLuSs/rmmagent-script" + echo "" + echo "INSTALL args:" + echo " 1: 'install'" + echo " 2: Mesh agent URL" + echo " 3: API URL" + echo " 4: Client ID" + echo " 5: Site ID" + echo " 6: Auth Key" + echo " 7: Agent Type ('server' or 'workstation')" + echo "" + echo "UPDATE args:" + echo " 1: 'update'" + echo "" + echo "UNINSTALL args:" + echo " 1: 'uninstall'" + echo " 2: Mesh agent FQDN" + echo " 3: Mesh agent ID (in single quotes)" + echo "" + exit 0 +fi + +if [[ $1 != "install" && $1 != "update" && $1 != "uninstall" ]]; then + echo "First argument must be 'install', 'update', or 'uninstall'!" + echo "Type help for more information" + exit 1 +fi + +# Detect architecture +system=$(uname -m) +case $system in + x86_64) system="amd64" ;; + i386|i686) system="x86" ;; + aarch64) system="arm64" ;; + armv6l) system="armv6" ;; + *) echo "Unsupported architecture: $system"; exit 1 ;; +esac + +# Variables +mesh_url=$2 +rmm_url=$3 +rmm_client_id=$4 +rmm_site_id=$5 +rmm_auth=$6 +rmm_agent_type=$7 +mesh_fqdn=$2 +mesh_id=$3 +go_version="1.21.6" +go_url_amd64="https://go.dev/dl/go$go_version.linux-amd64.tar.gz" +go_url_x86="https://go.dev/dl/go$go_version.linux-386.tar.gz" +go_url_arm64="https://go.dev/dl/go$go_version.linux-arm64.tar.gz" +go_url_armv6="https://go.dev/dl/go$go_version.linux-armv6l.tar.gz" + +go_install() { + if ! command -v go &> /dev/null; then + case $system in + amd64) url=$go_url_amd64 ;; + x86) url=$go_url_x86 ;; + arm64) url=$go_url_arm64 ;; + armv6) url=$go_url_armv6 ;; + esac + wget -O /tmp/golang.tar.gz "$url" + rm -rf /usr/local/go/ + tar -xzf /tmp/golang.tar.gz -C /usr/local/ + rm /tmp/golang.tar.gz + export PATH=$PATH:/usr/local/go/bin + echo "Go is installed." + fi +} + +agent_compile() { + echo "Agent Compile begin" + wget -O /tmp/rmmagent.tar.gz "https://github.com/amidaware/rmmagent/archive/refs/heads/master.tar.gz" + tar -xf /tmp/rmmagent.tar.gz -C /tmp/ + rm /tmp/rmmagent.tar.gz + cd /tmp/rmmagent-master + case $system in + amd64) arch=amd64 ;; + x86) arch=386 ;; + arm64) arch=arm64 ;; + armv6) arch=arm ;; + esac + env CGO_ENABLED=0 GOOS=linux GOARCH=$arch go build -ldflags "-s -w" -o /tmp/temp_rmmagent + cd / + rm -rf /tmp/rmmagent-master +} + +install_agent() { + cp /tmp/temp_rmmagent /usr/local/bin/rmmagent + chmod +x /usr/local/bin/rmmagent + /usr/local/bin/rmmagent -m install -api "$rmm_url" -client-id "$rmm_client_id" \ + -site-id "$rmm_site_id" -agent-type "$rmm_agent_type" -auth "$rmm_auth" + + # Create OpenRC service script + cat << "EOF" > /etc/init.d/tacticalagent +#!/sbin/openrc-run + +description="Tactical RMM Linux Agent" +command="/usr/local/bin/rmmagent" +command_args="-m svc" +pidfile="/run/tacticalagent.pid" +command_background="yes" +depend() { + need net +} + +start_pre() { + checkpath --directory --owner root --mode 0755 /run +} +EOF + + chmod +x /etc/init.d/tacticalagent + rc-update add tacticalagent default + rc-service tacticalagent start +} + +install_mesh() { + wget -O /tmp/meshagent "$mesh_url" + chmod +x /tmp/meshagent + mkdir -p /opt/tacticalmesh + /tmp/meshagent -install --installPath="/opt/tacticalmesh" + rm /tmp/meshagent +} + +uninstall_agent() { + rc-service tacticalagent stop + rc-update del tacticalagent default + rm /etc/init.d/tacticalagent + rm /usr/local/bin/rmmagent +} + +uninstall_mesh() { + wget "https://$mesh_fqdn/meshagents?script=1" -O /tmp/meshinstall.sh \ + || wget "https://$mesh_fqdn/meshagents?script=1" --no-proxy -O /tmp/meshinstall.sh + chmod +x /tmp/meshinstall.sh + /tmp/meshinstall.sh uninstall "https://$mesh_fqdn" "$mesh_id" \ + || /tmp/meshinstall.sh uninstall + rm /tmp/meshinstall.sh +} + +case $1 in + install) + go_install + install_mesh + agent_compile + install_agent + echo "Tactical Agent Install is done" + exit 0 + ;; + update) + go_install + agent_compile + # replace binary + rc-service tacticalagent stop + cp /tmp/temp_rmmagent /usr/local/bin/rmmagent + chmod +x /usr/local/bin/rmmagent + rc-service tacticalagent start + echo "Tactical Agent Update is done" + exit 0 + ;; + uninstall) + uninstall_agent + uninstall_mesh + echo "Tactical Agent Uninstall is done" + exit 0 + ;; +esac \ No newline at end of file