#!/bin/bash # Transmission RSS Manager Modular Installer # Main installer script that coordinates the installation process # Set script to exit on error set -e # Text formatting BOLD='\033[1m' GREEN='\033[0;32m' YELLOW='\033[0;33m' RED='\033[0;31m' NC='\033[0m' # No Color # Print header echo -e "${BOLD}==================================================${NC}" echo -e "${BOLD} Transmission RSS Manager Installer ${NC}" echo -e "${BOLD} Version 1.2.0 - Enhanced Edition ${NC}" echo -e "${BOLD}==================================================${NC}" echo # Check if script is run with sudo if [ "$EUID" -ne 0 ]; then echo -e "${RED}Please run as root (use sudo)${NC}" exit 1 fi # Get current directory SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" # Check for installation type IS_UPDATE=false if [ -f "${SCRIPT_DIR}/config.json" ]; then IS_UPDATE=true echo -e "${YELLOW}Existing installation detected. Running in update mode.${NC}" echo -e "${GREEN}Your existing configuration will be preserved.${NC}" else echo -e "${GREEN}Fresh installation. Will create new configuration.${NC}" fi export IS_UPDATE # Check if required module files exist REQUIRED_MODULES=( "${SCRIPT_DIR}/modules/config-module.sh" "${SCRIPT_DIR}/modules/utils-module.sh" "${SCRIPT_DIR}/modules/dependencies-module.sh" "${SCRIPT_DIR}/modules/file-creator-module.sh" "${SCRIPT_DIR}/modules/service-setup-module.sh" ) for module in "${REQUIRED_MODULES[@]}"; do if [ ! -f "$module" ]; then echo -e "${RED}Error: Required module file not found: $module${NC}" echo -e "${YELLOW}Please run the install-script.sh first to generate module files.${NC}" exit 1 fi done # Source the module files source "${SCRIPT_DIR}/modules/utils-module.sh" # Load utilities first for logging source "${SCRIPT_DIR}/modules/config-module.sh" source "${SCRIPT_DIR}/modules/dependencies-module.sh" source "${SCRIPT_DIR}/modules/file-creator-module.sh" source "${SCRIPT_DIR}/modules/service-setup-module.sh" # Function to handle cleanup on error function cleanup_on_error() { log "ERROR" "Installation failed: $1" log "INFO" "Cleaning up..." # Add any cleanup steps here if needed log "INFO" "You can try running the installer again after fixing the issues." exit 1 } # Set trap for error handling trap 'cleanup_on_error "$BASH_COMMAND"' ERR # Execute the installation steps in sequence log "INFO" "Starting installation process..." # Step 1: Gather configuration from user log "INFO" "Gathering configuration..." gather_configuration || { log "ERROR" "Configuration gathering failed" exit 1 } # Step 2: Install dependencies log "INFO" "Installing dependencies..." install_dependencies || { log "ERROR" "Dependency installation failed" exit 1 } # Step 3: Create installation directories log "INFO" "Creating directories..." create_directories || { log "ERROR" "Directory creation failed" exit 1 } # Step 4: Create configuration files and scripts log "INFO" "Creating configuration files..." create_config_files || { log "ERROR" "Configuration file creation failed" exit 1 } # Step 5: Create service files and install the service log "INFO" "Setting up service..." setup_service || { log "ERROR" "Service setup failed" exit 1 } # Step 6: Final setup and permissions log "INFO" "Finalizing setup..." finalize_setup || { log "ERROR" "Setup finalization failed" exit 1 } # Installation complete echo echo -e "${BOLD}${GREEN}==================================================${NC}" echo -e "${BOLD}${GREEN} Installation Complete! ${NC}" echo -e "${BOLD}${GREEN}==================================================${NC}" echo -e "You can access the web interface at: ${BOLD}http://localhost:$PORT${NC} or ${BOLD}http://your-server-ip:$PORT${NC}" echo -e "You may need to configure your firewall to allow access to port $PORT" echo echo -e "${BOLD}Useful Commands:${NC}" echo -e " To check the service status: ${YELLOW}systemctl status $SERVICE_NAME${NC}" echo -e " To view logs: ${YELLOW}journalctl -u $SERVICE_NAME${NC}" echo -e " To restart the service: ${YELLOW}systemctl restart $SERVICE_NAME${NC}" echo echo -e "Thank you for installing Transmission RSS Manager!" echo -e "${BOLD}==================================================${NC}"