From 857a1ab9c47dd930f377f928154bf2330fbc02a9 Mon Sep 17 00:00:00 2001 From: wh1te909 Date: Sat, 24 Feb 2024 23:19:03 +0000 Subject: [PATCH] handle old node and add mgmt command for sync mesh --- .../core/management/commands/run_all_tasks.py | 2 + .../commands/sync_mesh_with_trmm.py | 15 ++++ install.sh | 1 + update.sh | 76 ++++++++++++------- 4 files changed, 68 insertions(+), 26 deletions(-) create mode 100644 api/tacticalrmm/core/management/commands/sync_mesh_with_trmm.py diff --git a/api/tacticalrmm/core/management/commands/run_all_tasks.py b/api/tacticalrmm/core/management/commands/run_all_tasks.py index 006058ed..366d2c3c 100644 --- a/api/tacticalrmm/core/management/commands/run_all_tasks.py +++ b/api/tacticalrmm/core/management/commands/run_all_tasks.py @@ -8,6 +8,7 @@ from core.tasks import ( core_maintenance_tasks, resolve_alerts_task, resolve_pending_actions, + sync_mesh_perms_task, sync_scheduled_tasks, ) from winupdate.tasks import auto_approve_updates_task, check_agent_update_schedule_task @@ -28,3 +29,4 @@ class Command(BaseCommand): remove_orphaned_win_tasks.delay() auto_approve_updates_task.delay() check_agent_update_schedule_task.delay() + sync_mesh_perms_task.delay() diff --git a/api/tacticalrmm/core/management/commands/sync_mesh_with_trmm.py b/api/tacticalrmm/core/management/commands/sync_mesh_with_trmm.py new file mode 100644 index 00000000..14dea0e5 --- /dev/null +++ b/api/tacticalrmm/core/management/commands/sync_mesh_with_trmm.py @@ -0,0 +1,15 @@ +from django.core.management.base import BaseCommand + +from core.tasks import sync_mesh_perms_task + + +class Command(BaseCommand): + help = "Sync mesh users/perms with trmm users/perms" + + def handle(self, *args, **kwargs): + self.stdout.write( + self.style.SUCCESS( + "Syncing trmm users/permissions with meshcentral, this might take a long time...please wait..." + ) + ) + sync_mesh_perms_task() diff --git a/install.sh b/install.sh index c33ff3a7..f8095b10 100644 --- a/install.sh +++ b/install.sh @@ -975,6 +975,7 @@ cd /rmm/api/tacticalrmm source /rmm/api/env/bin/activate python manage.py initial_db_setup python manage.py reload_nats +python manage.py sync_mesh_with_trmm deactivate sudo systemctl start nats.service diff --git a/update.sh b/update.sh index c8b47308..cf0d86af 100644 --- a/update.sh +++ b/update.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -SCRIPT_VERSION="151" +SCRIPT_VERSION="152" SCRIPT_URL='https://raw.githubusercontent.com/amidaware/tacticalrmm/master/update.sh' LATEST_SETTINGS_URL='https://raw.githubusercontent.com/amidaware/tacticalrmm/master/api/tacticalrmm/tacticalrmm/settings.py' YELLOW='\033[1;33m' @@ -249,8 +249,55 @@ if ! which npm >/dev/null; then sudo apt install -y npm fi +# older distros still might not have npm after above command, due to recent changes to node apt packages which replaces nodesource with official node +# if we still don't have npm, force a switch to nodesource +if ! which npm >/dev/null; then + sudo systemctl stop meshcentral + sudo chown ${USER}:${USER} -R /meshcentral + sudo apt remove -y nodejs + sudo rm -rf /usr/lib/node_modules + + curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg + NODE_MAJOR=20 + echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list + sudo apt update + sudo apt install -y gcc g++ make + sudo apt install -y nodejs + sudo npm install -g npm + + cd /meshcentral + rm -rf node_modules/ package-lock.json + npm install + sudo systemctl start meshcentral +fi + sudo npm install -g npm +CURRENT_MESH_VER=$(cd /meshcentral/node_modules/meshcentral && node -p -e "require('./package.json').version") +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 + cd /meshcentral + rm -rf node_modules/ package.json package-lock.json + mesh_pkg="$( + cat </meshcentral/package.json + npm install + sudo systemctl start meshcentral +fi + # update from main repo cd /rmm git config user.email "admin@example.com" @@ -346,6 +393,7 @@ sudo chown -R ${USER}:${USER} /opt/tactical python manage.py pre_update_tasks celery -A tacticalrmm purge -f +printf >&2 "${GREEN}Running database migrations (this might take a long time)...${NC}\n" python manage.py migrate python manage.py generate_json_schemas python manage.py delete_tokens @@ -356,6 +404,7 @@ python manage.py create_installer_user python manage.py create_natsapi_conf python manage.py create_uwsgi_conf python manage.py clear_redis_celery_locks +python manage.py sync_mesh_with_trmm python manage.py post_update_tasks echo "Running management commands...please wait..." API=$(python manage.py get_config api) @@ -510,30 +559,5 @@ for i in nats nats-api rmm daphne celery celerybeat nginx; do 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}" ]] || [[ "$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 - cd /meshcentral - rm -rf node_modules/ package.json package-lock.json - mesh_pkg="$( - cat </meshcentral/package.json - npm install - sudo systemctl start meshcentral -fi - rm -f $TMP_SETTINGS printf >&2 "${GREEN}Update finished!${NC}\n"