]> ### 0.1.0 (alpha) - Initial public alpha of ReelSentry. - VM lifecycle monitoring via a namespaced libvirt qemu.d hook (coexists with other plugins). - Native Unraid notifications + optional Discord webhook (no bot). - Optional agentless health checks (ICMP / TCP / QEMU guest agent). - Event history, quiet hours, maintenance suppression, diagnostics bundle. - **Beta caveat:** requires validation on real Unraid 7.2 hardware; see docs/TESTING.md. unraid_ver=$(sed -n 's/^version="\?\([0-9.]*\)"\?.*/\1/p' /etc/unraid-version 2>/dev/null | head -n1) req="7.2.0" lowest=$(printf '%s\n%s\n' "$unraid_ver" "$req" | sort -V | head -n1) if [ "$unraid_ver" != "" ] && [ "$lowest" != "$req" ] && [ "$unraid_ver" != "$req" ]; then echo "**********************************************************" echo " ReelSentry requires Unraid 7.2.0 or newer (found $unraid_ver)." echo " Installation aborted." echo "**********************************************************" exit 1 fi &packageURL; &sha256; mkdir -p "&pkgDir;" # upgradepkg --install-new is idempotent and preserves an existing install. upgradepkg --install-new "&pkgDir;/&pkgName;" || installpkg "&pkgDir;/&pkgName;" PLUGIN_ROOT="/usr/local/emhttp/plugins/&name;" # RESTART (not start) so an upgrade replaces the long-running processor/health # loops with the newly-installed code — 'start' would skip because the old # daemon is still alive, leaving stale code running after every update. [ -x "$PLUGIN_ROOT/services/reelsentry-service" ] && \ bash "$PLUGIN_ROOT/services/reelsentry-service" restart || true echo "" echo "ReelSentry &version; installed." echo "Open Settings → ReelSentry to choose which VMs to monitor." echo "NOTE: this is an ALPHA build; validate on a test system first." #!/bin/bash bash /usr/local/emhttp/plugins/&name;/services/reelsentry-service start &>/dev/null & PLUGIN_ROOT="/usr/local/emhttp/plugins/&name;" # Stop services and remove ONLY our libvirt hook. [ -x "$PLUGIN_ROOT/services/reelsentry-service" ] && bash "$PLUGIN_ROOT/services/reelsentry-service" stop || true [ -x "$PLUGIN_ROOT/hooks/install-hook.sh" ] && bash "$PLUGIN_ROOT/hooks/install-hook.sh" uninstall || true # Remove runtime (tmpfs) state. rm -rf /var/run/&name; 2>/dev/null || true # Remove installed package files. removepkg "&name;" 2>/dev/null || true rm -rf "$PLUGIN_ROOT" 2>/dev/null || true # Leave /boot/config/plugins/&name; (user config + history) by default; see # docs — a full purge is a documented manual step. echo "ReelSentry removed. Your configuration was preserved at &pkgDir;." echo "To fully remove it: rm -rf &pkgDir;"