From c58a64be77d4fe0640616851af294300d60233c4 Mon Sep 17 00:00:00 2001
From: Harald Pfeiffer <coding@lirion.de>
Date: Thu, 24 Mar 2022 17:37:10 +0100
Subject: InComm, +wiper

---
 erase-broken-modules/README.md | 18 ++++++++++++++++++
 erase-broken-modules/wiper     |  9 +++++++++
 erase-broken-modules/wiper.rsc | 27 +++++++++++++++++++++++++++
 3 files changed, 54 insertions(+)
 create mode 100644 erase-broken-modules/README.md
 create mode 100755 erase-broken-modules/wiper
 create mode 100644 erase-broken-modules/wiper.rsc

(limited to 'erase-broken-modules')

diff --git a/erase-broken-modules/README.md b/erase-broken-modules/README.md
new file mode 100644
index 0000000..32a993d
--- /dev/null
+++ b/erase-broken-modules/README.md
@@ -0,0 +1,18 @@
+# Scenario
+
+For whatever reason, you end up with a MikroTīk device with broken modules. Whatever you do, they
+will not disappear. Also, in my scenario – the user module was broken – one of two devices never applied
+any update, and the other even did not remember most changes.
+
+The solution is to:
+
+1. Uninstall all packages that can be uninstalled (except for system)
+1. Disable all packages that cannot be uninstalled (mostly because they are bundled)
+1. Place an update to the device's root
+1. Reboot
+
+You will then end up with an updated device, no other modules installed, and in 2/2 cases for me
+all setting were still present. Of course a backup prior to this is still highly recommended.
+
+This folder contains an example rsc file managing the actions on the device and an example script
+copying the update and firing the rsc.
diff --git a/erase-broken-modules/wiper b/erase-broken-modules/wiper
new file mode 100755
index 0000000..5c8a7f5
--- /dev/null
+++ b/erase-broken-modules/wiper
@@ -0,0 +1,9 @@
+#!/usr/bin/env sh
+
+MIKROTIK_HOSTNAME="banana"
+NPK_VERSION="6.49.5"
+ARCH="arm"
+
+scp wiper.rsc "${MIKROTIK_HOSTNAME}:wiper.rsc"||exit 1
+scp "routeros-${ARCH}-${NPK_VERSION}.npk" "${MIKROTIK_HOSTNAME}:routeros-${ARCH}-${NPK_VERSION}.npk"||exit 2
+ssh "$MIKROTIK_HOSTNAME" "/import wiper.rsc"
diff --git a/erase-broken-modules/wiper.rsc b/erase-broken-modules/wiper.rsc
new file mode 100644
index 0000000..dd6bd7a
--- /dev/null
+++ b/erase-broken-modules/wiper.rsc
@@ -0,0 +1,27 @@
+# vim:syntax=rsc:ts=4
+# procedure: 1. try manually to uninstall a package. unless that works add it to pkgdis, if it works --> pkguninst.
+#               leave routeros-* in uninstall.
+#            2. put an UPGRADE package into the root folder of the device, put this rsc file on a disk
+#            3. execute the rsc file
+# ...not yet tested with a downgrade package.
+:global pkguninst {"lora";"ups";"gps";"ntp";"openflow";"user-manager";"multicast";"calea";"tr069-client";"routeros-arm"}
+:global pkgdis {"ipv6";"wireless";"hotspot";"mpls";"routing";"ppp";"dhcp";"security";"advanced-tools"}
+
+# -------------------------- #
+
+#:put "uptime:"
+:global uptime [/system resource get uptime]
+:global cpu [/system resource get cpu]
+:global arch [/system resource get architecture-name]
+:put "CPU: $cpu ($arch) - Uptime: $uptime\n"
+:put "Setting packages to disabled..."
+:foreach pd in=$pkgdis do={
+	/system package disable $pd
+}
+:put "Setting packages to uninstall..."
+:foreach pu in=$pkguninst do={
+	/system package uninstall $pu
+}
+:put "Rebooting..."
+
+/system reboot
-- 
cgit v1.2.3