2026-05-01 13:10:33 +02:00
|
|
|
#!/bin/bash
|
2026-05-16 09:31:45 +02:00
|
|
|
set -euo pipefail
|
2026-05-14 20:47:53 +02:00
|
|
|
# Pfade
|
2026-05-13 20:24:30 +02:00
|
|
|
BOOTC="/usr/bin/bootc"
|
|
|
|
|
LOGGER="/usr/bin/logger"
|
|
|
|
|
LOGINCTL="/usr/bin/loginctl"
|
|
|
|
|
NOTIFY="/usr/bin/notify-send"
|
|
|
|
|
SUDO="/usr/bin/sudo"
|
|
|
|
|
SYSTEMCTL="/usr/bin/systemctl"
|
|
|
|
|
|
|
|
|
|
TAG="bootc-timer"
|
2026-05-01 13:10:33 +02:00
|
|
|
|
2026-05-11 17:47:32 +02:00
|
|
|
# 1. Upgrade ausführen
|
2026-05-14 20:47:53 +02:00
|
|
|
$BOOTC upgrade
|
2026-05-03 21:15:43 +02:00
|
|
|
|
2026-05-17 20:32:49 +02:00
|
|
|
# 2. Status-Check mit jq
|
|
|
|
|
# Wenn .status.staged gleich null ist, liefert jq den Exit-Code 0 (wahr)
|
2026-05-17 20:30:06 +02:00
|
|
|
if $BOOTC status --json | jq -e '.status.staged == null' >/dev/null; then
|
|
|
|
|
# KEIN Update gefunden
|
2026-05-16 09:31:45 +02:00
|
|
|
$LOGGER -t "$TAG" "System aktuell (keine Updates vorhanden)."
|
|
|
|
|
else
|
|
|
|
|
|
2026-05-14 20:47:53 +02:00
|
|
|
# 3. Den ersten User finden, der nicht Root ist
|
|
|
|
|
USER_ID=$($LOGINCTL list-users --no-legend | awk '$2 != "root" {print $1; exit}')
|
2026-05-11 17:47:32 +02:00
|
|
|
|
2026-05-14 20:47:53 +02:00
|
|
|
if [[ -z "$USER_ID" ]]; then
|
2026-05-16 09:31:45 +02:00
|
|
|
# Update bereit, aber kein aktiver Desktop-User gefunden. Protokollieren und beenden.
|
2026-05-13 20:24:30 +02:00
|
|
|
$LOGGER -t "$TAG" "Update bereit, aber kein aktiver Desktop-User gefunden."
|
2026-05-14 20:47:53 +02:00
|
|
|
exit 0
|
|
|
|
|
fi
|
|
|
|
|
|
2026-05-16 09:31:45 +02:00
|
|
|
# 4. Benachrichtigung senden (Im Kontext des Benutzers)
|
2026-05-14 20:47:53 +02:00
|
|
|
ACTION=$($SUDO -u "#$USER_ID" env \
|
|
|
|
|
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$USER_ID/bus \
|
|
|
|
|
XDG_RUNTIME_DIR=/run/user/$USER_ID \
|
|
|
|
|
$NOTIFY "System-Update bereit" \
|
|
|
|
|
"Ein neues Image wurde heruntergeladen. Jetzt neu starten?" \
|
2026-05-17 21:10:24 +02:00
|
|
|
--app-name="System-Update" \
|
2026-05-14 20:47:53 +02:00
|
|
|
--icon=software-update-available \
|
|
|
|
|
--urgency=critical \
|
|
|
|
|
--action="reboot=Jetzt neu starten" \
|
|
|
|
|
--wait)
|
|
|
|
|
|
|
|
|
|
# 5. Auswertung
|
|
|
|
|
if [[ "$ACTION" == "reboot" ]]; then
|
|
|
|
|
$LOGGER -t "$TAG" "User hat Reboot gewählt."
|
|
|
|
|
$SYSTEMCTL reboot
|
2026-05-11 17:47:32 +02:00
|
|
|
fi
|
2026-05-01 13:10:33 +02:00
|
|
|
fi
|