Upload files to "/"
This commit is contained in:
commit
ec4a373c8f
21
LICENSE
Normal file
21
LICENSE
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2022 ZoLuSs
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
110
README.md
Normal file
110
README.md
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
# rmmagent-script
|
||||||
|
Script for one-line installing and update of tacticalRMM agent
|
||||||
|
|
||||||
|
> Now x64, x86, arm64 and armv6 scripts are available but only x64 and i386 tested on Debian 11 and Debian 10 on baremetal, VM (Proxmox) and VPS(OVH)
|
||||||
|
> Tested on raspberry 2B+ with armv7l (chose armv6 on install)
|
||||||
|
|
||||||
|
Script for other platform will be available futher as I adapt script on other platform.
|
||||||
|
Feel free to adapt script and submit me !
|
||||||
|
|
||||||
|
# Usage
|
||||||
|
Download the script that match your configuration
|
||||||
|
|
||||||
|
### Tips
|
||||||
|
|
||||||
|
Download script with this url: `https://git.zepheris.com/zepheris/LinuxRMM-Script/raw/branch/main/rmmagent-linux.sh`
|
||||||
|
|
||||||
|
### Fix Blank Screen for Ubuntu Workstations (Ubuntu 16+)
|
||||||
|
Ubuntu uses the wayland display manager instead of the regular x11 server. This causes MeshCentral to show a blank screen when trying to access the remote desktop feature. You can't login, view or control the client. There is a neat fix for this, so don't worry:
|
||||||
|
```
|
||||||
|
sudo sed -i '/WaylandEnable/s/^#//g' /etc/gdm3/custom.conf
|
||||||
|
sudo systemctl restart gdm
|
||||||
|
```
|
||||||
|
This will cause your screen to go blank for a second. You will be able to use remote desktop afterwards.
|
||||||
|
> If you get an error like "file not found", you are probably still using Ubuntu 19 or below. On these machines, the config file will be located on /etc/gdm/custom.conf. Modify the command above accordingly. <
|
||||||
|
Please note that remote desktop features are only installed when you used the workstation agent. You may need to reinstall your mesh agent.
|
||||||
|
|
||||||
|
## Install
|
||||||
|
To install agent launch the script with this arguement:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./rmmagent-linux.sh install 'System type' 'Mesh agent' 'API URL' 'Client ID' 'Site ID' 'Auth Key' 'Agent Type'
|
||||||
|
```
|
||||||
|
The compiling can be quite long, don't panic and wait few minutes... USE THE 'SINGLE QUOTES' IN ALL FIELDS!
|
||||||
|
|
||||||
|
The argument are:
|
||||||
|
|
||||||
|
2. System type
|
||||||
|
|
||||||
|
Type of system. Can be 'amd64' 'x86' 'arm64' 'armv6'
|
||||||
|
|
||||||
|
3. Mesh agent
|
||||||
|
|
||||||
|
The url given by mesh for installing new agent.
|
||||||
|
Go to mesh.fqdn.com > Add agent > Installation Executable Linux / BSD / macOS > **Select the good system type**
|
||||||
|
Copy **ONLY** the URL with the quote.
|
||||||
|
|
||||||
|
4. API URL
|
||||||
|
|
||||||
|
Your api URL for agent communication usually https://api.fqdn.com.
|
||||||
|
|
||||||
|
5. Client ID
|
||||||
|
|
||||||
|
The ID of the client in wich agent will be added.
|
||||||
|
Can be view by hovering the name of the client in the dashboard.
|
||||||
|
|
||||||
|
6. Site ID
|
||||||
|
|
||||||
|
The ID of the site in wich agent will be added.
|
||||||
|
Can be view by hovering the name of the site in the dashboard.
|
||||||
|
|
||||||
|
7. Auth Key
|
||||||
|
|
||||||
|
Authentification key given by dashboard by going to dashboard > Agents > Install agent (Windows) > Select manual and show
|
||||||
|
Copy **ONLY** the key after *--auth*.
|
||||||
|
|
||||||
|
8. Agent Type
|
||||||
|
|
||||||
|
Can be *server* or *workstation* and define the type of agent.
|
||||||
|
|
||||||
|
### Example
|
||||||
|
```bash
|
||||||
|
./rmmagent-linux.sh install amd64 "https://mesh.fqdn.com/meshagents?id=XXXXX&installflags=X&meshinstall=X" "https://api.fqdn.com" 3 1 "XXXXX" server
|
||||||
|
```
|
||||||
|
|
||||||
|
## Update
|
||||||
|
|
||||||
|
Simply launch the script that match your system with *update* as argument.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./rmmagent-linux.sh update
|
||||||
|
```
|
||||||
|
|
||||||
|
## Uninstall
|
||||||
|
To uninstall agent launch the script with this arguement:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./rmmagent-linux.sh uninstall 'Mesh FQDN' 'Mesh ID'
|
||||||
|
```
|
||||||
|
Note: Single quotes must be around the Mesh ID for it to uninstall the mesh agent properly
|
||||||
|
|
||||||
|
The argument are:
|
||||||
|
|
||||||
|
2. Mesh FQDN
|
||||||
|
|
||||||
|
Example of FQDN: mesh.fqdn.com
|
||||||
|
|
||||||
|
3. Mesh ID
|
||||||
|
|
||||||
|
The ID given by mesh for installing new agent.
|
||||||
|
Go to mesh.fqdn.com > Add agent > Linux / BSD (Uninstall) > Copy **ONLY** the last value with the single quotes.
|
||||||
|
You are looking for a 64 charaters long value of random letter case, numbers, and special characters.
|
||||||
|
|
||||||
|
### Example
|
||||||
|
```bash
|
||||||
|
./rmmagent-linux.sh uninstall mesh.fqdn.com 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
|
||||||
|
```
|
||||||
|
|
||||||
|
### WARNING
|
||||||
|
- You should **only** attempt this if the agent removal feaure on TacticalRMM is not working.
|
||||||
|
- Running uninstall will **not** remove the connections from the TacticalRMM and MeshCentral Dashboard. You will need to manually remove them. It only forcefully removes the agents from your linux box.
|
294
rmmagent-linux.sh
Normal file
294
rmmagent-linux.sh
Normal file
@ -0,0 +1,294 @@
|
|||||||
|
#!/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
|
||||||
|
|
||||||
|
go_url_amd64="https://go.dev/dl/go1.20.11.linux-amd64.tar.gz"
|
||||||
|
go_url_x86="https://go.dev/dl/go1.20.11.linux-386.tar.gz"
|
||||||
|
go_url_arm64="https://go.dev/dl/go1.20.11.linux-arm64.tar.gz"
|
||||||
|
go_url_armv6="https://go.dev/dl/go1.20.11.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
|
||||||
|
|
||||||
|
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 !"
|
||||||
|
else
|
||||||
|
echo "Go is already installed"
|
||||||
|
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
|
Loading…
Reference in New Issue
Block a user