mirror of
				https://github.com/Ylianst/MeshCentral.git
				synced 2025-03-09 15:40:18 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			153 lines
		
	
	
	
		
			3.8 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			153 lines
		
	
	
	
		
			3.8 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #!/bin/bash
 | |
| 
 | |
| CheckStartupType() {
 | |
| #  echo "Checking process autostart system..."
 | |
|   if [[ `systemctl` =~ -\.mount ]]; then return 1; # systemd;
 | |
|   elif [[ `/sbin/init --version` =~ upstart ]]; then return 2; # upstart;
 | |
|   elif [[ -f /etc/init.d/cron && ! -h /etc/init.d/cron ]]; then return 3; # sysv-init;
 | |
|   fi
 | |
|   return 0;
 | |
| }
 | |
| 
 | |
| CheckInstallAgent() {
 | |
| #  echo "Checking mesh identifier..."
 | |
|   if [ -e "/usr/local" ]
 | |
|   then
 | |
|     installpath="/usr/local/mesh"
 | |
|   else
 | |
|     installpath="/usr/mesh"
 | |
|   fi
 | |
|   if [ $# -eq 2 ]
 | |
|   then
 | |
|     url=$1
 | |
|     meshid=$2
 | |
|     meshidlen=${#meshid}
 | |
|     if [ $meshidlen -eq 64 ]
 | |
|     then
 | |
| #      echo "Detecting computer type..."
 | |
|       machinetype=$( uname -m )
 | |
|       machineid=0
 | |
|       if [ $machinetype == 'x86_64' ]
 | |
|       then
 | |
| #       Linux x86, 64 bit
 | |
|         machineid=6
 | |
|       fi
 | |
|       if [ $machinetype == 'x86' ]
 | |
|       then
 | |
| #       Linux x86, 32 bit
 | |
|         machineid=5
 | |
|       fi
 | |
|       if [ $machinetype == 'armv7l' ]
 | |
|       then
 | |
| #       Raspberry Pi 2 or Raspberry Pi 3
 | |
|         machineid=25
 | |
|       fi
 | |
| # TODO: Add more machine types, detect KVM support, etc.
 | |
|       if [ $machineid -eq 0 ]
 | |
|       then
 | |
|         echo "Unsupported machine type: $machinetype, check with server administrator."
 | |
|       else
 | |
|         DownloadAgent $url $meshid $machineid
 | |
|       fi
 | |
|     else
 | |
|       echo "MeshID is not correct, must be 64 HEX characters long."
 | |
|     fi
 | |
|   else
 | |
|     echo "URI and/or MeshID have not been specified, must be passed in as arguments."
 | |
|     return 0;
 | |
|   fi
 | |
| }
 | |
| 
 | |
| DownloadAgent() {
 | |
|   url=$1
 | |
|   meshid=$2
 | |
|   machineid=$3
 | |
| # Create folder
 | |
|   mkdir -p /usr/local/mesh
 | |
|   cd /usr/local/mesh
 | |
| #  echo "Downloading mesh agent..."
 | |
|   wget $url/meshagents?id=$machineid -q --no-check-certificate -O /usr/local/mesh/meshagent
 | |
|   if [ $? -eq 0 ]
 | |
|   then
 | |
|     echo "Mesh agent download."
 | |
| # TODO: Check meshagent sha256 hash
 | |
|     chmod 755 /usr/local/mesh/meshagent
 | |
|     wget $url/meshsettings?id=$meshid -q --no-check-certificate -O /usr/local/mesh/meshagent.msh
 | |
|     if [ $? -eq 0 ]
 | |
|     then
 | |
|       if [ $starttype -eq 1 ]
 | |
|       then
 | |
|         echo -e "[Unit]\nDescription=MeshCentral Agent\n[Service]\nExecStart=/usr/local/mesh/meshagent\nStandardOutput=null\n[Install]\nWantedBy=multi-user.target\nAlias=meshcentral.service\n" > /lib/systemd/system/meshcentral.service
 | |
|         systemctl enable meshcentral
 | |
|         systemctl start meshcentral
 | |
|       else
 | |
|         ./meshagent start
 | |
|         ln -s /usr/local/mesh/meshagent /sbin/meshcmd
 | |
|         ln -s /usr/local/mesh/meshagent /etc/rc2.d/S20mesh
 | |
|         ln -s /usr/local/mesh/meshagent /etc/rc3.d/S20mesh
 | |
|         ln -s /usr/local/mesh/meshagent /etc/rc5.d/S20mesh
 | |
|       fi
 | |
|     else
 | |
|       echo "Unable to download mesh settings at: $url/meshsettings?id=$meshid."
 | |
|     fi
 | |
|   else
 | |
|     echo "Unable to download mesh agent at: $url/meshagents?id=$machineid."
 | |
|   fi
 | |
| }
 | |
| 
 | |
| UninstallAgent() {
 | |
| # Uninstall agent
 | |
|   if [ -e "/usr/local" ]
 | |
|   then
 | |
|     installpath="/usr/local/mesh"
 | |
|   else
 | |
|     installpath="/usr/mesh"
 | |
|   fi
 | |
| 
 | |
|   if [ $starttype -eq 1 ]
 | |
|   then
 | |
|     rm -f /sbin/meshcmd /lib/systemd/system/meshcentral.service
 | |
|     systemctl disable meshcentral
 | |
|     systemctl stop meshcentral
 | |
|   else
 | |
|     rm -f /sbin/meshcmd /etc/rc2.d/S20mesh /etc/rc3.d/S20mesh /etc/rc5.d/S20mesh
 | |
|   fi
 | |
| 
 | |
|   if [ -e $installpath ]
 | |
|   then
 | |
|     cd $installpath
 | |
|     if [ -e "$installpath/meshagent" ]
 | |
|     then
 | |
|       ./meshagent stop
 | |
|     fi
 | |
|     rm -rf $installpath/*
 | |
|     rmdir $installpath
 | |
|   fi
 | |
|   echo "Agent uninstalled."
 | |
| }
 | |
| 
 | |
| 
 | |
| CheckStartupType
 | |
| starttype=$?
 | |
| #echo "Type: $starttype"
 | |
| 
 | |
| currentuser=$( whoami )
 | |
| if [ $currentuser == 'root' ]
 | |
| then
 | |
|   if [ $# -eq 0 ]
 | |
|   then
 | |
|     echo -e "This script will install or uninstall a mesh agent, usage:\n  $0 [serverurl] [meshid]\n  $0 uninstall"
 | |
|   else
 | |
|     if [ $# -eq 1 ]
 | |
|     then
 | |
|       if [ $1 == 'uninstall' ] || [ $1 == 'UNINSTALL' ]
 | |
|       then
 | |
|         UninstallAgent
 | |
|       fi
 | |
|     else
 | |
|       CheckInstallAgent $1 $2
 | |
|     fi
 | |
|   fi
 | |
| else
 | |
|   echo "Must be root to install or uninstall mesh agent."
 | |
| fi
 |