From f863c29194ef11b9b62adb3d79b484a6c4e8bced Mon Sep 17 00:00:00 2001 From: wh1te909 Date: Tue, 23 Feb 2021 22:19:58 +0000 Subject: [PATCH 01/21] more docs --- docs/docs/faq.md | 56 +++++++++++++++++++++++++ docs/docs/images/managedeployments.png | Bin 0 -> 16054 bytes docs/docs/images/reset2fa.png | Bin 0 -> 20160 bytes docs/docs/images/siteagentinstall.png | Bin 0 -> 19017 bytes docs/docs/install_agent.md | 51 ++++++++++++++++++++++ docs/docs/install_server.md | 6 ++- docs/docs/license.md | 21 ++++++++++ docs/docs/troubleshooting.md | 0 docs/mkdocs.yml | 9 ++-- 9 files changed, 137 insertions(+), 6 deletions(-) create mode 100644 docs/docs/images/managedeployments.png create mode 100644 docs/docs/images/reset2fa.png create mode 100644 docs/docs/images/siteagentinstall.png create mode 100644 docs/docs/install_agent.md create mode 100644 docs/docs/license.md delete mode 100644 docs/docs/troubleshooting.md diff --git a/docs/docs/faq.md b/docs/docs/faq.md index e69de29bb2..52e454e1f2 100644 --- a/docs/docs/faq.md +++ b/docs/docs/faq.md @@ -0,0 +1,56 @@ +# FAQ + + +#### How do I do X feature in the web UI? +Alot of features in the web UI are hidden behind right-click menus; almost everything has a right click menu so if you don't see something, try right clicking on it. +#### Where are the linux / mac agents? +Linux / Mac agents are currently under development. + +#### I am locked out of the web UI. How do I reset my password? + +SSH into your server and run these commands: + +!!!note + The code below will reset the password for the account that was created during install. + To reset a password for a different user, you should use the web UI (see the next question below), but can also do so through the command line by replacing
+ `user = User.objects.first()`
+ with
+ `user = User.objects.get(username='someuser')` +
+ in the code snippet below. + + +```python +tactical@tacrmm:~$ /rmm/api/env/bin/python /rmm/api/tacticalrmm/manage.py shell +Python 3.9.2 (default, Feb 21 2021, 00:50:28) +[GCC 9.3.0] on linux +Type "help", "copyright", "credits" or "license" for more information. +(InteractiveConsole) +>>> from accounts.models import User +>>> user = User.objects.first() +>>> user.set_password("superSekret123") +>>> user.save() +>>> exit() +``` + +
+ +#### How do I reset password or 2 factor token? +From the web UI, click **Settings > User Administration** and then right-click on a user:

+![reset2fa](images/reset2fa.png) +

+Or from the command line:
+```python +tactical@tacrmm:~$ /rmm/api/env/bin/python /rmm/api/tacticalrmm/manage.py shell +Python 3.9.2 (default, Feb 21 2021, 00:50:28) +[GCC 9.3.0] on linux +Type "help", "copyright", "credits" or "license" for more information. +(InteractiveConsole) +>>> from accounts.models import User +>>> user = User.objects.get(username='someuser') +>>> user.totp_key = None +>>> user.save(update_fields=['totp_key']) +>>> exit() +``` +
+Then simply log out of the web UI and next time the user logs in they will be redirected to the 2FA setup page which will present a barcode to be scanned with the Authenticator app. diff --git a/docs/docs/images/managedeployments.png b/docs/docs/images/managedeployments.png new file mode 100644 index 0000000000000000000000000000000000000000..d83f65601adf322de05f2e2f4eb7d15dba02ef79 GIT binary patch literal 16054 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 }okG*PIX9);WT(eP%G*qp?v;*} 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 literal 0 HcmV?d00001 diff --git a/docs/docs/images/reset2fa.png b/docs/docs/images/reset2fa.png new file mode 100644 index 0000000000000000000000000000000000000000..8e1b987e1904c3e9fc21eaa4963bb1f04cd88cf2 GIT binary patch literal 20160 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 GgeCy!?8ZR= literal 0 HcmV?d00001 diff --git a/docs/docs/install_agent.md b/docs/docs/install_agent.md new file mode 100644 index 0000000000..43cb9190ec --- /dev/null +++ b/docs/docs/install_agent.md @@ -0,0 +1,51 @@ +# Installing an agent + +!!!warning + You must add antivirus exlusions for the tactical agent.
+ Any decent AV will flag the agent as a virus, since it technically is one due to the nature of this app.
+ Adding the following exlucions will make sure everything works, including agent update:
+ `C:\Program Files\TacticalAgent\*`
+ `C:\Program Files\Mesh Agent\*`
+ `C:\Windows\Temp\winagent-v*.exe`
+ `C:\Windows\Temp\trmm\*`
+ + + + +#### Dynamically generated executable + +The generated exe is simply a wrapper around the Manual install method, using a single exe/command without the need to pass any command line flags to the installer.

+All it does is download the generic installer from the agent's github [release page](https://github.com/wh1te909/rmmagent/releases) and call it using predefined command line args that you choose from the web UI.

+It "bakes" the command line args into the executable.

+From the UI, click **Agents > Install Agent**
+You can also **right click on a site > Install Agent**. This will automatically fill in the client/site dropdown for you.

+![siteagentinstall](images/siteagentinstall.png) + +#### Powershell +The powershell method is very similar to the generated exe in that it simply downloads the installer from github and calls the exe for you. + +#### Manual +The manual installation method requires you to first download the generic installer and call it using command line args.

+This is useful for scripting the installation using Group Policy or some other batch deployment method.
+ + +!!!tip + You can reuse the installer for any of the deployment methods, you don't need to constantly create a new installer for each new agent.
+ The installer will be valid for however long you specify the token expiry time when generating an agent. + +
+#### Using a deployment link + +Creating a deployment link is the recommended way to deploy agents.

+The main benefit of this method is that the exectuable is generated only whenever the deployment download link is accessed, whereas with the other methods it's generated right away and the agent's version hardcoded into the exe.

+Using a deployment link will allow you to not worry about installing using an older version of an agent, which will fail to install if you have updated your RMM to a version that is not compatible with an older installer you might have lying around.

+ +To create a deployment, from the web UI click **Agents > Manage Deployments**.

+![managedeployments](images/managedeployments.png) + + +!!!tip + Create a client/site named "Default" and create a deployment for it with a very long expiry to have a generic installer that can be deployed anytime at any client/site.

+ You can then move the agent into the correct client/site from the web UI after it's been installed. + +Copy/paste the download link from the deployment into your browser. It will take a few seconds to dynamically generate the executable and then your browser will automatically download the exe. \ No newline at end of file diff --git a/docs/docs/install_server.md b/docs/docs/install_server.md index 2ccc982929..69b4751cc4 100644 --- a/docs/docs/install_server.md +++ b/docs/docs/install_server.md @@ -22,12 +22,14 @@ apt install -y wget curl sudo apt -y upgrade ``` If a new kernel is installed, then reboot the server with the `reboot` command

-Create a user to run the rmm and add it to the sudoers group. For this example we'll be using a user named `tactical` but feel free to create whatever name you want. +Create a linux user to run the rmm and add it to the sudoers group.
For this example we'll be using a user named `tactical` but feel free to create whatever name you want. ```bash adduser tactical usermod -a -G sudo tactical ``` -- *Optional: [enable passwordless sudo to make your life easier](https://linuxconfig.org/configure-sudo-without-password-on-ubuntu-20-04-focal-fossa-linux)*

+ +!!!tip + [Enable passwordless sudo to make your life easier](https://linuxconfig.org/configure-sudo-without-password-on-ubuntu-20-04-focal-fossa-linux) #### Setup the firewall (optional but highly recommended) diff --git a/docs/docs/license.md b/docs/docs/license.md new file mode 100644 index 0000000000..b2bc428f21 --- /dev/null +++ b/docs/docs/license.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019-present wh1te909 + +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. \ No newline at end of file diff --git a/docs/docs/troubleshooting.md b/docs/docs/troubleshooting.md deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index 8e5cb46fea..4b8fdac702 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -1,12 +1,13 @@ -site_name: "Tactical RMM" +site_name: "Tactical RMM Documentation" nav: - Home: index.md - - Installation: + - RMM Installation: - "Traditional Install": install_server.md - "Docker Install": install_docker.md - - Troubleshooting: troubleshooting.md + - Agent Installation: install_agent.md - FAQ: faq.md -site_description: "A remote monitoring and management tool for Windows computers" + - License: license.md +site_description: "A remote monitoring and management tool" site_author: "wh1te909" dev_addr: "0.0.0.0:8005" From a05998a30ebe73b685f690e19584c93d643065dd Mon Sep 17 00:00:00 2001 From: wh1te909 Date: Wed, 24 Feb 2021 00:12:55 +0000 Subject: [PATCH 02/21] docs --- .devcontainer/requirements.txt | 1 + .gitignore | 1 + README.md | 98 +------------------------ api/tacticalrmm/requirements-dev.txt | 1 + docs/docs/backup.md | 48 ++++++++++++ docs/docs/faq.md | 6 +- docs/docs/images/autoagentupdate.png | Bin 0 -> 11820 bytes docs/docs/images/manualagentupdate.png | Bin 0 -> 12238 bytes docs/docs/restore.md | 37 ++++++++++ docs/docs/update_agents.md | 39 ++++++++++ docs/docs/update_server.md | 27 +++++++ docs/mkdocs.yml | 5 ++ 12 files changed, 166 insertions(+), 97 deletions(-) create mode 100644 docs/docs/backup.md create mode 100644 docs/docs/images/autoagentupdate.png create mode 100644 docs/docs/images/manualagentupdate.png create mode 100644 docs/docs/restore.md create mode 100644 docs/docs/update_agents.md create mode 100644 docs/docs/update_server.md diff --git a/.devcontainer/requirements.txt b/.devcontainer/requirements.txt index 14fd765125..5904a1fbdf 100644 --- a/.devcontainer/requirements.txt +++ b/.devcontainer/requirements.txt @@ -44,4 +44,5 @@ model_bakery mkdocs mkdocs-material pymdown-extensions +Pygments mypy diff --git a/.gitignore b/.gitignore index 7a4ba20fd7..2e9c67f717 100644 --- a/.gitignore +++ b/.gitignore @@ -46,3 +46,4 @@ docker-compose.dev.yml docs/.vuepress/dist nats-rmm.conf .mypy_cache +docs/site/ diff --git a/README.md b/README.md index 76db2f0fc2..4de89d4434 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,8 @@ Demo database resets every hour. Alot of features are disabled for obvious reaso ### [Discord Chat](https://discord.gg/upGTkWp) +### [Documentation](https://wh1te909.github.io/tacticalrmm/) + ## Features - Teamviewer-like remote desktop control @@ -33,98 +35,6 @@ Demo database resets every hour. Alot of features are disabled for obvious reaso - Windows 7, 8.1, 10, Server 2008R2, 2012R2, 2016, 2019 -## Installation - -### Requirements -- VPS with 2GB ram (an install script is provided for Ubuntu Server 20.04 / Debian 10) -- A domain you own with at least 3 subdomains -- Google Authenticator app (2 factor is NOT optional) - -### Docker -Refer to the [docker setup](docker/readme.md) - - -### Installation example (Ubuntu server 20.04 LTS) - -Fresh VPS with latest updates\ -login as root and create a user and add to sudoers group (we will be creating a user called tactical) -``` -apt update && apt -y upgrade -adduser tactical -usermod -a -G sudo tactical -``` - -switch to the tactical user and setup the firewall -``` -su - tactical -sudo ufw default deny incoming -sudo ufw default allow outgoing -sudo ufw allow ssh -sudo ufw allow http -sudo ufw allow https -sudo ufw allow proto tcp from any to any port 4222 -sudo ufw enable && sudo ufw reload -``` - -Our domain for this example is tacticalrmm.com - -In the DNS manager of wherever our domain is hosted, we will create three A records, all pointing to the public IP address of our VPS - -Create A record ```api.tacticalrmm.com``` for the django rest backend\ -Create A record ```rmm.tacticalrmm.com``` for the vue frontend\ -Create A record ```mesh.tacticalrmm.com``` for meshcentral - -Download the install script and run it - -``` -wget https://raw.githubusercontent.com/wh1te909/tacticalrmm/master/install.sh -chmod +x install.sh -./install.sh -``` - - Links will be provided at the end of the install script.\ - Download the executable from the first link, then open ```rmm.tacticalrmm.com``` and login.\ - Upload the executable when prompted during the initial setup page. - - -### Install an agent -From the app's dashboard, choose Agents > Install Agent to generate an installer. - -## Updating -Download and run [update.sh](https://raw.githubusercontent.com/wh1te909/tacticalrmm/master/update.sh) -``` -wget https://raw.githubusercontent.com/wh1te909/tacticalrmm/master/update.sh -chmod +x update.sh -./update.sh -``` - -## Backup -Download [backup.sh](https://raw.githubusercontent.com/wh1te909/tacticalrmm/master/backup.sh) -``` -wget https://raw.githubusercontent.com/wh1te909/tacticalrmm/master/backup.sh -``` -Change the postgres username and password at the top of the file (you can find them in `/rmm/api/tacticalrmm/tacticalrmm/local_settings.py` under the DATABASES section) - -Run it -``` -chmod +x backup.sh -./backup.sh -``` - -## Restore -Change your 3 A records to point to new server's public IP - -Create same linux user account as old server and add to sudoers group and setup firewall (see install instructions above) - -Copy backup file to new server - -Download the restore script, and edit the postgres username/password at the top of the file. Same instructions as above in the backup steps. -``` -wget https://raw.githubusercontent.com/wh1te909/tacticalrmm/master/restore.sh -``` +## Installation / Backup / Restore / Usage -Run the restore script, passing it the backup tar file as the first argument -``` -chmod +x restore.sh -./restore.sh rmm-backup-xxxxxxx.tar -``` +### Refer to the [documentation](https://wh1te909.github.io/tacticalrmm/) \ No newline at end of file diff --git a/api/tacticalrmm/requirements-dev.txt b/api/tacticalrmm/requirements-dev.txt index c323465e93..6976380bfc 100644 --- a/api/tacticalrmm/requirements-dev.txt +++ b/api/tacticalrmm/requirements-dev.txt @@ -4,5 +4,6 @@ django-extensions mkdocs mkdocs-material pymdown-extensions +Pygments isort mypy \ No newline at end of file diff --git a/docs/docs/backup.md b/docs/docs/backup.md new file mode 100644 index 0000000000..03fd1b294a --- /dev/null +++ b/docs/docs/backup.md @@ -0,0 +1,48 @@ +# Backing up the RMM + +A backup script is provided for quick and easy way to backup all settings into one file to move to another server. + +Download the backup script: +```bash +wget https://raw.githubusercontent.com/wh1te909/tacticalrmm/master/backup.sh +``` + +Edit `backup.sh` with your text editor of choice. + +Change the postgres username/password at the top of the file. +You can find this info in the following file: +``` +/rmm/api/tacticalrmm/tacticalrmm/local_settings.py +``` + +Look for this section and grab the USER / PASSWORD: +```python +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.postgresql', + 'NAME': 'tacticalrmm', + 'USER': 'someusername', + 'PASSWORD': 'somepassword', + 'HOST': 'localhost', + 'PORT': '5432', + } +} +``` + +From the Web UI, click **Tools > Server Maintenance** + +Choose **Prune DB Tables** from the dropdown and check the `Audit Log` and `Pending Actions` checkboxes, and then click **Submit** + +Doing a prune first before running the backup will significantly speed up the postgres vacuum command that is run during backup. + +Run the backup script + +```bash +chmod +x backup.sh +./backup.sh +``` + +The backup tar file will be saved in `/rmmbackups` with the following format: + +`rmm-backup-CURRENTDATETIME.tar` + diff --git a/docs/docs/faq.md b/docs/docs/faq.md index 52e454e1f2..7586219149 100644 --- a/docs/docs/faq.md +++ b/docs/docs/faq.md @@ -3,7 +3,7 @@ #### How do I do X feature in the web UI? Alot of features in the web UI are hidden behind right-click menus; almost everything has a right click menu so if you don't see something, try right clicking on it. -#### Where are the linux / mac agents? +#### Where are the Linux / Mac agents? Linux / Mac agents are currently under development. #### I am locked out of the web UI. How do I reset my password? @@ -13,9 +13,9 @@ SSH into your server and run these commands: !!!note The code below will reset the password for the account that was created during install. To reset a password for a different user, you should use the web UI (see the next question below), but can also do so through the command line by replacing
- `user = User.objects.first()`
+ `#!python user = User.objects.first()`
with
- `user = User.objects.get(username='someuser')` + `#!python user = User.objects.get(username='someuser')`
in the code snippet below. diff --git a/docs/docs/images/autoagentupdate.png b/docs/docs/images/autoagentupdate.png new file mode 100644 index 0000000000000000000000000000000000000000..b0b4aad8327cacfc4a4fb03223ecd8416dedda41 GIT binary patch literal 11820 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

=2D{LJj^Y+{L%v|u(P z?uhB4R*7dPz*!8q^s{7wYMj4UJL|_8iihQ6K0ot6Tg$EDyz@YG3I8VOJ~3ezRG{C! zaA0c62h$B}X^{cPEbFPJv8tyCr1DM0JZ4L@*5dZ9aEr;WDXt}zh#ie6Hu;*2QG~Lf zE*7IDt5Q4JIE4)<$;f^z?rn?}?@U#@d=J2e)|Zt%Y18CDs%UG+ee~I?9OG&-pI|9? z5%J)uhnuJ8)TWE7^5G}9#IoC!wC5uAMMY|OThi0LUxf=Fa#vL>YhUL*OCrJoEr~rV zqum>~h_;IwrRCrsAe$Z^&$9|OO8AWFB%fA)Fnmq+3os>Kf8Xonp3=DjHk)7v=`<1N znM|)azqX-?iCV7%Yl2s>K_*jEQ;A)EJ|pXVTz$n300rcG54Ukd*ZlDl5e3rR@))|O z9x8_HHa_lI*6{dvgKGmlj!6bAPy|khJ$UUg>Q(vHgUC^Ou^nL3@Y?G!Vwb;$Wo2cz z*Wi~?9lo+eAdsPDgHa!Vg+@k3n8)%_wCr451$lX^YioG^#sJ_?1mHM$@it#Ty}Z0U zJw1!B8GEsC?hwAc!~%h;)jfW5!V8W6mLFVHfNR2nT#PR}qDf?M({Y0^4} zM?eNUR0bM!SEd%>2#+k1{af3W(`K$th7z?WSdN6 zW$5F<#2!5ZZUX0Q8mP^jQhL8Ud>=?iz^u=LH^C5ex0~7OJ9J&iZ0&%e2MJ^6o6k5GEvBb0Lv~k3J6dzZ| zjk0UplQuI`|4E*|wp~z0kFjOMRg#Y`Q)R<_6r^#-_5`l2UGX9;m9Ro*yOL=VH()5k z5mw9j`$uQs$6<)OYgp=Y8+&lK-k17-_7Bdqsk3jlcm>1+G& zpxs@A2X^^x$@%Zy?;qXoRA3ZVlQT)Q43Q|cEwSsg%BByo1M9NVfAG|~ef#nKq6}bx zx1W8n!O*waovm-prWl|OP4MOoKP6_)=ShFLDJUzp$0Smt0zA282DX6wN3In-;NPF$;rxSe+wVS<7& zOl;_exO`(>#J+4-cOyRoc4CAgBJ zhdt?hB`#KjQ%NfuR&BQ7$f0*{FX1B z3RMxlK7Fo#aN0EMTq%ool^oO+G-eSZsX)^Xnr+;2`g}eLYa-pr+YOO-DJb7dJ-SR+ zHBFAR8F_D7WgP)s@N+ zEVeIXc$r4iPB?VzbYqBahuc}`GM|xe({oo}Rj6_APc4|ctBF2WRg{m46u5LBR4E$H z`judc&{GhF%?ek0SQ|Cbo)AR3Drd(FMhMyyPK}S^zB)Z2FPCv}7n(6VkkdgW=oJ;c zq;a8U>NZ|qbJnee2P$$u5W!YlS1A;n5yXf}+FcECAL6;c7@AM-aY<&SF_xT;0=&E~ z#p!+|?Qh>wK||a%RtygE)nI3X!ROIW>mV+h#S#bSM~Uhq=|YSGCKE*t-+Tz63)gwY zf?*pxT>3R?5epjvb7Ge}i2~%#>ZR^CH@iowt{=-jlW%3u*1a=ZQgdjR(j$l0Yb`K{ ze6N>hBe}-=>{XJV5^bV zbJjic0y(`G0$z&nTy2{J%9&(g2c;CW0$M|R=Zj=MwVn;T7)g*rp5N*=BF@6D$nj*q zpL#Aiaz((S(7jvf_{JfnetvPo#MHW(?&^B+hP-0DMqpFsd=?L3z4yK42l^R2 zvHN?{weGX#FTpdNHKW%APRpN#w|{MMXAoe_JGTEwi8vOhHK=kP$v-tMM%=mNm2O2V z=%TamSu0HUSIYDqnhg*{G~Dy0>va$t<4mhG^H3iHCBf&~kx4Z6pX*(r^vL!xfO$?ReW3yj&qp{_x9-eXiJ$kXuj_#Ps5 zzoKu@%w%NCJryxx3Sf197ZNu|)uMz2jeJ)YbUONhSq$|N=UZX)oy5Z#CWIJl6yqd*CT{nspEflR? z_bSd#&k&RuK~qe8jEQf48g1^StJK*2>i8$(Gx>aQhmmoc0HZ-wqOm}9jo}cgqxf0L z0}1vnM54}okSVX7&N=+yY3qItOPcG>>9f5$v@|PZkuMVS#^OoaT~$Ho#c)C&G(ah* z>6ca|L%M!1Hz_`TwSWoHV(&KiqyFP&pUV?&4;R)`jJFNU?uZ)H=0D>s?oJwA@{RTLn); zxLrVP)Ry~`db~*Wt$D?ho47lZavC0zdauzx+K&4@U2m-BRSB|H7QWBW&c;UGR^5oi zs%tJeF<(=YmM1sEwrd|_A1Tq`pi!Csz9pAirF-_RNaGgeDk%%0v?4P^qK;LIcom@? z=3F0d9PDi&ptlo}6XzUoMql7nBb2iq>PkfZ=^w%M| zNtH=Vm#a^!4wIkyI}4|Ww<>uzRTeJWP7w(z9(;lhoD4g4e&ZEstSG&0LJnz0id;G& zIYwx6sZ{0f-LB@y6q(dp!>X4dF-}vqRjt8z7fCvwj*Ew<2*4r8);>H^xL1>f^jTQWTUG6vypX;M|m<0aF+9;-^ljC!P>wS7V-i-J1H<* zV6wx-R8AWyEW2te;)KSfd@!r_2giPS+wq}3Rs67Ps^TBr&py^E$sbSlja%S^4b^RB zJsUwYrN(?Lx=o zPkc2qFLc+ia55Nbq!I?+GOuY9Y#~I5G~B}x>*%a;h8NXshv0wO?8u@6poT}4;G zTuzJTpuOIJHkvuR)$r;~uW8&GJHXSbafsJXntOD`rElYM&Sdq{<((ELRm1=I1^3!+ zOpA^EFZzPDSti$zM?X0bkq>Qg^KkWzb7BvsY+WDKIlCWDqI7rijvTAb|5JD6nl5 zPu{*_5UZJ49jQ{H7rEP-$)7avS`VOt(MX$(NZ;J5)sU<7i?2m}k?th9el$|8f?2zFvMX zl4mew<%4I#8_I25s8>@MV@wjeub!AImxGuzJ!o>W8bIQHoc}C)8fRWFn?!HGHxUOl)biY#9yS8N%yKq zVs-_~jGQg5c;k!Xn_vBLS1VYFyXTVh1Kd#Mwv?bK>N+3*M1=ah6=U0O83o8fr1e^1 zl4haKoqE@Zc4lzOM@?4Y zNYCCqk-pMmG&ta>4M{_R#cIfHGqtBUe1A&m+@id%cHcQbSpIyD%s_zOq+099#jDA$ znhL)BDpJ3gxWNV5$Cg;w>ZWhCb(q_Ua$b9(et=Ghyy85o8`9S~z48;uB#?S<${hLv zoX#NHaEh!)FEb`9`I~R~3Kz_{rq)Df!JZEnEhh{7p$_J24%IR~LA2jq(zQaNJk|P3 z4`iH%vd`u-7VMCXoC_2Fds*6x&G!2eTzW1>q%Ll4UoR=`X61+KxJ$&ccNH~jP^0}F z=W?T|;=Hv+A4ga*qlh~vQ4f>&(1rxZDP`;a2f5D=pZJB-!dZC9k&f==vDRTMe{l&d z`(<{5^`;lSqK~lpmHbel)%JmBZqTdPvXCw=d8HFJuww1ihhdQRixYs*TV{R|dWOl> zZ+@p&nB5T_A*NupyVB~8&Wa-Z9~MmYKJ!eubIy6~apwUq>}{;^B+eWXEOjK)iW2 zqp~@W9hLs+ngDlMBM$2Y&1q{DZT?}@rHwd7U@JW}r=C7M?NuJ+`YCgM>9rZ#eOXyM zFx$;qR=-52N$rbF;ziZg>Llu`gPVZx@CC^38SRqU0&yc41ZOTNoq&|zc^K-vORvco zbeFo!83kq9Sy4z9#;UJziYMRUCy`;(cdv&tqG3%7{u{paZ_J`*&UjOSi~oofOgr*F zpPk1)Bv;z@GY+7qK zFb2*K=ajs^g_4poJ8%w7M{YHsNBAFc@WGkhTz5ui?7gCv!HuN1nu8`G)Fg)7tc-lN zG|x4o6zlP6YyEp}KMET7jK+lks?Q@b3V0y!eg<57RZCXV4*ex|b+TyRc6E6k=nJUAkDrv&evt-5J43^X>Dt%8HD`TK zcPc6?x5i5uMa155L88V1Y2L@jN2J<)W0d{5|DW4hEv>C&{1C zO+@R*Mi<((=($~-yrQ(3s&eY>?S)69H3-V;>O^7Lgxs)E%fiCKkD1N;%CI64#C-iu z6EgF7`gQ+%ESv&7j#Zexsb*Tuo4tj#;as#z@J8N~QdbbDGpvWp=4f*waX>vqjLNUh zsuN62O%3NU5p|jrkmX}_g}(;27!HS<*0@T`Q}P(ECOzY1DvYam`$fQR2-qGBm1v?p zjFD_r%o^DE?v;V`XOn)Hhhs3kQf1PHct(BSRy3{2sSKkA@D;=FbL+*=Z_m_|zuY6H6SF0u#e*|e(8c!Kac2i7 zKGD4OsT%b1CB8=UidEVgGw1qH@cj$f=@jo#w+ZXSK>RUN=f zg|Fo;*uE$AE6K6y019u*y# zY(whhrj7Jn5NNv8at>M{aQdCtFO8^BdB~{G_jsn-@A6C+smC07gfzRfZw(>(U3vZu zm^H0b-#x*BkUpTsdOYb+EPlEarAdFrjINmdg9Az~gWXK}OWVFAuu-+M@4^Sx01IHzI8Q|3ua9Ru9ef$J2V0nR zE66$Z*!qb5Po6n#6jzz~omxG;1p;|8WLkia1~#wGcg8#rwg67Fbi+6UANUX6o5coR z7o}N}1eAX|Hbx7z_3+sI?zY;@w*;4Er(R#IOpd;^MI&?zfMWQzZAN(#0KY!KA^^gP z*%ECT+~40%dAr|bcCkP?nIh`G{?(=F^x~kOQv{TmuF+mqX0mcZ^d}by;+R>Z3sVpz*n0Lus}7LRMLP4gK&R4)c-2`QW*gp z{%yCj2lyUP2+_ZX%m1Bm!oPU-KZXxL-$VOjDkH#3ue(vG`uci+zG-M^2=MV))ROMg z(tO+HT1gM3t9!NBKA0&VczL71sJaM=FFLjEsze0!IMY zv~$&bSCTy^Cnr5N$4O}EzTq0GX=;Arl1F!P2K*42@hHH-c^4LO7QSk#@eqkhETRTUklon`x$kqY6G$8y=04#m7DE;ga z93g+S2qSw5cnJ`{1P2EL(L*=|H@*z3%4bRcrtZqhF#zOsizqDd)geW1F~8P^5w#0Q zw?Z_Tp<;n?0st#z3fAzfF{U?1ss{Pq!HMH6G6zK_K4q zE!YoCYFyLBS}7hw9@!;Vn74)~#<6V8H8c;8gquL8%RVbXyc6wH563?Y&&tc&4_5W_ zYbuZpzwcBZaA9z7*7w+?JShv)ZLQ;_UzDxuRJrx^&TkVi0C*~+916h6g#0algdqk& zsY+D)OsW{6uN%c;4@Cx|Rjj&Vna}E9uk<~f^BXeg1Kzi>zFuKESS4-_U`ujUa>q$& z)2u3_Xg{I2=E8)zG7>n25wxwPv>iaa2ZW`DIyzZhjrsX@0AK)(D=qLvI#X~DEZ4=Qe#x!QmgQRv(M@uG{QmpikKM_=A;-2{Cz zcqq@c@*an70J8G!Jr-n}%cQOXFx*e%Lm>J$f!e^zExSkor7OBao#nig1F$nstp&iu zeC@y6pZ?Z{^)I@!{`2&c@}x*$C9TZ-D6sc0TX6ttOMZT*{{PLI76W!7l>^$bzJ0!d z>UtG0A^gJxtUAznS6UwQ?LG+AWfh=!>@#;h(Oi^tb&(%x#zDoZWr1Ew+pD?r=N2o+ zmdlCerbIr*=zIC|qgc|Opl`N;m?bWusaf|ilSO;qdvNM)x=QTio1jd5cwG6o&N}KTNFShf{$3(FQH}mqUU6-%m4$YV5-k#RkcdbFtcdhca>Dyiob1 ziaOnq{BkO}LRWh&*=NlJGyps#=%h1<3c`RQ*n!-(b(bcN^tPeY(YOD5haz8W1exWH z2`tp7654l$=toCUi#PfT)4cpjtjD2tqTym@ z_RQh!&K`9_;M&hMQRZ45^qvc{&q1Gx!$_G_u8o<@lFY=8Xhn$391ODfs9B!m%eo=( zq2XAua_hEXmRy|AUp*TxE-n@p7Sht+fzuOcfptFx)5*O=1&w;)4+6jez?JU)e&VAJ zBxa=gM>LtRl9{oS_8SNJW14f$me8mKA>m3-l*t`R!8#R7{%(12wfj-QoTtg7;_bS# z=+{Iad3iM*6Sn;QAaNQo`9Bvq5~l73|K3Tt4rq@HM6}NT7?K}+%P>po;LX2IVoA!9 zGBOwpqY$4G5^NqV4nr$8?)ZA78-9xR9gKHf%}zG!;#-pQ_q$FEwtYM@UmsQ`3K_C| z&tkM4RQ|wVVE2#h4SOd8cH*`b;qT_8R@{H)Hx^$T@bRpVi=EwCFaf2T8xYg&6B_-n4bE~O0#Fo4 zODg=Yua=jsAE-8WPc-^eM*$&&ww~wez#{_M75Kq|k3PpneVvc@@h?eyg0Dds#@xZ9 zg$rf0>SINk+-}H{_zvCG8M`3|N)s9yVLuVY$~x0Y4!ip$ep6pyV|* zZuYwrKc3E%;{VX-a}1&7mavqBkb+Sp`yAD5nmqvAQjKF!2^e(>HkzkEi~$6w!v<=m zrYWxzFD~A4=T^KKIy$MKox6F{`}|C)s7k!Cma7rd8Mma;(X^YAOa9gvO}-=UU)bBG zVg;V}1fQ#o^!XnsQ<{ghKtb(fj4#1uaALKQS`*4VJhuEf1!)Sq!B{ImZ#W{6c6UDn zXv3-fIJXJp75h8E>-kNT#^(PeQIZb*2T{Hrhf3UOJXJ5DUAaY{Qe;$lj%cH@1wWyo z(wdjtsN@bTz48>OXg8ZYh5cDo%sd|I#(ixdb69p}D+e=g0@V{a{IdJhKoU>~bY%en zmG#9xq`*<5;y~-7t?Rdr0%k^(W}0BPrm?XYAo?U#BppYO*~>ypGiD^LM)7kH=_m<) z<;7cgp)IMz3X^$GQMJtBPl%hB0Tge?V=U|bjU&CNWzoRDd>Al+kdTnQ7s;mjXV=Z~ zQh@HPP;k5NuK*Q>ARcEN3uu;vgjZBoPkns8nzyio!35J6*zHvS7kM2l1HCa+{MNRb z(6>)~Sr#<3u~mlCdk!gxpWF3Q;m^a2-(;I-v^xh!iRKaUtY$%?*?~_8|NgBkRC{X`Yv&ovph>YbI>`;%mWIYTg>q(U~3n%C1TJB4J>b1YL zHC649A^G;CCPo8?fJA~rVm{-cR^dqourQ+n9?Oaihyp#o{k+=ecsr?rcCGEWsMA7hcy%MZ&8OeQ z*(7Pl_k~a%=49mpo*Dr75b9$c4^@O?yR2!&rIx!zK_;@pPcE?=$|Z~=iH%(|O!d7V zCuxIlU05qd)_#db7>F11%7@P*(|xxKq-?;GDS{60h^(n= zqP1-01WQtUH+n@*jpb4(MhP3gHoPnrtCk%0auR1^yILfKLQ%iS*lVwi^7RlDDrW%D z+{;_s^06C)ZNNVLomk{Xp;zz zZy5hTyd&gJ1bYeX9}j&21{3@>jsJIYdk+xl--xUvDM|LA;M+fQBs%H*Yc}gWmW5Xg zg0#Q=9C%8&YGvZ<>kb!Fh0oy~A4Xh%ljQH`2%&#d=-ky&^}*Fx>>L;P6CdMB$%uiV zAyG9Ym|>L+bYHh5$+(?s<>}mM6w928?}pLb#j^1Al!#QXjs@CMFv$f6IMxPgJd1O4 zICF(|_;mVtU0km~?bHTpQ5LU@SmyW=qh80Rd0iSz1xA71JqE$~c}luG8%PA`K<$M8 zB8~bp{oEQ}4m1D*+JrS&KANr&XfeD`AqJ$S|J0lQpQE4uSMN~x%r}3Hb(yE{VVLtx R1&E74in40Yi)3B|{2$UdR2cvO literal 0 HcmV?d00001 diff --git a/docs/docs/restore.md b/docs/docs/restore.md new file mode 100644 index 0000000000..2acb3ace74 --- /dev/null +++ b/docs/docs/restore.md @@ -0,0 +1,37 @@ +# Restore + +!!!info + It is currently not possible to restore to a different domain/subdomain, only to a different physical or virtual server. + +#### Prepare the new server +Create the same exact linux user account as you did when you installed the original server. + +Add it to the sudoers group and setup the firewall. + +Refer to the [installation instructions](install_server.md) for steps on how to do all of the above. + +#### Change DNS A records +Open the DNS manager of whever your domain is hosted. + +Change the 3 A records `rmm`, `api` and `mesh` and point them to the public IP of your new server. + +#### Run the restore script + +Copy the backup tar file you created during [backup](backup.md) to the new server. + +Download the restore script. + +```bash +wget https://raw.githubusercontent.com/wh1te909/tacticalrmm/master/restore.sh +``` + +Edit the restore script with your editor of choice and change the postgres username/password at the top of the file. + +Refer to the [backup](backup.md) instructions on where to find this info. + +Copy the backup tar file to the new server and then call the update script, passing it the backup file as the first argument: + +```bash +chmod +x restore.sh +./restore.sh rmm-backup-XXXXXXXXX.tar +``` diff --git a/docs/docs/update_agents.md b/docs/docs/update_agents.md new file mode 100644 index 0000000000..d9a6f62095 --- /dev/null +++ b/docs/docs/update_agents.md @@ -0,0 +1,39 @@ +# Updating Agents + +!!!warning + The agent's version is directly tied to the RMM's version.

+ For example, currently RMM version 0.4.17 is compatible with agent version 1.4.6 and lower.

+ You should never attempt to manually update an agent to a newer version without first making sure your RMM is on the latest version. + +#### Updating from the Web UI +Agents will automatically self update themselves if you have auto self update enabled in **Settings > Global Settings**

+![autoagentupdate](images/autoagentupdate.png) + +There is a background job that runs every hour, at 35 minutes past the hour and sends any online agents an update command if it detects they are on an older version.

+ +You can also trigger this background job to run on demand by clicking **Agents > Update Agents** in the web UI:

+![manualagentupdate](images/manualagentupdate.png) + +You can individually choose which agents to update, or simply Select All.

+The RMM will automatically skip any agents that don't need updating.

+You can trigger this manual agent update anytime you want. It is safe to spam, and won't run if an agent update task is already running.

+It will also make sure agents update to the correct version, in case they are an older version that cannot be directly upgraded to the latest version.

+For example, agents older than version 1.3.0 must first be updated to 1.3.0 before they can go any further.
+ +
+ +#### Manually updating from the command line on the agent + +You should never need to do this but might be needed to troubleshoot agents that are not updating automatically.
+ +Download the `winagent-vX.X.X.exe` executable from the [github releases page](https://github.com/wh1te909/rmmagent/releases) and place it somewhere on the filesystem.
+ +Open CMD as admin and call the exe like so: + +``` +C:\Windows\Temp>winagent-vX.X.X.exe /VERYSILENT /LOG=agentupdate.txt +``` + +This command will return immediately since it spawns a background process to run the update.
+The agent will take around 30 seconds to fully update.

+You can check the `agentupdate.txt` log file that is created for troubleshooting.

diff --git a/docs/docs/update_server.md b/docs/docs/update_server.md new file mode 100644 index 0000000000..73b1620fbb --- /dev/null +++ b/docs/docs/update_server.md @@ -0,0 +1,27 @@ +# Updating the RMM + +!!!danger + Do __not__ attempt to manually edit the update script or any configuration files unless specifically told to by one of the developers.

+ Since this software is completely self hosted and we have no access to your server, we have to assume you have not made any config changes to any of the files or services on your server, and the update script will assume this.

+ You should also **never** attempt to automate running the update script via cron.

+ The update script will update itself if needed to the latest version when you run it, and them prompt you to run it again.

+ Sometimes, manual intervention will be required during an update in the form of yes/no prompts, so attempting to automate this will ignore these prompts and cause your installation to break. + +SSH into your server as the linux user you created during install.

+__Never__ run any update scripts or commands as the `root` user.
This will mess up permissions and break your installation.

+Download the update script and run it:
+```bash +tactical@tacrmm:~$ wget https://raw.githubusercontent.com/wh1te909/tacticalrmm/master/update.sh +tactical@tacrmm:~$ chmod +x update.sh +tactical@tacrmm:~$ ./update.sh +``` + +
+ +If you are already on the latest version, the update script will notify you of this and return immediately.

+You can pass the optional `--force` flag to the update script to forcefully run through an update, which will bypass the check for latest version.
+```bash +tactical@tacrmm:~$ ./update.sh --force +``` +This is usefull for a botched update that might have not completed fully.

+The update script will also fix any permissions that might have gotten messed up during a botched update, or if you accidentally ran the update script as the `root` user. \ No newline at end of file diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index 4b8fdac702..303d3df9f9 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -5,6 +5,11 @@ nav: - "Traditional Install": install_server.md - "Docker Install": install_docker.md - Agent Installation: install_agent.md + - Updating: + - "Updating the RMM": update_server.md + - "Updating Agents": update_agents.md + - Backup: backup.md + - Restore: restore.md - FAQ: faq.md - License: license.md site_description: "A remote monitoring and management tool" From 2398773ef0126778b093b26d4762b94464057d92 Mon Sep 17 00:00:00 2001 From: wh1te909 Date: Wed, 24 Feb 2021 03:33:39 +0000 Subject: [PATCH 03/21] moar docs --- docs/docs/faq.md | 2 ++ docs/docs/install_agent.md | 17 +++++++++++- docs/docs/install_server.md | 6 ++-- docs/docs/mesh_integration.md | 28 +++++++++++++++++++ docs/docs/troubleshooting.md | 52 +++++++++++++++++++++++++++++++++++ docs/docs/update_server.md | 25 ++++++++++++++++- docs/mkdocs.yml | 4 +++ 7 files changed, 129 insertions(+), 5 deletions(-) create mode 100644 docs/docs/mesh_integration.md create mode 100644 docs/docs/troubleshooting.md diff --git a/docs/docs/faq.md b/docs/docs/faq.md index 7586219149..6a0060af09 100644 --- a/docs/docs/faq.md +++ b/docs/docs/faq.md @@ -6,6 +6,8 @@ Alot of features in the web UI are hidden behind right-click menus; almost every #### Where are the Linux / Mac agents? Linux / Mac agents are currently under development. +#### Can I run Tactical RMM locally behind NAT without exposing anything to the internet? +Yes, you will just need to setup local DNS for the 3 subdomains, either by editing host files on all your agents or through a local DNS server. #### I am locked out of the web UI. How do I reset my password? SSH into your server and run these commands: diff --git a/docs/docs/install_agent.md b/docs/docs/install_agent.md index 43cb9190ec..fc91275ed9 100644 --- a/docs/docs/install_agent.md +++ b/docs/docs/install_agent.md @@ -48,4 +48,19 @@ To create a deployment, from the web UI click **Agents > Manage Deployments**.
You can then move the agent into the correct client/site from the web UI after it's been installed. -Copy/paste the download link from the deployment into your browser. It will take a few seconds to dynamically generate the executable and then your browser will automatically download the exe. \ No newline at end of file +Copy/paste the download link from the deployment into your browser. It will take a few seconds to dynamically generate the executable and then your browser will automatically download the exe. + + +#### Optional installer args + +The following optional arguments can be passed to any of the installation method executables: + +``` +-log debug +``` +Will print very verbose logging during agent install. Usefull for troubleshooting agent install. + +``` +-silent +``` +This will not popup any message boxes during install, either any error messages or the "Installation was successfull" message box that pops up at the end of a successfull install. \ No newline at end of file diff --git a/docs/docs/install_server.md b/docs/docs/install_server.md index 69b4751cc4..93637732fe 100644 --- a/docs/docs/install_server.md +++ b/docs/docs/install_server.md @@ -7,7 +7,7 @@ The provided install script assumes a fresh server with no software installed on it. Attempting to run it on an existing server with other services **will** break things and the install will fail.

The install script has been tested on the following public cloud providers: DigitalOcean, Linode, Vultr, BuyVM (highly recommended), Hetzner, AWS, Google Cloud and Azure, as well as behind NAT on Hyper-V, Proxmox and ESXi. -- A real domain is needed to generate a Let's Encrypt cert.
If you cannot afford to purchase a domain ($12 a year) then you can get one for free at [freenom.com](https://www.freenom.com/)

+- A real domain is needed to generate a Let's Encrypt wildcard cert.
If you cannot afford to purchase a domain ($12 a year) then you can get one for free at [freenom.com](https://www.freenom.com/)

- A TOTP based authenticator app. Some popular ones are Google Authenticator, Authy and Microsoft Authenticator.

@@ -58,7 +58,7 @@ ufw allow from X.X.X.X to any port 22 Enable and activate the firewall ``` -ufw enable && sudo ufw reload +ufw enable && ufw reload ``` #### Create the A records @@ -95,7 +95,7 @@ Answer the initial questions when prompted. Replace `example.com` with your doma ![questions](images/install_questions.png) -Deploy the TXT record in your DNS manager: +#### Deploy the TXT record in your DNS manager: !!!warning TXT records can take anywhere from 1 minute to a few hours to propogate depending on your DNS provider.
diff --git a/docs/docs/mesh_integration.md b/docs/docs/mesh_integration.md new file mode 100644 index 0000000000..d493d5bfff --- /dev/null +++ b/docs/docs/mesh_integration.md @@ -0,0 +1,28 @@ +# MeshCentral Integration + +#### Overview + +Tactical RMM integrates with [MeshCentral](https://github.com/Ylianst/MeshCentral) for the following 3 functions: + +- Take Control +- Real time shell +- Real time file browser + +At some point in the future, these functions will be directly built into the Tactical Agent, removing the need for MeshCentral. + +It should be noted that Tactical RMM and MeshCentral are 2 completely separate products and can run independently of each other. + +They do not even have to run on the same box, however when you install Tactical RMM it simply installs meshcentral for you with some preconfigured settings to allow integration. + +It is highly recommended to use the MeshCentral instance that Tactical installs, since it allows the developers more control over it and to ensure things don't break. + +#### How does it work + +MeshCentral has an embedding feature that allows integration into existing products. + +See *Section 14 - Embedding MeshCentral* in the [MeshCentral User Guide](https://info.meshcentral.com/downloads/MeshCentral2/MeshCentral2UserGuide.pdf) for a detailed explanation of how this works. + +The Tactical RMM Agent keeps track of your Mesh Agents, and periodically interacts with them to synchronize the mesh agent's unique ID with the tactical rmm database. + +When you do a take control / terminal / file browser on an agent using the Tactical UI, behind the scenes, Tactical generates a login token for meshcentral's website and then "wraps" MeshCentral's UI in an iframe for that specific agent only, using it's unique ID to know what agent to render in the iframe. + diff --git a/docs/docs/troubleshooting.md b/docs/docs/troubleshooting.md new file mode 100644 index 0000000000..2dfc09495c --- /dev/null +++ b/docs/docs/troubleshooting.md @@ -0,0 +1,52 @@ +# Troubleshooting + +#### "Bad credentials" error when trying to login to the Web UI + +If you are sure you are using the correct credentials and still getting a "bad credentials" error, open your browser's dev tools (ctrl + shift + j on chrome) and check the Console tab to see the real error. + +It will most probably be a CORS error which means you need to check your DNS settings and make sure whatever computer you're trying to access the UI from resolves your 3 subdomains to the correct IP of the server running the RMM (public IP if running in the cloud, or private IP if running behind NAT). + +If you see an error about SSL or certificate expired, then your Let's Encrypt cert has probably expired and you'll need to renew it. + +Refer to the Let's Encrypt cert renewal instructions [here](update_server.md#keeping-your-lets-encrypt-certificate-up-to-date) + +
+ +#### Agents not updating + +The most common problem we've seen of agents not updating is due to Antivirus blocking the updater executable. + +Windows Defender will 100% of the time block the updater from running unless an exclusion is set. + +Refer to the [Agent Installation](install_agent.md) instructions for AV exceptions to set and manually doing an agent update with logging to trouleshoot further. + +Agents will also not automatically update if they are too old. + +Since Tactical RMM is still in alpha and the developers makes breaking changes pretty frequently, there is no promise of backwards compatibility. + +If you have agents that are relatively old, you will need to uninstall them manually and reinstall using the latest version. + +
+ +#### Agents not checking in or showing up / General agent issues + +Open CMD as admin on the problem computer and stop the agent services: + +```cmd +net stop tacticalagent +net stop tacticalrpc +``` + +Run the tacticalagent service manually with debug logging: +```cmd +"C:\Program Files\TacticalAgent\tacticalrmm.exe" -m winagentsvc -log debug -logto stdout +``` + +Run the tacticalrpc service manually with debug logging: +```cmd +"C:\Program Files\TacticalAgent\tacticalrmm.exe" -m rpc -log debug -logto stdout +``` + +This will print out a ton of info. You should be able to see the error from the debug log output. + +Please then copy/paste the logs and post them either in our [Discord support chat](https://discord.gg/upGTkWp), or create a [github issue](https://github.com/wh1te909/tacticalrmm/issues). \ No newline at end of file diff --git a/docs/docs/update_server.md b/docs/docs/update_server.md index 73b1620fbb..a38773d3ce 100644 --- a/docs/docs/update_server.md +++ b/docs/docs/update_server.md @@ -1,5 +1,7 @@ # Updating the RMM +#### Updating to the latest RMM version + !!!danger Do __not__ attempt to manually edit the update script or any configuration files unless specifically told to by one of the developers.

Since this software is completely self hosted and we have no access to your server, we have to assume you have not made any config changes to any of the files or services on your server, and the update script will assume this.

@@ -24,4 +26,25 @@ You can pass the optional `--force` flag to the update script to forcefully run tactical@tacrmm:~$ ./update.sh --force ``` This is usefull for a botched update that might have not completed fully.

-The update script will also fix any permissions that might have gotten messed up during a botched update, or if you accidentally ran the update script as the `root` user. \ No newline at end of file +The update script will also fix any permissions that might have gotten messed up during a botched update, or if you accidentally ran the update script as the `root` user. + +
+ +#### Keeping your Let's Encrypt certificate up to date + +!!!info + Currently, the update script does not automatically renew your Let's Encrypt wildcard certificate, which expires every 3 months, since this non-trivial to automate using the DNS TXT record method. + +To renew your Let's Encrypt wildcard cert, run the following command, replacing `example.com` with your domain and `admin@example.com` with your email: + +```bash +sudo certbot certonly --manual -d *.example.com --agree-tos --no-bootstrap --manual-public-ip-logging-ok --preferred-challenges dns -m admin@example.com --no-eff-email +``` + +Same instructions as during install for [verifying the TXT record](install_server.md#deploy-the-txt-record-in-your-dns-manager) has propogated before hitting Enter. + +After this you have renewed the cert, simply run the `update.sh` script, passing it the `--force` flag. + +```bash +./update.sh --force +``` \ No newline at end of file diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index 303d3df9f9..3ee6368b43 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -10,7 +10,11 @@ nav: - "Updating Agents": update_agents.md - Backup: backup.md - Restore: restore.md + - Troubleshooting: troubleshooting.md - FAQ: faq.md + - Functionality: + - "Alerting": alerting.md + - MeshCentral Integration: mesh_integration.md - License: license.md site_description: "A remote monitoring and management tool" site_author: "wh1te909" From 8d084ab90a66403414f0f4c9b9ed2dda3842abaa Mon Sep 17 00:00:00 2001 From: sadnub Date: Tue, 23 Feb 2021 23:45:08 -0500 Subject: [PATCH 04/21] docker dev changes --- .devcontainer/entrypoint.sh | 2 +- .devcontainer/requirements.txt | 56 ++++++++++++---------------------- 2 files changed, 21 insertions(+), 37 deletions(-) diff --git a/.devcontainer/entrypoint.sh b/.devcontainer/entrypoint.sh index 5255f58b2f..1c514e1f29 100644 --- a/.devcontainer/entrypoint.sh +++ b/.devcontainer/entrypoint.sh @@ -126,7 +126,7 @@ if [ "$1" = 'tactical-init-dev' ]; then test -f "${TACTICAL_READY_FILE}" && rm "${TACTICAL_READY_FILE}" # setup Python virtual env and install dependencies - ! test -e "${VIRTUAL_ENV}" && python -m venv --copies ${VIRTUAL_ENV} + ! test -e "${VIRTUAL_ENV}" && python -m venv ${VIRTUAL_ENV} "${VIRTUAL_ENV}"/bin/pip install --no-cache-dir -r /requirements.txt django_setup diff --git a/.devcontainer/requirements.txt b/.devcontainer/requirements.txt index 5904a1fbdf..d9478e3df8 100644 --- a/.devcontainer/requirements.txt +++ b/.devcontainer/requirements.txt @@ -1,40 +1,24 @@ # To ensure app dependencies are ported from your virtual environment/host machine into your container, run 'pip freeze > requirements.txt' in the terminal to overwrite this file -amqp==5.0.5 -asgiref==3.3.1 -asyncio-nats-client==0.11.4 -billiard==3.6.3.0 -celery==5.0.5 -certifi==2020.12.5 -cffi==1.14.5 -chardet==4.0.0 -cryptography==3.4.6 -decorator==4.4.2 -Django==3.1.7 -django-cors-headers==3.7.0 -django-rest-knox==4.1.0 -djangorestframework==3.12.2 -future==0.18.2 -kombu==5.0.2 -loguru==0.5.3 -msgpack==1.0.2 -packaging==20.8 -psycopg2-binary==2.8.6 -pycparser==2.20 -pycryptodome==3.10.1 -pyotp==2.6.0 -pyparsing==2.4.7 -pytz==2021.1 -qrcode==6.1 -redis==3.5.3 -requests==2.25.1 -six==1.15.0 -sqlparse==0.4.1 -twilio==6.52.0 -urllib3==1.26.3 -validators==0.18.2 -vine==5.0.0 -websockets==8.1 -zipp==3.4.0 +asyncio-nats-client +celery +Django +django-cors-headers +django-rest-knox +djangorestframework +loguru +msgpack +psycopg2-binary +pycparser +pycryptodome +pyotp +pyparsing +pytz +qrcode +redis +twilio +packaging +validators +websockets black Werkzeug django-extensions From 2497675259b7e317e9ba8e81ed6909c1e1c378c2 Mon Sep 17 00:00:00 2001 From: sadnub Date: Tue, 23 Feb 2021 23:45:37 -0500 Subject: [PATCH 05/21] UI changes for AddAutomated Task and ScriptCheck models --- web/src/components/modals/checks/ScriptCheck.vue | 4 ++-- .../components/modals/tasks/AddAutomatedTask.vue | 15 +++++++++++---- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/web/src/components/modals/checks/ScriptCheck.vue b/web/src/components/modals/checks/ScriptCheck.vue index f202f34cd0..2c19080cc7 100644 --- a/web/src/components/modals/checks/ScriptCheck.vue +++ b/web/src/components/modals/checks/ScriptCheck.vue @@ -50,7 +50,7 @@ - + @@ -254,6 +254,15 @@ export default { this.notifyError("Unable to get policy checks"); }); }, + step2() { + if (this.step1Done) { + this.$refs.stepper.next(); + } else { + if (!this.autotask.script) this.notifyError("Script field is required"); + else if (!this.autotask.name) this.notifyError("Name field is required"); + else if (!this.autotask.timeout) this.notifyError("Timeout field is required"); + } + }, }, computed: { ...mapGetters(["selectedAgentPk"]), @@ -270,9 +279,7 @@ export default { return r.sort((a, b) => a.label.localeCompare(b.label)); }, step1Done() { - return this.step > 1 && this.autotask.script !== null && this.autotask.name && this.autotask.timeout - ? true - : false; + return !!this.autotask.script && !!this.autotask.name && !!this.autotask.timeout ? true : false; }, step2Done() { if (this.autotask.task_type === "scheduled") { From c32cbbdda669696576a1decfe9897ed738e8dc1b Mon Sep 17 00:00:00 2001 From: sadnub Date: Tue, 23 Feb 2021 23:53:44 -0500 Subject: [PATCH 06/21] check run tests and agent alert actions tests --- api/tacticalrmm/agents/models.py | 2 +- api/tacticalrmm/alerts/models.py | 4 - api/tacticalrmm/alerts/tests.py | 148 +++++- api/tacticalrmm/automation/tests.py | 8 +- api/tacticalrmm/checks/baker_recipes.py | 5 +- api/tacticalrmm/checks/tests.py | 605 +++++++++++++++++++++++- 6 files changed, 743 insertions(+), 29 deletions(-) diff --git a/api/tacticalrmm/agents/models.py b/api/tacticalrmm/agents/models.py index a005fdcd0b..21e04fdc12 100644 --- a/api/tacticalrmm/agents/models.py +++ b/api/tacticalrmm/agents/models.py @@ -775,7 +775,7 @@ def handle_alert(self, checkin: bool = False) -> None: # called when agent is offline else: - + # check if alert hasn't been created yet so create it if not Alert.objects.filter(agent=self, resolved=False).exists(): diff --git a/api/tacticalrmm/alerts/models.py b/api/tacticalrmm/alerts/models.py index d7773cb535..d888d5112d 100644 --- a/api/tacticalrmm/alerts/models.py +++ b/api/tacticalrmm/alerts/models.py @@ -112,10 +112,6 @@ def create_task_alert(cls, task): hidden=True, ) - @classmethod - def create_custom_alert(cls, custom): - pass - class AlertTemplate(models.Model): name = models.CharField(max_length=100) diff --git a/api/tacticalrmm/alerts/tests.py b/api/tacticalrmm/alerts/tests.py index 62c6eac603..8b048aa517 100644 --- a/api/tacticalrmm/alerts/tests.py +++ b/api/tacticalrmm/alerts/tests.py @@ -4,6 +4,7 @@ from django.conf import settings from django.utils import timezone as djangotime from model_bakery import baker, seq +from itertools import cycle from core.models import CoreSettings from tacticalrmm.test import TacticalTestCase @@ -717,8 +718,47 @@ def test_handle_agent_offline_alerts( Alert.objects.get(agent=agent_template_email).resolved_email_sent ) - def test_handle_check_alerts(self): - pass + + @patch("checks.tasks.sleep") + @patch("checks.tasks.handle_check_sms_alert_task.delay") + @patch("checks.tasks.handle_check_email_alert_task.delay") + @patch("checks.tasks.handle_resolved_check_email_alert_task.delay") + @patch("checks.tasks.handle_resolved_check_sms_alert_task.delay") + def test_handle_check_alerts(self, resolved_sms, resolved_email, outage_email, outage_sms, sleep): + + # create test data + agent = baker.make_recipe("agents.agent") + agent_no_settings = baker.make_recipe("agents.agent") + agent_template_email = baker.make_recipe("agents.agent") + agent_template_dashboard_text = baker.make_recipe("agents.agent") + agent_template_blank = baker.make_recipe("agents.agent") + + # create agent with template to always email on warning severity + alert_template_email = baker.make("alerts.AlertTemplate", is_active=True, check_always_email=True, check_email_alert_severity=["warning"]) + agent_template_email.client.alert_template = alert_template_email + agent_template_email.client.save() + + # create agent with template to always dashboard and text on various alert severities + alert_template_dashboard_text = baker.make("alerts.AlertTemplate", is_active=True, check_always_alert=True, check_always_text=True, check_dashboard_alert_severity=["info", "warning", "error"], check_text_alert_severity=["error"]) + agent_template_dashboard_text.client.alert_template = alert_template_dashboard_text + agent_template_dashboard_text.client.save() + + # create agent with blank template + alert_template_blank = baker.make("alerts.AlertTemplate", is_active=True) + agent_template_dashboard_text.client.alert_template = alert_template_blank + agent_template_dashboard_text.client.save() + + # create some checks per agent above + agents = [agent, agent_template_email, agent_template_dashboard_text, agent_template_blank, agent_no_settings] + diskspaces = baker.make_recipe("checks.diskspace_check", agent=cycle(agents), _quantity=5) + cpuloads = baker.make_recipe("checks.cpuload_check", agent=cycle(agents), _quantity=5) + memories = baker.make_recipe("checks.memory_check", agent=cycle(agents), _quantity=5) + pings = baker.make_recipe("checks.ping_check", agent=cycle(agents), _quantity=5) + scripts = baker.make_recipe("checks.script_check", agent=cycle(agents), _quantity=5) + + # update the agent checks to alert on everything + agent.agentchecks.update(email_alert=True, text_alert=True, dashboard_alert=True) + def test_handle_task_alerts(self): pass @@ -726,8 +766,108 @@ def test_handle_task_alerts(self): def test_override_email_settings(self): pass - def test_agent_alert_actions(self): - pass + + @patch("agents.models.Agent.nats_cmd") + @patch("agents.tasks.agent_outage_sms_task.delay") + @patch("agents.tasks.agent_outage_email_task.delay") + @patch("agents.tasks.agent_recovery_email_task.delay") + @patch("agents.tasks.agent_recovery_sms_task.delay") + def test_agent_alert_actions( + self, + recovery_sms, + recovery_email, + outage_email, + outage_sms, + nats_cmd + ): + + from agents.tasks import agent_outages_task + + # Setup cmd mock + success = { + "retcode": 0, + "stdout": "success!", + "stderr": "", + "execution_time": 5.0000 + } + + nats_cmd.side_effect = ["pong", success] + + # setup data + agent = baker.make_recipe("agents.overdue_agent", version=settings.LATEST_AGENT_VER) + failure_action = baker.make_recipe("scripts.script") + resolved_action = baker.make_recipe("scripts.script") + alert_template = baker.make("alerts.AlertTemplate", is_active=True, agent_always_alert=True, action=failure_action, action_timeout=30, resolved_action=resolved_action, resolved_action_timeout=35, resolved_action_args=["nice_arg"]) + agent.client.alert_template = alert_template + agent.client.save() + + agent_outages_task() + + # this is what data should be + data = { + "func": "runscriptfull", + "timeout": 30, + "script_args": [], + "payload": { + "code": failure_action.code, + "shell": failure_action.shell + } + } + + nats_cmd.assert_called_with(data, timeout=30, wait=True) + + nats_cmd.reset_mock() + + # Setup cmd mock + success = { + "retcode": 0, + "stdout": "success!", + "stderr": "", + "execution_time": 5.0000 + } + + nats_cmd.side_effect = ["pong", success] + + # make sure script run results were stored + alert = Alert.objects.get(agent=agent) + self.assertEqual(alert.action_retcode, 0) + self.assertEqual(alert.action_execution_time, "5.0000") + self.assertEqual(alert.action_stdout, "success!") + self.assertEqual(alert.action_stderr, "") + + # resolve alert and test + agent.last_seen = djangotime.now() + agent.save() + + url = "/api/v3/checkin/" + + data = { + "agent_id": agent.agent_id, + "version": settings.LATEST_AGENT_VER, + } + + resp = self.client.patch(url, data, format="json") + self.assertEqual(resp.status_code, 200) + + # this is what data should be + data = { + "func": "runscriptfull", + "timeout": 35, + "script_args": ["nice_arg"], + "payload": { + "code": resolved_action.code, + "shell": resolved_action.shell + } + } + + nats_cmd.assert_called_with(data, timeout=35, wait=True) + + # make sure script run results were stored + alert = Alert.objects.get(agent=agent) + self.assertEqual(alert.resolved_action_retcode, 0) + self.assertEqual(alert.resolved_action_execution_time, "5.0000") + self.assertEqual(alert.resolved_action_stdout, "success!") + self.assertEqual(alert.resolved_action_stderr, "") def test_check_alert_actions(self): pass diff --git a/api/tacticalrmm/automation/tests.py b/api/tacticalrmm/automation/tests.py index 0a0253b64e..1f13500964 100644 --- a/api/tacticalrmm/automation/tests.py +++ b/api/tacticalrmm/automation/tests.py @@ -505,12 +505,12 @@ def test_generating_agent_policy_checks(self): self.assertEqual(check.ip, checks[1].ip) elif check.check_type == "cpuload": self.assertEqual(check.parent_check, checks[2].id) - self.assertEqual(check.error_threshold, checks[0].error_threshold) - self.assertEqual(check.warning_threshold, checks[0].warning_threshold) + self.assertEqual(check.error_threshold, checks[2].error_threshold) + self.assertEqual(check.warning_threshold, checks[2].warning_threshold) elif check.check_type == "memory": self.assertEqual(check.parent_check, checks[3].id) - self.assertEqual(check.error_threshold, checks[0].error_threshold) - self.assertEqual(check.warning_threshold, checks[0].warning_threshold) + self.assertEqual(check.error_threshold, checks[3].error_threshold) + self.assertEqual(check.warning_threshold, checks[3].warning_threshold) elif check.check_type == "winsvc": self.assertEqual(check.parent_check, checks[4].id) self.assertEqual(check.svc_name, checks[4].svc_name) diff --git a/api/tacticalrmm/checks/baker_recipes.py b/api/tacticalrmm/checks/baker_recipes.py index 8ec1ae8380..52d9bf5855 100644 --- a/api/tacticalrmm/checks/baker_recipes.py +++ b/api/tacticalrmm/checks/baker_recipes.py @@ -3,7 +3,7 @@ check = Recipe("checks.Check") diskspace_check = check.extend( - check_type="diskspace", disk="C:", warning_threshold=30, error_threshold=75 + check_type="diskspace", disk="C:", warning_threshold=30, error_threshold=10 ) cpuload_check = check.extend( @@ -13,7 +13,7 @@ ping_check = check.extend(check_type="ping", ip="10.10.10.10") memory_check = check.extend( - check_type="memory", warning_threshold=30, error_threshold=75 + check_type="memory", warning_threshold=60, error_threshold=75 ) winsvc_check = check.extend( @@ -21,6 +21,7 @@ svc_name="ServiceName", svc_display_name="ServiceName", svc_policy_mode="manual", + pass_if_svc_not_exist=False ) eventlog_check = check.extend( diff --git a/api/tacticalrmm/checks/tests.py b/api/tacticalrmm/checks/tests.py index 268768bdf5..47dda425ac 100644 --- a/api/tacticalrmm/checks/tests.py +++ b/api/tacticalrmm/checks/tests.py @@ -1,3 +1,4 @@ +from logging import warning from unittest.mock import patch from django.utils import timezone as djangotime @@ -24,7 +25,7 @@ def test_get_disk_check(self): serializer = CheckSerializer(disk_check) self.assertEqual(resp.status_code, 200) - self.assertEqual(resp.data, serializer.data) + self.assertEqual(resp.data, serializer.data) # type: ignore self.check_not_authenticated("get", url) def test_add_disk_check(self): @@ -211,7 +212,7 @@ def test_get_policy_disk_check(self): serializer = CheckSerializer(disk_check) self.assertEqual(resp.status_code, 200) - self.assertEqual(resp.data, serializer.data) + self.assertEqual(resp.data, serializer.data) # type: ignore self.check_not_authenticated("post", url) def test_add_policy_disk_check(self): @@ -221,7 +222,7 @@ def test_add_policy_disk_check(self): url = "/checks/checks/" valid_payload = { - "policy": policy.pk, + "policy": policy.pk, # type: ignore "check": { "check_type": "diskspace", "disk": "M:", @@ -233,7 +234,7 @@ def test_add_policy_disk_check(self): # should fail because both error and warning thresholds are 0 invalid_payload = { - "policy": policy.pk, + "policy": policy.pk, # type: ignore "check": { "check_type": "diskspace", "error_threshold": 0, @@ -247,7 +248,7 @@ def test_add_policy_disk_check(self): # should fail because warning is less than error invalid_payload = { - "policy": policy.pk, + "policy": policy.pk, # type: ignore "check": { "check_type": "diskspace", "error_threshold": 80, @@ -261,7 +262,7 @@ def test_add_policy_disk_check(self): # this should fail because we already have a check for drive M: in setup invalid_payload = { - "policy": policy.pk, + "policy": policy.pk, # type: ignore "check": { "check_type": "diskspace", "disk": "M:", @@ -277,8 +278,8 @@ def test_add_policy_disk_check(self): def test_get_disks_for_policies(self): url = "/checks/getalldisks/" r = self.client.get(url) - self.assertIsInstance(r.data, list) - self.assertEqual(26, len(r.data)) + self.assertIsInstance(r.data, list) # type: ignore + self.assertEqual(26, len(r.data)) # type: ignore def test_edit_check_alert(self): # setup data @@ -361,8 +362,8 @@ def test_get_check_history(self): ) # need to manually set the date back 35 days - for check_history in check_history_data: - check_history.x = djangotime.now() - djangotime.timedelta(days=35) + for check_history in check_history_data: # type: ignore + check_history.x = djangotime.now() - djangotime.timedelta(days=35) # type: ignore check_history.save() # test invalid check pk @@ -375,20 +376,22 @@ def test_get_check_history(self): data = {"timeFilter": 30} resp = self.client.patch(url, data, format="json") self.assertEqual(resp.status_code, 200) - self.assertEqual(len(resp.data), 30) + self.assertEqual(len(resp.data), 30) # type: ignore # test with timeFilter equal to 0 data = {"timeFilter": 0} resp = self.client.patch(url, data, format="json") self.assertEqual(resp.status_code, 200) - self.assertEqual(len(resp.data), 60) + self.assertEqual(len(resp.data), 60) # type: ignore self.check_not_authenticated("patch", url) class TestCheckTasks(TacticalTestCase): def setUp(self): + self.authenticate() self.setup_coresettings() + self.agent = baker.make_recipe("agents.agent") def test_prune_check_history(self): from .tasks import prune_check_history @@ -403,8 +406,8 @@ def test_prune_check_history(self): ) # need to manually set the date back 35 days - for check_history in check_history_data: - check_history.x = djangotime.now() - djangotime.timedelta(days=35) + for check_history in check_history_data: # type: ignore + check_history.x = djangotime.now() - djangotime.timedelta(days=35) # type: ignore check_history.save() # prune data 30 days old @@ -414,3 +417,577 @@ def test_prune_check_history(self): # prune all Check history Data prune_check_history(0) self.assertEqual(CheckHistory.objects.count(), 0) + + def test_handle_script_check(self): + from checks.models import Check + + url = "/api/v3/checkrunner/" + + script = baker.make_recipe("checks.script_check", agent=self.agent) + + # test failing + data = { + "id": script.id, + "retcode": 500, + "stderr": "error", + "stdout": "message", + "runtime": 5.000, + } + + resp = self.client.patch(url, data, format="json") + self.assertEqual(resp.status_code, 200) + + new_check = Check.objects.get(pk=script.id) + + self.assertEqual(new_check.status, "failing") + self.assertEqual(new_check.alert_severity, "error") + + # test passing + data = { + "id": script.id, + "retcode": 0, + "stderr": "error", + "stdout": "message", + "runtime": 5.000, + } + + resp = self.client.patch(url, data, format="json") + self.assertEqual(resp.status_code, 200) + + new_check = Check.objects.get(pk=script.id) + + self.assertEqual(new_check.status, "passing") + + # test failing info + script.info_return_codes = [20, 30, 50] + script.save() + + data = { + "id": script.id, + "retcode": 30, + "stderr": "error", + "stdout": "message", + "runtime": 5.000, + } + + resp = self.client.patch(url, data, format="json") + self.assertEqual(resp.status_code, 200) + + new_check = Check.objects.get(pk=script.id) + + self.assertEqual(new_check.status, "failing") + self.assertEqual(new_check.alert_severity, "info") + + # test failing warning + script.warning_return_codes = [80, 100, 1040] + script.save() + + data = { + "id": script.id, + "retcode": 1040, + "stderr": "error", + "stdout": "message", + "runtime": 5.000, + } + + resp = self.client.patch(url, data, format="json") + self.assertEqual(resp.status_code, 200) + + new_check = Check.objects.get(pk=script.id) + + self.assertEqual(new_check.status, "failing") + self.assertEqual(new_check.alert_severity, "warning") + + def test_handle_diskspace_check(self): + from checks.models import Check + + url = "/api/v3/checkrunner/" + + diskspace = baker.make_recipe( + "checks.diskspace_check", + warning_threshold=20, + error_threshold=10, + agent=self.agent, + ) + + # test warning threshold failure + data = { + "id": diskspace.id, + "exists": True, + "percent_used": 85, + "total": 500, + "free": 400, + } + + resp = self.client.patch(url, data, format="json") + self.assertEqual(resp.status_code, 200) + + new_check = Check.objects.get(pk=diskspace.id) + + self.assertEqual(new_check.status, "failing") + self.assertEqual(new_check.alert_severity, "warning") + + # test error failure + data = { + "id": diskspace.id, + "exists": True, + "percent_used": 95, + "total": 500, + "free": 400, + } + + resp = self.client.patch(url, data, format="json") + self.assertEqual(resp.status_code, 200) + + new_check = Check.objects.get(pk=diskspace.id) + + self.assertEqual(new_check.status, "failing") + self.assertEqual(new_check.alert_severity, "error") + + # test disk not exist + data = {"id": diskspace.id, "exists": False} + + resp = self.client.patch(url, data, format="json") + self.assertEqual(resp.status_code, 200) + + new_check = Check.objects.get(pk=diskspace.id) + + self.assertEqual(new_check.status, "failing") + self.assertEqual(new_check.alert_severity, "error") + + # test warning threshold 0 + diskspace.warning_threshold = 0 + diskspace.save() + data = { + "id": diskspace.id, + "exists": True, + "percent_used": 95, + "total": 500, + "free": 400, + } + + resp = self.client.patch(url, data, format="json") + self.assertEqual(resp.status_code, 200) + + new_check = Check.objects.get(pk=diskspace.id) + self.assertEqual(new_check.status, "failing") + self.assertEqual(new_check.alert_severity, "error") + + # test error threshold 0 + diskspace.warning_threshold = 50 + diskspace.error_threshold = 0 + diskspace.save() + data = { + "id": diskspace.id, + "exists": True, + "percent_used": 95, + "total": 500, + "free": 400, + } + + resp = self.client.patch(url, data, format="json") + self.assertEqual(resp.status_code, 200) + + new_check = Check.objects.get(pk=diskspace.id) + self.assertEqual(new_check.status, "failing") + self.assertEqual(new_check.alert_severity, "warning") + + # test passing + data = { + "id": diskspace.id, + "exists": True, + "percent_used": 50, + "total": 500, + "free": 400, + } + + resp = self.client.patch(url, data, format="json") + self.assertEqual(resp.status_code, 200) + + new_check = Check.objects.get(pk=diskspace.id) + + self.assertEqual(new_check.status, "passing") + + def test_handle_cpuload_check(self): + from checks.models import Check + + url = "/api/v3/checkrunner/" + + cpuload = baker.make_recipe( + "checks.cpuload_check", + warning_threshold=70, + error_threshold=90, + agent=self.agent, + ) + + # test failing warning + data = {"id": cpuload.id, "percent": 80} + + resp = self.client.patch(url, data, format="json") + self.assertEqual(resp.status_code, 200) + + new_check = Check.objects.get(pk=cpuload.id) + self.assertEqual(new_check.status, "failing") + self.assertEqual(new_check.alert_severity, "warning") + + # test failing error + data = {"id": cpuload.id, "percent": 95} + + # reset check history + cpuload.history = [] + cpuload.save() + + resp = self.client.patch(url, data, format="json") + self.assertEqual(resp.status_code, 200) + + new_check = Check.objects.get(pk=cpuload.id) + self.assertEqual(new_check.status, "failing") + self.assertEqual(new_check.alert_severity, "error") + + # test passing + data = {"id": cpuload.id, "percent": 50} + + # reset check history + cpuload.history = [] + cpuload.save() + + resp = self.client.patch(url, data, format="json") + self.assertEqual(resp.status_code, 200) + + new_check = Check.objects.get(pk=cpuload.id) + self.assertEqual(new_check.status, "passing") + + # test warning threshold 0 + cpuload.warning_threshold = 0 + cpuload.save() + data = {"id": cpuload.id, "percent": 95} + + # reset check history + cpuload.history = [] + cpuload.save() + + resp = self.client.patch(url, data, format="json") + self.assertEqual(resp.status_code, 200) + + new_check = Check.objects.get(pk=cpuload.id) + self.assertEqual(new_check.status, "failing") + self.assertEqual(new_check.alert_severity, "error") + + # test error threshold 0 + cpuload.warning_threshold = 50 + cpuload.error_threshold = 0 + cpuload.save() + data = {"id": cpuload.id, "percent": 95} + + # reset check history + cpuload.history = [] + cpuload.save() + + resp = self.client.patch(url, data, format="json") + self.assertEqual(resp.status_code, 200) + + new_check = Check.objects.get(pk=cpuload.id) + self.assertEqual(new_check.status, "failing") + self.assertEqual(new_check.alert_severity, "warning") + + def test_handle_memory_check(self): + from checks.models import Check + + url = "/api/v3/checkrunner/" + + memory = baker.make_recipe( + "checks.memory_check", + warning_threshold=70, + error_threshold=90, + agent=self.agent, + ) + + # test failing warning + data = {"id": memory.id, "percent": 80} + + resp = self.client.patch(url, data, format="json") + self.assertEqual(resp.status_code, 200) + + new_check = Check.objects.get(pk=memory.id) + self.assertEqual(new_check.status, "failing") + self.assertEqual(new_check.alert_severity, "warning") + + # test failing error + data = {"id": memory.id, "percent": 95} + + # reset check history + memory.history = [] + memory.save() + + resp = self.client.patch(url, data, format="json") + self.assertEqual(resp.status_code, 200) + + new_check = Check.objects.get(pk=memory.id) + self.assertEqual(new_check.status, "failing") + self.assertEqual(new_check.alert_severity, "error") + + # test passing + data = {"id": memory.id, "percent": 50} + + # reset check history + memory.history = [] + memory.save() + + resp = self.client.patch(url, data, format="json") + self.assertEqual(resp.status_code, 200) + + new_check = Check.objects.get(pk=memory.id) + self.assertEqual(new_check.status, "passing") + + # test warning threshold 0 + memory.warning_threshold = 0 + memory.save() + data = {"id": memory.id, "percent": 95} + + # reset check history + memory.history = [] + memory.save() + + resp = self.client.patch(url, data, format="json") + self.assertEqual(resp.status_code, 200) + + new_check = Check.objects.get(pk=memory.id) + self.assertEqual(new_check.status, "failing") + self.assertEqual(new_check.alert_severity, "error") + + # test error threshold 0 + memory.warning_threshold = 50 + memory.error_threshold = 0 + memory.save() + data = {"id": memory.id, "percent": 95} + + # reset check history + memory.history = [] + memory.save() + + resp = self.client.patch(url, data, format="json") + self.assertEqual(resp.status_code, 200) + + new_check = Check.objects.get(pk=memory.id) + self.assertEqual(new_check.status, "failing") + self.assertEqual(new_check.alert_severity, "warning") + + def test_handle_ping_check(self): + from checks.models import Check + + url = "/api/v3/checkrunner/" + + ping = baker.make_recipe( + "checks.ping_check", agent=self.agent, alert_severity="info" + ) + + # test failing info + data = { + "id": ping.id, + "output": "Reply from 192.168.1.27: Destination host unreachable", + "has_stdout": True, + "has_stderr": False, + } + + resp = self.client.patch(url, data, format="json") + self.assertEqual(resp.status_code, 200) + + new_check = Check.objects.get(pk=ping.id) + self.assertEqual(new_check.status, "failing") + self.assertEqual(new_check.alert_severity, "info") + + # test failing warning + data = { + "id": ping.id, + "output": "Reply from 192.168.1.27: Destination host unreachable", + "has_stdout": True, + "has_stderr": False, + } + + ping.alert_severity = "warning" + ping.save() + + resp = self.client.patch(url, data, format="json") + self.assertEqual(resp.status_code, 200) + + new_check = Check.objects.get(pk=ping.id) + self.assertEqual(new_check.status, "failing") + self.assertEqual(new_check.alert_severity, "warning") + + # test failing error + data = { + "id": ping.id, + "output": "Reply from 192.168.1.27: Destination host unreachable", + "has_stdout": True, + "has_stderr": False, + } + + ping.alert_severity = "error" + ping.save() + + resp = self.client.patch(url, data, format="json") + self.assertEqual(resp.status_code, 200) + + new_check = Check.objects.get(pk=ping.id) + self.assertEqual(new_check.status, "failing") + self.assertEqual(new_check.alert_severity, "error") + + # test failing error + data = { + "id": ping.id, + "output": "some output", + "has_stdout": False, + "has_stderr": True, + } + + resp = self.client.patch(url, data, format="json") + self.assertEqual(resp.status_code, 200) + + new_check = Check.objects.get(pk=ping.id) + self.assertEqual(new_check.status, "failing") + self.assertEqual(new_check.alert_severity, "error") + + # test passing + data = { + "id": ping.id, + "output": "Reply from 192.168.1.1: bytes=32 time<1ms TTL=64", + "has_stdout": True, + "has_stderr": False, + } + + resp = self.client.patch(url, data, format="json") + self.assertEqual(resp.status_code, 200) + + new_check = Check.objects.get(pk=ping.id) + self.assertEqual(new_check.status, "passing") + + @patch("agents.models.Agent.nats_cmd") + def test_handle_winsvc_check(self, nats_cmd): + from checks.models import Check + + url = "/api/v3/checkrunner/" + + winsvc = baker.make_recipe( + "checks.winsvc_check", agent=self.agent, alert_severity="info" + ) + + # test passing running + data = {"id": winsvc.id, "exists": True, "status": "running"} + + resp = self.client.patch(url, data, format="json") + self.assertEqual(resp.status_code, 200) + + new_check = Check.objects.get(pk=winsvc.id) + self.assertEqual(new_check.status, "passing") + + # test passing start pending + winsvc.pass_if_start_pending = True + winsvc.save() + + data = {"id": winsvc.id, "exists": True, "status": "start_pending"} + + resp = self.client.patch(url, data, format="json") + self.assertEqual(resp.status_code, 200) + + new_check = Check.objects.get(pk=winsvc.id) + self.assertEqual(new_check.status, "passing") + + # test failing no start + data = {"id": winsvc.id, "exists": True, "status": "not running"} + + resp = self.client.patch(url, data, format="json") + self.assertEqual(resp.status_code, 200) + + new_check = Check.objects.get(pk=winsvc.id) + self.assertEqual(new_check.status, "failing") + self.assertEqual(new_check.alert_severity, "info") + + # test failing and attempt start + winsvc.restart_if_stopped = True + winsvc.alert_severity = "warning" + winsvc.save() + + nats_cmd.return_value = "timeout" + + data = {"id": winsvc.id, "exists": True, "status": "not running"} + + resp = self.client.patch(url, data, format="json") + self.assertEqual(resp.status_code, 200) + + new_check = Check.objects.get(pk=winsvc.id) + self.assertEqual(new_check.status, "failing") + self.assertEqual(new_check.alert_severity, "warning") + nats_cmd.assert_called() + nats_cmd.reset_mock() + + # test failing and attempt start + winsvc.alert_severity = "error" + winsvc.save() + nats_cmd.return_value = {"success": False, "errormsg": "Some Error"} + + data = {"id": winsvc.id, "exists": True, "status": "not running"} + + resp = self.client.patch(url, data, format="json") + self.assertEqual(resp.status_code, 200) + + new_check = Check.objects.get(pk=winsvc.id) + self.assertEqual(new_check.status, "failing") + self.assertEqual(new_check.alert_severity, "error") + nats_cmd.assert_called() + nats_cmd.reset_mock() + + # test success and attempt start + nats_cmd.return_value = {"success": True} + + data = {"id": winsvc.id, "exists": True, "status": "not running"} + + resp = self.client.patch(url, data, format="json") + self.assertEqual(resp.status_code, 200) + + new_check = Check.objects.get(pk=winsvc.id) + self.assertEqual(new_check.status, "passing") + nats_cmd.assert_called() + nats_cmd.reset_mock() + + # test failing and service not exist + data = {"id": winsvc.id, "exists": False, "status": ""} + + resp = self.client.patch(url, data, format="json") + self.assertEqual(resp.status_code, 200) + + new_check = Check.objects.get(pk=winsvc.id) + self.assertEqual(new_check.status, "failing") + + # test success and service not exist + winsvc.pass_if_svc_not_exist = True + winsvc.save() + data = {"id": winsvc.id, "exists": False, "status": ""} + + resp = self.client.patch(url, data, format="json") + self.assertEqual(resp.status_code, 200) + + new_check = Check.objects.get(pk=winsvc.id) + self.assertEqual(new_check.status, "passing") + + def test_handle_eventlog_check(self): + url = "/api/v3/checkrunner/" + + eventlog = baker.make_recipe("checks.eventlog_check", agent=self.agent) + + # test failing warning + data = {} + + # resp = self.client.patch(url, data, format="json") + # self.assertEqual(resp.status_code, 200) + + # test failing error + data = {} + + # resp = self.client.patch(url, data, format="json") + # self.assertEqual(resp.status_code, 200) + + # test passing + data = {} + + # resp = self.client.patch(url, data, format="json") + # self.assertEqual(resp.status_code, 200) From f092ea8d67c0b69b8260fe5bc93835fd6571b391 Mon Sep 17 00:00:00 2001 From: sadnub Date: Tue, 23 Feb 2021 23:58:28 -0500 Subject: [PATCH 07/21] black --- api/tacticalrmm/agents/models.py | 2 +- api/tacticalrmm/alerts/tests.py | 95 ++++++++++++++++--------- api/tacticalrmm/checks/baker_recipes.py | 2 +- 3 files changed, 64 insertions(+), 35 deletions(-) diff --git a/api/tacticalrmm/agents/models.py b/api/tacticalrmm/agents/models.py index 21e04fdc12..a005fdcd0b 100644 --- a/api/tacticalrmm/agents/models.py +++ b/api/tacticalrmm/agents/models.py @@ -775,7 +775,7 @@ def handle_alert(self, checkin: bool = False) -> None: # called when agent is offline else: - + # check if alert hasn't been created yet so create it if not Alert.objects.filter(agent=self, resolved=False).exists(): diff --git a/api/tacticalrmm/alerts/tests.py b/api/tacticalrmm/alerts/tests.py index 8b048aa517..1da6ccd35e 100644 --- a/api/tacticalrmm/alerts/tests.py +++ b/api/tacticalrmm/alerts/tests.py @@ -718,14 +718,15 @@ def test_handle_agent_offline_alerts( Alert.objects.get(agent=agent_template_email).resolved_email_sent ) - @patch("checks.tasks.sleep") @patch("checks.tasks.handle_check_sms_alert_task.delay") @patch("checks.tasks.handle_check_email_alert_task.delay") @patch("checks.tasks.handle_resolved_check_email_alert_task.delay") @patch("checks.tasks.handle_resolved_check_sms_alert_task.delay") - def test_handle_check_alerts(self, resolved_sms, resolved_email, outage_email, outage_sms, sleep): - + def test_handle_check_alerts( + self, resolved_sms, resolved_email, outage_email, outage_sms, sleep + ): + # create test data agent = baker.make_recipe("agents.agent") agent_no_settings = baker.make_recipe("agents.agent") @@ -734,13 +735,27 @@ def test_handle_check_alerts(self, resolved_sms, resolved_email, outage_email, o agent_template_blank = baker.make_recipe("agents.agent") # create agent with template to always email on warning severity - alert_template_email = baker.make("alerts.AlertTemplate", is_active=True, check_always_email=True, check_email_alert_severity=["warning"]) + alert_template_email = baker.make( + "alerts.AlertTemplate", + is_active=True, + check_always_email=True, + check_email_alert_severity=["warning"], + ) agent_template_email.client.alert_template = alert_template_email agent_template_email.client.save() # create agent with template to always dashboard and text on various alert severities - alert_template_dashboard_text = baker.make("alerts.AlertTemplate", is_active=True, check_always_alert=True, check_always_text=True, check_dashboard_alert_severity=["info", "warning", "error"], check_text_alert_severity=["error"]) - agent_template_dashboard_text.client.alert_template = alert_template_dashboard_text + alert_template_dashboard_text = baker.make( + "alerts.AlertTemplate", + is_active=True, + check_always_alert=True, + check_always_text=True, + check_dashboard_alert_severity=["info", "warning", "error"], + check_text_alert_severity=["error"], + ) + agent_template_dashboard_text.client.alert_template = ( + alert_template_dashboard_text + ) agent_template_dashboard_text.client.save() # create agent with blank template @@ -749,16 +764,31 @@ def test_handle_check_alerts(self, resolved_sms, resolved_email, outage_email, o agent_template_dashboard_text.client.save() # create some checks per agent above - agents = [agent, agent_template_email, agent_template_dashboard_text, agent_template_blank, agent_no_settings] - diskspaces = baker.make_recipe("checks.diskspace_check", agent=cycle(agents), _quantity=5) - cpuloads = baker.make_recipe("checks.cpuload_check", agent=cycle(agents), _quantity=5) - memories = baker.make_recipe("checks.memory_check", agent=cycle(agents), _quantity=5) + agents = [ + agent, + agent_template_email, + agent_template_dashboard_text, + agent_template_blank, + agent_no_settings, + ] + diskspaces = baker.make_recipe( + "checks.diskspace_check", agent=cycle(agents), _quantity=5 + ) + cpuloads = baker.make_recipe( + "checks.cpuload_check", agent=cycle(agents), _quantity=5 + ) + memories = baker.make_recipe( + "checks.memory_check", agent=cycle(agents), _quantity=5 + ) pings = baker.make_recipe("checks.ping_check", agent=cycle(agents), _quantity=5) - scripts = baker.make_recipe("checks.script_check", agent=cycle(agents), _quantity=5) + scripts = baker.make_recipe( + "checks.script_check", agent=cycle(agents), _quantity=5 + ) # update the agent checks to alert on everything - agent.agentchecks.update(email_alert=True, text_alert=True, dashboard_alert=True) - + agent.agentchecks.update( + email_alert=True, text_alert=True, dashboard_alert=True + ) def test_handle_task_alerts(self): pass @@ -766,21 +796,15 @@ def test_handle_task_alerts(self): def test_override_email_settings(self): pass - @patch("agents.models.Agent.nats_cmd") @patch("agents.tasks.agent_outage_sms_task.delay") @patch("agents.tasks.agent_outage_email_task.delay") @patch("agents.tasks.agent_recovery_email_task.delay") @patch("agents.tasks.agent_recovery_sms_task.delay") def test_agent_alert_actions( - self, - recovery_sms, - recovery_email, - outage_email, - outage_sms, - nats_cmd + self, recovery_sms, recovery_email, outage_email, outage_sms, nats_cmd ): - + from agents.tasks import agent_outages_task # Setup cmd mock @@ -788,16 +812,27 @@ def test_agent_alert_actions( "retcode": 0, "stdout": "success!", "stderr": "", - "execution_time": 5.0000 + "execution_time": 5.0000, } nats_cmd.side_effect = ["pong", success] # setup data - agent = baker.make_recipe("agents.overdue_agent", version=settings.LATEST_AGENT_VER) + agent = baker.make_recipe( + "agents.overdue_agent", version=settings.LATEST_AGENT_VER + ) failure_action = baker.make_recipe("scripts.script") resolved_action = baker.make_recipe("scripts.script") - alert_template = baker.make("alerts.AlertTemplate", is_active=True, agent_always_alert=True, action=failure_action, action_timeout=30, resolved_action=resolved_action, resolved_action_timeout=35, resolved_action_args=["nice_arg"]) + alert_template = baker.make( + "alerts.AlertTemplate", + is_active=True, + agent_always_alert=True, + action=failure_action, + action_timeout=30, + resolved_action=resolved_action, + resolved_action_timeout=35, + resolved_action_args=["nice_arg"], + ) agent.client.alert_template = alert_template agent.client.save() @@ -808,10 +843,7 @@ def test_agent_alert_actions( "func": "runscriptfull", "timeout": 30, "script_args": [], - "payload": { - "code": failure_action.code, - "shell": failure_action.shell - } + "payload": {"code": failure_action.code, "shell": failure_action.shell}, } nats_cmd.assert_called_with(data, timeout=30, wait=True) @@ -823,7 +855,7 @@ def test_agent_alert_actions( "retcode": 0, "stdout": "success!", "stderr": "", - "execution_time": 5.0000 + "execution_time": 5.0000, } nats_cmd.side_effect = ["pong", success] @@ -854,10 +886,7 @@ def test_agent_alert_actions( "func": "runscriptfull", "timeout": 35, "script_args": ["nice_arg"], - "payload": { - "code": resolved_action.code, - "shell": resolved_action.shell - } + "payload": {"code": resolved_action.code, "shell": resolved_action.shell}, } nats_cmd.assert_called_with(data, timeout=35, wait=True) diff --git a/api/tacticalrmm/checks/baker_recipes.py b/api/tacticalrmm/checks/baker_recipes.py index 52d9bf5855..0887e19aba 100644 --- a/api/tacticalrmm/checks/baker_recipes.py +++ b/api/tacticalrmm/checks/baker_recipes.py @@ -21,7 +21,7 @@ svc_name="ServiceName", svc_display_name="ServiceName", svc_policy_mode="manual", - pass_if_svc_not_exist=False + pass_if_svc_not_exist=False, ) eventlog_check = check.extend( From 4fb6d9aa5df91912b694e8883055f909557e4a58 Mon Sep 17 00:00:00 2001 From: wh1te909 Date: Wed, 24 Feb 2021 05:32:16 +0000 Subject: [PATCH 08/21] more docs --- docs/docs/index.md | 4 ++-- docs/docs/install_agent.md | 2 +- docs/docs/restore.md | 2 +- docs/docs/troubleshooting.md | 30 +++++++++++++++++++++++++++++- docs/docs/update_server.md | 15 +++++++++++++++ 5 files changed, 48 insertions(+), 5 deletions(-) diff --git a/docs/docs/index.md b/docs/docs/index.md index 4132a40ca0..ecffa33251 100644 --- a/docs/docs/index.md +++ b/docs/docs/index.md @@ -6,10 +6,10 @@ [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/python/black) Tactical RMM is a remote monitoring & management tool for Windows computers, built with Django, Vue and Golang. -It uses an [agent](https://github.com/wh1te909/rmmagent) written in golang and integrates with [MeshCentral](https://github.com/Ylianst/MeshCentral) +It uses an [agent](https://github.com/wh1te909/rmmagent) written in Golang and integrates with [MeshCentral](https://github.com/Ylianst/MeshCentral) ## [LIVE DEMO](https://rmm.xlawgaming.com/) -Demo database resets every hour. Alot of features are disabled for obvious reasons due to the nature of this app. +Demo database resets every hour. A lot of features are disabled for obvious reasons due to the nature of this app. *Tactical RMM is currently in alpha and subject to breaking changes. Use in production at your own risk.* diff --git a/docs/docs/install_agent.md b/docs/docs/install_agent.md index fc91275ed9..5bb2ada913 100644 --- a/docs/docs/install_agent.md +++ b/docs/docs/install_agent.md @@ -2,7 +2,7 @@ !!!warning You must add antivirus exlusions for the tactical agent.
- Any decent AV will flag the agent as a virus, since it technically is one due to the nature of this app.
+ Any decent AV will flag the agent as a virus, since it technically is one due to the nature of this software.
Adding the following exlucions will make sure everything works, including agent update:
`C:\Program Files\TacticalAgent\*`
`C:\Program Files\Mesh Agent\*`
diff --git a/docs/docs/restore.md b/docs/docs/restore.md index 2acb3ace74..458413ff2f 100644 --- a/docs/docs/restore.md +++ b/docs/docs/restore.md @@ -29,7 +29,7 @@ Edit the restore script with your editor of choice and change the postgres usern Refer to the [backup](backup.md) instructions on where to find this info. -Copy the backup tar file to the new server and then call the update script, passing it the backup file as the first argument: +Copy the backup tar file to the new server and then call the restore script, passing it the backup file as the first argument: ```bash chmod +x restore.sh diff --git a/docs/docs/troubleshooting.md b/docs/docs/troubleshooting.md index 2dfc09495c..0f1d1be551 100644 --- a/docs/docs/troubleshooting.md +++ b/docs/docs/troubleshooting.md @@ -49,4 +49,32 @@ Run the tacticalrpc service manually with debug logging: This will print out a ton of info. You should be able to see the error from the debug log output. -Please then copy/paste the logs and post them either in our [Discord support chat](https://discord.gg/upGTkWp), or create a [github issue](https://github.com/wh1te909/tacticalrmm/issues). \ No newline at end of file +Please then copy/paste the logs and post them either in our [Discord support chat](https://discord.gg/upGTkWp), or create a [github issue](https://github.com/wh1te909/tacticalrmm/issues). + + +#### Web UI frozen or not loading / website errors / general errors + +Check all the systemd services that the rmm uses to function and check to make sure they're all active/running and enabled: + +```bash +sudo systemctl status rmm +sudo systemctl status celery +sudo systemctl status celerybeat +sudo systemctl status nginx +sudo systemctl status nats +sudo systemctl status natsapi +sudo systemctl status meshcentral +sudo systemctl status mongod +sudo systemctl status postgresql +sudo systemctl status redis +``` + +Read through the log files in the following folders and check for errors: +```bash +/rmm/api/tacticalrmm/tacticalrmm/private/log +/var/log/celery +``` + + + + diff --git a/docs/docs/update_server.md b/docs/docs/update_server.md index a38773d3ce..1b1634527c 100644 --- a/docs/docs/update_server.md +++ b/docs/docs/update_server.md @@ -1,5 +1,12 @@ # Updating the RMM +#### Keeping your linux server up to date + +You should periodically run `sudo apt update` and `sudo apt -y upgrade` to keep your server up to date. + +You can also update `npm` if prompted to by a message that might appear when running the `update.sh` script. + +Other than this, you should avoid making any changes to your server and let the `update.sh` script handle everything else for you. #### Updating to the latest RMM version !!!danger @@ -30,6 +37,14 @@ The update script will also fix any permissions that might have gotten messed up
+ +!!!warning + Do __not__ attempt to manually update MeshCentral to a newer version. + + You should let the `update.sh` script handle this for you. + + The developers will test MeshCentral and make sure integration does not break before bumping the mesh version. + #### Keeping your Let's Encrypt certificate up to date !!!info From e248a99f797d938e455b785e011f177e365b0e1b Mon Sep 17 00:00:00 2001 From: wh1te909 Date: Wed, 24 Feb 2021 06:14:28 +0000 Subject: [PATCH 09/21] add option to run sched task asap after scheduled start was missed #247 --- ...0018_automatedtask_run_asap_after_missed.py | 18 ++++++++++++++++++ api/tacticalrmm/autotasks/models.py | 2 ++ api/tacticalrmm/autotasks/tasks.py | 7 +++++-- .../modals/tasks/AddAutomatedTask.vue | 9 ++++++++- 4 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 api/tacticalrmm/autotasks/migrations/0018_automatedtask_run_asap_after_missed.py diff --git a/api/tacticalrmm/autotasks/migrations/0018_automatedtask_run_asap_after_missed.py b/api/tacticalrmm/autotasks/migrations/0018_automatedtask_run_asap_after_missed.py new file mode 100644 index 0000000000..c0a8464696 --- /dev/null +++ b/api/tacticalrmm/autotasks/migrations/0018_automatedtask_run_asap_after_missed.py @@ -0,0 +1,18 @@ +# Generated by Django 3.1.7 on 2021-02-24 05:37 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('autotasks', '0017_auto_20210210_1512'), + ] + + operations = [ + migrations.AddField( + model_name='automatedtask', + name='run_asap_after_missed', + field=models.BooleanField(default=False), + ), + ] diff --git a/api/tacticalrmm/autotasks/models.py b/api/tacticalrmm/autotasks/models.py index 3e9ef07613..21e8b8fca4 100644 --- a/api/tacticalrmm/autotasks/models.py +++ b/api/tacticalrmm/autotasks/models.py @@ -96,6 +96,7 @@ class AutomatedTask(BaseAuditModel): ) run_time_date = DateTimeField(null=True, blank=True) remove_if_not_scheduled = models.BooleanField(default=False) + run_asap_after_missed = models.BooleanField(default=False) # added in agent v1.4.7 managed_by_policy = models.BooleanField(default=False) parent_task = models.PositiveIntegerField(null=True, blank=True) win_task_name = models.CharField(max_length=255, null=True, blank=True) @@ -218,6 +219,7 @@ def create_policy_task(self, agent=None, policy=None): timeout=self.timeout, enabled=self.enabled, remove_if_not_scheduled=self.remove_if_not_scheduled, + run_asap_after_missed=self.run_asap_after_missed, ) create_win_task_schedule.delay(task.pk) diff --git a/api/tacticalrmm/autotasks/tasks.py b/api/tacticalrmm/autotasks/tasks.py index 11dce02611..33325b18c4 100644 --- a/api/tacticalrmm/autotasks/tasks.py +++ b/api/tacticalrmm/autotasks/tasks.py @@ -62,9 +62,12 @@ def create_win_task_schedule(pk, pending_action=False): }, } - if task.remove_if_not_scheduled and pyver.parse( + if task.run_asap_after_missed and pyver.parse( task.agent.version - ) >= pyver.parse("1.1.2"): + ) >= pyver.parse("1.4.7"): + nats_data["schedtaskpayload"]["run_asap_after_missed"] = True + + if task.remove_if_not_scheduled: nats_data["schedtaskpayload"]["deleteafter"] = True elif task.task_type == "checkfailure" or task.task_type == "manual": diff --git a/web/src/components/modals/tasks/AddAutomatedTask.vue b/web/src/components/modals/tasks/AddAutomatedTask.vue index 6e548767bd..dcaac0cab3 100644 --- a/web/src/components/modals/tasks/AddAutomatedTask.vue +++ b/web/src/components/modals/tasks/AddAutomatedTask.vue @@ -120,7 +120,13 @@

- + +
+
+
@@ -181,6 +187,7 @@ export default { run_time_minute: null, run_time_date: null, remove_if_not_scheduled: false, + run_asap_after_missed: true, task_type: "scheduled", timeout: 120, alert_severity: "info", From 2f7dc98830b0feb72e9256836d5523b2cd228621 Mon Sep 17 00:00:00 2001 From: wh1te909 Date: Wed, 24 Feb 2021 07:37:48 +0000 Subject: [PATCH 10/21] change save query --- api/tacticalrmm/autotasks/tasks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/tacticalrmm/autotasks/tasks.py b/api/tacticalrmm/autotasks/tasks.py index 33325b18c4..b7c654795e 100644 --- a/api/tacticalrmm/autotasks/tasks.py +++ b/api/tacticalrmm/autotasks/tasks.py @@ -45,7 +45,7 @@ def create_win_task_schedule(pk, pending_action=False): task.run_time_date = now.astimezone(agent_tz).replace( tzinfo=pytz.utc ) + djangotime.timedelta(minutes=5) - task.save() + task.save(update_fields=["run_time_date"]) nats_data = { "func": "schedtask", From b8ea8b1567f4e8c4e7bdbbc908f61aa7a5d33e12 Mon Sep 17 00:00:00 2001 From: wh1te909 Date: Wed, 24 Feb 2021 08:38:44 +0000 Subject: [PATCH 11/21] typo --- docs/docs/troubleshooting.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/troubleshooting.md b/docs/docs/troubleshooting.md index 0f1d1be551..31f5d15e7c 100644 --- a/docs/docs/troubleshooting.md +++ b/docs/docs/troubleshooting.md @@ -18,7 +18,7 @@ The most common problem we've seen of agents not updating is due to Antivirus bl Windows Defender will 100% of the time block the updater from running unless an exclusion is set. -Refer to the [Agent Installation](install_agent.md) instructions for AV exceptions to set and manually doing an agent update with logging to trouleshoot further. +Refer to the [Agent Installation](install_agent.md) instructions for AV exceptions to set and manually doing an agent update with logging to troubleshoot further. Agents will also not automatically update if they are too old. From b6cd29f77e4196a4142582e9eadb99e69a7e90ed Mon Sep 17 00:00:00 2001 From: wh1te909 Date: Wed, 24 Feb 2021 09:26:36 +0000 Subject: [PATCH 12/21] change wording --- web/src/components/modals/coresettings/UserPreferences.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/src/components/modals/coresettings/UserPreferences.vue b/web/src/components/modals/coresettings/UserPreferences.vue index 54ac7e34fd..f9a9a3f9cd 100644 --- a/web/src/components/modals/coresettings/UserPreferences.vue +++ b/web/src/components/modals/coresettings/UserPreferences.vue @@ -19,7 +19,7 @@
User Interface

-
Agent table double-click action:
+
Agent double-click action:
Date: Wed, 24 Feb 2021 09:34:30 +0000 Subject: [PATCH 13/21] remove border --- web/src/components/modals/coresettings/EditCoreSettings.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/src/components/modals/coresettings/EditCoreSettings.vue b/web/src/components/modals/coresettings/EditCoreSettings.vue index 54bbeff4e8..f77c875d9d 100644 --- a/web/src/components/modals/coresettings/EditCoreSettings.vue +++ b/web/src/components/modals/coresettings/EditCoreSettings.vue @@ -114,7 +114,7 @@
Recipients
- + Recipients
- + Date: Wed, 24 Feb 2021 09:36:59 +0000 Subject: [PATCH 14/21] more docs --- docs/docs/functions/maintenance_mode.md | 12 ++++++++++++ docs/docs/functions/remote_bg.md | 21 +++++++++++++++++++++ docs/docs/functions/user_ui.md | 8 ++++++++ docs/docs/images/maint_mode.png | Bin 0 -> 25740 bytes docs/docs/images/service_detail.png | Bin 0 -> 121075 bytes docs/docs/images/services_contextmenu.png | Bin 0 -> 42069 bytes docs/docs/images/taskmanager.png | Bin 0 -> 72063 bytes docs/docs/images/user_prefs.png | Bin 0 -> 3964 bytes docs/docs/images/user_prefs2.png | Bin 0 -> 14116 bytes docs/mkdocs.yml | 7 +++++-- 10 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 docs/docs/functions/maintenance_mode.md create mode 100644 docs/docs/functions/remote_bg.md create mode 100644 docs/docs/functions/user_ui.md create mode 100644 docs/docs/images/maint_mode.png create mode 100644 docs/docs/images/service_detail.png create mode 100644 docs/docs/images/services_contextmenu.png create mode 100644 docs/docs/images/taskmanager.png create mode 100644 docs/docs/images/user_prefs.png create mode 100644 docs/docs/images/user_prefs2.png diff --git a/docs/docs/functions/maintenance_mode.md b/docs/docs/functions/maintenance_mode.md new file mode 100644 index 0000000000..ab6a089983 --- /dev/null +++ b/docs/docs/functions/maintenance_mode.md @@ -0,0 +1,12 @@ +# Maintenance Mode + +Enabling maintenance mode for an agent will prevent any overdue/check/task email/sms alerts from being sent. + +It will also prevent clients/sites/agents from showing up as red in the dashboard if they have any failing checks or are overdue. + +To enable maintenance mode for all agents in a client/site, **Right Click** on a client / site and choose **Enable Maintenance Mode** + +![maint_mode](../images/maint_mode.png) + +To enable maintenance mode for a single agent, **Right Click** on the agent and choose **Enable Maintenance Mode** + diff --git a/docs/docs/functions/remote_bg.md b/docs/docs/functions/remote_bg.md new file mode 100644 index 0000000000..431043cd12 --- /dev/null +++ b/docs/docs/functions/remote_bg.md @@ -0,0 +1,21 @@ +# Remote Background + +To access: **Right click** on an agent > **Remote Background** + +#### Services Tab + +Right click on a service to show the context menu where you can start/stop/restart services: + +![services_contextmenu](../images/services_contextmenu.png) + +Click *Service Details* to bring up the details tab where you can edit more service options: + +![service_detail](../images/service_detail.png) + +#### Processes Tab + +A very basic task manager that shows real time process usage. + +**Right click** on a process to end the task: + +![taskmanager](../images/taskmanager.png) diff --git a/docs/docs/functions/user_ui.md b/docs/docs/functions/user_ui.md new file mode 100644 index 0000000000..d7a70cf36a --- /dev/null +++ b/docs/docs/functions/user_ui.md @@ -0,0 +1,8 @@ +# User Interface Preferences + +Click on your username at the top right of the dashboard > Preferences: + +![user_prefs](../images/user_prefs.png) + + +![user_prefs2](../images/user_prefs2.png) \ No newline at end of file diff --git a/docs/docs/images/maint_mode.png b/docs/docs/images/maint_mode.png new file mode 100644 index 0000000000000000000000000000000000000000..768c8c5a2c72bbd6eeeb941d03f3ad1575327605 GIT binary patch literal 25740 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 A?f?J) literal 0 HcmV?d00001 diff --git a/docs/docs/images/service_detail.png b/docs/docs/images/service_detail.png new file mode 100644 index 0000000000000000000000000000000000000000..23bc0e8963ff02dbd754d5b7f3b3ad7a149ee932 GIT binary patch literal 121075 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

Cs6c-ZS&4ay|07;j7V|WFqo|X1H{Wa1gj?Y>Q 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 literal 0 HcmV?d00001 diff --git a/docs/docs/images/user_prefs.png b/docs/docs/images/user_prefs.png new file mode 100644 index 0000000000000000000000000000000000000000..281e5d04aa7a0f57e70e3d7062e8ebf1026d2cce GIT binary patch literal 3964 zcmZvfWmpsb_P{rg?rsK%bO|UW!azEQqeMa)DJjW`Ac&%LN{E0kx+XcANlH7AmU5)P zVB}=i`{w@c{XhQ~=X;*d^L@^{^L)-ZZ%vJLXec=;0RRAvp6&y)zd7@7#E}#IeZ#jE z-u+F$05cs8K+PEU_FuT+1~vi%0QE^!_$MTPnc|tQbpQZB+xPDP4)~Ti0|0akdJn+R z5WD^S(8o*zyxqY}^6&j?M8!&FElXJm!JeOM0rUot+)1 zpUm?Z-W)<Cde#oXJgyE$e-^)cnx&7t%YceU_}`_7O1rWNx7K`P4TY~iF3ay$v@VszF? z&lE_>`O2lWS7A!?gw-Pu$+VpZn(D)>L7lgh47p%)ySSsM#$)Ba)w7eb!xj65Zut{OrKW``k<&x<*-Ny)VH$6Kizs6M-{N$E&7Y?9q2#NW>vP4ZV95{CUU z{z|m21g3)a2<4mjOMMNWxV4z3$ZZN>;GX@l$5tTvV`%f+vL;~c5#l&RUq~%GSV>g~ z1)L(rt5bd$7ShK;t=TEPoEU0u^D;-UHK|?Lam_4Qq|k@SG$vy(f>RT+kbWPQ zLUHA5hgv=eQT5HYuyj$*<99meU9Z)aYUwxnXA37!gh!mDxej3C z>x9~+_~2Y$r}gJ`yUkqYk63A6#2t5kEY71L{o}^NJq*GLu;8?Zimb#@ejPk^yEH$n zo}?xfCm0RaR(~gj)VasevD@1CMq*ZF$2UWUsKoGYp=i+1mKC#ath^CP=(ERF*P_4s zHO2bjb!|ZI@;T7fk+`C#r$a3y+NP z;5fc2qmeHkZXdEOyE7Vr>FFr(Hsq1hwAkJE47zc*Bd&{BOA>U3>*6;4nFYLYFo3t& zb+v-k2`O(Jp!4VZGsXOqdOjoncJQ*l&8?RReT$X%%|~pnqWW`D#tK;_mz# zTUKlchf?fW+wIJ^)g_6;8N?|bXSpAy6TDr=ozq{1QuRZjPK`@RYR^QfYd)0wx;PaI z6TZlR#)z&$EsYP@+aLy6Uqj8snyLxe5?j$#K?fM8kL- zd2Y{5?SewF_N;Kh%0r04Yh0lGhP|Shzy_4u@dQjPdh!N0$AL0c|8MvGj|l&Q8+(CQ zSTH$J{v#e<#rx-16vZjA-P{!BI@BB$>!f>aDWkpDg2_d0-bk6bq@0>r>qGD zf`gl;A=8fu1%G;6TwKc61_3b%TndR_9ft-7C*0jn^%P=4p^4G>FrYej`fnLh9) zy3ki9nzAS0Re=Lu(4K6~7O?bVwnWgGTc+UxNNScIEdUHGuJhpAv2OuxE1D6Dwgxx6 zq^E%W(PPzB4?@A^qTO`f04g+BP!ki$PX&~_%Z#R`r*8@i>u50?Xa@wym;Zz>cH$MY2AvuCzu`SN){y0@Sg-Zs;$jZo zQ8tlHsvs*{6kqg8S>dLlirfpl&F{DJ0QokU;p&)?YO`uZa19UzT%KYMyjm_2A*!P(kGf4et@9R`2if@u0|A zH=h-+bLY}U#VYup$t27vsSq?aZ%n~0EvYZ2vCtq)5Hso_5n6N+j27-XD$upcycXL|iw2sjE%QWWrCX@P#A*bJfD+ElOjr zKvEIvKjj~;tcOd;XQwh+4Iq%1q`d?ltQA%$*`?6*Ste_xvXrchR7dzsMXhaCdDch5 z&M|r+?Hzfp^r=^N?1BH6Hq)v3u~8x=YJ5jyf`g9Xs7F4BUsMV_lJnDOoc4M^qN4ZF z^=VX0=8`fSy_r1r(67D({n5`_)eTdxp=5jIjdTN=U!5YKIx3ub=d8cr+uZ#Abz#x+ zWq;y}j}|*d9IM9f6!yE&MQu|-xpU-s&zOT_nN|qjLthnoDKxK@{^SjP(6?FJ!6@~M z)v_TI=J>yK}0>&(YH=))2Qe>^p5|2evL1eo6-pud(qJ!%XA?uU{vPqVN;2<85>DQaRW_FR;au z9{;rlR2EOa?4^l`r05l=E*b4UY^zNAQDd-eZjjPGTiD(0v(4y4yyU{w+4Lc|-E(>p zS=33-ITOU+gS`5}kz4h&2)*E;Km4%FOuFdlbU~bCbt;oJf+QGD^38sIyVVb3peb$= z?Y*VD`RYBEIW)PkQcziw%`$+FcvK z*Q#18@m+6|<}Z>guel+O+vAPjQiUjZ;tms(hg-_?yAXXEl3!nAeGwHo>_P@fRUhCt zXqSI43$L5_SoZOXj-R{F4deJkioG0UVU)E9gzX7wp*i{a_SW*&`^)lDn=WL|26DM> zb!U6apf-{tyKMgC=zQe~7}DDAK?`|nsj0wqzmowe{proX2=+9w^;jcl=_A5JxZO}_ zNfpEf(UIrIsyxC%(SEaYRVYnRrM%0)J`DDmg~YL0>H)b^RTUM3@5}!f<$v_@545!7 z9qebX;Cx{R?4K(u4YcVGbgiv9q|ObQE)aC-|LvrIiq6X)!pn+8__AKz1KQf!^6>D) z(Sd{%_?J^=W@egesB|JclB6OTS$dg^qL}}^3;*AF@Xwa~|NYcI6ye`af7manh%rR# zylW9Z6RU}Vu#~A=ldDdMp!`_ipVA4?XTV05uM{tiFV~RkHRiL}b*)wmHe8NJdmVQH+ zgPRkLBJR^k_;MOXSlpV&sk@N=eIBM$I&;Q4V&WhmXr4N2f(f)6 z$m+^VvhKFi=r8Nz8?Pjf{@ce79?zu)s4QD_eUE1rdSc@0Z_}yv#JXzO-?) z=887^P> za1pE2>JACTF=Jh^0MKlg1aW#o7^Sar^2BM{$$fm51Ea&(5- ztRaVlS;hPJNG{Y1<9CRCR0-RH94h|T>ock49jM}0i^`eo2)2z{a%G(6qY8LOO;t|l z&+R*$W_Myaq|3YsAoYS+`OC#RRJTcjdH2gXw7;5Me`uvcH+T3ale=KLOXulqlK)(Z z|MdTak-;aR-GeA$v L_(6?^L-fA@HXolQ literal 0 HcmV?d00001 diff --git a/docs/docs/images/user_prefs2.png b/docs/docs/images/user_prefs2.png new file mode 100644 index 0000000000000000000000000000000000000000..5a00eb9ea6243a01a51c1e50be18130065b7a8be GIT binary patch literal 14116 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%0Dt+0UjYl;a5K}dD#A=)fRKK2 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 QqU)E=UpZF5j1LM2Oa{vGU literal 0 HcmV?d00001 diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index 3ee6368b43..00b72a2452 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -8,12 +8,15 @@ nav: - Updating: - "Updating the RMM": update_server.md - "Updating Agents": update_agents.md + - Functionality: + - "Remote Background": functions/remote_bg.md + - "Maintenance Mode": functions/maintenance_mode.md + - "Alerting": alerting.md + - "User Interface Preferences": functions/user_ui.md - Backup: backup.md - Restore: restore.md - Troubleshooting: troubleshooting.md - FAQ: faq.md - - Functionality: - - "Alerting": alerting.md - MeshCentral Integration: mesh_integration.md - License: license.md site_description: "A remote monitoring and management tool" From 281c75d2d2b1096fe6132bdac1a5b037462a6c67 Mon Sep 17 00:00:00 2001 From: wh1te909 Date: Wed, 24 Feb 2021 09:42:24 +0000 Subject: [PATCH 15/21] add find_software management command --- .../management/commands/find_software.py | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 api/tacticalrmm/software/management/commands/find_software.py diff --git a/api/tacticalrmm/software/management/commands/find_software.py b/api/tacticalrmm/software/management/commands/find_software.py new file mode 100644 index 0000000000..f6df755a70 --- /dev/null +++ b/api/tacticalrmm/software/management/commands/find_software.py @@ -0,0 +1,24 @@ +from django.core.management.base import BaseCommand +from agents.models import Agent + + +class Command(BaseCommand): + help = "Find all agents that have a certain software installed" + + def add_arguments(self, parser): + parser.add_argument("name", type=str) + + def handle(self, *args, **kwargs): + search = kwargs["name"].lower() + + agents = Agent.objects.all() + for agent in agents: + sw = agent.installedsoftware_set.first().software + for i in sw: + if search in i["name"].lower(): + self.stdout.write( + self.style.SUCCESS( + f"Found {i['name']} installed on {agent.hostname}" + ) + ) + break \ No newline at end of file From c3c24aa1db161705e99fa1dab00835589f5c572e Mon Sep 17 00:00:00 2001 From: wh1te909 Date: Wed, 24 Feb 2021 09:46:38 +0000 Subject: [PATCH 16/21] black --- api/tacticalrmm/software/management/commands/find_software.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/tacticalrmm/software/management/commands/find_software.py b/api/tacticalrmm/software/management/commands/find_software.py index f6df755a70..09256260f2 100644 --- a/api/tacticalrmm/software/management/commands/find_software.py +++ b/api/tacticalrmm/software/management/commands/find_software.py @@ -21,4 +21,4 @@ def handle(self, *args, **kwargs): f"Found {i['name']} installed on {agent.hostname}" ) ) - break \ No newline at end of file + break From 8bcc4e5945bed35f7625785695a3b60d6af13ad6 Mon Sep 17 00:00:00 2001 From: wh1te909 Date: Wed, 24 Feb 2021 10:04:45 +0000 Subject: [PATCH 17/21] fix docs styling --- docs/mkdocs.yml | 1 - docs/theme/main.html | 4 -- docs/theme/partials/footer.html | 70 --------------------------------- 3 files changed, 75 deletions(-) delete mode 100644 docs/theme/main.html delete mode 100644 docs/theme/partials/footer.html diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index 00b72a2452..fe304200e5 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -31,7 +31,6 @@ edit_uri: "" theme: name: "material" - custom_dir: "theme" logo: "images/onit.ico" favicon: "images/favicon.ico" language: "en" diff --git a/docs/theme/main.html b/docs/theme/main.html deleted file mode 100644 index d1c52d1f64..0000000000 --- a/docs/theme/main.html +++ /dev/null @@ -1,4 +0,0 @@ -{% extends "base.html" %} -{% block site_nav %} -{{ super() }} -{% endblock %} \ No newline at end of file diff --git a/docs/theme/partials/footer.html b/docs/theme/partials/footer.html deleted file mode 100644 index d330b3b9ef..0000000000 --- a/docs/theme/partials/footer.html +++ /dev/null @@ -1,70 +0,0 @@ -{% import "partials/language.html" as lang with context %} - - -

\ No newline at end of file From 1034b0b146ca173878728bf7c5e8852c376def3e Mon Sep 17 00:00:00 2001 From: wh1te909 Date: Wed, 24 Feb 2021 11:24:47 +0000 Subject: [PATCH 18/21] also reinstall py env / node modules during forced update --- update.sh | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/update.sh b/update.sh index ebbdd5574c..0bb46d1a4f 100644 --- a/update.sh +++ b/update.sh @@ -1,6 +1,6 @@ #!/bin/bash -SCRIPT_VERSION="111" +SCRIPT_VERSION="112" SCRIPT_URL='https://raw.githubusercontent.com/wh1te909/tacticalrmm/master/update.sh' LATEST_SETTINGS_URL='https://raw.githubusercontent.com/wh1te909/tacticalrmm/master/api/tacticalrmm/tacticalrmm/settings.py' YELLOW='\033[1;33m' @@ -22,6 +22,11 @@ fi rm -f $TMP_FILE +force=false +if [[ $* == *--force* ]]; then + force=true +fi + sudo apt update if [ $EUID -eq 0 ]; then @@ -116,12 +121,10 @@ SETTINGS_FILE="/rmm/api/tacticalrmm/tacticalrmm/settings.py" LATEST_TRMM_VER=$(grep "^TRMM_VERSION" "$TMP_SETTINGS" | awk -F'[= "]' '{print $5}') CURRENT_TRMM_VER=$(grep "^TRMM_VERSION" "$SETTINGS_FILE" | awk -F'[= "]' '{print $5}') -if [[ $* != *--force* ]]; then - if [[ "${CURRENT_TRMM_VER}" == "${LATEST_TRMM_VER}" ]]; then - printf >&2 "${GREEN}Already on latest version. Current version: ${CURRENT_TRMM_VER} Latest version: ${LATEST_TRMM_VER}${NC}\n" - rm -f $TMP_SETTINGS - exit 0 - fi +if [[ "${CURRENT_TRMM_VER}" == "${LATEST_TRMM_VER}" ]] && ! [[ "$force" = true ]]; then + printf >&2 "${GREEN}Already on latest version. Current version: ${CURRENT_TRMM_VER} Latest version: ${LATEST_TRMM_VER}${NC}\n" + rm -f $TMP_SETTINGS + exit 0 fi LATEST_MESH_VER=$(grep "^MESH_VER" "$TMP_SETTINGS" | awk -F'[= "]' '{print $5}') @@ -276,7 +279,7 @@ sudo cp /rmm/natsapi/bin/nats-api /usr/local/bin sudo chown ${USER}:${USER} /usr/local/bin/nats-api sudo chmod +x /usr/local/bin/nats-api -if [[ "${CURRENT_PIP_VER}" != "${LATEST_PIP_VER}" ]]; then +if [[ "${CURRENT_PIP_VER}" != "${LATEST_PIP_VER}" ]] || [[ "$force" = true ]]; then rm -rf /rmm/api/env cd /rmm/api python3.9 -m venv env @@ -303,7 +306,7 @@ deactivate rm -rf /rmm/web/dist rm -rf /rmm/web/.quasar cd /rmm/web -if [[ "${CURRENT_NPM_VER}" != "${LATEST_NPM_VER}" ]]; then +if [[ "${CURRENT_NPM_VER}" != "${LATEST_NPM_VER}" ]] || [[ "$force" = true ]]; then rm -rf /rmm/web/node_modules fi @@ -320,7 +323,7 @@ sudo systemctl start ${i} done CURRENT_MESH_VER=$(cd /meshcentral/node_modules/meshcentral && node -p -e "require('./package.json').version") -if [[ "${CURRENT_MESH_VER}" != "${LATEST_MESH_VER}" ]]; then +if [[ "${CURRENT_MESH_VER}" != "${LATEST_MESH_VER}" ]] || [[ "$force" = true ]]; then printf >&2 "${GREEN}Updating meshcentral from ${CURRENT_MESH_VER} to ${LATEST_MESH_VER}${NC}\n" sudo systemctl stop meshcentral sudo chown ${USER}:${USER} -R /meshcentral @@ -328,7 +331,6 @@ if [[ "${CURRENT_MESH_VER}" != "${LATEST_MESH_VER}" ]]; then rm -rf node_modules/ npm install meshcentral@${LATEST_MESH_VER} sudo systemctl start meshcentral - sleep 10 fi rm -f $TMP_SETTINGS From 6052088eb45d54e15256b3aef6fca75c1a7206e4 Mon Sep 17 00:00:00 2001 From: wh1te909 Date: Wed, 24 Feb 2021 19:23:47 +0000 Subject: [PATCH 19/21] grab postgres creds automatically for backup closes #285 --- backup.sh | 17 ++++------------- docs/docs/backup.md | 22 ---------------------- docs/docs/restore.md | 24 +++++++++++++++++++++--- 3 files changed, 25 insertions(+), 38 deletions(-) diff --git a/backup.sh b/backup.sh index 77cde27f2f..870052bb2e 100755 --- a/backup.sh +++ b/backup.sh @@ -1,13 +1,6 @@ #!/bin/bash -##################################################### - -POSTGRES_USER="changeme" -POSTGRES_PW="hunter2" - -##################################################### - -SCRIPT_VERSION="9" +SCRIPT_VERSION="10" SCRIPT_URL='https://raw.githubusercontent.com/wh1te909/tacticalrmm/master/backup.sh' GREEN='\033[0;32m' @@ -31,11 +24,9 @@ if [ $EUID -eq 0 ]; then exit 1 fi -if [[ "$POSTGRES_USER" == "changeme" || "$POSTGRES_PW" == "hunter2" ]]; then - printf >&2 "${RED}You must change the postgres username/password at the top of this file.${NC}\n" - printf >&2 "${RED}Check the github readme for where to find them.${NC}\n" - exit 1 -fi +POSTGRES_USER=$(grep -w USER /rmm/api/tacticalrmm/tacticalrmm/local_settings.py | sed 's/^.*: //' | sed 's/.//' | sed -r 's/.{2}$//') +POSTGRES_PW=$(grep -w PASSWORD /rmm/api/tacticalrmm/tacticalrmm/local_settings.py | sed 's/^.*: //' | sed 's/.//' | sed -r 's/.{2}$//') + if [ ! -d /rmmbackups ]; then sudo mkdir /rmmbackups diff --git a/docs/docs/backup.md b/docs/docs/backup.md index 03fd1b294a..bcbbad4bc3 100644 --- a/docs/docs/backup.md +++ b/docs/docs/backup.md @@ -7,28 +7,6 @@ Download the backup script: wget https://raw.githubusercontent.com/wh1te909/tacticalrmm/master/backup.sh ``` -Edit `backup.sh` with your text editor of choice. - -Change the postgres username/password at the top of the file. -You can find this info in the following file: -``` -/rmm/api/tacticalrmm/tacticalrmm/local_settings.py -``` - -Look for this section and grab the USER / PASSWORD: -```python -DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.postgresql', - 'NAME': 'tacticalrmm', - 'USER': 'someusername', - 'PASSWORD': 'somepassword', - 'HOST': 'localhost', - 'PORT': '5432', - } -} -``` - From the Web UI, click **Tools > Server Maintenance** Choose **Prune DB Tables** from the dropdown and check the `Audit Log` and `Pending Actions` checkboxes, and then click **Submit** diff --git a/docs/docs/restore.md b/docs/docs/restore.md index 458413ff2f..95f82920c5 100644 --- a/docs/docs/restore.md +++ b/docs/docs/restore.md @@ -25,11 +25,29 @@ Download the restore script. wget https://raw.githubusercontent.com/wh1te909/tacticalrmm/master/restore.sh ``` -Edit the restore script with your editor of choice and change the postgres username/password at the top of the file. +Edit `restore.sh` with your text editor of choice. -Refer to the [backup](backup.md) instructions on where to find this info. +Change the postgres username/password at the top of the file. +You can find this info in the following file: +``` +/rmm/api/tacticalrmm/tacticalrmm/local_settings.py +``` + +Look for this section and grab the USER / PASSWORD: +```python +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.postgresql', + 'NAME': 'tacticalrmm', + 'USER': 'someusername', + 'PASSWORD': 'somepassword', + 'HOST': 'localhost', + 'PORT': '5432', + } +} +``` -Copy the backup tar file to the new server and then call the restore script, passing it the backup file as the first argument: +Copy the [backup](backup.md) tar file to the new server and then call the restore script, passing it the backup file as the first argument: ```bash chmod +x restore.sh From afa1e19c8336c967b89fbbb8d1dde9ecec8d466d Mon Sep 17 00:00:00 2001 From: wh1te909 Date: Wed, 24 Feb 2021 20:39:02 +0000 Subject: [PATCH 20/21] also grep postgres info during restore #285 --- docs/docs/restore.md | 24 +----------------------- restore.sh | 43 ++++++++++++++++++------------------------- 2 files changed, 19 insertions(+), 48 deletions(-) diff --git a/docs/docs/restore.md b/docs/docs/restore.md index 95f82920c5..188486e05e 100644 --- a/docs/docs/restore.md +++ b/docs/docs/restore.md @@ -25,29 +25,7 @@ Download the restore script. wget https://raw.githubusercontent.com/wh1te909/tacticalrmm/master/restore.sh ``` -Edit `restore.sh` with your text editor of choice. - -Change the postgres username/password at the top of the file. -You can find this info in the following file: -``` -/rmm/api/tacticalrmm/tacticalrmm/local_settings.py -``` - -Look for this section and grab the USER / PASSWORD: -```python -DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.postgresql', - 'NAME': 'tacticalrmm', - 'USER': 'someusername', - 'PASSWORD': 'somepassword', - 'HOST': 'localhost', - 'PORT': '5432', - } -} -``` - -Copy the [backup](backup.md) tar file to the new server and then call the restore script, passing it the backup file as the first argument: +Call the restore script, passing it the backup file as the first argument: ```bash chmod +x restore.sh diff --git a/restore.sh b/restore.sh index bcaa61bfb8..8784b60e24 100755 --- a/restore.sh +++ b/restore.sh @@ -1,15 +1,9 @@ #!/bin/bash -##################################################### - -pgusername="changeme" -pgpw="hunter2" - -##################################################### - -SCRIPT_VERSION="18" +SCRIPT_VERSION="19" SCRIPT_URL='https://raw.githubusercontent.com/wh1te909/tacticalrmm/master/restore.sh' +sudo apt update sudo apt install -y curl wget dirmngr gnupg lsb-release GREEN='\033[0;32m' @@ -31,12 +25,6 @@ fi rm -f $TMP_FILE -if [[ "$pgusername" == "changeme" || "$pgpw" == "hunter2" ]]; then - printf >&2 "${RED}You must change the postgres username/password at the top of this file.${NC}\n" - printf >&2 "${RED}Check the github readme for where to find them.${NC}\n" - exit 1 -fi - osname=$(lsb_release -si); osname=${osname^} osname=$(echo "$osname" | tr '[A-Z]' '[a-z]') fullrel=$(lsb_release -sd) @@ -218,18 +206,7 @@ sudo apt update sudo apt install -y postgresql-13 sleep 2 -print_green 'Restoring the database' - -sudo -u postgres psql -c "DROP DATABASE IF EXISTS tacticalrmm" -sudo -u postgres psql -c "CREATE DATABASE tacticalrmm" -sudo -u postgres psql -c "CREATE USER ${pgusername} WITH PASSWORD '${pgpw}'" -sudo -u postgres psql -c "ALTER ROLE ${pgusername} SET client_encoding TO 'utf8'" -sudo -u postgres psql -c "ALTER ROLE ${pgusername} SET default_transaction_isolation TO 'read committed'" -sudo -u postgres psql -c "ALTER ROLE ${pgusername} SET timezone TO 'UTC'" -sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE tacticalrmm TO ${pgusername}" -gzip -d $tmp_dir/postgres/*.psql.gz -PGPASSWORD=${pgpw} psql -h localhost -U ${pgusername} -d tacticalrmm -f $tmp_dir/postgres/db*.psql print_green 'Restoring MongoDB' @@ -281,6 +258,22 @@ sudo cp /rmm/natsapi/bin/nats-api /usr/local/bin sudo chown ${USER}:${USER} /usr/local/bin/nats-api sudo chmod +x /usr/local/bin/nats-api +print_green 'Restoring the database' + +pgusername=$(grep -w USER /rmm/api/tacticalrmm/tacticalrmm/local_settings.py | sed 's/^.*: //' | sed 's/.//' | sed -r 's/.{2}$//') +pgpw=$(grep -w PASSWORD /rmm/api/tacticalrmm/tacticalrmm/local_settings.py | sed 's/^.*: //' | sed 's/.//' | sed -r 's/.{2}$//') + +sudo -u postgres psql -c "DROP DATABASE IF EXISTS tacticalrmm" +sudo -u postgres psql -c "CREATE DATABASE tacticalrmm" +sudo -u postgres psql -c "CREATE USER ${pgusername} WITH PASSWORD '${pgpw}'" +sudo -u postgres psql -c "ALTER ROLE ${pgusername} SET client_encoding TO 'utf8'" +sudo -u postgres psql -c "ALTER ROLE ${pgusername} SET default_transaction_isolation TO 'read committed'" +sudo -u postgres psql -c "ALTER ROLE ${pgusername} SET timezone TO 'UTC'" +sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE tacticalrmm TO ${pgusername}" + +gzip -d $tmp_dir/postgres/*.psql.gz +PGPASSWORD=${pgpw} psql -h localhost -U ${pgusername} -d tacticalrmm -f $tmp_dir/postgres/db*.psql + cd /rmm/api python3.9 -m venv env source /rmm/api/env/bin/activate From dee68f693303f497c54c8dbdaaffe7c5b381a454 Mon Sep 17 00:00:00 2001 From: wh1te909 Date: Wed, 24 Feb 2021 20:51:47 +0000 Subject: [PATCH 21/21] bump versions --- api/tacticalrmm/tacticalrmm/settings.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/api/tacticalrmm/tacticalrmm/settings.py b/api/tacticalrmm/tacticalrmm/settings.py index 3c27ba93cc..2149e03cb4 100644 --- a/api/tacticalrmm/tacticalrmm/settings.py +++ b/api/tacticalrmm/tacticalrmm/settings.py @@ -15,14 +15,14 @@ AUTH_USER_MODEL = "accounts.User" # latest release -TRMM_VERSION = "0.4.17" +TRMM_VERSION = "0.4.18" # bump this version everytime vue code is changed # to alert user they need to manually refresh their browser -APP_VER = "0.0.115" +APP_VER = "0.0.116" # https://github.com/wh1te909/rmmagent -LATEST_AGENT_VER = "1.4.6" +LATEST_AGENT_VER = "1.4.7" MESH_VER = "0.7.73"

+I7{!EB-V*R)EtKqc@T%#>2YULN#EQpS&wc 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 WH`(WIvY;bEAo4OQ(gl)_{QnPYs-IB+ literal 0 HcmV?d00001 diff --git a/docs/docs/images/services_contextmenu.png b/docs/docs/images/services_contextmenu.png new file mode 100644 index 0000000000000000000000000000000000000000..a5f3233f99a7dd3a6f12e84fda8824ab1586e744 GIT binary patch literal 42069 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 literal 0 HcmV?d00001 diff --git a/docs/docs/images/taskmanager.png b/docs/docs/images/taskmanager.png new file mode 100644 index 0000000000000000000000000000000000000000..4d37e68c26b67561db93e62220d7671272bed937 GIT binary patch literal 72063 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