| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- #!/bin/bash
- # Stable Diffusion REST Server Uninstallation Script
- # This script removes the systemd service and optionally cleans up files
- set -e
- # Colors for output
- RED='\033[0;31m'
- GREEN='\033[0;32m'
- YELLOW='\033[1;33m'
- NC='\033[0m' # No Color
- # Default values
- SERVICE_NAME="stable-diffusion-rest"
- SERVICE_FILE="/etc/systemd/system/${SERVICE_NAME}.service"
- INSTALL_DIR="/opt/stable-diffusion-rest"
- LOG_DIR="/var/log/stable-diffusion-rest"
- QUEUE_DIR="/var/lib/stable-diffusion-rest/queue"
- OUTPUT_DIR="/var/lib/stable-diffusion-rest/output"
- DATA_DIR="/var/lib/stable-diffusion-rest"
- REMOVE_DATA=false
- REMOVE_USER=false
- USER_TO_REMOVE=""
- # Function to print colored output
- print_info() {
- echo -e "${GREEN}[INFO]${NC} $1"
- }
- print_warning() {
- echo -e "${YELLOW}[WARNING]${NC} $1"
- }
- print_error() {
- echo -e "${RED}[ERROR]${NC} $1"
- }
- # Function to check if script is run 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 parse command line arguments
- parse_args() {
- while [[ $# -gt 0 ]]; do
- case $1 in
- --remove-data)
- REMOVE_DATA=true
- shift
- ;;
- --remove-user)
- REMOVE_USER=true
- shift
- ;;
- --help)
- echo "Usage: $0 [options]"
- echo ""
- echo "Options:"
- echo " --remove-data Also remove queue, output, and log directories"
- echo " --remove-user Also remove the system user (asks for confirmation)"
- echo " --help Show this help message"
- echo ""
- echo "Example:"
- echo " sudo $0"
- echo " sudo $0 --remove-data --remove-user"
- exit 0
- ;;
- *)
- print_error "Unknown option: $1"
- echo "Use --help for usage information"
- exit 1
- ;;
- esac
- done
- }
- # Function to stop and disable service
- stop_service() {
- if systemctl is-active --quiet "$SERVICE_NAME"; then
- print_info "Stopping service..."
- systemctl stop "$SERVICE_NAME"
- fi
- if systemctl is-enabled --quiet "$SERVICE_NAME" 2>/dev/null; then
- print_info "Disabling service..."
- systemctl disable "$SERVICE_NAME"
- fi
- }
- # Function to remove service file
- remove_service() {
- if [[ -f "$SERVICE_FILE" ]]; then
- print_info "Removing service file..."
- # Extract user from service file before removing
- if [[ -f "$SERVICE_FILE" ]]; then
- USER_TO_REMOVE=$(grep "^User=" "$SERVICE_FILE" | cut -d= -f2)
- fi
- rm -f "$SERVICE_FILE"
- systemctl daemon-reload
- else
- print_warning "Service file not found: $SERVICE_FILE"
- fi
- }
- # Function to remove installation directory
- remove_install_dir() {
- if [[ -d "$INSTALL_DIR" ]]; then
- print_info "Removing installation directory: $INSTALL_DIR"
- rm -rf "$INSTALL_DIR"
- fi
- }
- # Function to remove data directories
- remove_data_dirs() {
- if [[ "$REMOVE_DATA" == true ]]; then
- echo ""
- print_warning "This will remove all queue data, generated outputs, and logs"
- read -p "Are you sure? (y/n): " confirm
- if [[ "$confirm" =~ ^[Yy]$ ]]; then
- if [[ -d "$LOG_DIR" ]]; then
- print_info "Removing log directory: $LOG_DIR"
- rm -rf "$LOG_DIR"
- fi
- if [[ -d "$DATA_DIR" ]]; then
- print_info "Removing data directory: $DATA_DIR"
- rm -rf "$DATA_DIR"
- fi
- fi
- else
- echo ""
- print_info "Data directories preserved:"
- print_info " Queue: $QUEUE_DIR"
- print_info " Output: $OUTPUT_DIR"
- print_info " Logs: $LOG_DIR"
- print_info ""
- print_info "To remove these, run: sudo $0 --remove-data"
- fi
- }
- # Function to remove system user
- remove_system_user() {
- if [[ "$REMOVE_USER" == true && -n "$USER_TO_REMOVE" ]]; then
- if id "$USER_TO_REMOVE" &>/dev/null; then
- echo ""
- print_warning "This will remove the system user: $USER_TO_REMOVE"
- read -p "Are you sure? (y/n): " confirm
- if [[ "$confirm" =~ ^[Yy]$ ]]; then
- print_info "Removing system user: $USER_TO_REMOVE"
- userdel "$USER_TO_REMOVE" || print_warning "Failed to remove user (may not be a system account)"
- fi
- fi
- elif [[ "$REMOVE_USER" == true ]]; then
- print_warning "Could not determine which user to remove"
- fi
- }
- # Main uninstallation flow
- main() {
- echo "============================================"
- echo " Stable Diffusion REST Server Uninstaller"
- echo "============================================"
- echo ""
- check_root
- parse_args "$@"
- echo ""
- print_info "Uninstallation Summary:"
- print_info " Service file: $SERVICE_FILE"
- print_info " Install dir: $INSTALL_DIR"
- if [[ "$REMOVE_DATA" == true ]]; then
- print_info " Remove data: YES"
- else
- print_info " Remove data: NO (use --remove-data to remove)"
- fi
- if [[ "$REMOVE_USER" == true ]]; then
- print_info " Remove user: YES (will ask for confirmation)"
- else
- print_info " Remove user: NO (use --remove-user to remove)"
- fi
- echo ""
- read -p "Proceed with uninstallation? (y/n): " proceed
- if [[ ! "$proceed" =~ ^[Yy]$ ]]; then
- print_warning "Uninstallation cancelled"
- exit 0
- fi
- stop_service
- remove_service
- remove_install_dir
- remove_data_dirs
- remove_system_user
- echo ""
- print_info "============================================"
- print_info " Uninstallation Complete!"
- print_info "============================================"
- echo ""
- }
- main "$@"
|