- uninstall_agent function - uninstall_mesh function - User input support for forcibly uninstalling TRMM and Mesh agent. Updated the following: - Updated readme.md with how to use the uninstall feature.
		
			
				
	
	
		
			282 lines
		
	
	
		
			8.3 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			282 lines
		
	
	
		
			8.3 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #!/bin/bash
 | |
| if ! command -v unzip &> /dev/null
 | |
| then
 | |
|         echo "unzip could not be found. Please install unzip."
 | |
|         exit 0
 | |
| fi
 | |
| 
 | |
| 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 "List of INSTALL/UPDATE argument (no argument name):"
 | |
|         echo "Arg 1: 'install' or 'update'"
 | |
|         echo "Arg 2: System type 'amd64' 'x86' 'arm64' 'armv6'"
 | |
|         echo "Arg 3: Mesh agent URL"
 | |
|         echo "Arg 4: API URL"
 | |
|         echo "Arg 5: Client ID"
 | |
|         echo "Arg 6: Site ID"
 | |
|         echo "Arg 7: Auth Key"
 | |
|         echo "Arg 8: Agent Type 'server' or 'workstation'"
 | |
|         echo ""
 | |
|         echo "List of UNINSTALL argument (no argument name):"
 | |
|         echo "Arg 1: 'uninstall'"
 | |
|         echo "Arg 2: Mesh agent FQDN (i.e. mesh.domain.com)"
 | |
|         echo "Arg 3: Mesh agent id (The id needs to have single quotes around it)"
 | |
|         echo ""
 | |
|         echo "Only argument 1 is needed for update"
 | |
|         echo ""
 | |
|         exit 0
 | |
| fi
 | |
| 
 | |
| if [[ $1 != "install" && $1 != "update" && $1 != "uninstall" ]]; then
 | |
|         echo "First argument can only be 'install' or 'update' or 'uninstall' !"
 | |
|         echo "Type help for more information"
 | |
|         exit 1
 | |
| fi
 | |
| 
 | |
| if [[ $1 == "install" && $2 == "" ]]; then
 | |
|         echo "Argument 2 (System type) is empty !"
 | |
|         echo "Type help for more information"
 | |
|         exit 1
 | |
| fi
 | |
| 
 | |
| if [[ $1 == "install" && $2 != "amd64" && $2 != "x86" && $2 != "arm64" && $2 != "armv6" ]]; then
 | |
|         echo "This argument can only be 'amd64' 'x86' 'arm64' 'armv6' !"
 | |
|         echo "Type help for more information"
 | |
|         exit 1
 | |
| fi
 | |
| 
 | |
| if [[ $1 == "install" && $3 == "" ]]; then
 | |
|         echo "Argument 3 (Mesh agent URL) is empty !"
 | |
|         echo "Type help for more information"
 | |
|         exit 1
 | |
| fi
 | |
| 
 | |
| if [[ $1 == "install" && $4 == "" ]]; then
 | |
|         echo "Argument 4 (API URL) is empty !"
 | |
|         echo "Type help for more information"
 | |
|         exit 1
 | |
| fi
 | |
| 
 | |
| if [[ $1 == "install" && $5 == "" ]]; then
 | |
|         echo "Argument 5 (Client ID) is empty !"
 | |
|         echo "Type help for more information"
 | |
|         exit 1
 | |
| fi
 | |
| 
 | |
| if [[ $1 == "install" && $6 == "" ]]; then
 | |
|         echo "Argument 6 (Site ID) is empty !"
 | |
|         echo "Type help for more information"
 | |
|         exit 1
 | |
| fi
 | |
| 
 | |
| if [[ $1 == "install" && $7 == "" ]]; then
 | |
|         echo "Argument 7 (Auth Key) is empty !"
 | |
|         echo "Type help for more information"
 | |
|         exit 1
 | |
| fi
 | |
| 
 | |
| if [[ $1 == "install" && $8 == "" ]]; then
 | |
|         echo "Argument 8 (Agent Type) is empty !"
 | |
|         echo "Type help for more information"
 | |
|         exit 1
 | |
| fi
 | |
| 
 | |
| if [[ $1 == "install" && $8 != "server" && $8 != "workstation" ]]; then
 | |
|         echo "First argument can only be 'server' or 'workstation' !"
 | |
|         echo "Type help for more information"
 | |
|         exit 1
 | |
| fi
 | |
| 
 | |
| if [[ $1 == "uninstall" && $2 == "" ]]; then
 | |
|         echo "Argument 2 (Mesh agent FQDN) is empty !"
 | |
|         echo "Type help for more information"
 | |
|         exit 1
 | |
| fi
 | |
| 
 | |
| if [[ $1 == "uninstall" && $3 == "" ]]; then
 | |
|         echo "Argument 3 (Mesh agent id) is empty !"
 | |
|         echo "Type help for more information"
 | |
|         exit 1
 | |
| fi
 | |
| 
 | |
| ## Setting var for easy scription
 | |
| system=$2
 | |
| mesh_url=$3
 | |
| rmm_url=$4
 | |
| rmm_client_id=$5
 | |
| rmm_site_id=$6
 | |
| rmm_auth=$7
 | |
| rmm_agent_type=$8
 | |
| ## Uninstall var for easy scription
 | |
| mesh_fqdn=$2
 | |
| mesh_id=$3
 | |
| 
 | |
| go_url_amd64="https://go.dev/dl/go1.18.3.linux-amd64.tar.gz"
 | |
| go_url_x86="https://go.dev/dl/go1.18.3.linux-386.tar.gz"
 | |
| go_url_arm64="https://go.dev/dl/go1.18.3.linux-arm64.tar.gz"
 | |
| go_url_armv6="https://go.dev/dl/go1.18.3.linux-armv6l.tar.gz"
 | |
| 
 | |
| function go_install() {
 | |
|         ## Installing golang
 | |
|         case $system in
 | |
|         amd64)
 | |
|           wget -O /tmp/golang.tar.gz $go_url_amd64
 | |
|                 ;;
 | |
|         x86)
 | |
|           wget -O /tmp/golang.tar.gz $go_url_x86
 | |
|         ;;
 | |
|         arm64)
 | |
|           wget -O /tmp/golang.tar.gz $go_url_arm64
 | |
|         ;;
 | |
|         armv6)
 | |
|           wget -O /tmp/golang.tar.gz $go_url_armv6
 | |
|         ;;
 | |
|         esac
 | |
|         
 | |
|         tar -xvzf /tmp/golang.tar.gz -C /usr/local/
 | |
|         rm /tmp/golang.tar.gz
 | |
|         export GOPATH=/usr/local/go
 | |
|         export GOCACHE=/root/.cache/go-build
 | |
| 
 | |
|         echo "Golang Install Done !"
 | |
| }
 | |
| 
 | |
| function agent_compile() {
 | |
|         ## Compiling and installing tactical agent from github
 | |
|         echo "Agent Compile begin"
 | |
|         wget -O /tmp/rmmagent.zip "https://github.com/amidaware/rmmagent/archive/refs/heads/master.zip"
 | |
|         unzip /tmp/rmmagent -d /tmp/
 | |
|         rm /tmp/rmmagent.zip
 | |
|         cd /tmp/rmmagent-master
 | |
|         case $system in
 | |
|         amd64)
 | |
|           env CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "-s -w" -o /tmp/temp_rmmagent
 | |
|         ;;
 | |
|         x86)
 | |
|           env CGO_ENABLED=0 GOOS=linux GOARCH=386 go build -ldflags "-s -w" -o /tmp/temp_rmmagent
 | |
|         ;;
 | |
|         arm64)
 | |
|           env CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -ldflags "-s -w" -o /tmp/temp_rmmagent
 | |
|         ;;
 | |
|         armv6)
 | |
|           env CGO_ENABLED=0 GOOS=linux GOARCH=arm go build -ldflags "-s -w" -o /tmp/temp_rmmagent
 | |
|         ;;
 | |
|         esac
 | |
|         
 | |
|         cd /tmp
 | |
|         rm -R /tmp/rmmagent-master
 | |
| }
 | |
| 
 | |
| function update_agent() {
 | |
|         systemctl stop tacticalagent
 | |
| 
 | |
|         cp /tmp/temp_rmmagent /usr/local/bin/rmmagent
 | |
|         rm /tmp/temp_rmmagent
 | |
| 
 | |
|         systemctl start tacticalagent
 | |
| }
 | |
| function install_agent() {
 | |
|         cp /tmp/temp_rmmagent /usr/local/bin/rmmagent
 | |
|         /tmp/temp_rmmagent -m install -api $rmm_url -client-id $rmm_client_id -site-id $rmm_site_id -agent-type $rmm_agent_type -auth $rmm_auth
 | |
|         rm /tmp/temp_rmmagent
 | |
| 
 | |
|         cat << "EOF" > /etc/systemd/system/tacticalagent.service
 | |
| [Unit]
 | |
| Description=Tactical RMM Linux Agent
 | |
| [Service]
 | |
| Type=simple
 | |
| ExecStart=/usr/local/bin/rmmagent -m svc
 | |
| User=root
 | |
| Group=root
 | |
| Restart=always
 | |
| RestartSec=5s
 | |
| LimitNOFILE=1000000
 | |
| KillMode=process
 | |
| [Install]
 | |
| WantedBy=multi-user.target
 | |
| EOF
 | |
| 
 | |
|   systemctl daemon-reload
 | |
|   systemctl enable --now tacticalagent
 | |
|   systemctl start tacticalagent
 | |
| }
 | |
| 
 | |
| function install_mesh() {
 | |
|   ## Installing mesh agent
 | |
|   wget -O /tmp/meshagent $mesh_url
 | |
|   chmod +x /tmp/meshagent
 | |
|   mkdir /opt/tacticalmesh
 | |
|   /tmp/meshagent -install --installPath="/opt/tacticalmesh"
 | |
|   rm /tmp/meshagent
 | |
|   rm /tmp/meshagent.msh
 | |
| }
 | |
| 
 | |
| function check_profile () {
 | |
|         source /etc/environment
 | |
|         profile_file="/root/.profile"
 | |
|         path_count=$(cat $profile_file | grep -o "export PATH=/usr/local/go/bin" | wc -l)
 | |
|         if [[ $path_count -ne 0 ]]; then
 | |
|                 echo "Removing incorrect \$PATH variable\(s\)"
 | |
|                 sed -i "/export\ PATH\=\/usr\/local\/go\/bin/d" $profile_file
 | |
|         fi
 | |
| 
 | |
|         path_count=$(cat $profile_file | grep -o "export PATH=\$PATH:/usr/local/go/bin" | wc -l)
 | |
|         if [[ $path_count -ne 1 ]]; then
 | |
|                 echo "Fixing \$PATH Variable"
 | |
|                 sed -i "/export\ PATH\=\$PATH\:\/usr\/local\/go\/bin/d" $profile_file
 | |
|                 echo "export PATH=\$PATH:/usr/local/go/bin" >> $profile_file
 | |
|         fi
 | |
|         source $profile_file
 | |
| }
 | |
| 
 | |
| function uninstall_agent() {
 | |
|         systemctl stop tacticalagent
 | |
|         systemctl disable tacticalagent
 | |
|         rm /etc/systemd/system/tacticalagent.service
 | |
|         systemctl daemon-reload
 | |
|         rm /usr/local/bin/rmmagent
 | |
|         rm /etc/tacticalagent
 | |
|         sed -i "/export\ PATH\=\$PATH\:\/usr\/local\/go\/bin/d" /root/.profile
 | |
| }
 | |
| 
 | |
| function 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 755 /tmp/meshinstall.sh
 | |
|         (/tmp/meshinstall.sh uninstall https://$mesh_fqdn $mesh_id || /tmp/meshinstall.sh uninstall uninstall uninstall https://$mesh_fqdn $mesh_id)
 | |
|         rm /tmp/meshinstall.sh
 | |
|         rm meshagent
 | |
|         rm meshagent.msh
 | |
| }
 | |
| 
 | |
| case $1 in
 | |
| install)
 | |
|         check_profile
 | |
|         go_install
 | |
|         install_mesh
 | |
|         agent_compile
 | |
|         install_agent
 | |
|         echo "Tactical Agent Install is done"
 | |
|         exit 0;;
 | |
| update)
 | |
|         check_profile
 | |
|         go_install
 | |
|         agent_compile
 | |
|         update_agent
 | |
|         echo "Tactical Agent Update is done"
 | |
|         exit 0;;
 | |
| uninstall)
 | |
|         check_profile
 | |
|         uninstall_agent
 | |
|         uninstall_mesh
 | |
|         echo "Tactical Agent Uninstall is done"
 | |
|         echo "You may need to manually remove the agents orphaned connections on TacticalRMM and MeshCentral"
 | |
|         exit 0;;
 | |
| esac
 |