mirror of
https://github.com/netvolt/LinuxRMM-Script.git
synced 2024-11-21 23:23:08 +01:00
4c856c64f7
- Added a condition that will check the defined version Go with the version of Go installed on the system. Based on this condition either the defined version of Go gets installed or not.
329 lines
10 KiB
Bash
329 lines
10 KiB
Bash
#!/bin/bash
|
|
check_zip=$(which unzip 2> /dev/null)
|
|
if [[ $check_zip == "" || $check_zip =~ .*"no unzip".* ]]; 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 argument (no argument name):"
|
|
echo "Arg 1: 'install'"
|
|
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 UPDATE argument (no argument name)"
|
|
echo "Arg 1: 'update'"
|
|
echo "Arg 2: System type 'amd64' 'x86' 'arm64' 'armv6'"
|
|
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 ""
|
|
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 == "update" && $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
|
|
## Setting Go verison to be installed
|
|
go_version="1.21.5"
|
|
|
|
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"
|
|
|
|
function go_install() {
|
|
if ! command -v go &> /dev/null; then
|
|
## 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
|
|
|
|
rm -rvf /usr/local/go/
|
|
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 "Go is installed (version $go_current_version)."
|
|
else
|
|
# Get the current version of Go installed
|
|
go_current_version=$(go version | awk '{print $3}' | sed 's/go//')
|
|
|
|
if [ "$go_current_version" != "$go_version" ]; then
|
|
echo "Version mismatch. Current installed version is $go_current_version. Desired version is $go_version."
|
|
echo "Installing Go $go_version..."
|
|
## 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
|
|
|
|
rm -rvf /usr/local/go/
|
|
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 "Go $go_version installed."
|
|
else
|
|
echo "Go is up to date (version $go_current_version)."
|
|
fi
|
|
fi
|
|
}
|
|
|
|
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
|