Arksine / moonraker

Web API Server for Klipper
https://moonraker.readthedocs.io
GNU General Public License v3.0
1.05k stars 403 forks source link

[bug] restart dbus service when installing policykit #451

Open bassco opened 2 years ago

bassco commented 2 years ago

What happened

os version

$ cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 11 (bullseye)"
NAME="Raspbian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"

polkit-1 version

$ dpkg -l policykit-1|grep ^ii
ii  policykit-1    0.105-31+rpt1+deb11u1 armhf        framework for managing administrative policies and privileges
[0.105-31+deb11u1](https://sources.debian.org/patches/policykit-1/0.105-31+deb11u1/) (main) [bullseye]
$ dpkg -l|grep packagekit|grep ^ii
ii  libpackagekit-glib2-18:armhf         1.2.2-2                          armhf        Library for accessing PackageKit using GLib
ii  packagekit                           1.2.2-2                          armhf        Provides a package management service
ii  packagekit-tools                     1.2.2-2                          armhf        Provides PackageKit command-line tools

policy actions installed

$ pkaction|grep -Ei "pol|package"
pkaction|grep -Ei "pol|package"
org.freedesktop.packagekit.cancel-foreign
org.freedesktop.packagekit.clear-offline-update
org.freedesktop.packagekit.device-rebind
org.freedesktop.packagekit.package-downgrade
org.freedesktop.packagekit.package-eula-accept
org.freedesktop.packagekit.package-install
org.freedesktop.packagekit.package-install-untrusted
org.freedesktop.packagekit.package-reinstall
org.freedesktop.packagekit.package-remove
org.freedesktop.packagekit.repair-system
org.freedesktop.packagekit.system-network-proxy-configure
org.freedesktop.packagekit.system-sources-configure
org.freedesktop.packagekit.system-sources-refresh
org.freedesktop.packagekit.system-trust-signing-key
org.freedesktop.packagekit.system-update
org.freedesktop.packagekit.trigger-offline-update
org.freedesktop.packagekit.trigger-offline-upgrade
org.freedesktop.packagekit.upgrade-system
org.freedesktop.policykit.exec
org.freedesktop.policykit.lockdown

I kept getting moonraker policykit errors.

The errors eventually went away after restarting dbus and moonraker.

I did not restart the pi - old habits die hard 😉

sudo systemctl restart dbus
sudo systemctl restart moonraker 

Client

Fluidd

Browser

Chrome

How to reproduce

$ cd ~/moonraker/scripts
$ ./set-policykit-rules.sh -c
$ sudo systemctl restart dbus
$ sudo systemctl restart moonraker

# connect to moonraker and get policykit errors

# Install the policies

$ ./set-policykit-rules.sh

# connect to moonraker and get policykit errors

# restart the dbus service and refresh moonraker

$ sudo systemctl restart dbus
$ sudo systemctl restart moonraker

# connect to moonraker without errors 🚀 

# moonraker caches the dbus initialisation, hence it requires a restart after dbus 

Additional information

diff --git a/scripts/set-policykit-rules.sh b/scripts/set-policykit-rules.sh
index 4fb78ad..4d7e74d 100755
--- a/scripts/set-policykit-rules.sh
+++ b/scripts/set-policykit-rules.sh
@@ -111,6 +111,15 @@ verify_ready()
     fi
 }

+restart_services()
+{
+    if [ $DISABLE_SYSTEMCTL = "n" ]; then
+        report_status "Restarting Moonraker Services..."
+        sudo systemctl restart dbus
+        sudo systemctl restart moonraker
+    fi
+}
+
 CLEAR="n"
 ROOT="n"
 DISABLE_SYSTEMCTL="n"
@@ -140,12 +149,10 @@ fi

 if [ "$CLEAR" = "y" ]; then
     clear_polkit_rules
+    restart_services
 else
     set -e
     check_moonraker_service
     add_polkit_rules
-    if [ $DISABLE_SYSTEMCTL = "n" ]; then
-        report_status "Restarting Moonraker..."
-        sudo systemctl restart moonraker
-    fi
+    restart_services
 fi
bassco commented 2 years ago

An alternative is to ensure moonraker restarts if dbus is restarted, by using BindsTo.

$ head moonraker.service
#Systemd service file for moonraker

[Unit]
Description=Starts Moonraker on startup
After=network.target
BindsTo=dbus.service

[Install]
WantedBy=multi-user.target