diff --git a/install.sh b/install.sh index 911be64..c35f052 100644 --- a/install.sh +++ b/install.sh @@ -5,6 +5,7 @@ # # Usage: curl -sSL https://git.lohmar.co.uk/cclohmar/zoraxy-dhcp/raw/branch/main/install.sh | sudo bash # or: sudo bash install.sh +# or: sudo bash install.sh --remove (clean uninstall) #============================================================================== set -euo pipefail @@ -575,11 +576,84 @@ verify() { fi } +#============================================================================== +# REMOVE / UNINSTALL +#============================================================================== + +remove_all() { + echo -e "${YELLOW}========================================${NC}" + echo -e "${YELLOW} Removing Zoraxy DHCP Setup${NC}" + echo -e "${YELLOW}========================================${NC}" + echo "" + + # Stop services + log "Stopping services..." + systemctl stop dnsmasq 2>/dev/null || service dnsmasq stop 2>/dev/null || true + systemctl disable dnsmasq 2>/dev/null || true + systemctl stop zoraxy-dhcp-routing 2>/dev/null || true + systemctl disable zoraxy-dhcp-routing 2>/dev/null || true + systemctl stop gateway-routing 2>/dev/null || true + systemctl disable gateway-routing 2>/dev/null || true + + # Remove packages (OS-aware) + log "Removing dnsmasq package..." + case "$OS_ID" in + debian|ubuntu|raspbian|linuxmint) + apt-get purge -y -qq dnsmasq 2>/dev/null || true ;; + rhel|centos|fedora|rocky|almalinux|amzn) + dnf remove -y dnsmasq 2>/dev/null || yum remove -y dnsmasq 2>/dev/null || true ;; + alpine) apk del dnsmasq 2>/dev/null || true ;; + opensuse*|sles) zypper remove -y dnsmasq 2>/dev/null || true ;; + arch|manjaro) pacman -R --noconfirm dnsmasq 2>/dev/null || true ;; + esac + + # Remove service files + log "Removing service files..." + rm -f /etc/systemd/system/zoraxy-dhcp-routing.service + rm -f /etc/systemd/system/gateway-routing.service + systemctl daemon-reload 2>/dev/null || true + + # Flush NAT rules + log "Flushing iptables NAT rules..." + iptables -t nat -F POSTROUTING 2>/dev/null || true + + # Remove config files + log "Removing config files..." + rm -rf /opt/zoraxy/conf/dhcp/ 2>/dev/null || true + rm -f /root/.dnsmasq-setup.conf /root/routing.sh + rm -f /etc/dnsmasq.conf /etc/dnsmasq.conf.bak + rm -rf /etc/dnsmasq.d/ 2>/dev/null || true + + # Remove sudoers + log "Removing sudoers rule..." + rm -f /etc/sudoers.d/dnsmasq-edit 2>/dev/null || true + + # Remove group (only if empty) + if getent group dnsmasq-edit >/dev/null 2>&1; then + groupdel dnsmasq-edit 2>/dev/null || warn "Could not delete group 'dnsmasq-edit' (may have members)" + fi + + echo "" + echo -e "${GREEN} ✅ Removal complete.${NC}" + echo -e "${GREEN} System is in a clean state — ready for fresh install.${NC}" + echo "" +} + #============================================================================== # MAIN #============================================================================== main() { + # --- Argument parsing --- + if [[ "${1:-}" == "--remove" || "${1:-}" == "-r" ]]; then + banner + ensure_root "$@" + detect_os + remove_all + exit 0 + fi + + # --- Normal install flow --- banner ensure_root "$@" detect_os