| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- #!/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
- if [[ $4 =~ ^--WebProxy= ]];
- then
- webproxy=$4
- fi
- meshidlen=${#meshid}
- if [ $meshidlen -gt 63 ]
- then
- machineid=0
- machinetype=$( uname -m )
- # If we have 3 arguments...
- if [ $# -ge 4 ] && [ -z "$webproxy" ]
- 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
- if [ $machinetype == 'riscv64' ]
- then
- # RISC-V 64 bit
- machineid=45
- 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 $webproxy
- 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
|