From 6979f3f57a2c235503576f54f0ca3f4aceeab698 Mon Sep 17 00:00:00 2001 From: rcourtman Date: Wed, 12 Nov 2025 19:46:45 +0000 Subject: [PATCH] Related to discussion #702: harden uninstall cleanup --- install.sh | 126 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) diff --git a/install.sh b/install.sh index 5dc16371b..cf04cde10 100755 --- a/install.sh +++ b/install.sh @@ -282,6 +282,130 @@ print_warn() { echo -e "${YELLOW}[WARN] $1${NC}" } +sensor_proxy_artifacts_present() { + local -a paths=( + "/etc/pulse-sensor-proxy" + "/var/lib/pulse-sensor-proxy" + "/run/pulse-sensor-proxy" + "/usr/local/bin/pulse-sensor-proxy" + "/usr/local/bin/pulse-sensor-wrapper.sh" + "/usr/local/bin/pulse-sensor-cleanup.sh" + "/usr/local/bin/pulse-sensor-proxy-selfheal.sh" + "/usr/local/share/pulse/install-sensor-proxy.sh" + "/etc/systemd/system/pulse-sensor-proxy.service" + "/etc/systemd/system/pulse-sensor-cleanup.service" + "/etc/systemd/system/pulse-sensor-cleanup.path" + "/etc/systemd/system/pulse-sensor-proxy-selfheal.service" + "/etc/systemd/system/pulse-sensor-proxy-selfheal.timer" + "/var/log/pulse/sensor-proxy" + ) + + local path + for path in "${paths[@]}"; do + if [[ -e "$path" ]]; then + return 0 + fi + done + + return 1 +} + +find_sensor_proxy_installer() { + local -a candidates=( + "/opt/pulse/scripts/install-sensor-proxy.sh" + "/usr/local/share/pulse/install-sensor-proxy.sh" + ) + + local candidate + for candidate in "${candidates[@]}"; do + if [[ -f "$candidate" ]]; then + echo "$candidate" + return 0 + fi + done + + return 1 +} + +manual_sensor_proxy_cleanup() { + print_info "Falling back to manual pulse-sensor-proxy cleanup..." + + if command -v systemctl >/dev/null 2>&1; then + local -a units=( + "pulse-sensor-proxy.service" + "pulse-sensor-cleanup.service" + "pulse-sensor-cleanup.path" + "pulse-sensor-proxy-selfheal.service" + "pulse-sensor-proxy-selfheal.timer" + ) + local unit + for unit in "${units[@]}"; do + systemctl stop "$unit" 2>/dev/null || true + systemctl disable "$unit" 2>/dev/null || true + done + systemctl daemon-reload 2>/dev/null || true + fi + + local -a files=( + "/usr/local/bin/pulse-sensor-proxy" + "/usr/local/bin/pulse-sensor-wrapper.sh" + "/usr/local/bin/pulse-sensor-cleanup.sh" + "/usr/local/bin/pulse-sensor-proxy-selfheal.sh" + "/usr/local/share/pulse/install-sensor-proxy.sh" + "/var/lib/pulse-sensor-proxy/cleanup-request.json" + ) + local path + for path in "${files[@]}"; do + rm -f "$path" 2>/dev/null || true + done + + local -a dirs=( + "/var/lib/pulse-sensor-proxy" + "/etc/pulse-sensor-proxy" + "/run/pulse-sensor-proxy" + "/var/log/pulse/sensor-proxy" + ) + local dir + for dir in "${dirs[@]}"; do + rm -rf "$dir" 2>/dev/null || true + done + + rmdir --ignore-fail-on-non-empty /usr/local/share/pulse 2>/dev/null || true + + if [[ -f /root/.ssh/authorized_keys ]]; then + sed -i -e '/# pulse-managed-key$/d' -e '/# pulse-proxy-key$/d' /root/.ssh/authorized_keys 2>/dev/null || true + fi + + if id -u pulse-sensor-proxy >/dev/null 2>&1; then + userdel --remove pulse-sensor-proxy 2>/dev/null || userdel pulse-sensor-proxy 2>/dev/null || true + fi + if getent group pulse-sensor-proxy >/dev/null 2>&1; then + groupdel pulse-sensor-proxy 2>/dev/null || true + fi + + print_info "Manual pulse-sensor-proxy cleanup complete" +} + +cleanup_sensor_proxy() { + if ! sensor_proxy_artifacts_present; then + return + fi + + print_info "Detected pulse-sensor-proxy artifacts; attempting uninstall..." + local installer_path="" + if installer_path=$(find_sensor_proxy_installer 2>/dev/null); then + if bash "$installer_path" --uninstall --purge --quiet; then + print_success "pulse-sensor-proxy removed" + return + fi + print_warn "pulse-sensor-proxy installer reported errors; falling back to manual cleanup" + else + print_warn "install-sensor-proxy.sh not found; attempting manual cleanup" + fi + + manual_sensor_proxy_cleanup +} + # Prompt user about proxy installation # Returns 0 if user wants proxy, 1 if not prompt_proxy_installation() { @@ -3202,6 +3326,8 @@ uninstall_pulse() { print_header echo -e "\033[0;33mUninstalling Pulse...\033[0m" echo + + cleanup_sensor_proxy # Detect service name local SERVICE_NAME=$(detect_service_name)