Files
fluffy-pancake/scripts/notify-bootc-user.sh
T
gunnar 94460a999d fix: Update-Skript, Containerfile-Optimierungen und chunkah-Rechunking
- notify-bootc-user.sh: D-Bus-Umgebung korrekt fuer Systemd-Service,
  jq-basierter Staging-Check (.status.staged != null), Guard Clauses,
  -Variable entfernt
- Containerfile: COPY --chmod=755 fuer Skript-Permissions
- build/20-multimedia.sh: Redundantes dnf5 clean all entfernt
- build/30-virt.sh: dnf5 autoremove und Cleanup entfernt
- build/40-remove-packages.sh: || true entfernt (Fehler sichtbar machen)
- build/50-prepare-flatpak-for-bazaar.sh: curl -f --retry 3 hinzugefuegt
- build.yml: chunkah Rechunk-Step fuer content-based Layers (Delta-Updates),
  Cache-Key erweitert (scripts/**), continue-on-error entfernt
- build-installer-iso.yml: concurrency-Block hinzugefuegt
2026-05-30 15:42:14 +02:00

89 lines
3.5 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
BOOTC="/usr/bin/bootc"
FLATPAK="/usr/bin/flatpak"
LOGGER="/usr/bin/logger"
LOGINCTL="/usr/bin/loginctl"
NOTIFY="/usr/bin/notify-send"
SYSTEMCTL="/usr/bin/systemctl"
TAG="bootc-timer"
# =============================================================================
# Flatpaks im Hintergrund aktualisieren
# =============================================================================
$LOGGER -t "$TAG" "Suche nach Flatpak-Updates..."
$FLATPAK update -y --noninteractive || $LOGGER -t "$TAG" "Flatpak-Update fehlgeschlagen oder keine Updates vorhanden."
# =============================================================================
# 1. Bootc Upgrade ausfuehren
# =============================================================================
$LOGGER -t "$TAG" "Suche nach System-Updates (bootc)..."
$BOOTC upgrade || true
# =============================================================================
# 2. Pruefen ob ein gestagtes Deployment vorhanden ist
# =============================================================================
# jq -e gibt Exit-Code 1 zurueck wenn das Ergebnis null/false/0/leer ist.
if ! $BOOTC status --json | jq -e '.status.staged != null' > /dev/null 2>&1; then
$LOGGER -t "$TAG" "Kein gestagtes Deployment gefunden (System aktuell oder bereits angewendet)."
exit 0
fi
$LOGGER -t "$TAG" "Update gestaged. Suche aktiven Desktop-User..."
# =============================================================================
# 3. Aktiven Desktop-User auf seat0 ermitteln
# =============================================================================
USER_ID=""
while read -r sid _rest; do
if [[ -n "$sid" ]]; then
SEAT=$($LOGINCTL show-session "$sid" -p Seat --value 2>/dev/null || echo "")
STATE=$($LOGINCTL show-session "$sid" -p State --value 2>/dev/null || echo "")
if [[ "$SEAT" == "seat0" ]] && [[ "$STATE" == "active" ]]; then
USER_ID=$($LOGINCTL show-session "$sid" -p UID --value 2>/dev/null || echo "")
break
fi
fi
done < <($LOGINCTL list-sessions --no-legend)
if [[ -z "$USER_ID" ]]; then
$LOGGER -t "$TAG" "Update bereit, aber kein aktiver Desktop-User auf seat0 gefunden."
exit 0
fi
$LOGGER -t "$TAG" "Sende Benachrichtigung an User-ID: $USER_ID"
# =============================================================================
# 4. Benachrichtigung senden
# =============================================================================
# Die D-Bus-Umgebungsvariablen muessen explizit gesetzt werden, da der
# Systemd-Service als root laeuft und keine User-Session erbt.
# notify-send --wait blockiert, bis der User die Benachrichtigung schliesst
# oder einen Action-Button klickt.
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?" \
--app-name="System-Update" \
--icon=software-update-available \
--urgency=critical \
--action="reboot=Jetzt neu starten" \
--wait \
2>/dev/null || echo "closed" )
# =============================================================================
# 5. Auswertung
# =============================================================================
if [[ "$ACTION" == "reboot" ]]; then
$LOGGER -t "$TAG" "User hat Reboot gewaehlt. Starte System neu..."
$SYSTEMCTL reboot
else
$LOGGER -t "$TAG" "Benachrichtigung geschlossen oder ignoriert (kein Reboot)."
fi