From fcceabd47eebd2b064a60ba29f3e9969a17ef828 Mon Sep 17 00:00:00 2001 From: default Date: Fri, 9 Jan 2026 20:01:31 +0000 Subject: [PATCH] uninstall script --- setup/uninstall.sh | 251 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 251 insertions(+) create mode 100755 setup/uninstall.sh diff --git a/setup/uninstall.sh b/setup/uninstall.sh new file mode 100755 index 0000000..edce3a4 --- /dev/null +++ b/setup/uninstall.sh @@ -0,0 +1,251 @@ +#!/bin/bash +# ============================================================================= +# RDC Simulation - Uninstall Script +# ============================================================================= +# Removes ArduPilot SITL, Gazebo plugin, and related configurations. +# ROS 2 and Gazebo system packages are NOT removed (use apt to remove if needed). +# +# Usage: +# ./setup/uninstall.sh # Interactive mode +# ./setup/uninstall.sh --all # Remove everything without prompts +# ./setup/uninstall.sh --ardupilot # Remove ArduPilot only +# ============================================================================= + +set -e + +echo "==============================================" +echo " RDC Simulation - Uninstall" +echo "==============================================" +echo "" + +# Get script directory and project root +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(dirname "$SCRIPT_DIR")" + +# Directories to remove +ARDUPILOT_HOME="$HOME/ardupilot" +ARDUPILOT_GZ="$HOME/ardupilot_gazebo" +VENV_DIR="$PROJECT_ROOT/venv" +ACTIVATE_SCRIPT="$PROJECT_ROOT/activate.sh" + +# Parse arguments +REMOVE_ALL=false +REMOVE_ARDUPILOT=false +INTERACTIVE=true + +for arg in "$@"; do + case $arg in + --all) + REMOVE_ALL=true + INTERACTIVE=false + ;; + --ardupilot) + REMOVE_ARDUPILOT=true + INTERACTIVE=false + ;; + --help|-h) + echo "Usage: ./setup/uninstall.sh [OPTIONS]" + echo "" + echo "Options:" + echo " --all Remove everything without prompts" + echo " --ardupilot Remove ArduPilot SITL and Gazebo plugin only" + echo " --help Show this help message" + echo "" + echo "What gets removed:" + echo " - ~/ardupilot (ArduPilot SITL source and build)" + echo " - ~/ardupilot_gazebo (ArduPilot Gazebo plugin)" + echo " - Project venv/ directory" + echo " - Project activate.sh" + echo " - ArduPilot configuration from ~/.bashrc" + echo "" + echo "What is NOT removed:" + echo " - ROS 2 (use: sudo apt remove 'ros-*')" + echo " - Gazebo (use: sudo apt remove 'gz-*')" + echo " - System packages" + exit 0 + ;; + esac +done + +# Helper function to ask yes/no +ask_yes_no() { + local prompt="$1" + local default="${2:-n}" + + if [ "$default" = "y" ]; then + prompt="$prompt [Y/n]: " + else + prompt="$prompt [y/N]: " + fi + + read -p "$prompt" response + response="${response:-$default}" + + case "$response" in + [yY][eE][sS]|[yY]) return 0 ;; + *) return 1 ;; + esac +} + +# ============================================================================= +# REMOVE ARDUPILOT SITL +# ============================================================================= +remove_ardupilot() { + if [ -d "$ARDUPILOT_HOME" ]; then + echo "[INFO] Removing ArduPilot SITL: $ARDUPILOT_HOME" + rm -rf "$ARDUPILOT_HOME" + echo "[OK] ArduPilot SITL removed" + else + echo "[SKIP] ArduPilot SITL not found" + fi +} + +# ============================================================================= +# REMOVE ARDUPILOT GAZEBO PLUGIN +# ============================================================================= +remove_ardupilot_gazebo() { + if [ -d "$ARDUPILOT_GZ" ]; then + echo "[INFO] Removing ArduPilot Gazebo plugin: $ARDUPILOT_GZ" + rm -rf "$ARDUPILOT_GZ" + echo "[OK] ArduPilot Gazebo plugin removed" + else + echo "[SKIP] ArduPilot Gazebo plugin not found" + fi +} + +# ============================================================================= +# REMOVE PROJECT VENV +# ============================================================================= +remove_venv() { + if [ -d "$VENV_DIR" ]; then + echo "[INFO] Removing Python virtual environment: $VENV_DIR" + rm -rf "$VENV_DIR" + echo "[OK] Python virtual environment removed" + else + echo "[SKIP] Virtual environment not found" + fi +} + +# ============================================================================= +# REMOVE ACTIVATE SCRIPT +# ============================================================================= +remove_activate() { + if [ -f "$ACTIVATE_SCRIPT" ]; then + echo "[INFO] Removing activation script: $ACTIVATE_SCRIPT" + rm -f "$ACTIVATE_SCRIPT" + echo "[OK] Activation script removed" + else + echo "[SKIP] Activation script not found" + fi +} + +# ============================================================================= +# REMOVE BASHRC CONFIGURATION +# ============================================================================= +remove_bashrc_config() { + BASHRC_MARKER="# === RDC Simulation ArduPilot ===" + OLD_MARKER="# === ArduPilot SITL ===" + + if grep -q "$BASHRC_MARKER" ~/.bashrc 2>/dev/null || grep -q "$OLD_MARKER" ~/.bashrc 2>/dev/null; then + echo "[INFO] Removing ArduPilot configuration from ~/.bashrc" + + # Create backup + cp ~/.bashrc ~/.bashrc.backup.$(date +%Y%m%d_%H%M%S) + + # Remove the configuration block (everything from marker to next blank line or EOF) + # This handles both old and new markers + sed -i "/$BASHRC_MARKER/,/^$/d" ~/.bashrc 2>/dev/null || true + sed -i "/$OLD_MARKER/,/^$/d" ~/.bashrc 2>/dev/null || true + + echo "[OK] ArduPilot configuration removed from ~/.bashrc" + echo "[INFO] Backup saved to ~/.bashrc.backup.*" + else + echo "[SKIP] No ArduPilot configuration found in ~/.bashrc" + fi +} + +# ============================================================================= +# REMOVE ARDUPILOT ENV FILE +# ============================================================================= +remove_ardupilot_env() { + if [ -f "$HOME/.ardupilot_env" ]; then + echo "[INFO] Removing ArduPilot environment file: ~/.ardupilot_env" + rm -f "$HOME/.ardupilot_env" + echo "[OK] ArduPilot environment file removed" + else + echo "[SKIP] ArduPilot environment file not found" + fi +} + +# ============================================================================= +# MAIN +# ============================================================================= + +if [ "$REMOVE_ALL" = true ]; then + echo "Removing all components..." + echo "" + remove_ardupilot + remove_ardupilot_gazebo + remove_venv + remove_activate + remove_bashrc_config + remove_ardupilot_env + +elif [ "$REMOVE_ARDUPILOT" = true ]; then + echo "Removing ArduPilot components..." + echo "" + remove_ardupilot + remove_ardupilot_gazebo + remove_bashrc_config + remove_ardupilot_env + +else + # Interactive mode + echo "This will remove components installed by install_ubuntu.sh" + echo "" + + if [ -d "$ARDUPILOT_HOME" ]; then + echo "Found: $ARDUPILOT_HOME ($(du -sh "$ARDUPILOT_HOME" 2>/dev/null | cut -f1))" + fi + if [ -d "$ARDUPILOT_GZ" ]; then + echo "Found: $ARDUPILOT_GZ ($(du -sh "$ARDUPILOT_GZ" 2>/dev/null | cut -f1))" + fi + if [ -d "$VENV_DIR" ]; then + echo "Found: $VENV_DIR ($(du -sh "$VENV_DIR" 2>/dev/null | cut -f1))" + fi + echo "" + + if ask_yes_no "Remove ArduPilot SITL (~5GB)?"; then + remove_ardupilot + fi + + if ask_yes_no "Remove ArduPilot Gazebo plugin?"; then + remove_ardupilot_gazebo + fi + + if ask_yes_no "Remove Python virtual environment?"; then + remove_venv + fi + + if ask_yes_no "Remove activation script?"; then + remove_activate + fi + + if ask_yes_no "Remove ArduPilot configuration from ~/.bashrc?"; then + remove_bashrc_config + remove_ardupilot_env + fi +fi + +echo "" +echo "==============================================" +echo " Uninstall Complete" +echo "==============================================" +echo "" +echo "Note: The following were NOT removed:" +echo " - ROS 2 packages (sudo apt remove 'ros-*')" +echo " - Gazebo packages (sudo apt remove 'gz-*')" +echo " - System dependencies installed via apt" +echo "" +echo "To reinstall: ./setup/install_ubuntu.sh" +echo ""