aboutsummaryrefslogtreecommitdiffstats
path: root/packaging/rpm/meshbay-node.spec
diff options
context:
space:
mode:
Diffstat (limited to 'packaging/rpm/meshbay-node.spec')
-rw-r--r--packaging/rpm/meshbay-node.spec19
1 files changed, 17 insertions, 2 deletions
diff --git a/packaging/rpm/meshbay-node.spec b/packaging/rpm/meshbay-node.spec
index 9b9c6bf..89f3a0a 100644
--- a/packaging/rpm/meshbay-node.spec
+++ b/packaging/rpm/meshbay-node.spec
@@ -70,8 +70,23 @@ if [ -d /run/systemd/system ]; then
fi
%preun
-if [ -d /run/systemd/system ]; then
- systemctl daemon-reload || true
+# A node left running once its package is gone serves from deleted code, and
+# keeps writing bytecode into the shared venv. Every instance stops on erase
+# ($1 = 0): the system ones, and the user service in each running user manager.
+if [ "$1" -eq 0 ] && [ -d /run/systemd/system ]; then
+ systemctl stop 'meshbay-node@*.service' 2>/dev/null || true
+ for bus in /run/user/*/systemd/private; do
+ [ -S "$bus" ] || continue
+ uid=$(basename "$(dirname "$(dirname "$bus")")")
+ user=$(id -nu "$uid" 2>/dev/null) || continue
+ systemctl --user -M "$user@" stop meshbay-node.service 2>/dev/null || true
+ done
+fi
+# The node's code lives in meshbay-common's venv, whose own cleanup runs only
+# after this package is gone: the bytecode compiled next to it is removed here.
+if [ "$1" -eq 0 ]; then
+ find /opt/meshbay-common/venv/lib/python3.*/site-packages/meshbay_node \
+ -depth -type d -name __pycache__ -exec rm -rf {} + 2>/dev/null || true
fi
%files