Add package dependency checks to deploy.sh

Check for required packages (hostapd, iw, nftables, dnsmasq, systemd-resolved)
at deploy start and fail if any are missing. Also warn about optional packages
used by specific components (rsync, mosquitto, gpsd, python3-paho-mqtt, etc.).

Missing required packages halt deployment with clear error message. Optional
packages generate warnings that are captured in deploy-warnings.json for the
router-status MQTT dashboard.

This prevents silent failures when the R5C or other hardware doesn't have
expected dependencies installed.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-09-18 17:51:22 -04:00
co-authored by Claude Haiku 4.5
parent 7d68991c37
commit af241339a3
+32
View File
@@ -46,6 +46,31 @@ fi
[ "$(id -u)" = 0 ] || { echo "Run with sudo (writes to /etc, /usr)."; exit 1; } [ "$(id -u)" = 0 ] || { echo "Run with sudo (writes to /etc, /usr)."; exit 1; }
# Check for essential package dependencies
echo "== dependency check =="
REQUIRED_PACKAGES=(
hostapd
iw
nftables
dnsmasq
systemd-resolved
)
OPTIONAL_PACKAGES=(
rsync
mosquitto
gpsd
gpsd-clients
python3-paho-mqtt
python3-gps
python3-bleak
mobile-broadband-provider-info
zerotier-one
)
for pkg in "${REQUIRED_PACKAGES[@]}"; do
dpkg -s "$pkg" >/dev/null 2>&1 || { echo "MISSING REQUIRED: $pkg (apt install $pkg)"; exit 1; }
done
# Note: warn() is defined below; we'll check optional packages after it's defined
# Collected below and persisted to WARNINGS_FILE so the Cockpit vanrouter page # Collected below and persisted to WARNINGS_FILE so the Cockpit vanrouter page
# can surface deploy-time issues (missing deps, unedited example configs, drift) # can surface deploy-time issues (missing deps, unedited example configs, drift)
# without someone having to remember to scroll back through deploy output. # without someone having to remember to scroll back through deploy output.
@@ -55,6 +80,13 @@ warn() { # warn <message...> — prints " -> <message>" (as before) and recor
echo " -> $*" echo " -> $*"
WARNINGS+=("$*") WARNINGS+=("$*")
} }
# Check optional packages now that warn() is defined
for pkg in "${OPTIONAL_PACKAGES[@]}"; do
if ! dpkg -s "$pkg" >/dev/null 2>&1; then
warn "optional package not installed: $pkg (apt install $pkg)"
fi
done
write_warnings() { write_warnings() {
install -d -m0755 "$(dirname "$WARNINGS_FILE")" install -d -m0755 "$(dirname "$WARNINGS_FILE")"
{ {