From 440dabaea38f7756e256a7ac853e6ca4addefe61 Mon Sep 17 00:00:00 2001 From: Carlo Costanzo Date: Thu, 16 Jul 2026 17:08:25 -0400 Subject: [PATCH] Harden APT boot status reporting --- config/shell_scripts/README.md | 2 +- .../apt_reboot_report.service.sample | 15 ++++++++ config/shell_scripts/apt_reboot_report.sh | 34 ++++++++++++++++--- 3 files changed, 46 insertions(+), 5 deletions(-) create mode 100644 config/shell_scripts/apt_reboot_report.service.sample diff --git a/config/shell_scripts/README.md b/config/shell_scripts/README.md index 4e837486..afe47aed 100755 --- a/config/shell_scripts/README.md +++ b/config/shell_scripts/README.md @@ -29,7 +29,7 @@ Longer-running shell helpers referenced by automations, packages, or cron. Anyth | [HAUpdate.sh](HAUpdate.sh) | One-command Home Assistant update helper. | | [apt_pending_check.sh](apt_pending_check.sh) | Read-only APT pending-count reporter for the Docker host maintenance dashboard. | | [apt_weekly.sh](apt_weekly.sh) | Twice-weekly APT updater that posts webhook status and can schedule reboot when needed. | -| [apt_reboot_report.sh](apt_reboot_report.sh) | Boot-time webhook status reporter that clears/keeps reboot-required state in HA. | +| [apt_reboot_report.sh](apt_reboot_report.sh) | Boot-time status reporter that reuses the registered APT webhook, retries while HA starts, and clears/keeps reboot-required state. | | [gitupdate.sh](gitupdate.sh) | Pull the latest config changes on demand. | | [![YAML source: basketball](https://img.shields.io/static/v1?label=YAML&message=basketball&color=lightgrey&logo=github&logoColor=181717)](basketball.yaml) | ESPN stat scraping helper used by sensors. | | [Jinja Code.py](Jinja Code.py) | Reference Jinja snippets for templating. | diff --git a/config/shell_scripts/apt_reboot_report.service.sample b/config/shell_scripts/apt_reboot_report.service.sample new file mode 100644 index 00000000..ebe3e66c --- /dev/null +++ b/config/shell_scripts/apt_reboot_report.service.sample @@ -0,0 +1,15 @@ +[Unit] +Description=Report boot completion for APT reboot tracking +After=network-online.target docker.service +Wants=network-online.target +ConditionPathExists=/usr/local/sbin/apt_weekly.sh + +[Service] +Type=oneshot +ExecStart=/usr/local/sbin/apt_reboot_report.sh --from-apt-weekly +User=root +Group=root +TimeoutStartSec=330 + +[Install] +WantedBy=multi-user.target diff --git a/config/shell_scripts/apt_reboot_report.sh b/config/shell_scripts/apt_reboot_report.sh index fb48487f..1f9016aa 100644 --- a/config/shell_scripts/apt_reboot_report.sh +++ b/config/shell_scripts/apt_reboot_report.sh @@ -2,13 +2,28 @@ set -euo pipefail # Boot report for APT-managed hosts. -# Sends current reboot-required state after each system boot. +# Reuses the registered apt_weekly webhook and retries while Home Assistant starts. -WEBHOOK_URL="$1" +WEBHOOK_SOURCE="${1:-}" HOST_NAME="${2:-$(hostname -s)}" +case "$HOST_NAME" in + docker10) HOST_NAME="docker_10" ;; + docker14) HOST_NAME="docker_14" ;; + docker17) HOST_NAME="docker_17" ;; + docker69) HOST_NAME="docker_69" ;; +esac + +if [[ "$WEBHOOK_SOURCE" == "--from-apt-weekly" ]]; then + WEEKLY_EXEC_START="$(systemctl show apt_weekly.service --property=ExecStart --value 2>/dev/null || true)" + WEBHOOK_URL="$(printf '%s\n' "$WEEKLY_EXEC_START" | grep -Eo 'https?://[^ ;]+' | head -n 1 || true)" +else + WEBHOOK_URL="$WEBHOOK_SOURCE" +fi + if [[ -z "$WEBHOOK_URL" ]]; then - echo "Usage: $0 [host_name]" >&2 + echo "Usage: $0 [host_name]" >&2 + echo "Unable to resolve the registered APT webhook." >&2 exit 1 fi @@ -26,4 +41,15 @@ payload=$(cat <