Files
rpi-tulivision/uninstall.sh

307 lines
8.2 KiB
Bash
Executable File

#!/bin/bash
# Raspberry Pi Video Player Auto-Start Uninstallation Script
# This script removes the video player system
set -e # Exit on any error
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Configuration
INSTALL_DIR="/opt/video_player"
CONFIG_DIR="/etc/video_player"
SERVICE_NAME="video-player"
# Function to print colored output
print_status() {
echo -e "${BLUE}[INFO]${NC} $1"
}
print_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
print_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
print_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# Load environment variables from .env file if it exists
if [[ -f ".env" ]]; then
print_status "Loading configuration from .env file..."
source .env
else
print_warning "No .env file found, using default values"
fi
# Set defaults if not defined in .env
USER="${USER:-pi}"
GROUP="${GROUP:-pi}"
GPIO_GROUP="${GPIO_GROUP:-gpio}"
# Function to check if running as root
check_root() {
if [[ $EUID -ne 0 ]]; then
print_error "This script must be run as root (use sudo)"
exit 1
fi
}
# Function to confirm uninstallation
confirm_uninstall() {
print_warning "This will completely remove the Video Player system."
print_warning "All configuration files and data will be deleted."
echo
read -p "Are you sure you want to continue? (y/N): " -r response
if [[ ! "$response" =~ ^[Yy]$ ]]; then
print_status "Uninstallation cancelled"
exit 0
fi
}
# Function to stop and disable service
stop_service() {
print_status "Stopping and disabling service..."
# Stop service if running
if systemctl is-active --quiet "$SERVICE_NAME"; then
systemctl stop "$SERVICE_NAME"
print_status "Service stopped"
fi
# Disable service
if systemctl is-enabled --quiet "$SERVICE_NAME"; then
systemctl disable "$SERVICE_NAME"
print_status "Service disabled"
fi
print_success "Service stopped and disabled"
}
# Function to remove service file
remove_service_file() {
print_status "Removing service file..."
if [[ -f "/etc/systemd/system/$SERVICE_NAME.service" ]]; then
rm -f "/etc/systemd/system/$SERVICE_NAME.service"
systemctl daemon-reload
print_success "Service file removed"
else
print_warning "Service file not found"
fi
}
# Function to remove application files
remove_application_files() {
print_status "Removing application files..."
if [[ -d "$INSTALL_DIR" ]]; then
rm -rf "$INSTALL_DIR"
print_success "Application files removed"
else
print_warning "Installation directory not found"
fi
}
# Function to remove configuration files
remove_config_files() {
print_status "Removing configuration files..."
if [[ -d "$CONFIG_DIR" ]]; then
rm -rf "$CONFIG_DIR"
print_success "Configuration files removed"
else
print_warning "Configuration directory not found"
fi
}
# Function to remove management scripts
remove_management_scripts() {
print_status "Removing management scripts..."
local scripts=(
"video-player-start"
"video-player-stop"
"video-player-restart"
"video-player-status"
"video-player-logs"
)
for script in "${scripts[@]}"; do
if [[ -f "/usr/local/bin/$script" ]]; then
rm -f "/usr/local/bin/$script"
fi
done
print_success "Management scripts removed"
}
# Function to remove desktop shortcut
remove_desktop_shortcut() {
print_status "Removing desktop shortcut..."
local desktop_file="/home/$USER/Desktop/Video Player.desktop"
if [[ -f "$desktop_file" ]]; then
rm -f "$desktop_file"
print_success "Desktop shortcut removed"
else
print_warning "Desktop shortcut not found"
fi
}
# Function to remove log files
remove_log_files() {
print_status "Removing log files..."
if [[ -f "/var/log/video_player.log" ]]; then
rm -f "/var/log/video_player.log"
print_success "Log files removed"
else
print_warning "Log files not found"
fi
}
# Function to remove GPIO udev rules
remove_gpio_rules() {
print_status "Removing GPIO udev rules..."
if [[ -f "/etc/udev/rules.d/99-gpio.rules" ]]; then
rm -f "/etc/udev/rules.d/99-gpio.rules"
udevadm control --reload-rules
udevadm trigger
print_success "GPIO udev rules removed"
else
print_warning "GPIO udev rules not found"
fi
}
# Function to remove user from gpio group
remove_gpio_group() {
print_status "Removing user from gpio group..."
if groups "$USER" | grep -q "$GPIO_GROUP"; then
gpasswd -d "$USER" "$GPIO_GROUP"
print_success "User removed from gpio group"
else
print_warning "User not in gpio group"
fi
}
# Function to ask about video files
ask_about_video_files() {
local video_folder="/home/pi/Videos"
if [[ -d "$video_folder" ]]; then
local video_count=$(find "$video_folder" -name "*.mp4" -o -name "*.avi" -o -name "*.mkv" -o -name "*.mov" | wc -l)
if [[ $video_count -gt 0 ]]; then
print_warning "Found $video_count video files in $video_folder"
read -p "Do you want to remove all video files? (y/N): " -r response
if [[ "$response" =~ ^[Yy]$ ]]; then
rm -f "$video_folder"/*.mp4 "$video_folder"/*.avi "$video_folder"/*.mkv "$video_folder"/*.mov
print_success "Video files removed"
else
print_status "Video files preserved"
fi
fi
fi
}
# Function to ask about Python packages
ask_about_python_packages() {
print_warning "The following Python packages were installed for this application:"
echo " - python-vlc"
echo " - python-dotenv"
echo " - psutil"
echo " - PyYAML"
echo " - RPi.GPIO"
echo " - pigpio"
echo " - lirc"
echo
read -p "Do you want to remove these Python packages? (y/N): " -r response
if [[ "$response" =~ ^[Yy]$ ]]; then
print_status "Removing Python packages..."
pip3 uninstall -y python-vlc python-dotenv psutil PyYAML RPi.GPIO pigpio lirc 2>/dev/null || true
print_success "Python packages removed"
else
print_status "Python packages preserved"
fi
}
# Function to ask about system packages
ask_about_system_packages() {
print_warning "The following system packages were installed for this application:"
echo " - vlc"
echo " - python3-rpi.gpio"
echo " - i2c-tools"
echo " - spi-tools"
echo
read -p "Do you want to remove these system packages? (y/N): " -r response
if [[ "$response" =~ ^[Yy]$ ]]; then
print_status "Removing system packages..."
apt-get remove -y vlc python3-rpi.gpio i2c-tools spi-tools 2>/dev/null || true
apt-get autoremove -y 2>/dev/null || true
print_success "System packages removed"
else
print_status "System packages preserved"
fi
}
# Function to display uninstallation summary
display_summary() {
print_success "Uninstallation completed successfully!"
echo
echo "Removed Components:"
echo "==================="
echo "✓ Service and systemd configuration"
echo "✓ Application files"
echo "✓ Configuration files"
echo "✓ Management scripts"
echo "✓ Desktop shortcut"
echo "✓ Log files"
echo "✓ GPIO udev rules"
echo "✓ User group membership"
echo
echo "The Video Player system has been completely removed."
echo "You may need to reboot for all changes to take effect."
}
# Main uninstallation function
main() {
echo "Raspberry Pi Video Player Auto-Start Uninstallation"
echo "==================================================="
echo
check_root
confirm_uninstall
print_status "Starting uninstallation..."
stop_service
remove_service_file
remove_application_files
remove_config_files
remove_management_scripts
remove_desktop_shortcut
remove_log_files
remove_gpio_rules
remove_gpio_group
ask_about_video_files
ask_about_python_packages
ask_about_system_packages
display_summary
}
# Run main function
main "$@"