add service definitions for superpowerd + elevate adapter

openrc: single service (ollie.initd) manages both superpowerd and the
elevate adapter via start_post/stop_pre, since supervise-daemon only
supervises one process and openrc has no PartOf equivalent.

systemd: two user services with native dependency management.
superpowerd.service runs the daemon; ollie-elevate-adapter.service
depends on it via Requires+PartOf (auto-stops with superpowerd).
This commit is contained in:
Ollie Agent 2026-07-21 12:30:01 +02:00
parent 2803fb30f3
commit 228e0c48d6
3 changed files with 91 additions and 0 deletions

View File

@ -0,0 +1,58 @@
#!/sbin/openrc-run
description="Ollie agent runtime: superpowerd + elevate adapter"
supervisor=supervise-daemon
: ${DBUS_SESSION_BUS_ADDRESS:=$(cat /proc/$(pgrep -u $USER plasmashell | head -1)/environ 2>/dev/null | tr '\0' '\n' | sed -n 's/^DBUS_SESSION_BUS_ADDRESS=//p')}
: ${DBUS_SESSION_BUS_ADDRESS:="unix:path=${XDG_RUNTIME_DIR}/bus"}
export DBUS_SESSION_BUS_ADDRESS
command="/home/lkn/.local/bin/superpowerd"
command_args="${SUPERPOWERD_OPTS}"
output_log="${XDG_RUNTIME_DIR}/superpowerd/superpowerd.log"
error_log="${XDG_RUNTIME_DIR}/superpowerd/superpowerd.log"
respawn_delay=3
respawn_max=10
respawn_period=60
: ${OLLIE_CFG_PATH:="${HOME}/.config/ollie"}
elevate_adapter="${OLLIE_CFG_PATH}/scripts/x/elevate-adapter-superpowerd"
elevate_sock="${OLLIE_ELEVATE_SOCKET:-${XDG_RUNTIME_DIR}/ollie/elevate.sock}"
depend() {
need dbus
use ssh-agent
}
start_pre() {
checkpath -o $USER -d "${XDG_RUNTIME_DIR}/superpowerd"
}
start_post() {
# Give superpowerd a moment to bind its socket
sleep 0.5
# Start the elevate adapter
if [ -x "${elevate_adapter}" ] || [ -f "${elevate_adapter}" ]; then
ebegin "Starting elevate-adapter"
export OLLIE_ELEVATE_SOCKET="${elevate_sock}"
checkpath -o $USER -d "$(dirname ${elevate_sock})"
python3 "${elevate_adapter}" >/dev/null 2>&1 &
echo $! > "${XDG_RUNTIME_DIR}/superpowerd/elevate-adapter.pid"
eend 0
fi
}
stop_pre() {
# Kill the elevate adapter when stopping
if [ -f "${XDG_RUNTIME_DIR}/superpowerd/elevate-adapter.pid" ]; then
ebegin "Stopping elevate-adapter"
kill $(cat "${XDG_RUNTIME_DIR}/superpowerd/elevate-adapter.pid") 2>/dev/null
rm -f "${XDG_RUNTIME_DIR}/superpowerd/elevate-adapter.pid"
rm -f "${elevate_sock}"
eend 0
fi
}

View File

@ -0,0 +1,17 @@
[Unit]
Description=Ollie elevate adapter (superpowerd bridge)
After=superpowerd.service
Requires=superpowerd.service
PartOf=superpowerd.service
[Service]
Type=simple
ExecStartPre=/bin/mkdir -p %t/ollie
ExecStart=/usr/bin/python3 %h/.config/ollie/scripts/x/elevate-adapter-superpowerd
Environment=OLLIE_ELEVATE_SOCKET=%t/ollie/elevate.sock
Environment=XDG_RUNTIME_DIR=/run/user/%U
Restart=on-failure
RestartSec=3
[Install]
WantedBy=default.target

View File

@ -0,0 +1,16 @@
[Unit]
Description=Superpowerd elevated execution daemon
After=dbus.service
Requires=dbus.service
[Service]
Type=simple
ExecStart=%h/.local/bin/superpowerd
Restart=on-failure
RestartSec=3
Environment=XDG_RUNTIME_DIR=/run/user/%U
RuntimeDirectory=superpowerd
LogsDirectory=superpowerd
[Install]
WantedBy=default.target