mirror of
				https://github.com/Ylianst/MeshCentral.git
				synced 2025-03-09 15:40:18 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			198 lines
		
	
	
	
		
			5.4 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			198 lines
		
	
	
	
		
			5.4 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #!/usr/bin/env bash
 | |
| 
 | |
| CheckStartupType() {
 | |
|   # 1 = Systemd
 | |
|   # 2 = Upstart
 | |
|   # 3 = init.d
 | |
|   # 5 = BSD
 | |
| 
 | |
|   # echo "Checking if Linux or BSD Platform"
 | |
|   plattype=`uname | awk '{ tst=tolower($0);a=split(tst, res, "bsd"); if(a==1) { print "LINUX"; } else { print "BSD"; }}'`
 | |
|   if [[ $plattype == 'BSD' ]]
 | |
|    then return 5;
 | |
|   fi
 | |
| 
 | |
|   # echo "Checking process autostart system..."
 | |
|   starttype1=`cat /proc/1/status | grep 'Name:' | awk '{ print $2; }'`
 | |
|   starttype2=`ps -p 1 -o command= | awk '{a=split($0,res," "); b=split(res[a],tp,"/"); print tp[b]; }'`
 | |
|  
 | |
|   # Systemd
 | |
|   if [[ $starttype1 == 'systemd' ]]
 | |
|     then return 1;
 | |
|   elif [[ $starttype1 == 'init'  ||  $starttype2 == 'init' ]]
 | |
|     then
 | |
|         if [ -d "/etc/init" ]
 | |
|             then
 | |
|                 return 2;
 | |
|             else
 | |
|                 return 3;
 | |
|         fi
 | |
|   fi
 | |
|   return 0;
 | |
| }
 | |
| 
 | |
| 
 | |
| # Add "StartupType=(type)" to .msh file
 | |
| UpdateMshFile() {
 | |
|   # Remove all lines that start with "StartupType="
 | |
|   sed '/^StartupType=/ d' < ./meshagent.msh >> ./meshagent2.msh
 | |
|   # Add the startup type to the file
 | |
|   echo "StartupType=$starttype" >> ./meshagent2.msh
 | |
|   mv ./meshagent2.msh ./meshagent.msh
 | |
| }
 | |
| 
 | |
| CheckInstallAgent() {
 | |
|   # echo "Checking mesh identifier..."
 | |
|   if [ -e "/usr/local" ]
 | |
|   then
 | |
|     installpath="/usr/local/mesh"
 | |
|   else
 | |
|     installpath="/usr/mesh"
 | |
|   fi
 | |
|   if [ $# -ge 2 ]
 | |
|   then
 | |
|     uninstall=$1
 | |
|     url=$2
 | |
|     meshid=$3
 | |
|     meshidlen=${#meshid}
 | |
|     if [ $meshidlen -gt 63 ]
 | |
|     then
 | |
|       machineid=0
 | |
|       machinetype=$( uname -m )
 | |
| 
 | |
|       # If we have 3 arguments...
 | |
|       if [ $# -ge 4 ]
 | |
|       then
 | |
|         # echo "Computer type is specified..."
 | |
|         machineid=$4
 | |
|       else
 | |
|         # echo "Detecting computer type..."
 | |
|         if [ $machinetype == 'x86_64' ] || [ $machinetype == 'amd64' ]
 | |
|         then
 | |
|           if [ $starttype -eq 5 ]
 | |
|           then
 | |
|             # FreeBSD x86, 64 bit
 | |
|             machineid=30
 | |
|           else
 | |
|             # Linux x86, 64 bit
 | |
|             bitlen=$( getconf LONG_BIT )
 | |
|             if [ $bitlen == '32' ] 
 | |
|             then
 | |
|                 # 32 bit OS
 | |
|                 machineid=5
 | |
|             else
 | |
|                 # 64 bit OS
 | |
|                 machineid=6
 | |
|             fi
 | |
|           fi
 | |
|         fi
 | |
|         if [ $machinetype == 'x86' ] || [ $machinetype == 'i686' ] || [ $machinetype == 'i586' ]
 | |
|         then
 | |
|           if [ $starttype -eq 5 ]
 | |
|           then
 | |
|             # FreeBSD x86, 32 bit
 | |
|             machineid=31
 | |
|           else
 | |
|             # Linux x86, 32 bit
 | |
|             machineid=5
 | |
|           fi
 | |
|         fi
 | |
|         if [ $machinetype == 'armv6l' ] || [ $machinetype == 'armv7l' ]
 | |
|         then
 | |
|           # RaspberryPi 1 (armv6l) or RaspberryPi 2/3 (armv7l)
 | |
|           machineid=25
 | |
|         fi
 | |
|         if [ $machinetype == 'aarch64' ]
 | |
|         then
 | |
|           # RaspberryPi 3B+ running Ubuntu 64 (aarch64)
 | |
|           machineid=26
 | |
|         fi
 | |
|         # Add more machine types, detect KVM support... here.
 | |
|       fi
 | |
| 
 | |
|       if [ $machineid -eq 0 ]
 | |
|       then
 | |
|         echo "Unsupported machine type: $machinetype."
 | |
|       else
 | |
|         DownloadAgent $uninstall $url $meshid $machineid
 | |
|       fi
 | |
| 
 | |
|     else
 | |
|       echo "Device group identifier is not correct, must be at least 64 characters long."
 | |
|     fi
 | |
|   else
 | |
|     echo "URI and/or device group identifier have not been specified, must be passed in as arguments."
 | |
|     return 0;
 | |
|   fi
 | |
| }
 | |
| 
 | |
| DownloadAgent() {
 | |
|   uninstall=$1
 | |
|   url=$2
 | |
|   meshid=$3
 | |
|   machineid=$4
 | |
|   echo "Downloading agent #$machineid..."
 | |
|   wget $url/meshagents?id=$machineid {{{wgetoptionshttps}}}-O ./meshagent || curl {{{curloptionshttps}}}--output ./meshagent $url/meshagents?id=$machineid
 | |
| 
 | |
|   # If it did not work, try again using http
 | |
|   if [ $? != 0 ]
 | |
|   then
 | |
|     url=${url/"https://"/"http://"}
 | |
|     wget $url/meshagents?id=$machineid {{{wgetoptionshttp}}}-O ./meshagent || curl {{{curloptionshttp}}}--output ./meshagent $url/meshagents?id=$machineid
 | |
|   fi
 | |
| 
 | |
|   if [ $? -eq 0 ]
 | |
|   then
 | |
|     echo "Agent downloaded."
 | |
|     # TODO: We could check the meshagent sha256 hash, but best to authenticate the server.
 | |
|     chmod 755 ./meshagent
 | |
|     wget $url/meshsettings?id=$meshid {{{wgetoptionshttps}}}-O ./meshagent.msh || curl {{{curloptionshttps}}}--output ./meshagent.msh $url/meshsettings?id=$meshid
 | |
| 
 | |
|     # If it did not work, try again using http
 | |
|     if [ $? -ne 0 ]
 | |
|     then
 | |
|       wget $url/meshsettings?id=$meshid {{{wgetoptionshttp}}}-O ./meshagent.msh || curl {{{curloptionshttp}}}--output ./meshagent.msh $url/meshsettings?id=$meshid
 | |
|     fi
 | |
| 
 | |
|     if [ $? -eq 0 ]
 | |
|     then
 | |
|       # Update the .msh file and run the agent installer/uninstaller
 | |
|       if [ $uninstall == 'uninstall' ] || [ $uninstall == 'UNINSTALL' ]
 | |
|       then
 | |
|         # Uninstall the agent
 | |
|         ./meshagent -fulluninstall
 | |
|       else
 | |
|         # Install the agent
 | |
|         UpdateMshFile
 | |
|         ./meshagent -fullinstall --copy-msh=1
 | |
|       fi
 | |
|     else
 | |
|       echo "Unable to download device group settings at: $url/meshsettings?id=$meshid."
 | |
|     fi
 | |
|   else
 | |
|     echo "Unable to download agent at: $url/meshagents?id=$machineid."
 | |
|   fi
 | |
| }
 | |
| 
 | |
| 
 | |
| CheckStartupType
 | |
| starttype=$?
 | |
| #echo "Type: $starttype"
 | |
| 
 | |
| currentuser=$( whoami )
 | |
| if [ $currentuser == 'root' ]
 | |
| then
 | |
|   if [ $# -eq 0 ]
 | |
|   then
 | |
|     echo -e "This script will install or uninstall a agent, usage:\n  $0 [serverUrl] [deviceGroupId] (machineId)\n  $0 uninstall [serverUrl] [deviceGroupId] (machineId)"
 | |
|   else
 | |
|     if [ $1 == 'uninstall' ] || [ $1 == 'UNINSTALL' ]
 | |
|     then
 | |
|       CheckInstallAgent 'uninstall' $2 $3 $4
 | |
|     else
 | |
|       CheckInstallAgent 'install' $1 $2 $3
 | |
|     fi
 | |
|   fi
 | |
| else
 | |
|   echo "Must be root to install or uninstall the agent."
 | |
| fi
 |