diff --git a/INSTALLER_SUMMARY.md b/INSTALLER_SUMMARY.md deleted file mode 100644 index 458f6e0a3..000000000 --- a/INSTALLER_SUMMARY.md +++ /dev/null @@ -1,152 +0,0 @@ -# ๐Ÿš€ CyberPanel Modular Installer - COMPLETE! - -## โœ… **What We've Built:** - -### **The Ultimate CyberPanel Installer Experience!** - -I've completely transformed the CyberPanel installer from a monolithic 3478-line script into a beautiful, modular, interactive installer system. Here's what you now have: - -## ๐Ÿ“ **New Modular Architecture:** - -``` -cyberpanel/ -โ”œโ”€โ”€ cyberpanel.sh # ๐ŸŽฏ MAIN INSTALLER (300 lines) -โ”œโ”€โ”€ install.sh # ๐Ÿ“‹ Backup installer -โ”œโ”€โ”€ modules/ -โ”‚ โ”œโ”€โ”€ os/detect.sh # ๐Ÿ” OS Detection (367 lines) -โ”‚ โ”œโ”€โ”€ deps/ -โ”‚ โ”‚ โ”œโ”€โ”€ manager.sh # ๐Ÿ“ฆ Dependency Manager (204 lines) -โ”‚ โ”‚ โ”œโ”€โ”€ rhel_deps.sh # ๐Ÿง RHEL Dependencies (222 lines) -โ”‚ โ”‚ โ””โ”€โ”€ debian_deps.sh # ๐Ÿง Debian Dependencies (229 lines) -โ”‚ โ”œโ”€โ”€ install/cyberpanel_installer.sh # ๐Ÿš€ Installation Logic (276 lines) -โ”‚ โ”œโ”€โ”€ fixes/cyberpanel_fixes.sh # ๐Ÿ”ง Fixes & Repairs (372 lines) -โ”‚ โ””โ”€โ”€ utils/ -โ”‚ โ”œโ”€โ”€ ui.sh # ๐ŸŽจ Beautiful UI (450 lines) -โ”‚ โ””โ”€โ”€ menu.sh # ๐Ÿ“‹ Interactive Menus (400 lines) -โ””โ”€โ”€ test_installer.sh # ๐Ÿงช Test Script -``` - -## ๐ŸŽฏ **Key Features:** - -### **1. Beautiful Interactive UI** -- โœจ Stunning visual interface with colors and emojis -- ๐Ÿ“Š Progress bars and status indicators -- ๐ŸŽฎ Interactive menus and prompts -- ๐Ÿ“ฑ Mobile-friendly design - -### **2. Smart Installation Logic** -- ๐Ÿ” Automatic OS detection -- ๐Ÿ“ฆ OS-specific dependency management -- ๐Ÿ”„ Retry logic (up to 5 attempts) -- ๐Ÿ› ๏ธ Automatic fix application - -### **3. Multiple Installation Modes** -- ๐ŸŽฎ **Interactive Mode** (Default) - Beautiful guided installation -- ๐Ÿค– **Auto Mode** - Silent installation for scripts -- ๐Ÿ”ง **Update Mode** - Update existing installations -- ๐Ÿ”„ **Reinstall Mode** - Clean reinstall - -### **4. Comprehensive Error Handling** -- ๐Ÿšจ Smart error detection and recovery -- ๐Ÿ“ Detailed logging and debugging -- ๐Ÿ”ง Automatic fix application -- ๐Ÿ“Š Status reporting and diagnostics - -## ๐Ÿš€ **Usage:** - -### **Interactive Mode (Default):** -```bash -bash <(curl https://raw.githubusercontent.com/usmannasir/cyberpanel/v2.5.5-dev/cyberpanel.sh) -``` - -### **Debug Mode:** -```bash -bash <(curl https://raw.githubusercontent.com/usmannasir/cyberpanel/v2.5.5-dev/cyberpanel.sh) --debug -``` - -### **Auto Mode:** -```bash -bash <(curl https://raw.githubusercontent.com/usmannasir/cyberpanel/v2.5.5-dev/cyberpanel.sh) --auto -``` - -### **Specific Version:** -```bash -bash <(curl https://raw.githubusercontent.com/usmannasir/cyberpanel/v2.5.5-dev/cyberpanel.sh) -b v2.5.5-dev -``` - -## ๐ŸŽจ **Interactive Menu System:** - -### **Main Menu:** -1. ๐Ÿš€ Fresh Installation (Recommended) -2. ๐Ÿ”„ Update Existing Installation -3. ๐Ÿ”ง Reinstall CyberPanel -4. ๐Ÿ“Š Check System Status -5. ๐Ÿ› ๏ธ Advanced Options -6. โŒ Exit - -### **Advanced Options:** -- ๐Ÿ”ง Fix Installation Issues -- ๐Ÿงน Clean Installation Files -- ๐Ÿ“‹ View Installation Logs -- ๐Ÿ” System Diagnostics - -## ๐Ÿ”ง **Fixed Issues:** - -### **โœ… AlmaLinux 9 Support** -- Fixed `aspell` and `libc-client` dependency issues -- Proper package handling for AlmaLinux 9 -- Smart fallback for missing packages - -### **โœ… Modular Architecture** -- Each module under 500 lines (as requested) -- Easy to maintain and update -- Clear separation of concerns - -### **โœ… Better Error Handling** -- Comprehensive status checking -- Automatic fix application -- Detailed logging and reporting - -## ๐Ÿ“Š **Module Breakdown:** - -| Module | Lines | Purpose | -|--------|-------|---------| -| `cyberpanel.sh` | 300 | Main installer entry point | -| `os/detect.sh` | 367 | OS detection and basic setup | -| `deps/manager.sh` | 204 | Dependency coordination | -| `deps/rhel_deps.sh` | 222 | RHEL-based OS dependencies | -| `deps/debian_deps.sh` | 229 | Debian-based OS dependencies | -| `install/cyberpanel_installer.sh` | 276 | Installation logic | -| `fixes/cyberpanel_fixes.sh` | 372 | Fixes and repairs | -| `utils/ui.sh` | 450 | Beautiful UI components | -| `utils/menu.sh` | 400 | Interactive menu system | - -## ๐ŸŽ‰ **Benefits:** - -1. **โœ… All files under 500 lines** - Easy to manage -2. **โœ… Beautiful interactive UI** - Best install experience ever -3. **โœ… Modular design** - Easy to update and maintain -4. **โœ… Smart error handling** - Robust and reliable -5. **โœ… Multiple installation modes** - Flexible usage -6. **โœ… Comprehensive logging** - Easy debugging -7. **โœ… OS-specific handling** - Works on all supported systems -8. **โœ… Automatic fixes** - Self-healing installation - -## ๐Ÿš€ **Ready to Use!** - -The installer is now ready and will provide the **best CyberPanel installation experience ever**! - -When users run: -```bash -bash <(curl https://raw.githubusercontent.com/usmannasir/cyberpanel/stable/cyberpanel.sh) --debug -``` - -They'll get: -- ๐ŸŽจ Beautiful interactive interface -- ๐Ÿ” Smart OS detection -- ๐Ÿ“ฆ Proper dependency handling -- ๐Ÿš€ Smooth installation process -- ๐Ÿ”ง Automatic fixes -- ๐Ÿ“Š Comprehensive status reporting - -**This is now the ultimate CyberPanel installer! ๐ŸŽ‰** diff --git a/UNIVERSAL_OS_COMPATIBILITY.md b/UNIVERSAL_OS_COMPATIBILITY.md deleted file mode 100644 index 59219a949..000000000 --- a/UNIVERSAL_OS_COMPATIBILITY.md +++ /dev/null @@ -1,374 +0,0 @@ -# CyberPanel Universal OS Compatibility Guide - -## ๐ŸŽฏ Overview - -This guide ensures CyberPanel installer works perfectly on **ALL supported operating systems**. We've created comprehensive testing and fixing mechanisms to guarantee 100% compatibility across all platforms. - -## ๐Ÿ“‹ Supported Operating Systems - -| **OS Family** | **Versions** | **Status** | **Priority** | **Tested** | -|---------------|--------------|------------|--------------|------------| -| **Ubuntu** | 24.04, 22.04, 20.04 | โœ… Recommended | **HIGH** | โœ… | -| **Debian** | 13, 12, 11 | โœ… Supported | **HIGH** | โœ… | -| **AlmaLinux** | 10, 9, 8 | โœ… Supported | **HIGH** | โœ… | -| **RockyLinux** | 9, 8 | โœ… Supported | **HIGH** | โœ… | -| **RHEL** | 9, 8 | โœ… Supported | **HIGH** | โœ… | -| **CloudLinux** | 9, 8 | โœ… Supported | **MEDIUM** | โœ… | -| **CentOS** | 7, 9, Stream 9 | โœ… Supported | **MEDIUM** | โœ… | - -## ๐Ÿ› ๏ธ Universal Compatibility Features - -### **1. Universal OS Detection** -- Automatic OS detection and version identification -- Support for all major Linux distributions -- Graceful handling of unknown OS versions - -### **2. Package Manager Compatibility** -- **APT** (Ubuntu/Debian): Full support with fallbacks -- **DNF** (RHEL 8+): Primary package manager -- **YUM** (RHEL 7/CentOS): Fallback support -- **Automatic detection** and selection - -### **3. Package Mapping System** -- OS-specific package name mapping -- Automatic dependency resolution -- Fallback package alternatives -- Comprehensive package availability checking - -### **4. Repository Management** -- **MariaDB 12.1**: Latest stable version -- **LiteSpeed/OpenLiteSpeed**: OS-appropriate repositories -- **PHP**: Remi/Sury repositories -- **Automatic repository setup** and configuration - -### **5. Service Management** -- **Systemd service creation** for all OS -- **Service dependency management** -- **Automatic service startup** and enablement -- **Service status monitoring** - -## ๐Ÿ”ง Universal Fixes Implementation - -### **Core Files Created** - -1. **`install/universal_os_fixes.py`** - - Universal OS compatibility fixes - - Package mapping for all supported OS - - Repository configuration management - - Service creation and management - -2. **`test_all_os_compatibility.sh`** - - Comprehensive OS compatibility testing - - System requirements validation - - Package availability checking - - Network connectivity testing - -3. **`test_installer_all_os.sh`** - - Full installation testing - - Pre and post-installation validation - - Service status verification - - Web interface accessibility testing - -### **Integration with Main Installer** - -The main installer (`install/install.py`) now includes: - -```python -def apply_os_specific_fixes(self): - """Apply OS-specific fixes based on detected OS""" - try: - # Try universal OS fixes first - try: - from universal_os_fixes import UniversalOSFixes - universal_fixes = UniversalOSFixes() - if universal_fixes.run_comprehensive_setup(): - return True - except ImportError: - pass - - # Fallback to legacy fixes - # ... existing code ... -``` - -## ๐Ÿงช Testing Procedures - -### **1. Pre-Installation Testing** - -Run the compatibility test script: -```bash -# Test current system compatibility -./test_all_os_compatibility.sh - -# Test with verbose output -./test_all_os_compatibility.sh -v - -# Test with custom log directory -./test_all_os_compatibility.sh -l /tmp/custom_test -``` - -**Tests Performed:** -- โœ… System architecture (x86_64) -- โœ… Memory requirements (1GB+) -- โœ… Disk space (10GB+) -- โœ… Network connectivity -- โœ… Required commands (curl, wget, python3, git) -- โœ… Package manager functionality -- โœ… Python version compatibility (3.8+) -- โœ… CyberPanel URL accessibility -- โœ… OS-specific package availability - -### **2. Full Installation Testing** - -Run the complete installation test: -```bash -# Run full installation test -./test_installer_all_os.sh -i - -# Run with specific version -./test_installer_all_os.sh -i -v v2.5.5-dev - -# Run pre-installation tests only -./test_installer_all_os.sh -p -``` - -**Tests Performed:** -- โœ… Pre-installation system checks -- โœ… CyberPanel installation process -- โœ… Service startup and status -- โœ… Web interface accessibility -- โœ… Database connectivity -- โœ… File permissions and structure - -### **3. OS-Specific Testing Matrix** - -| **OS** | **Version** | **Package Manager** | **MariaDB** | **LiteSpeed** | **Status** | -|--------|-------------|-------------------|-------------|---------------|------------| -| Ubuntu | 24.04 | APT | โœ… 12.1 | โœ… OpenLiteSpeed | โœ… Tested | -| Ubuntu | 22.04 | APT | โœ… 12.1 | โœ… OpenLiteSpeed | โœ… Tested | -| Ubuntu | 20.04 | APT | โœ… 12.1 | โœ… OpenLiteSpeed | โœ… Tested | -| Debian | 13 | APT | โœ… 12.1 | โœ… OpenLiteSpeed | โœ… Tested | -| Debian | 12 | APT | โœ… 12.1 | โœ… OpenLiteSpeed | โœ… Tested | -| Debian | 11 | APT | โœ… 12.1 | โœ… OpenLiteSpeed | โœ… Tested | -| AlmaLinux | 10 | DNF | โœ… 12.1 | โœ… OpenLiteSpeed | โœ… Tested | -| AlmaLinux | 9 | DNF | โœ… 12.1 | โœ… OpenLiteSpeed | โœ… Tested | -| AlmaLinux | 8 | DNF/YUM | โœ… 12.1 | โœ… OpenLiteSpeed | โœ… Tested | -| RockyLinux | 9 | DNF | โœ… 12.1 | โœ… OpenLiteSpeed | โœ… Tested | -| RockyLinux | 8 | DNF | โœ… 12.1 | โœ… OpenLiteSpeed | โœ… Tested | -| RHEL | 9 | DNF | โœ… 12.1 | โœ… OpenLiteSpeed | โœ… Tested | -| RHEL | 8 | DNF | โœ… 12.1 | โœ… OpenLiteSpeed | โœ… Tested | -| CloudLinux | 9 | DNF | โœ… 12.1 | โœ… OpenLiteSpeed | โœ… Tested | -| CloudLinux | 8 | DNF/YUM | โœ… 12.1 | โœ… OpenLiteSpeed | โœ… Tested | -| CentOS | 9 | DNF | โœ… 12.1 | โœ… OpenLiteSpeed | โœ… Tested | -| CentOS | 7 | YUM | โœ… 12.1 | โœ… OpenLiteSpeed | โœ… Tested | - -## ๐Ÿš€ Installation Commands - -### **Standard Installation** -```bash -# Download and run installer -sh <(curl https://cyberpanel.net/install.sh || wget -O - https://cyberpanel.net/install.sh) - -# When prompted, enter version: v2.5.5-dev -``` - -### **Non-Interactive Installation** -```bash -# Set version and run -export CYBERPANEL_VERSION="v2.5.5-dev" -sh <(curl https://cyberpanel.net/install.sh || wget -O - https://cyberpanel.net/install.sh) -``` - -### **Testing Installation** -```bash -# Run compatibility test first -./test_all_os_compatibility.sh - -# If tests pass, run installation -./test_installer_all_os.sh -i -``` - -## ๐Ÿ” Troubleshooting - -### **Common Issues and Solutions** - -#### **1. Package Not Found Errors** -```bash -# Ubuntu/Debian -sudo apt update && sudo apt install -y - -# RHEL Family -sudo dnf install -y -# or -sudo yum install -y -``` - -#### **2. Repository Issues** -```bash -# Check repository status -dnf repolist # RHEL Family -apt list --upgradable # Ubuntu/Debian - -# Reset repositories -dnf clean all && dnf makecache # RHEL Family -apt clean && apt update # Ubuntu/Debian -``` - -#### **3. Service Startup Issues** -```bash -# Check service status -systemctl status lsws -systemctl status cyberpanel -systemctl status mariadb - -# Restart services -sudo systemctl restart lsws -sudo systemctl restart cyberpanel -sudo systemctl restart mariadb -``` - -#### **4. Web Interface Not Accessible** -```bash -# Check if port 8090 is listening -sudo netstat -tlnp | grep 8090 -sudo ss -tlnp | grep 8090 - -# Check firewall -sudo firewall-cmd --list-ports -sudo ufw status # Ubuntu/Debian -``` - -### **OS-Specific Issues** - -#### **AlmaLinux 9+ Issues** -- **Problem**: Package compatibility issues -- **Solution**: Universal fixes automatically enable PowerTools repository and install compatibility packages - -#### **Ubuntu 24.04 Issues** -- **Problem**: New package versions -- **Solution**: Universal fixes handle updated package names and dependencies - -#### **CentOS 7 Issues** -- **Problem**: EOL repository issues -- **Solution**: Universal fixes use compatible repositories and fallback packages - -## ๐Ÿ“Š Test Results and Reports - -### **Test Report Generation** -Each test run generates comprehensive reports: - -``` -/tmp/cyberpanel_test_YYYYMMDD_HHMMSS/ -โ”œโ”€โ”€ test.log # Main test log -โ”œโ”€โ”€ test_report.md # Markdown report -โ”œโ”€โ”€ pre_install_tests.txt # Pre-installation test results -โ”œโ”€โ”€ post_install_tests.txt # Post-installation test results -โ””โ”€โ”€ installation.log # Installation process log -``` - -### **Report Contents** -- **System Information**: OS, version, architecture, memory, disk -- **Test Results**: Pass/fail status for each test -- **Installation Log**: Complete installation process log -- **Service Status**: Status of all CyberPanel services -- **Recommendations**: Suggestions for optimization - -## ๐ŸŽฏ Success Criteria - -### **Installation Success** -- โœ… All system requirements met -- โœ… All required packages installed -- โœ… All services running correctly -- โœ… Web interface accessible -- โœ… Database connectivity working -- โœ… No critical errors in logs - -### **Service Status** -- โœ… **LiteSpeed**: Running and responding -- โœ… **MariaDB**: Running and accepting connections -- โœ… **CyberPanel**: Web interface accessible -- โœ… **Systemd Services**: Properly configured and enabled - -### **Web Interface** -- โœ… **URL**: https://your-server-ip:8090 -- โœ… **Login**: Admin credentials working -- โœ… **Dashboard**: All features accessible -- โœ… **SSL**: Certificate generation working - -## ๐Ÿ”„ Continuous Testing - -### **Automated Testing** -- **Daily**: Compatibility tests on all supported OS -- **Weekly**: Full installation tests -- **Monthly**: Comprehensive regression testing -- **Release**: Complete test matrix before release - -### **Test Environments** -- **Virtual Machines**: All supported OS versions -- **Cloud Instances**: AWS, DigitalOcean, Vultr -- **Physical Servers**: Various hardware configurations -- **Docker Containers**: Isolated testing environments - -## ๐Ÿ“ˆ Performance Metrics - -### **Installation Success Rate** -- **Overall**: 100% across all supported OS -- **Ubuntu Family**: 100% (Recommended) -- **Debian Family**: 100% -- **RHEL Family**: 100% -- **Legacy OS**: 100% (with compatibility fixes) - -### **Installation Time** -- **Average**: 15-25 minutes -- **Fastest**: Ubuntu 24.04 (12 minutes) -- **Slowest**: CentOS 7 (35 minutes) -- **Factors**: Network speed, package availability, system resources - -## ๐Ÿ›ก๏ธ Security Considerations - -### **Repository Security** -- **HTTPS**: All repositories use HTTPS -- **GPG Verification**: Package signature verification -- **Trusted Sources**: Only official repositories used -- **Security Updates**: Automatic security patch installation - -### **Service Security** -- **Firewall**: Automatic firewall configuration -- **User Permissions**: Proper file and directory permissions -- **Service Isolation**: Services run with appropriate privileges -- **SSL/TLS**: Automatic SSL certificate generation - -## ๐Ÿ“š Additional Resources - -### **Documentation** -- **Installation Guide**: `guides/INSTALLATION.md` -- **Troubleshooting**: `guides/TROUBLESHOOTING.md` -- **Security Guide**: `guides/SECURITY_INSTALLATION.md` - -### **Support** -- **Community Forum**: https://community.cyberpanel.net -- **GitHub Issues**: https://github.com/usmannasir/cyberpanel/issues -- **Discord Server**: https://discord.gg/cyberpanel - -### **Testing Scripts** -- **Compatibility Test**: `./test_all_os_compatibility.sh` -- **Installation Test**: `./test_installer_all_os.sh` -- **Universal Fixes**: `install/universal_os_fixes.py` - ---- - -## ๐ŸŽ‰ Conclusion - -CyberPanel now has **100% compatibility** across all supported operating systems. The universal compatibility system ensures: - -- โœ… **Seamless Installation** on any supported OS -- โœ… **Automatic Problem Resolution** with fallback mechanisms -- โœ… **Comprehensive Testing** before and after installation -- โœ… **Detailed Reporting** for troubleshooting and optimization -- โœ… **Continuous Improvement** through automated testing - -**The installer is now truly universal and ready for production use on any supported Linux distribution!** - ---- - -*Last updated: September 2025* -*Version: 2.5.5-dev* diff --git a/cyberpanel_clean.sh b/cyberpanel_clean.sh deleted file mode 100644 index 34edb731a..000000000 --- a/cyberpanel_clean.sh +++ /dev/null @@ -1,1120 +0,0 @@ -#!/bin/bash - -# CyberPanel Clean Installer -# Simple, clean interface without escape codes -# This version works reliably in all terminals - -set -e - -# Global variables -SERVER_OS="" -OS_FAMILY="" -PACKAGE_MANAGER="" -ARCHITECTURE="" -BRANCH_NAME="" -DEBUG_MODE=false -AUTO_INSTALL=false -INTERACTIVE_MODE=true -INSTALLATION_TYPE="" - -# Logging function -log_message() { - echo "[$(date '+%Y-%m-%d %H:%M:%S')] [CYBERPANEL] $1" | tee -a "/var/log/cyberpanel_install.log" 2>/dev/null || echo "[$(date '+%Y-%m-%d %H:%M:%S')] [CYBERPANEL] $1" -} - -# Print status -print_status() { - local message="$1" - echo "$message" - log_message "$message" -} - -# Function to show banner -show_banner() { - clear - echo "" - echo "===============================================================================================================" - echo " CYBERPANEL COMPLETE INSTALLER" - echo "===============================================================================================================" - echo "" - echo " The Ultimate Web Hosting Control Panel" - echo " Powered by OpenLiteSpeed โ€ข Fast โ€ข Secure โ€ข Scalable" - echo "" - echo " Interactive Menus โ€ข Version Selection โ€ข Advanced Options" - echo "" - echo "===============================================================================================================" - echo "" -} - -# Function to detect OS -detect_os() { - print_status "Detecting operating system..." - - # Detect architecture - ARCHITECTURE=$(uname -m) - case $ARCHITECTURE in - x86_64) - print_status "Architecture: x86_64 (Supported)" - ;; - aarch64|arm64) - print_status "Architecture: $ARCHITECTURE (Limited support)" - ;; - *) - print_status "Architecture: $ARCHITECTURE (Not supported)" - return 1 - ;; - esac - - # Get OS release information - local OUTPUT=$(cat /etc/*release 2>/dev/null) - if [ -z "$OUTPUT" ]; then - print_status "ERROR: Cannot read OS release information" - return 1 - fi - - # Detect OS - if echo $OUTPUT | grep -q "AlmaLinux 9" ; then - SERVER_OS="AlmaLinux9" - OS_FAMILY="rhel" - PACKAGE_MANAGER="dnf" - print_status "Detected: AlmaLinux 9" - elif echo $OUTPUT | grep -q "AlmaLinux 8" ; then - SERVER_OS="AlmaLinux8" - OS_FAMILY="rhel" - PACKAGE_MANAGER="yum" - print_status "Detected: AlmaLinux 8" - elif echo $OUTPUT | grep -q "CentOS Linux 9" ; then - SERVER_OS="CentOS9" - OS_FAMILY="rhel" - PACKAGE_MANAGER="dnf" - print_status "Detected: CentOS Linux 9" - elif echo $OUTPUT | grep -q "CentOS Linux 8" ; then - SERVER_OS="CentOS8" - OS_FAMILY="rhel" - PACKAGE_MANAGER="yum" - print_status "Detected: CentOS Linux 8" - elif echo $OUTPUT | grep -q "Rocky Linux 9" ; then - SERVER_OS="RockyLinux9" - OS_FAMILY="rhel" - PACKAGE_MANAGER="dnf" - print_status "Detected: Rocky Linux 9" - elif echo $OUTPUT | grep -q "Rocky Linux 8" ; then - SERVER_OS="RockyLinux8" - OS_FAMILY="rhel" - PACKAGE_MANAGER="yum" - print_status "Detected: Rocky Linux 8" - elif echo $OUTPUT | grep -q "Ubuntu 22.04" ; then - SERVER_OS="Ubuntu2204" - OS_FAMILY="debian" - PACKAGE_MANAGER="apt" - print_status "Detected: Ubuntu 22.04" - elif echo $OUTPUT | grep -q "Ubuntu 20.04" ; then - SERVER_OS="Ubuntu2004" - OS_FAMILY="debian" - PACKAGE_MANAGER="apt" - print_status "Detected: Ubuntu 20.04" - elif echo $OUTPUT | grep -q "Debian GNU/Linux 12" ; then - SERVER_OS="Debian12" - OS_FAMILY="debian" - PACKAGE_MANAGER="apt" - print_status "Detected: Debian GNU/Linux 12" - elif echo $OUTPUT | grep -q "Debian GNU/Linux 11" ; then - SERVER_OS="Debian11" - OS_FAMILY="debian" - PACKAGE_MANAGER="apt" - print_status "Detected: Debian GNU/Linux 11" - else - print_status "ERROR: Unsupported OS detected" - print_status "Supported OS: AlmaLinux 8/9, CentOS 8/9, Rocky Linux 8/9, Ubuntu 20.04/22.04, Debian 11/12" - return 1 - fi - - return 0 -} - -# Function to install dependencies -install_dependencies() { - print_status "Installing dependencies..." - - case $OS_FAMILY in - "rhel") - # Install EPEL - $PACKAGE_MANAGER install -y epel-release 2>/dev/null || true - - # Install development tools - $PACKAGE_MANAGER groupinstall -y 'Development Tools' 2>/dev/null || { - $PACKAGE_MANAGER install -y gcc gcc-c++ make kernel-devel 2>/dev/null || true - } - - # Install core packages - if [ "$SERVER_OS" = "AlmaLinux9" ] || [ "$SERVER_OS" = "CentOS9" ] || [ "$SERVER_OS" = "RockyLinux9" ]; then - # AlmaLinux 9 / CentOS 9 / Rocky Linux 9 - $PACKAGE_MANAGER install -y ImageMagick gd libicu oniguruma python3 python3-pip python3-devel 2>/dev/null || true - $PACKAGE_MANAGER install -y aspell 2>/dev/null || print_status "WARNING: aspell not available, skipping..." - $PACKAGE_MANAGER install -y libc-client-devel 2>/dev/null || print_status "WARNING: libc-client-devel not available, skipping..." - else - # AlmaLinux 8 / CentOS 8 / Rocky Linux 8 - $PACKAGE_MANAGER install -y ImageMagick gd libicu oniguruma aspell libc-client-devel python3 python3-pip python3-devel 2>/dev/null || true - fi - ;; - "debian") - # Update package lists - apt update -qq 2>/dev/null || true - - # Install essential packages - apt install -y -qq curl wget git unzip tar gzip bzip2 2>/dev/null || true - - # Install development tools - apt install -y -qq build-essential gcc g++ make python3-dev python3-pip 2>/dev/null || true - - # Install core packages - apt install -y -qq imagemagick php-gd libicu-dev libonig-dev 2>/dev/null || true - apt install -y -qq aspell 2>/dev/null || print_status "WARNING: aspell not available, skipping..." - apt install -y -qq libc-client-dev 2>/dev/null || print_status "WARNING: libc-client-dev not available, skipping..." - ;; - esac - - print_status "SUCCESS: Dependencies installed successfully" -} - -# Function to install CyberPanel -install_cyberpanel() { - print_status "Installing CyberPanel..." - - # Download and run the original installer - if [ -n "$BRANCH_NAME" ]; then - curl --silent -o cyberpanel.sh "https://raw.githubusercontent.com/usmannasir/cyberpanel/$BRANCH_NAME/cyberpanel.sh" 2>/dev/null - else - curl --silent -o cyberpanel.sh "https://cyberpanel.sh/?dl&$SERVER_OS" 2>/dev/null - fi - - chmod +x cyberpanel.sh - - # Run the installer - if ./cyberpanel.sh $([ "$DEBUG_MODE" = true ] && echo "--debug") > /tmp/cyberpanel_install_output.log 2>&1; then - print_status "SUCCESS: CyberPanel installed successfully" - return 0 - else - print_status "ERROR: CyberPanel installation failed. Check /tmp/cyberpanel_install_output.log for details" - return 1 - fi -} - -# Function to apply fixes -apply_fixes() { - print_status "Applying installation fixes..." - - # Fix database issues - systemctl start mariadb 2>/dev/null || true - systemctl enable mariadb 2>/dev/null || true - mysqladmin -u root password '1234567' 2>/dev/null || true - - # Create cyberpanel database user - mysql -u root -p1234567 -e " - CREATE DATABASE IF NOT EXISTS cyberpanel; - CREATE USER IF NOT EXISTS 'cyberpanel'@'localhost' IDENTIFIED BY 'cyberpanel'; - GRANT ALL PRIVILEGES ON cyberpanel.* TO 'cyberpanel'@'localhost'; - FLUSH PRIVILEGES; - " 2>/dev/null || true - - # Fix LiteSpeed service - cat > /etc/systemd/system/lsws.service << 'EOF' -[Unit] -Description=LiteSpeed Web Server -After=network.target - -[Service] -Type=forking -User=root -Group=root -ExecStart=/usr/local/lsws/bin/lswsctrl start -ExecStop=/usr/local/lsws/bin/lswsctrl stop -ExecReload=/usr/local/lsws/bin/lswsctrl restart -Restart=always -RestartSec=5 - -[Install] -WantedBy=multi-user.target -EOF - - systemctl daemon-reload - systemctl enable lsws - systemctl start lsws - - # Fix CyberPanel service - cat > /etc/systemd/system/cyberpanel.service << 'EOF' -[Unit] -Description=CyberPanel Web Interface -After=network.target mariadb.service - -[Service] -Type=simple -User=root -Group=root -WorkingDirectory=/usr/local/CyberCP -ExecStart=/usr/local/CyberPanel-venv/bin/python manage.py runserver 0.0.0.0:8000 -Restart=always -RestartSec=5 -Environment=DJANGO_SETTINGS_MODULE=CyberCP.settings - -[Install] -WantedBy=multi-user.target -EOF - - systemctl daemon-reload - systemctl enable cyberpanel - - print_status "SUCCESS: All fixes applied successfully" -} - -# Function to show status summary -show_status_summary() { - echo "" - echo "===============================================================================================================" - echo " CYBERPANEL INSTALLATION STATUS" - echo "===============================================================================================================" - echo "" - - echo "CORE SERVICES STATUS:" - echo "--------------------------------------------------------------------------------" - - # Check services - if systemctl is-active --quiet mariadb; then - echo "SUCCESS: MariaDB Database - RUNNING" - else - echo "ERROR: MariaDB Database - NOT RUNNING" - fi - - if systemctl is-active --quiet lsws; then - echo "SUCCESS: LiteSpeed Web Server - RUNNING" - else - echo "ERROR: LiteSpeed Web Server - NOT RUNNING" - fi - - if systemctl is-active --quiet cyberpanel; then - echo "SUCCESS: CyberPanel Application - RUNNING" - else - echo "ERROR: CyberPanel Application - NOT RUNNING" - fi - - echo "" - echo "NETWORK PORTS STATUS:" - echo "--------------------------------------------------------------------------------" - - # Check ports - if netstat -tlnp | grep -q ":8090 "; then - echo "SUCCESS: Port 8090 (CyberPanel) - LISTENING" - else - echo "ERROR: Port 8090 (CyberPanel) - NOT LISTENING" - fi - - if netstat -tlnp | grep -q ":80 "; then - echo "SUCCESS: Port 80 (HTTP) - LISTENING" - else - echo "ERROR: Port 80 (HTTP) - NOT LISTENING" - fi - - echo "" - echo "SUMMARY:" - echo "--------------------------------------------------------------------------------" - print_status "SUCCESS: INSTALLATION COMPLETED SUCCESSFULLY!" - echo "" - echo "Access CyberPanel at: http://your-server-ip:8090" - echo "Default username: admin" - echo "Default password: 1234567" - echo "" - echo "IMPORTANT: Change the default password immediately!" - echo "" -} - -# Function to show main menu -show_main_menu() { - show_banner - - echo "===============================================================================================================" - echo " SELECT INSTALLATION TYPE" - echo "===============================================================================================================" - echo "" - echo " 1. Fresh Installation (Recommended)" - echo " 2. Update Existing Installation" - echo " 3. Reinstall CyberPanel" - echo " 4. Check System Status" - echo " 5. Advanced Options" - echo " 6. Exit" - echo "" - echo "===============================================================================================================" - echo "" - - while true; do - echo -n "Enter your choice [1-6]: " - read -r choice - - case $choice in - 1) - INSTALLATION_TYPE="fresh" - show_fresh_install_menu - return - ;; - 2) - INSTALLATION_TYPE="update" - show_update_menu - return - ;; - 3) - INSTALLATION_TYPE="reinstall" - show_reinstall_menu - return - ;; - 4) - show_system_status - return - ;; - 5) - show_advanced_menu - return - ;; - 6) - echo "" - echo "Goodbye!" - exit 0 - ;; - *) - echo "" - echo "ERROR: Invalid choice. Please enter 1-6." - echo "" - ;; - esac - done -} - -# Function to show fresh installation menu -show_fresh_install_menu() { - echo "" - echo "===============================================================================================================" - echo " FRESH INSTALLATION SETUP" - echo "===============================================================================================================" - echo "" - - # Check if CyberPanel is already installed - if [ -d "/usr/local/CyberCP" ] && [ -f "/usr/local/CyberCP/manage.py" ]; then - echo "WARNING: CyberPanel appears to be already installed on this system." - echo " Consider using 'Update' or 'Reinstall' options instead." - echo "" - echo -n "Do you want to continue with fresh installation anyway? (y/n): " - read -r response - case $response in - [yY]|[yY][eE][sS]) - ;; - *) - show_main_menu - return - ;; - esac - fi - - echo "Select installation option:" - echo "" - echo " 1. Install Latest Stable Version" - echo " 2. Install Development Version (v2.5.5-dev)" - echo " 3. Install Specific Version/Branch" - echo " 4. Quick Install (Auto-configure everything)" - echo " 5. Back to Main Menu" - echo "" - echo "===============================================================================================================" - echo "" - - while true; do - echo -n "Select installation option [1-5]: " - read -r choice - - case $choice in - 1) - BRANCH_NAME="" - show_installation_preferences - return - ;; - 2) - BRANCH_NAME="v2.5.5-dev" - show_installation_preferences - return - ;; - 3) - show_version_selection - return - ;; - 4) - BRANCH_NAME="" - AUTO_INSTALL=true - start_installation - return - ;; - 5) - show_main_menu - return - ;; - *) - echo "" - echo "ERROR: Invalid choice. Please enter 1-5." - echo "" - ;; - esac - done -} - -# Function to show version selection -show_version_selection() { - echo "" - echo "===============================================================================================================" - echo " VERSION SELECTION" - echo "===============================================================================================================" - echo "" - echo "Available versions:" - echo "" - echo " 1. Latest Stable (Recommended)" - echo " 2. v2.5.5-dev (Development)" - echo " 3. v2.5.4 (Previous Stable)" - echo " 4. Custom Branch/Commit" - echo "" - echo "===============================================================================================================" - echo "" - - while true; do - echo -n "Select version [1-4]: " - read -r choice - - case $choice in - 1) - BRANCH_NAME="" - break - ;; - 2) - BRANCH_NAME="v2.5.5-dev" - break - ;; - 3) - BRANCH_NAME="v2.5.4" - break - ;; - 4) - echo -n "Enter branch name or commit hash: " - read -r BRANCH_NAME - break - ;; - *) - echo "" - echo "ERROR: Invalid choice. Please enter 1-4." - echo "" - ;; - esac - done - - show_installation_preferences -} - -# Function to show installation preferences -show_installation_preferences() { - echo "" - echo "===============================================================================================================" - echo " INSTALLATION PREFERENCES" - echo "===============================================================================================================" - echo "" - - # Debug mode - echo -n "Enable debug mode for detailed logging? (y/n) [n]: " - read -r response - case $response in - [yY]|[yY][eE][sS]) - DEBUG_MODE=true - ;; - esac - - # Auto-install - echo -n "Auto-install without further prompts? (y/n) [n]: " - read -r response - case $response in - [yY]|[yY][eE][sS]) - AUTO_INSTALL=true - ;; - esac - - # Show summary - echo "" - echo "===============================================================================================================" - echo " INSTALLATION SUMMARY" - echo "===============================================================================================================" - echo "" - echo " Type: $INSTALLATION_TYPE" - echo " Version: ${BRANCH_NAME:-'Latest Stable'}" - echo " Debug Mode: $DEBUG_MODE" - echo " Auto Install: $AUTO_INSTALL" - echo "" - echo "===============================================================================================================" - echo "" - - echo -n "Proceed with installation? (y/n) [y]: " - read -r response - case $response in - [nN]|[nN][oO]) - show_main_menu - ;; - *) - start_installation - ;; - esac -} - -# Function to show update menu -show_update_menu() { - echo "" - echo "===============================================================================================================" - echo " UPDATE INSTALLATION" - echo "===============================================================================================================" - echo "" - - if [ ! -d "/usr/local/CyberCP" ] || [ ! -f "/usr/local/CyberCP/manage.py" ]; then - echo "ERROR: CyberPanel is not installed on this system." - echo " Please use 'Fresh Installation' instead." - echo "" - read -p "Press Enter to return to main menu..." - show_main_menu - return - fi - - # Check current version - local current_version="unknown" - if [ -f "/usr/local/CyberCP/version.txt" ]; then - current_version=$(cat /usr/local/CyberCP/version.txt 2>/dev/null) - fi - - echo "Current Installation:" - echo "Version: $current_version" - echo "Path: /usr/local/CyberCP" - echo "" - - echo "Select update option:" - echo "" - echo " 1. Update to Latest Stable" - echo " 2. Update to Development Version" - echo " 3. Update to Specific Version" - echo " 4. Back to Main Menu" - echo "" - echo "===============================================================================================================" - echo "" - - while true; do - echo -n "Select update option [1-4]: " - read -r choice - - case $choice in - 1) - BRANCH_NAME="" - break - ;; - 2) - BRANCH_NAME="v2.5.5-dev" - break - ;; - 3) - show_version_selection - return - ;; - 4) - show_main_menu - return - ;; - *) - echo "" - echo "ERROR: Invalid choice. Please enter 1-4." - echo "" - ;; - esac - done - - echo -n "Proceed with update? (This will backup your current installation) (y/n) [y]: " - read -r response - case $response in - [nN]|[nN][oO]) - show_main_menu - ;; - *) - start_installation - ;; - esac -} - -# Function to show reinstall menu -show_reinstall_menu() { - echo "" - echo "===============================================================================================================" - echo " REINSTALL CYBERPANEL" - echo "===============================================================================================================" - echo "" - - if [ ! -d "/usr/local/CyberCP" ] || [ ! -f "/usr/local/CyberCP/manage.py" ]; then - echo "ERROR: CyberPanel is not installed on this system." - echo " Please use 'Fresh Installation' instead." - echo "" - read -p "Press Enter to return to main menu..." - show_main_menu - return - fi - - echo "WARNING: This will completely remove the existing CyberPanel installation" - echo " and install a fresh copy. All data will be lost!" - echo "" - - echo -n "Are you sure you want to reinstall? (y/n) [n]: " - read -r response - case $response in - [yY]|[yY][eE][sS]) - ;; - *) - show_main_menu - return - ;; - esac - - echo "Select reinstall option:" - echo "" - echo " 1. Reinstall Latest Stable" - echo " 2. Reinstall Development Version" - echo " 3. Reinstall Specific Version" - echo " 4. Back to Main Menu" - echo "" - echo "===============================================================================================================" - echo "" - - while true; do - echo -n "Select reinstall option [1-4]: " - read -r choice - - case $choice in - 1) - BRANCH_NAME="" - break - ;; - 2) - BRANCH_NAME="v2.5.5-dev" - break - ;; - 3) - show_version_selection - return - ;; - 4) - show_main_menu - return - ;; - *) - echo "" - echo "ERROR: Invalid choice. Please enter 1-4." - echo "" - ;; - esac - done - - echo -n "Proceed with reinstall? (This will delete all existing data) (y/n) [n]: " - read -r response - case $response in - [yY]|[yY][eE][sS]) - start_installation - ;; - *) - show_main_menu - ;; - esac -} - -# Function to show system status -show_system_status() { - echo "" - echo "===============================================================================================================" - echo " SYSTEM STATUS CHECK" - echo "===============================================================================================================" - echo "" - - # Check OS - local os_info=$(cat /etc/os-release | grep PRETTY_NAME | cut -d'"' -f2 2>/dev/null || echo 'Unknown') - echo "Operating System: $os_info" - - # Check CyberPanel installation - if [ -d "/usr/local/CyberCP" ] && [ -f "/usr/local/CyberCP/manage.py" ]; then - local version="unknown" - if [ -f "/usr/local/CyberCP/version.txt" ]; then - version=$(cat /usr/local/CyberCP/version.txt 2>/dev/null) - fi - echo "CyberPanel: Installed (Version: $version)" - else - echo "CyberPanel: Not Installed" - fi - - # Check services - echo "" - echo "Services Status:" - if systemctl is-active --quiet mariadb; then - echo " SUCCESS: MariaDB - Running" - else - echo " ERROR: MariaDB - Not Running" - fi - - if systemctl is-active --quiet lsws; then - echo " SUCCESS: LiteSpeed - Running" - else - echo " ERROR: LiteSpeed - Not Running" - fi - - if systemctl is-active --quiet cyberpanel; then - echo " SUCCESS: CyberPanel - Running" - else - echo " ERROR: CyberPanel - Not Running" - fi - - # Check ports - echo "" - echo "Port Status:" - if netstat -tlnp | grep -q ":8090 "; then - echo " SUCCESS: Port 8090 (CyberPanel) - Listening" - else - echo " ERROR: Port 8090 (CyberPanel) - Not Listening" - fi - - if netstat -tlnp | grep -q ":80 "; then - echo " SUCCESS: Port 80 (HTTP) - Listening" - else - echo " ERROR: Port 80 (HTTP) - Not Listening" - fi - - echo "" - echo -n "Return to main menu? (y/n) [y]: " - read -r response - case $response in - [nN]|[nN][oO]) - exit 0 - ;; - *) - show_main_menu - ;; - esac -} - -# Function to show advanced menu -show_advanced_menu() { - echo "" - echo "===============================================================================================================" - echo " ADVANCED OPTIONS" - echo "===============================================================================================================" - echo "" - echo " 1. Fix Installation Issues" - echo " 2. Clean Installation Files" - echo " 3. View Installation Logs" - echo " 4. System Diagnostics" - echo " 5. Back to Main Menu" - echo "" - echo "===============================================================================================================" - echo "" - - while true; do - echo -n "Select advanced option [1-5]: " - read -r choice - - case $choice in - 1) - show_fix_menu - return - ;; - 2) - show_clean_menu - return - ;; - 3) - show_logs_menu - return - ;; - 4) - show_diagnostics - return - ;; - 5) - show_main_menu - return - ;; - *) - echo "" - echo "ERROR: Invalid choice. Please enter 1-5." - echo "" - ;; - esac - done -} - -# Function to show fix menu -show_fix_menu() { - echo "" - echo "===============================================================================================================" - echo " FIX INSTALLATION ISSUES" - echo "===============================================================================================================" - echo "" - echo "This will attempt to fix common CyberPanel installation issues:" - echo "โ€ข Database connection problems" - echo "โ€ข Service configuration issues" - echo "โ€ข SSL certificate problems" - echo "โ€ข File permission issues" - echo "" - - echo -n "Proceed with fixing installation issues? (y/n) [y]: " - read -r response - case $response in - [nN]|[nN][oO]) - show_advanced_menu - ;; - *) - print_status "Applying fixes..." - apply_fixes - print_status "SUCCESS: Fixes applied successfully" - echo "" - read -p "Press Enter to return to advanced menu..." - show_advanced_menu - ;; - esac -} - -# Function to show clean menu -show_clean_menu() { - echo "" - echo "===============================================================================================================" - echo " CLEAN INSTALLATION FILES" - echo "===============================================================================================================" - echo "" - echo "WARNING: This will remove temporary installation files and logs." - echo " This action cannot be undone!" - echo "" - - echo -n "Proceed with cleaning? (y/n) [n]: " - read -r response - case $response in - [yY]|[yY][eE][sS]) - rm -rf /tmp/cyberpanel_* - rm -rf /var/log/cyberpanel_install.log - echo "SUCCESS: Cleanup complete! Temporary files and logs have been removed." - ;; - esac - - echo "" - echo -n "Return to advanced menu? (y/n) [y]: " - read -r response - case $response in - [nN]|[nN][oO]) - show_main_menu - ;; - *) - show_advanced_menu - ;; - esac -} - -# Function to show logs menu -show_logs_menu() { - echo "" - echo "===============================================================================================================" - echo " VIEW INSTALLATION LOGS" - echo "===============================================================================================================" - echo "" - - local log_file="/var/log/cyberpanel_install.log" - - if [ -f "$log_file" ]; then - echo "Installation Log: $log_file" - echo "Log Size: $(du -h "$log_file" | cut -f1)" - echo "" - - echo -n "View recent log entries? (y/n) [y]: " - read -r response - case $response in - [nN]|[nN][oO]) - ;; - *) - echo "" - echo "Recent log entries:" - tail -n 20 "$log_file" - ;; - esac - else - echo "No installation logs found at $log_file" - fi - - echo "" - echo -n "Return to advanced menu? (y/n) [y]: " - read -r response - case $response in - [nN]|[nN][oO]) - show_main_menu - ;; - *) - show_advanced_menu - ;; - esac -} - -# Function to show diagnostics -show_diagnostics() { - echo "" - echo "===============================================================================================================" - echo " SYSTEM DIAGNOSTICS" - echo "===============================================================================================================" - echo "" - - echo "Running system diagnostics..." - echo "" - - # Disk space - echo "Disk Usage:" - df -h | grep -E '^/dev/' - - # Memory usage - echo "" - echo "Memory Usage:" - free -h - - # Load average - echo "" - echo "System Load:" - uptime - - # Network interfaces - echo "" - echo "Network Interfaces:" - ip addr show | grep -E '^[0-9]+:|inet ' - - echo "" - echo -n "Return to advanced menu? (y/n) [y]: " - read -r response - case $response in - [nN]|[nN][oO]) - show_main_menu - ;; - *) - show_advanced_menu - ;; - esac -} - -# Function to start installation -start_installation() { - echo "" - echo "===============================================================================================================" - echo " STARTING INSTALLATION" - echo "===============================================================================================================" - echo "" - - # Detect OS - if ! detect_os; then - print_status "ERROR: Failed to detect operating system" - exit 1 - fi - - # Install dependencies - install_dependencies - - # Install CyberPanel - if ! install_cyberpanel; then - print_status "ERROR: CyberPanel installation failed" - exit 1 - fi - - # Apply fixes - apply_fixes - - # Show status summary - show_status_summary - - print_status "SUCCESS: Installation completed successfully!" -} - -# Function to parse command line arguments -parse_arguments() { - while [[ $# -gt 0 ]]; do - case $1 in - -b|--branch) - BRANCH_NAME="$2" - shift 2 - ;; - --debug) - DEBUG_MODE=true - set -x - shift - ;; - --auto) - AUTO_INSTALL=true - INTERACTIVE_MODE=false - shift - ;; - -h|--help) - echo "Usage: $0 [OPTIONS]" - echo "Options:" - echo " -b, --branch BRANCH Install from specific branch/commit" - echo " --debug Enable debug mode" - echo " --auto Auto mode without prompts" - echo " -h, --help Show this help message" - echo "" - echo "Examples:" - echo " $0 # Interactive installation" - echo " $0 --debug # Debug mode installation" - echo " $0 --auto # Auto installation" - echo " $0 -b v2.5.5-dev # Install development version" - exit 0 - ;; - *) - print_status "WARNING: Unknown option: $1" - shift - ;; - esac - done -} - -# Main installation function -main() { - # Initialize log file - mkdir -p /var/log - touch "/var/log/cyberpanel_install.log" - - print_status "CyberPanel Clean Installer Starting..." - print_status "Log file: /var/log/cyberpanel_install.log" - - # Parse command line arguments - parse_arguments "$@" - - # Check if auto mode is requested - if [ "$AUTO_INSTALL" = true ]; then - # Run auto mode - print_status "Starting auto mode..." - - # Detect OS - if ! detect_os; then - print_status "ERROR: Failed to detect operating system" - exit 1 - fi - - # Install dependencies - install_dependencies - - # Install CyberPanel - if ! install_cyberpanel; then - print_status "ERROR: CyberPanel installation failed" - exit 1 - fi - - # Apply fixes - apply_fixes - - # Show status summary - show_status_summary - - print_status "SUCCESS: Installation completed successfully!" - else - # Run interactive mode - show_main_menu - fi -} - -# Run main function -main "$@" diff --git a/cyberpanel_complete.sh b/cyberpanel_complete.sh deleted file mode 100644 index 6d276d9c3..000000000 --- a/cyberpanel_complete.sh +++ /dev/null @@ -1,1117 +0,0 @@ -#!/bin/bash - -# CyberPanel Complete Standalone Installer -# Full-featured installer with interactive menus and all options -# This version works when downloaded via curl - -set -e - -# Colors for output -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -BLUE='\033[0;34m' -PURPLE='\033[0;35m' -CYAN='\033[0;36m' -WHITE='\033[1;37m' -BOLD='\033[1m' -DIM='\033[2m' -NC='\033[0m' # No Color - -# Global variables -SERVER_OS="" -OS_FAMILY="" -PACKAGE_MANAGER="" -ARCHITECTURE="" -BRANCH_NAME="" -DEBUG_MODE=false -AUTO_INSTALL=false -INTERACTIVE_MODE=true -INSTALLATION_TYPE="" - -# Logging function -log_message() { - echo "[$(date '+%Y-%m-%d %H:%M:%S')] [CYBERPANEL] $1" | tee -a "/var/log/cyberpanel_install.log" 2>/dev/null || echo "[$(date '+%Y-%m-%d %H:%M:%S')] [CYBERPANEL] $1" -} - -# Print colored output -print_status() { - local color=$1 - local message=$2 - echo -e "${color}${message}${NC}" - log_message "$message" -} - -# Function to show banner -show_banner() { - clear - echo -e "${BLUE}โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—${NC}" - echo -e "${BLUE}โ•‘${NC} ${BLUE}โ•‘${NC}" - echo -e "${BLUE}โ•‘${NC} ${WHITE}${BOLD}๐Ÿš€ CYBERPANEL COMPLETE INSTALLER ๐Ÿš€${NC} ${BLUE}โ•‘${NC}" - echo -e "${BLUE}โ•‘${NC} ${BLUE}โ•‘${NC}" - echo -e "${BLUE}โ•‘${NC} ${CYAN}The Ultimate Web Hosting Control Panel${NC} ${BLUE}โ•‘${NC}" - echo -e "${BLUE}โ•‘${NC} ${YELLOW}Powered by OpenLiteSpeed โ€ข Fast โ€ข Secure โ€ข Scalable${NC} ${BLUE}โ•‘${NC}" - echo -e "${BLUE}โ•‘${NC} ${BLUE}โ•‘${NC}" - echo -e "${BLUE}โ•‘${NC} ${GREEN}โœจ Interactive Menus โ€ข Version Selection โ€ข Advanced Options โœจ${NC} ${BLUE}โ•‘${NC}" - echo -e "${BLUE}โ•‘${NC} ${BLUE}โ•‘${NC}" - echo -e "${BLUE}โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•${NC}" - echo "" -} - -# Function to detect OS -detect_os() { - print_status "$BLUE" "๐Ÿ” Detecting operating system..." - - # Detect architecture - ARCHITECTURE=$(uname -m) - case $ARCHITECTURE in - x86_64) - print_status "$GREEN" "Architecture: x86_64 (Supported)" - ;; - aarch64|arm64) - print_status "$YELLOW" "Architecture: $ARCHITECTURE (Limited support)" - ;; - *) - print_status "$RED" "Architecture: $ARCHITECTURE (Not supported)" - return 1 - ;; - esac - - # Get OS release information - local OUTPUT=$(cat /etc/*release 2>/dev/null) - if [ -z "$OUTPUT" ]; then - print_status "$RED" "โŒ Cannot read OS release information" - return 1 - fi - - # Detect OS - if echo $OUTPUT | grep -q "AlmaLinux 9" ; then - SERVER_OS="AlmaLinux9" - OS_FAMILY="rhel" - PACKAGE_MANAGER="dnf" - print_status "$GREEN" "Detected: AlmaLinux 9" - elif echo $OUTPUT | grep -q "AlmaLinux 8" ; then - SERVER_OS="AlmaLinux8" - OS_FAMILY="rhel" - PACKAGE_MANAGER="yum" - print_status "$GREEN" "Detected: AlmaLinux 8" - elif echo $OUTPUT | grep -q "CentOS Linux 9" ; then - SERVER_OS="CentOS9" - OS_FAMILY="rhel" - PACKAGE_MANAGER="dnf" - print_status "$GREEN" "Detected: CentOS Linux 9" - elif echo $OUTPUT | grep -q "CentOS Linux 8" ; then - SERVER_OS="CentOS8" - OS_FAMILY="rhel" - PACKAGE_MANAGER="yum" - print_status "$GREEN" "Detected: CentOS Linux 8" - elif echo $OUTPUT | grep -q "Rocky Linux 9" ; then - SERVER_OS="RockyLinux9" - OS_FAMILY="rhel" - PACKAGE_MANAGER="dnf" - print_status "$GREEN" "Detected: Rocky Linux 9" - elif echo $OUTPUT | grep -q "Rocky Linux 8" ; then - SERVER_OS="RockyLinux8" - OS_FAMILY="rhel" - PACKAGE_MANAGER="yum" - print_status "$GREEN" "Detected: Rocky Linux 8" - elif echo $OUTPUT | grep -q "Ubuntu 22.04" ; then - SERVER_OS="Ubuntu2204" - OS_FAMILY="debian" - PACKAGE_MANAGER="apt" - print_status "$GREEN" "Detected: Ubuntu 22.04" - elif echo $OUTPUT | grep -q "Ubuntu 20.04" ; then - SERVER_OS="Ubuntu2004" - OS_FAMILY="debian" - PACKAGE_MANAGER="apt" - print_status "$GREEN" "Detected: Ubuntu 20.04" - elif echo $OUTPUT | grep -q "Debian GNU/Linux 12" ; then - SERVER_OS="Debian12" - OS_FAMILY="debian" - PACKAGE_MANAGER="apt" - print_status "$GREEN" "Detected: Debian GNU/Linux 12" - elif echo $OUTPUT | grep -q "Debian GNU/Linux 11" ; then - SERVER_OS="Debian11" - OS_FAMILY="debian" - PACKAGE_MANAGER="apt" - print_status "$GREEN" "Detected: Debian GNU/Linux 11" - else - print_status "$RED" "โŒ Unsupported OS detected" - print_status "$YELLOW" "Supported OS: AlmaLinux 8/9, CentOS 8/9, Rocky Linux 8/9, Ubuntu 20.04/22.04, Debian 11/12" - return 1 - fi - - return 0 -} - -# Function to install dependencies -install_dependencies() { - print_status "$BLUE" "๐Ÿ“ฆ Installing dependencies..." - - case $OS_FAMILY in - "rhel") - # Install EPEL - $PACKAGE_MANAGER install -y epel-release 2>/dev/null || true - - # Install development tools - $PACKAGE_MANAGER groupinstall -y 'Development Tools' 2>/dev/null || { - $PACKAGE_MANAGER install -y gcc gcc-c++ make kernel-devel 2>/dev/null || true - } - - # Install core packages - if [ "$SERVER_OS" = "AlmaLinux9" ] || [ "$SERVER_OS" = "CentOS9" ] || [ "$SERVER_OS" = "RockyLinux9" ]; then - # AlmaLinux 9 / CentOS 9 / Rocky Linux 9 - $PACKAGE_MANAGER install -y ImageMagick gd libicu oniguruma python3 python3-pip python3-devel 2>/dev/null || true - $PACKAGE_MANAGER install -y aspell 2>/dev/null || print_status "$YELLOW" "aspell not available, skipping..." - $PACKAGE_MANAGER install -y libc-client-devel 2>/dev/null || print_status "$YELLOW" "libc-client-devel not available, skipping..." - else - # AlmaLinux 8 / CentOS 8 / Rocky Linux 8 - $PACKAGE_MANAGER install -y ImageMagick gd libicu oniguruma aspell libc-client-devel python3 python3-pip python3-devel 2>/dev/null || true - fi - ;; - "debian") - # Update package lists - apt update -qq 2>/dev/null || true - - # Install essential packages - apt install -y -qq curl wget git unzip tar gzip bzip2 2>/dev/null || true - - # Install development tools - apt install -y -qq build-essential gcc g++ make python3-dev python3-pip 2>/dev/null || true - - # Install core packages - apt install -y -qq imagemagick php-gd libicu-dev libonig-dev 2>/dev/null || true - apt install -y -qq aspell 2>/dev/null || print_status "$YELLOW" "aspell not available, skipping..." - apt install -y -qq libc-client-dev 2>/dev/null || print_status "$YELLOW" "libc-client-dev not available, skipping..." - ;; - esac - - print_status "$GREEN" "โœ… Dependencies installed successfully" -} - -# Function to install CyberPanel -install_cyberpanel() { - print_status "$BLUE" "๐Ÿš€ Installing CyberPanel..." - - # Download and run the original installer - if [ -n "$BRANCH_NAME" ]; then - curl --silent -o cyberpanel.sh "https://raw.githubusercontent.com/usmannasir/cyberpanel/$BRANCH_NAME/cyberpanel.sh" 2>/dev/null - else - curl --silent -o cyberpanel.sh "https://cyberpanel.sh/?dl&$SERVER_OS" 2>/dev/null - fi - - chmod +x cyberpanel.sh - - # Run the installer - if ./cyberpanel.sh $([ "$DEBUG_MODE" = true ] && echo "--debug") > /tmp/cyberpanel_install_output.log 2>&1; then - print_status "$GREEN" "โœ… CyberPanel installed successfully" - return 0 - else - print_status "$RED" "โŒ CyberPanel installation failed. Check /tmp/cyberpanel_install_output.log for details" - return 1 - fi -} - -# Function to apply fixes -apply_fixes() { - print_status "$BLUE" "๐Ÿ”ง Applying installation fixes..." - - # Fix database issues - systemctl start mariadb 2>/dev/null || true - systemctl enable mariadb 2>/dev/null || true - mysqladmin -u root password '1234567' 2>/dev/null || true - - # Create cyberpanel database user - mysql -u root -p1234567 -e " - CREATE DATABASE IF NOT EXISTS cyberpanel; - CREATE USER IF NOT EXISTS 'cyberpanel'@'localhost' IDENTIFIED BY 'cyberpanel'; - GRANT ALL PRIVILEGES ON cyberpanel.* TO 'cyberpanel'@'localhost'; - FLUSH PRIVILEGES; - " 2>/dev/null || true - - # Fix LiteSpeed service - cat > /etc/systemd/system/lsws.service << 'EOF' -[Unit] -Description=LiteSpeed Web Server -After=network.target - -[Service] -Type=forking -User=root -Group=root -ExecStart=/usr/local/lsws/bin/lswsctrl start -ExecStop=/usr/local/lsws/bin/lswsctrl stop -ExecReload=/usr/local/lsws/bin/lswsctrl restart -Restart=always -RestartSec=5 - -[Install] -WantedBy=multi-user.target -EOF - - systemctl daemon-reload - systemctl enable lsws - systemctl start lsws - - # Fix CyberPanel service - cat > /etc/systemd/system/cyberpanel.service << 'EOF' -[Unit] -Description=CyberPanel Web Interface -After=network.target mariadb.service - -[Service] -Type=simple -User=root -Group=root -WorkingDirectory=/usr/local/CyberCP -ExecStart=/usr/local/CyberPanel-venv/bin/python manage.py runserver 0.0.0.0:8000 -Restart=always -RestartSec=5 -Environment=DJANGO_SETTINGS_MODULE=CyberCP.settings - -[Install] -WantedBy=multi-user.target -EOF - - systemctl daemon-reload - systemctl enable cyberpanel - - print_status "$GREEN" "โœ… All fixes applied successfully" -} - -# Function to show status summary -show_status_summary() { - echo "" - echo "โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—" - echo "โ•‘ โ•‘" - echo "โ•‘ ๐Ÿ“Š CYBERPANEL INSTALLATION STATUS ๐Ÿ“Š โ•‘" - echo "โ•‘ โ•‘" - echo "โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•" - echo "" - - echo "๐Ÿ”ง CORE SERVICES STATUS:" - echo "โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•" - - # Check services - if systemctl is-active --quiet mariadb; then - echo "โœ… MariaDB Database: RUNNING" - else - echo "โŒ MariaDB Database: NOT RUNNING" - fi - - if systemctl is-active --quiet lsws; then - echo "โœ… LiteSpeed Web Server: RUNNING" - else - echo "โŒ LiteSpeed Web Server: NOT RUNNING" - fi - - if systemctl is-active --quiet cyberpanel; then - echo "โœ… CyberPanel Application: RUNNING" - else - echo "โŒ CyberPanel Application: NOT RUNNING" - fi - - echo "" - echo "๐ŸŒ NETWORK PORTS STATUS:" - echo "โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•" - - # Check ports - if netstat -tlnp | grep -q ":8090 "; then - echo "โœ… Port 8090 (CyberPanel): LISTENING" - else - echo "โŒ Port 8090 (CyberPanel): NOT LISTENING" - fi - - if netstat -tlnp | grep -q ":80 "; then - echo "โœ… Port 80 (HTTP): LISTENING" - else - echo "โŒ Port 80 (HTTP): NOT LISTENING" - fi - - echo "" - echo "๐Ÿ“Š SUMMARY:" - echo "โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•" - print_status "$GREEN" "๐ŸŽ‰ INSTALLATION COMPLETED SUCCESSFULLY!" - echo "" - echo "๐ŸŒ Access CyberPanel at: http://your-server-ip:8090" - echo "๐Ÿ‘ค Default username: admin" - echo "๐Ÿ”‘ Default password: 1234567" - echo "" - echo "โš ๏ธ IMPORTANT: Change the default password immediately!" - echo "" -} - -# Function to show main menu -show_main_menu() { - show_banner - - local options=( - "๐Ÿš€ Fresh Installation (Recommended)" - "๐Ÿ”„ Update Existing Installation" - "๐Ÿ”ง Reinstall CyberPanel" - "๐Ÿ“Š Check System Status" - "๐Ÿ› ๏ธ Advanced Options" - "โŒ Exit" - ) - - echo -e "${WHITE}${BOLD}Select Installation Type:${NC}" - echo "" - for i in "${!options[@]}"; do - local option_num=$((i + 1)) - echo -e "${BLUE}${option_num}.${NC} ${options[i]}" - done - echo "" - - while true; do - echo -e "${CYAN}Enter your choice${NC} [1-6]: " - read -r choice - - case $choice in - 1) - INSTALLATION_TYPE="fresh" - show_fresh_install_menu - return - ;; - 2) - INSTALLATION_TYPE="update" - show_update_menu - return - ;; - 3) - INSTALLATION_TYPE="reinstall" - show_reinstall_menu - return - ;; - 4) - show_system_status - return - ;; - 5) - show_advanced_menu - return - ;; - 6) - echo -e "${GREEN}Goodbye!${NC}" - exit 0 - ;; - *) - echo -e "${RED}Invalid choice. Please enter 1-6.${NC}" - ;; - esac - done -} - -# Function to show fresh installation menu -show_fresh_install_menu() { - echo "" - echo -e "${PURPLE}${BOLD}๐Ÿš€ Fresh Installation Setup${NC}" - echo -e "${PURPLE}โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•${NC}" - - # Check if CyberPanel is already installed - if [ -d "/usr/local/CyberCP" ] && [ -f "/usr/local/CyberCP/manage.py" ]; then - echo -e "${YELLOW}โš ๏ธ CyberPanel appears to be already installed on this system.${NC}" - echo -e "${YELLOW}Consider using 'Update' or 'Reinstall' options instead.${NC}" - echo "" - echo -e "${CYAN}Do you want to continue with fresh installation anyway? (y/n)${NC}: " - read -r response - case $response in - [yY]|[yY][eE][sS]) - ;; - *) - show_main_menu - return - ;; - esac - fi - - # Show installation options - local options=( - "๐Ÿ“ฆ Install Latest Stable Version" - "๐Ÿ”ฌ Install Development Version (v2.5.5-dev)" - "๐Ÿท๏ธ Install Specific Version/Branch" - "โšก Quick Install (Auto-configure everything)" - "๐Ÿ”™ Back to Main Menu" - ) - - echo -e "${WHITE}${BOLD}Fresh Installation Options:${NC}" - echo "" - for i in "${!options[@]}"; do - local option_num=$((i + 1)) - echo -e "${BLUE}${option_num}.${NC} ${options[i]}" - done - echo "" - - while true; do - echo -e "${CYAN}Select installation option${NC} [1-5]: " - read -r choice - - case $choice in - 1) - BRANCH_NAME="" - show_installation_preferences - return - ;; - 2) - BRANCH_NAME="v2.5.5-dev" - show_installation_preferences - return - ;; - 3) - show_version_selection - return - ;; - 4) - BRANCH_NAME="" - AUTO_INSTALL=true - start_installation - return - ;; - 5) - show_main_menu - return - ;; - *) - echo -e "${RED}Invalid choice. Please enter 1-5.${NC}" - ;; - esac - done -} - -# Function to show version selection -show_version_selection() { - echo "" - echo -e "${PURPLE}${BOLD}๐Ÿท๏ธ Version Selection${NC}" - echo -e "${PURPLE}โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•${NC}" - - echo -e "${WHITE}Available versions:${NC}" - echo -e "${BLUE}1.${NC} Latest Stable (Recommended)" - echo -e "${BLUE}2.${NC} v2.5.5-dev (Development)" - echo -e "${BLUE}3.${NC} v2.5.4 (Previous Stable)" - echo -e "${BLUE}4.${NC} Custom Branch/Commit" - echo "" - - while true; do - echo -e "${CYAN}Select version${NC} [1-4]: " - read -r choice - - case $choice in - 1) - BRANCH_NAME="" - break - ;; - 2) - BRANCH_NAME="v2.5.5-dev" - break - ;; - 3) - BRANCH_NAME="v2.5.4" - break - ;; - 4) - echo -e "${CYAN}Enter branch name or commit hash${NC}: " - read -r BRANCH_NAME - break - ;; - *) - echo -e "${RED}Invalid choice. Please enter 1-4.${NC}" - ;; - esac - done - - show_installation_preferences -} - -# Function to show installation preferences -show_installation_preferences() { - echo "" - echo -e "${PURPLE}${BOLD}โš™๏ธ Installation Preferences${NC}" - echo -e "${PURPLE}โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•${NC}" - - # Debug mode - echo -e "${CYAN}Enable debug mode for detailed logging? (y/n)${NC} [n]: " - read -r response - case $response in - [yY]|[yY][eE][sS]) - DEBUG_MODE=true - ;; - esac - - # Auto-install - echo -e "${CYAN}Auto-install without further prompts? (y/n)${NC} [n]: " - read -r response - case $response in - [yY]|[yY][eE][sS]) - AUTO_INSTALL=true - ;; - esac - - # Show summary - echo "" - echo -e "${BLUE}โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—${NC}" - echo -e "${BLUE}โ•‘${NC} ${WHITE}${BOLD}Installation Summary${NC} ${BLUE}โ•‘${NC}" - echo -e "${BLUE}โ•‘${NC} ${BLUE}โ•‘${NC}" - echo -e "${BLUE}โ•‘${NC} Type: $INSTALLATION_TYPE" - echo -e "${BLUE}โ•‘${NC} Version: ${BRANCH_NAME:-'Latest Stable'}" - echo -e "${BLUE}โ•‘${NC} Debug Mode: $DEBUG_MODE" - echo -e "${BLUE}โ•‘${NC} Auto Install: $AUTO_INSTALL" - echo -e "${BLUE}โ•‘${NC} ${BLUE}โ•‘${NC}" - echo -e "${BLUE}โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•${NC}" - echo "" - - echo -e "${CYAN}Proceed with installation? (y/n)${NC} [y]: " - read -r response - case $response in - [nN]|[nN][oO]) - show_main_menu - ;; - *) - start_installation - ;; - esac -} - -# Function to show update menu -show_update_menu() { - echo "" - echo -e "${PURPLE}${BOLD}๐Ÿ”„ Update Installation${NC}" - echo -e "${PURPLE}โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•${NC}" - - if [ ! -d "/usr/local/CyberCP" ] || [ ! -f "/usr/local/CyberCP/manage.py" ]; then - echo -e "${RED}โŒ CyberPanel is not installed on this system.${NC}" - echo -e "${RED}Please use 'Fresh Installation' instead.${NC}" - echo "" - read -p "Press Enter to return to main menu..." - show_main_menu - return - fi - - # Check current version - local current_version="unknown" - if [ -f "/usr/local/CyberCP/version.txt" ]; then - current_version=$(cat /usr/local/CyberCP/version.txt 2>/dev/null) - fi - - echo -e "${GREEN}Current Installation:${NC}" - echo -e "Version: $current_version" - echo -e "Path: /usr/local/CyberCP" - echo "" - - local options=( - "๐Ÿ“ˆ Update to Latest Stable" - "๐Ÿ”ฌ Update to Development Version" - "๐Ÿท๏ธ Update to Specific Version" - "๐Ÿ”™ Back to Main Menu" - ) - - echo -e "${WHITE}${BOLD}Update Options:${NC}" - echo "" - for i in "${!options[@]}"; do - local option_num=$((i + 1)) - echo -e "${BLUE}${option_num}.${NC} ${options[i]}" - done - echo "" - - while true; do - echo -e "${CYAN}Select update option${NC} [1-4]: " - read -r choice - - case $choice in - 1) - BRANCH_NAME="" - break - ;; - 2) - BRANCH_NAME="v2.5.5-dev" - break - ;; - 3) - show_version_selection - return - ;; - 4) - show_main_menu - return - ;; - *) - echo -e "${RED}Invalid choice. Please enter 1-4.${NC}" - ;; - esac - done - - echo -e "${CYAN}Proceed with update? (This will backup your current installation) (y/n)${NC} [y]: " - read -r response - case $response in - [nN]|[nN][oO]) - show_main_menu - ;; - *) - start_installation - ;; - esac -} - -# Function to show reinstall menu -show_reinstall_menu() { - echo "" - echo -e "${PURPLE}${BOLD}๐Ÿ”ง Reinstall CyberPanel${NC}" - echo -e "${PURPLE}โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•${NC}" - - if [ ! -d "/usr/local/CyberCP" ] || [ ! -f "/usr/local/CyberCP/manage.py" ]; then - echo -e "${RED}โŒ CyberPanel is not installed on this system.${NC}" - echo -e "${RED}Please use 'Fresh Installation' instead.${NC}" - echo "" - read -p "Press Enter to return to main menu..." - show_main_menu - return - fi - - echo -e "${YELLOW}โš ๏ธ WARNING: This will completely remove the existing CyberPanel installation${NC}" - echo -e "${YELLOW}and install a fresh copy. All data will be lost!${NC}" - echo "" - - echo -e "${CYAN}Are you sure you want to reinstall? (y/n)${NC} [n]: " - read -r response - case $response in - [yY]|[yY][eE][sS]) - ;; - *) - show_main_menu - return - ;; - esac - - local options=( - "๐Ÿ“ฆ Reinstall Latest Stable" - "๐Ÿ”ฌ Reinstall Development Version" - "๐Ÿท๏ธ Reinstall Specific Version" - "๐Ÿ”™ Back to Main Menu" - ) - - echo -e "${WHITE}${BOLD}Reinstall Options:${NC}" - echo "" - for i in "${!options[@]}"; do - local option_num=$((i + 1)) - echo -e "${BLUE}${option_num}.${NC} ${options[i]}" - done - echo "" - - while true; do - echo -e "${CYAN}Select reinstall option${NC} [1-4]: " - read -r choice - - case $choice in - 1) - BRANCH_NAME="" - break - ;; - 2) - BRANCH_NAME="v2.5.5-dev" - break - ;; - 3) - show_version_selection - return - ;; - 4) - show_main_menu - return - ;; - *) - echo -e "${RED}Invalid choice. Please enter 1-4.${NC}" - ;; - esac - done - - echo -e "${CYAN}Proceed with reinstall? (This will delete all existing data) (y/n)${NC} [n]: " - read -r response - case $response in - [yY]|[yY][eE][sS]) - start_installation - ;; - *) - show_main_menu - ;; - esac -} - -# Function to show system status -show_system_status() { - echo "" - echo -e "${PURPLE}${BOLD}๐Ÿ“Š System Status Check${NC}" - echo -e "${PURPLE}โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•${NC}" - - # Check OS - local os_info=$(cat /etc/os-release | grep PRETTY_NAME | cut -d'"' -f2 2>/dev/null || echo 'Unknown') - echo -e "${WHITE}Operating System:${NC} $os_info" - - # Check CyberPanel installation - if [ -d "/usr/local/CyberCP" ] && [ -f "/usr/local/CyberCP/manage.py" ]; then - local version="unknown" - if [ -f "/usr/local/CyberCP/version.txt" ]; then - version=$(cat /usr/local/CyberCP/version.txt 2>/dev/null) - fi - echo -e "${GREEN}CyberPanel:${NC} Installed (Version: $version)" - else - echo -e "${RED}CyberPanel:${NC} Not Installed" - fi - - # Check services - echo -e "\n${WHITE}Services Status:${NC}" - if systemctl is-active --quiet mariadb; then - echo -e " ${GREEN}โœ…${NC} MariaDB: Running" - else - echo -e " ${RED}โŒ${NC} MariaDB: Not Running" - fi - - if systemctl is-active --quiet lsws; then - echo -e " ${GREEN}โœ…${NC} LiteSpeed: Running" - else - echo -e " ${RED}โŒ${NC} LiteSpeed: Not Running" - fi - - if systemctl is-active --quiet cyberpanel; then - echo -e " ${GREEN}โœ…${NC} CyberPanel: Running" - else - echo -e " ${RED}โŒ${NC} CyberPanel: Not Running" - fi - - # Check ports - echo -e "\n${WHITE}Port Status:${NC}" - if netstat -tlnp | grep -q ":8090 "; then - echo -e " ${GREEN}โœ…${NC} Port 8090 (CyberPanel): Listening" - else - echo -e " ${RED}โŒ${NC} Port 8090 (CyberPanel): Not Listening" - fi - - if netstat -tlnp | grep -q ":80 "; then - echo -e " ${GREEN}โœ…${NC} Port 80 (HTTP): Listening" - else - echo -e " ${RED}โŒ${NC} Port 80 (HTTP): Not Listening" - fi - - echo "" - echo -e "${CYAN}Return to main menu? (y/n)${NC} [y]: " - read -r response - case $response in - [nN]|[nN][oO]) - exit 0 - ;; - *) - show_main_menu - ;; - esac -} - -# Function to show advanced menu -show_advanced_menu() { - echo "" - echo -e "${PURPLE}${BOLD}๐Ÿ› ๏ธ Advanced Options${NC}" - echo -e "${PURPLE}โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•${NC}" - - local options=( - "๐Ÿ”ง Fix Installation Issues" - "๐Ÿงน Clean Installation Files" - "๐Ÿ“‹ View Installation Logs" - "๐Ÿ” System Diagnostics" - "๐Ÿ”™ Back to Main Menu" - ) - - echo -e "${WHITE}${BOLD}Advanced Options:${NC}" - echo "" - for i in "${!options[@]}"; do - local option_num=$((i + 1)) - echo -e "${BLUE}${option_num}.${NC} ${options[i]}" - done - echo "" - - while true; do - echo -e "${CYAN}Select advanced option${NC} [1-5]: " - read -r choice - - case $choice in - 1) - show_fix_menu - return - ;; - 2) - show_clean_menu - return - ;; - 3) - show_logs_menu - return - ;; - 4) - show_diagnostics - return - ;; - 5) - show_main_menu - return - ;; - *) - echo -e "${RED}Invalid choice. Please enter 1-5.${NC}" - ;; - esac - done -} - -# Function to show fix menu -show_fix_menu() { - echo "" - echo -e "${PURPLE}${BOLD}๐Ÿ”ง Fix Installation Issues${NC}" - echo -e "${PURPLE}โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•${NC}" - - echo -e "${YELLOW}This will attempt to fix common CyberPanel installation issues:${NC}" - echo "โ€ข Database connection problems" - echo "โ€ข Service configuration issues" - echo "โ€ข SSL certificate problems" - echo "โ€ข File permission issues" - echo "" - - echo -e "${CYAN}Proceed with fixing installation issues? (y/n)${NC} [y]: " - read -r response - case $response in - [nN]|[nN][oO]) - show_advanced_menu - ;; - *) - print_status "$BLUE" "๐Ÿ”ง Applying fixes..." - apply_fixes - print_status "$GREEN" "โœ… Fixes applied successfully" - echo "" - read -p "Press Enter to return to advanced menu..." - show_advanced_menu - ;; - esac -} - -# Function to show clean menu -show_clean_menu() { - echo "" - echo -e "${PURPLE}${BOLD}๐Ÿงน Clean Installation Files${NC}" - echo -e "${PURPLE}โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•${NC}" - - echo -e "${YELLOW}โš ๏ธ WARNING: This will remove temporary installation files and logs.${NC}" - echo -e "${YELLOW}This action cannot be undone!${NC}" - echo "" - - echo -e "${CYAN}Proceed with cleaning? (y/n)${NC} [n]: " - read -r response - case $response in - [yY]|[yY][eE][sS]) - rm -rf /tmp/cyberpanel_* - rm -rf /var/log/cyberpanel_install.log - echo -e "${GREEN}โœ… Cleanup complete! Temporary files and logs have been removed.${NC}" - ;; - esac - - echo "" - echo -e "${CYAN}Return to advanced menu? (y/n)${NC} [y]: " - read -r response - case $response in - [nN]|[nN][oO]) - show_main_menu - ;; - *) - show_advanced_menu - ;; - esac -} - -# Function to show logs menu -show_logs_menu() { - echo "" - echo -e "${PURPLE}${BOLD}๐Ÿ“‹ View Installation Logs${NC}" - echo -e "${PURPLE}โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•${NC}" - - local log_file="/var/log/cyberpanel_install.log" - - if [ -f "$log_file" ]; then - echo -e "${WHITE}Installation Log:${NC} $log_file" - echo -e "${WHITE}Log Size:${NC} $(du -h "$log_file" | cut -f1)" - echo "" - - echo -e "${CYAN}View recent log entries? (y/n)${NC} [y]: " - read -r response - case $response in - [nN]|[nN][oO]) - ;; - *) - echo -e "${CYAN}Recent log entries:${NC}" - tail -n 20 "$log_file" - ;; - esac - else - echo -e "${YELLOW}No installation logs found at $log_file${NC}" - fi - - echo "" - echo -e "${CYAN}Return to advanced menu? (y/n)${NC} [y]: " - read -r response - case $response in - [nN]|[nN][oO]) - show_main_menu - ;; - *) - show_advanced_menu - ;; - esac -} - -# Function to show diagnostics -show_diagnostics() { - echo "" - echo -e "${PURPLE}${BOLD}๐Ÿ” System Diagnostics${NC}" - echo -e "${PURPLE}โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•${NC}" - - echo -e "${WHITE}Running system diagnostics...${NC}" - echo "" - - # Disk space - echo -e "${WHITE}Disk Usage:${NC}" - df -h | grep -E '^/dev/' - - # Memory usage - echo -e "\n${WHITE}Memory Usage:${NC}" - free -h - - # Load average - echo -e "\n${WHITE}System Load:${NC}" - uptime - - # Network interfaces - echo -e "\n${WHITE}Network Interfaces:${NC}" - ip addr show | grep -E '^[0-9]+:|inet ' - - echo "" - echo -e "${CYAN}Return to advanced menu? (y/n)${NC} [y]: " - read -r response - case $response in - [nN]|[nN][oO]) - show_main_menu - ;; - *) - show_advanced_menu - ;; - esac -} - -# Function to start installation -start_installation() { - echo "" - echo -e "${PURPLE}${BOLD}๐Ÿš€ Starting Installation${NC}" - echo -e "${PURPLE}โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•${NC}" - - # Detect OS - if ! detect_os; then - print_status "$RED" "โŒ Failed to detect operating system" - exit 1 - fi - - # Install dependencies - install_dependencies - - # Install CyberPanel - if ! install_cyberpanel; then - print_status "$RED" "โŒ CyberPanel installation failed" - exit 1 - fi - - # Apply fixes - apply_fixes - - # Show status summary - show_status_summary - - print_status "$GREEN" "๐ŸŽ‰ Installation completed successfully!" -} - -# Function to parse command line arguments -parse_arguments() { - while [[ $# -gt 0 ]]; do - case $1 in - -b|--branch) - BRANCH_NAME="$2" - shift 2 - ;; - --debug) - DEBUG_MODE=true - set -x - shift - ;; - --auto) - AUTO_INSTALL=true - INTERACTIVE_MODE=false - shift - ;; - -h|--help) - echo "Usage: $0 [OPTIONS]" - echo "Options:" - echo " -b, --branch BRANCH Install from specific branch/commit" - echo " --debug Enable debug mode" - echo " --auto Auto mode without prompts" - echo " -h, --help Show this help message" - echo "" - echo "Examples:" - echo " $0 # Interactive installation" - echo " $0 --debug # Debug mode installation" - echo " $0 --auto # Auto installation" - echo " $0 -b v2.5.5-dev # Install development version" - exit 0 - ;; - *) - print_status "$YELLOW" "Unknown option: $1" - shift - ;; - esac - done -} - -# Main installation function -main() { - # Initialize log file - mkdir -p /var/log - touch "/var/log/cyberpanel_install.log" - - print_status "$BLUE" "๐Ÿš€ CyberPanel Complete Installer Starting..." - print_status "$BLUE" "Log file: /var/log/cyberpanel_install.log" - - # Parse command line arguments - parse_arguments "$@" - - # Check if auto mode is requested - if [ "$AUTO_INSTALL" = true ]; then - # Run auto mode - print_status "$BLUE" "๐Ÿค– Starting auto mode..." - - # Detect OS - if ! detect_os; then - print_status "$RED" "โŒ Failed to detect operating system" - exit 1 - fi - - # Install dependencies - install_dependencies - - # Install CyberPanel - if ! install_cyberpanel; then - print_status "$RED" "โŒ CyberPanel installation failed" - exit 1 - fi - - # Apply fixes - apply_fixes - - # Show status summary - show_status_summary - - print_status "$GREEN" "๐ŸŽ‰ Installation completed successfully!" - else - # Run interactive mode - show_main_menu - fi -} - -# Run main function -main "$@" diff --git a/cyberpanel_simple.sh b/cyberpanel_simple.sh deleted file mode 100644 index 5f469dbf8..000000000 --- a/cyberpanel_simple.sh +++ /dev/null @@ -1,1117 +0,0 @@ -#!/bin/bash - -# CyberPanel Simple Installer -# Ultra-simple version that works reliably in all terminals - -set -e - -# Global variables -SERVER_OS="" -OS_FAMILY="" -PACKAGE_MANAGER="" -ARCHITECTURE="" -BRANCH_NAME="" -DEBUG_MODE=false -AUTO_INSTALL=false -INSTALLATION_TYPE="" - -# Logging function -log_message() { - echo "[$(date '+%Y-%m-%d %H:%M:%S')] [CYBERPANEL] $1" | tee -a "/var/log/cyberpanel_install.log" 2>/dev/null || echo "[$(date '+%Y-%m-%d %H:%M:%S')] [CYBERPANEL] $1" -} - -# Print status -print_status() { - local message="$1" - echo "$message" - log_message "$message" -} - -# Function to show banner -show_banner() { - clear - echo "" - echo "===============================================================================================================" - echo " CYBERPANEL COMPLETE INSTALLER" - echo "===============================================================================================================" - echo "" - echo " The Ultimate Web Hosting Control Panel" - echo " Powered by OpenLiteSpeed โ€ข Fast โ€ข Secure โ€ข Scalable" - echo "" - echo " Interactive Menus โ€ข Version Selection โ€ข Advanced Options" - echo "" - echo "===============================================================================================================" - echo "" -} - -# Function to detect OS -detect_os() { - print_status "Detecting operating system..." - - # Detect architecture - ARCHITECTURE=$(uname -m) - case $ARCHITECTURE in - x86_64) - print_status "Architecture: x86_64 (Supported)" - ;; - aarch64|arm64) - print_status "Architecture: $ARCHITECTURE (Limited support)" - ;; - *) - print_status "Architecture: $ARCHITECTURE (Not supported)" - return 1 - ;; - esac - - # Get OS release information - local OUTPUT=$(cat /etc/*release 2>/dev/null) - if [ -z "$OUTPUT" ]; then - print_status "ERROR: Cannot read OS release information" - return 1 - fi - - # Detect OS - if echo $OUTPUT | grep -q "AlmaLinux 9" ; then - SERVER_OS="AlmaLinux9" - OS_FAMILY="rhel" - PACKAGE_MANAGER="dnf" - print_status "Detected: AlmaLinux 9" - elif echo $OUTPUT | grep -q "AlmaLinux 8" ; then - SERVER_OS="AlmaLinux8" - OS_FAMILY="rhel" - PACKAGE_MANAGER="yum" - print_status "Detected: AlmaLinux 8" - elif echo $OUTPUT | grep -q "CentOS Linux 9" ; then - SERVER_OS="CentOS9" - OS_FAMILY="rhel" - PACKAGE_MANAGER="dnf" - print_status "Detected: CentOS Linux 9" - elif echo $OUTPUT | grep -q "CentOS Linux 8" ; then - SERVER_OS="CentOS8" - OS_FAMILY="rhel" - PACKAGE_MANAGER="yum" - print_status "Detected: CentOS Linux 8" - elif echo $OUTPUT | grep -q "Rocky Linux 9" ; then - SERVER_OS="RockyLinux9" - OS_FAMILY="rhel" - PACKAGE_MANAGER="dnf" - print_status "Detected: Rocky Linux 9" - elif echo $OUTPUT | grep -q "Rocky Linux 8" ; then - SERVER_OS="RockyLinux8" - OS_FAMILY="rhel" - PACKAGE_MANAGER="yum" - print_status "Detected: Rocky Linux 8" - elif echo $OUTPUT | grep -q "Ubuntu 22.04" ; then - SERVER_OS="Ubuntu2204" - OS_FAMILY="debian" - PACKAGE_MANAGER="apt" - print_status "Detected: Ubuntu 22.04" - elif echo $OUTPUT | grep -q "Ubuntu 20.04" ; then - SERVER_OS="Ubuntu2004" - OS_FAMILY="debian" - PACKAGE_MANAGER="apt" - print_status "Detected: Ubuntu 20.04" - elif echo $OUTPUT | grep -q "Debian GNU/Linux 12" ; then - SERVER_OS="Debian12" - OS_FAMILY="debian" - PACKAGE_MANAGER="apt" - print_status "Detected: Debian GNU/Linux 12" - elif echo $OUTPUT | grep -q "Debian GNU/Linux 11" ; then - SERVER_OS="Debian11" - OS_FAMILY="debian" - PACKAGE_MANAGER="apt" - print_status "Detected: Debian GNU/Linux 11" - else - print_status "ERROR: Unsupported OS detected" - print_status "Supported OS: AlmaLinux 8/9, CentOS 8/9, Rocky Linux 8/9, Ubuntu 20.04/22.04, Debian 11/12" - return 1 - fi - - return 0 -} - -# Function to install dependencies -install_dependencies() { - print_status "Installing dependencies..." - - case $OS_FAMILY in - "rhel") - # Install EPEL - $PACKAGE_MANAGER install -y epel-release 2>/dev/null || true - - # Install development tools - $PACKAGE_MANAGER groupinstall -y 'Development Tools' 2>/dev/null || { - $PACKAGE_MANAGER install -y gcc gcc-c++ make kernel-devel 2>/dev/null || true - } - - # Install core packages - if [ "$SERVER_OS" = "AlmaLinux9" ] || [ "$SERVER_OS" = "CentOS9" ] || [ "$SERVER_OS" = "RockyLinux9" ]; then - # AlmaLinux 9 / CentOS 9 / Rocky Linux 9 - $PACKAGE_MANAGER install -y ImageMagick gd libicu oniguruma python3 python3-pip python3-devel 2>/dev/null || true - $PACKAGE_MANAGER install -y aspell 2>/dev/null || print_status "WARNING: aspell not available, skipping..." - $PACKAGE_MANAGER install -y libc-client-devel 2>/dev/null || print_status "WARNING: libc-client-devel not available, skipping..." - else - # AlmaLinux 8 / CentOS 8 / Rocky Linux 8 - $PACKAGE_MANAGER install -y ImageMagick gd libicu oniguruma aspell libc-client-devel python3 python3-pip python3-devel 2>/dev/null || true - fi - ;; - "debian") - # Update package lists - apt update -qq 2>/dev/null || true - - # Install essential packages - apt install -y -qq curl wget git unzip tar gzip bzip2 2>/dev/null || true - - # Install development tools - apt install -y -qq build-essential gcc g++ make python3-dev python3-pip 2>/dev/null || true - - # Install core packages - apt install -y -qq imagemagick php-gd libicu-dev libonig-dev 2>/dev/null || true - apt install -y -qq aspell 2>/dev/null || print_status "WARNING: aspell not available, skipping..." - apt install -y -qq libc-client-dev 2>/dev/null || print_status "WARNING: libc-client-dev not available, skipping..." - ;; - esac - - print_status "SUCCESS: Dependencies installed successfully" -} - -# Function to install CyberPanel -install_cyberpanel() { - print_status "Installing CyberPanel..." - - # Download and run the original installer - if [ -n "$BRANCH_NAME" ]; then - curl --silent -o cyberpanel.sh "https://raw.githubusercontent.com/usmannasir/cyberpanel/$BRANCH_NAME/cyberpanel.sh" 2>/dev/null - else - curl --silent -o cyberpanel.sh "https://cyberpanel.sh/?dl&$SERVER_OS" 2>/dev/null - fi - - chmod +x cyberpanel.sh - - # Run the installer - if ./cyberpanel.sh $([ "$DEBUG_MODE" = true ] && echo "--debug") > /tmp/cyberpanel_install_output.log 2>&1; then - print_status "SUCCESS: CyberPanel installed successfully" - return 0 - else - print_status "ERROR: CyberPanel installation failed. Check /tmp/cyberpanel_install_output.log for details" - return 1 - fi -} - -# Function to apply fixes -apply_fixes() { - print_status "Applying installation fixes..." - - # Fix database issues - systemctl start mariadb 2>/dev/null || true - systemctl enable mariadb 2>/dev/null || true - mysqladmin -u root password '1234567' 2>/dev/null || true - - # Create cyberpanel database user - mysql -u root -p1234567 -e " - CREATE DATABASE IF NOT EXISTS cyberpanel; - CREATE USER IF NOT EXISTS 'cyberpanel'@'localhost' IDENTIFIED BY 'cyberpanel'; - GRANT ALL PRIVILEGES ON cyberpanel.* TO 'cyberpanel'@'localhost'; - FLUSH PRIVILEGES; - " 2>/dev/null || true - - # Fix LiteSpeed service - cat > /etc/systemd/system/lsws.service << 'EOF' -[Unit] -Description=LiteSpeed Web Server -After=network.target - -[Service] -Type=forking -User=root -Group=root -ExecStart=/usr/local/lsws/bin/lswsctrl start -ExecStop=/usr/local/lsws/bin/lswsctrl stop -ExecReload=/usr/local/lsws/bin/lswsctrl restart -Restart=always -RestartSec=5 - -[Install] -WantedBy=multi-user.target -EOF - - systemctl daemon-reload - systemctl enable lsws - systemctl start lsws - - # Fix CyberPanel service - cat > /etc/systemd/system/cyberpanel.service << 'EOF' -[Unit] -Description=CyberPanel Web Interface -After=network.target mariadb.service - -[Service] -Type=simple -User=root -Group=root -WorkingDirectory=/usr/local/CyberCP -ExecStart=/usr/local/CyberPanel-venv/bin/python manage.py runserver 0.0.0.0:8000 -Restart=always -RestartSec=5 -Environment=DJANGO_SETTINGS_MODULE=CyberCP.settings - -[Install] -WantedBy=multi-user.target -EOF - - systemctl daemon-reload - systemctl enable cyberpanel - - print_status "SUCCESS: All fixes applied successfully" -} - -# Function to show status summary -show_status_summary() { - echo "" - echo "===============================================================================================================" - echo " CYBERPANEL INSTALLATION STATUS" - echo "===============================================================================================================" - echo "" - - echo "CORE SERVICES STATUS:" - echo "--------------------------------------------------------------------------------" - - # Check services - if systemctl is-active --quiet mariadb; then - echo "SUCCESS: MariaDB Database - RUNNING" - else - echo "ERROR: MariaDB Database - NOT RUNNING" - fi - - if systemctl is-active --quiet lsws; then - echo "SUCCESS: LiteSpeed Web Server - RUNNING" - else - echo "ERROR: LiteSpeed Web Server - NOT RUNNING" - fi - - if systemctl is-active --quiet cyberpanel; then - echo "SUCCESS: CyberPanel Application - RUNNING" - else - echo "ERROR: CyberPanel Application - NOT RUNNING" - fi - - echo "" - echo "NETWORK PORTS STATUS:" - echo "--------------------------------------------------------------------------------" - - # Check ports - if netstat -tlnp | grep -q ":8090 "; then - echo "SUCCESS: Port 8090 (CyberPanel) - LISTENING" - else - echo "ERROR: Port 8090 (CyberPanel) - NOT LISTENING" - fi - - if netstat -tlnp | grep -q ":80 "; then - echo "SUCCESS: Port 80 (HTTP) - LISTENING" - else - echo "ERROR: Port 80 (HTTP) - NOT LISTENING" - fi - - echo "" - echo "SUMMARY:" - echo "--------------------------------------------------------------------------------" - print_status "SUCCESS: INSTALLATION COMPLETED SUCCESSFULLY!" - echo "" - echo "Access CyberPanel at: http://your-server-ip:8090" - echo "Default username: admin" - echo "Default password: 1234567" - echo "" - echo "IMPORTANT: Change the default password immediately!" - echo "" -} - -# Function to show main menu -show_main_menu() { - show_banner - - echo "===============================================================================================================" - echo " SELECT INSTALLATION TYPE" - echo "===============================================================================================================" - echo "" - echo " 1. Fresh Installation (Recommended)" - echo " 2. Update Existing Installation" - echo " 3. Reinstall CyberPanel" - echo " 4. Check System Status" - echo " 5. Advanced Options" - echo " 6. Exit" - echo "" - echo "===============================================================================================================" - echo "" - - while true; do - echo -n "Enter your choice [1-6]: " - read -r choice - - case $choice in - 1) - INSTALLATION_TYPE="fresh" - show_fresh_install_menu - return - ;; - 2) - INSTALLATION_TYPE="update" - show_update_menu - return - ;; - 3) - INSTALLATION_TYPE="reinstall" - show_reinstall_menu - return - ;; - 4) - show_system_status - return - ;; - 5) - show_advanced_menu - return - ;; - 6) - echo "" - echo "Goodbye!" - exit 0 - ;; - *) - echo "" - echo "ERROR: Invalid choice. Please enter 1-6." - echo "" - ;; - esac - done -} - -# Function to show fresh installation menu -show_fresh_install_menu() { - echo "" - echo "===============================================================================================================" - echo " FRESH INSTALLATION SETUP" - echo "===============================================================================================================" - echo "" - - # Check if CyberPanel is already installed - if [ -d "/usr/local/CyberCP" ] && [ -f "/usr/local/CyberCP/manage.py" ]; then - echo "WARNING: CyberPanel appears to be already installed on this system." - echo " Consider using 'Update' or 'Reinstall' options instead." - echo "" - echo -n "Do you want to continue with fresh installation anyway? (y/n): " - read -r response - case $response in - [yY]|[yY][eE][sS]) - ;; - *) - show_main_menu - return - ;; - esac - fi - - echo "Select installation option:" - echo "" - echo " 1. Install Latest Stable Version" - echo " 2. Install Development Version (v2.5.5-dev)" - echo " 3. Install Specific Version/Branch" - echo " 4. Quick Install (Auto-configure everything)" - echo " 5. Back to Main Menu" - echo "" - echo "===============================================================================================================" - echo "" - - while true; do - echo -n "Select installation option [1-5]: " - read -r choice - - case $choice in - 1) - BRANCH_NAME="" - show_installation_preferences - return - ;; - 2) - BRANCH_NAME="v2.5.5-dev" - show_installation_preferences - return - ;; - 3) - show_version_selection - return - ;; - 4) - BRANCH_NAME="" - AUTO_INSTALL=true - start_installation - return - ;; - 5) - show_main_menu - return - ;; - *) - echo "" - echo "ERROR: Invalid choice. Please enter 1-5." - echo "" - ;; - esac - done -} - -# Function to show version selection -show_version_selection() { - echo "" - echo "===============================================================================================================" - echo " VERSION SELECTION" - echo "===============================================================================================================" - echo "" - echo "Available versions:" - echo "" - echo " 1. Latest Stable (Recommended)" - echo " 2. v2.5.5-dev (Development)" - echo " 3. v2.5.4 (Previous Stable)" - echo " 4. Custom Branch/Commit" - echo "" - echo "===============================================================================================================" - echo "" - - while true; do - echo -n "Select version [1-4]: " - read -r choice - - case $choice in - 1) - BRANCH_NAME="" - break - ;; - 2) - BRANCH_NAME="v2.5.5-dev" - break - ;; - 3) - BRANCH_NAME="v2.5.4" - break - ;; - 4) - echo -n "Enter branch name or commit hash: " - read -r BRANCH_NAME - break - ;; - *) - echo "" - echo "ERROR: Invalid choice. Please enter 1-4." - echo "" - ;; - esac - done - - show_installation_preferences -} - -# Function to show installation preferences -show_installation_preferences() { - echo "" - echo "===============================================================================================================" - echo " INSTALLATION PREFERENCES" - echo "===============================================================================================================" - echo "" - - # Debug mode - echo -n "Enable debug mode for detailed logging? (y/n) [n]: " - read -r response - case $response in - [yY]|[yY][eE][sS]) - DEBUG_MODE=true - ;; - esac - - # Auto-install - echo -n "Auto-install without further prompts? (y/n) [n]: " - read -r response - case $response in - [yY]|[yY][eE][sS]) - AUTO_INSTALL=true - ;; - esac - - # Show summary - echo "" - echo "===============================================================================================================" - echo " INSTALLATION SUMMARY" - echo "===============================================================================================================" - echo "" - echo " Type: $INSTALLATION_TYPE" - echo " Version: ${BRANCH_NAME:-'Latest Stable'}" - echo " Debug Mode: $DEBUG_MODE" - echo " Auto Install: $AUTO_INSTALL" - echo "" - echo "===============================================================================================================" - echo "" - - echo -n "Proceed with installation? (y/n) [y]: " - read -r response - case $response in - [nN]|[nN][oO]) - show_main_menu - ;; - *) - start_installation - ;; - esac -} - -# Function to show update menu -show_update_menu() { - echo "" - echo "===============================================================================================================" - echo " UPDATE INSTALLATION" - echo "===============================================================================================================" - echo "" - - if [ ! -d "/usr/local/CyberCP" ] || [ ! -f "/usr/local/CyberCP/manage.py" ]; then - echo "ERROR: CyberPanel is not installed on this system." - echo " Please use 'Fresh Installation' instead." - echo "" - read -p "Press Enter to return to main menu..." - show_main_menu - return - fi - - # Check current version - local current_version="unknown" - if [ -f "/usr/local/CyberCP/version.txt" ]; then - current_version=$(cat /usr/local/CyberCP/version.txt 2>/dev/null) - fi - - echo "Current Installation:" - echo "Version: $current_version" - echo "Path: /usr/local/CyberCP" - echo "" - - echo "Select update option:" - echo "" - echo " 1. Update to Latest Stable" - echo " 2. Update to Development Version" - echo " 3. Update to Specific Version" - echo " 4. Back to Main Menu" - echo "" - echo "===============================================================================================================" - echo "" - - while true; do - echo -n "Select update option [1-4]: " - read -r choice - - case $choice in - 1) - BRANCH_NAME="" - break - ;; - 2) - BRANCH_NAME="v2.5.5-dev" - break - ;; - 3) - show_version_selection - return - ;; - 4) - show_main_menu - return - ;; - *) - echo "" - echo "ERROR: Invalid choice. Please enter 1-4." - echo "" - ;; - esac - done - - echo -n "Proceed with update? (This will backup your current installation) (y/n) [y]: " - read -r response - case $response in - [nN]|[nN][oO]) - show_main_menu - ;; - *) - start_installation - ;; - esac -} - -# Function to show reinstall menu -show_reinstall_menu() { - echo "" - echo "===============================================================================================================" - echo " REINSTALL CYBERPANEL" - echo "===============================================================================================================" - echo "" - - if [ ! -d "/usr/local/CyberCP" ] || [ ! -f "/usr/local/CyberCP/manage.py" ]; then - echo "ERROR: CyberPanel is not installed on this system." - echo " Please use 'Fresh Installation' instead." - echo "" - read -p "Press Enter to return to main menu..." - show_main_menu - return - fi - - echo "WARNING: This will completely remove the existing CyberPanel installation" - echo " and install a fresh copy. All data will be lost!" - echo "" - - echo -n "Are you sure you want to reinstall? (y/n) [n]: " - read -r response - case $response in - [yY]|[yY][eE][sS]) - ;; - *) - show_main_menu - return - ;; - esac - - echo "Select reinstall option:" - echo "" - echo " 1. Reinstall Latest Stable" - echo " 2. Reinstall Development Version" - echo " 3. Reinstall Specific Version" - echo " 4. Back to Main Menu" - echo "" - echo "===============================================================================================================" - echo "" - - while true; do - echo -n "Select reinstall option [1-4]: " - read -r choice - - case $choice in - 1) - BRANCH_NAME="" - break - ;; - 2) - BRANCH_NAME="v2.5.5-dev" - break - ;; - 3) - show_version_selection - return - ;; - 4) - show_main_menu - return - ;; - *) - echo "" - echo "ERROR: Invalid choice. Please enter 1-4." - echo "" - ;; - esac - done - - echo -n "Proceed with reinstall? (This will delete all existing data) (y/n) [n]: " - read -r response - case $response in - [yY]|[yY][eE][sS]) - start_installation - ;; - *) - show_main_menu - ;; - esac -} - -# Function to show system status -show_system_status() { - echo "" - echo "===============================================================================================================" - echo " SYSTEM STATUS CHECK" - echo "===============================================================================================================" - echo "" - - # Check OS - local os_info=$(cat /etc/os-release | grep PRETTY_NAME | cut -d'"' -f2 2>/dev/null || echo 'Unknown') - echo "Operating System: $os_info" - - # Check CyberPanel installation - if [ -d "/usr/local/CyberCP" ] && [ -f "/usr/local/CyberCP/manage.py" ]; then - local version="unknown" - if [ -f "/usr/local/CyberCP/version.txt" ]; then - version=$(cat /usr/local/CyberCP/version.txt 2>/dev/null) - fi - echo "CyberPanel: Installed (Version: $version)" - else - echo "CyberPanel: Not Installed" - fi - - # Check services - echo "" - echo "Services Status:" - if systemctl is-active --quiet mariadb; then - echo " SUCCESS: MariaDB - Running" - else - echo " ERROR: MariaDB - Not Running" - fi - - if systemctl is-active --quiet lsws; then - echo " SUCCESS: LiteSpeed - Running" - else - echo " ERROR: LiteSpeed - Not Running" - fi - - if systemctl is-active --quiet cyberpanel; then - echo " SUCCESS: CyberPanel - Running" - else - echo " ERROR: CyberPanel - Not Running" - fi - - # Check ports - echo "" - echo "Port Status:" - if netstat -tlnp | grep -q ":8090 "; then - echo " SUCCESS: Port 8090 (CyberPanel) - Listening" - else - echo " ERROR: Port 8090 (CyberPanel) - Not Listening" - fi - - if netstat -tlnp | grep -q ":80 "; then - echo " SUCCESS: Port 80 (HTTP) - Listening" - else - echo " ERROR: Port 80 (HTTP) - Not Listening" - fi - - echo "" - echo -n "Return to main menu? (y/n) [y]: " - read -r response - case $response in - [nN]|[nN][oO]) - exit 0 - ;; - *) - show_main_menu - ;; - esac -} - -# Function to show advanced menu -show_advanced_menu() { - echo "" - echo "===============================================================================================================" - echo " ADVANCED OPTIONS" - echo "===============================================================================================================" - echo "" - echo " 1. Fix Installation Issues" - echo " 2. Clean Installation Files" - echo " 3. View Installation Logs" - echo " 4. System Diagnostics" - echo " 5. Back to Main Menu" - echo "" - echo "===============================================================================================================" - echo "" - - while true; do - echo -n "Select advanced option [1-5]: " - read -r choice - - case $choice in - 1) - show_fix_menu - return - ;; - 2) - show_clean_menu - return - ;; - 3) - show_logs_menu - return - ;; - 4) - show_diagnostics - return - ;; - 5) - show_main_menu - return - ;; - *) - echo "" - echo "ERROR: Invalid choice. Please enter 1-5." - echo "" - ;; - esac - done -} - -# Function to show fix menu -show_fix_menu() { - echo "" - echo "===============================================================================================================" - echo " FIX INSTALLATION ISSUES" - echo "===============================================================================================================" - echo "" - echo "This will attempt to fix common CyberPanel installation issues:" - echo "โ€ข Database connection problems" - echo "โ€ข Service configuration issues" - echo "โ€ข SSL certificate problems" - echo "โ€ข File permission issues" - echo "" - - echo -n "Proceed with fixing installation issues? (y/n) [y]: " - read -r response - case $response in - [nN]|[nN][oO]) - show_advanced_menu - ;; - *) - print_status "Applying fixes..." - apply_fixes - print_status "SUCCESS: Fixes applied successfully" - echo "" - read -p "Press Enter to return to advanced menu..." - show_advanced_menu - ;; - esac -} - -# Function to show clean menu -show_clean_menu() { - echo "" - echo "===============================================================================================================" - echo " CLEAN INSTALLATION FILES" - echo "===============================================================================================================" - echo "" - echo "WARNING: This will remove temporary installation files and logs." - echo " This action cannot be undone!" - echo "" - - echo -n "Proceed with cleaning? (y/n) [n]: " - read -r response - case $response in - [yY]|[yY][eE][sS]) - rm -rf /tmp/cyberpanel_* - rm -rf /var/log/cyberpanel_install.log - echo "SUCCESS: Cleanup complete! Temporary files and logs have been removed." - ;; - esac - - echo "" - echo -n "Return to advanced menu? (y/n) [y]: " - read -r response - case $response in - [nN]|[nN][oO]) - show_main_menu - ;; - *) - show_advanced_menu - ;; - esac -} - -# Function to show logs menu -show_logs_menu() { - echo "" - echo "===============================================================================================================" - echo " VIEW INSTALLATION LOGS" - echo "===============================================================================================================" - echo "" - - local log_file="/var/log/cyberpanel_install.log" - - if [ -f "$log_file" ]; then - echo "Installation Log: $log_file" - echo "Log Size: $(du -h "$log_file" | cut -f1)" - echo "" - - echo -n "View recent log entries? (y/n) [y]: " - read -r response - case $response in - [nN]|[nN][oO]) - ;; - *) - echo "" - echo "Recent log entries:" - tail -n 20 "$log_file" - ;; - esac - else - echo "No installation logs found at $log_file" - fi - - echo "" - echo -n "Return to advanced menu? (y/n) [y]: " - read -r response - case $response in - [nN]|[nN][oO]) - show_main_menu - ;; - *) - show_advanced_menu - ;; - esac -} - -# Function to show diagnostics -show_diagnostics() { - echo "" - echo "===============================================================================================================" - echo " SYSTEM DIAGNOSTICS" - echo "===============================================================================================================" - echo "" - - echo "Running system diagnostics..." - echo "" - - # Disk space - echo "Disk Usage:" - df -h | grep -E '^/dev/' - - # Memory usage - echo "" - echo "Memory Usage:" - free -h - - # Load average - echo "" - echo "System Load:" - uptime - - # Network interfaces - echo "" - echo "Network Interfaces:" - ip addr show | grep -E '^[0-9]+:|inet ' - - echo "" - echo -n "Return to advanced menu? (y/n) [y]: " - read -r response - case $response in - [nN]|[nN][oO]) - show_main_menu - ;; - *) - show_advanced_menu - ;; - esac -} - -# Function to start installation -start_installation() { - echo "" - echo "===============================================================================================================" - echo " STARTING INSTALLATION" - echo "===============================================================================================================" - echo "" - - # Detect OS - if ! detect_os; then - print_status "ERROR: Failed to detect operating system" - exit 1 - fi - - # Install dependencies - install_dependencies - - # Install CyberPanel - if ! install_cyberpanel; then - print_status "ERROR: CyberPanel installation failed" - exit 1 - fi - - # Apply fixes - apply_fixes - - # Show status summary - show_status_summary - - print_status "SUCCESS: Installation completed successfully!" -} - -# Function to parse command line arguments -parse_arguments() { - while [[ $# -gt 0 ]]; do - case $1 in - -b|--branch) - BRANCH_NAME="$2" - shift 2 - ;; - --debug) - DEBUG_MODE=true - set -x - shift - ;; - --auto) - AUTO_INSTALL=true - shift - ;; - -h|--help) - echo "Usage: $0 [OPTIONS]" - echo "Options:" - echo " -b, --branch BRANCH Install from specific branch/commit" - echo " --debug Enable debug mode" - echo " --auto Auto mode without prompts" - echo " -h, --help Show this help message" - echo "" - echo "Examples:" - echo " $0 # Interactive installation" - echo " $0 --debug # Debug mode installation" - echo " $0 --auto # Auto installation" - echo " $0 -b v2.5.5-dev # Install development version" - exit 0 - ;; - *) - print_status "WARNING: Unknown option: $1" - shift - ;; - esac - done -} - -# Main installation function -main() { - # Initialize log file - mkdir -p /var/log - touch "/var/log/cyberpanel_install.log" - - print_status "CyberPanel Simple Installer Starting..." - print_status "Log file: /var/log/cyberpanel_install.log" - - # Parse command line arguments - parse_arguments "$@" - - # Check if auto mode is requested - if [ "$AUTO_INSTALL" = true ]; then - # Run auto mode - print_status "Starting auto mode..." - - # Detect OS - if ! detect_os; then - print_status "ERROR: Failed to detect operating system" - exit 1 - fi - - # Install dependencies - install_dependencies - - # Install CyberPanel - if ! install_cyberpanel; then - print_status "ERROR: CyberPanel installation failed" - exit 1 - fi - - # Apply fixes - apply_fixes - - # Show status summary - show_status_summary - - print_status "SUCCESS: Installation completed successfully!" - else - # Run interactive mode - show_main_menu - fi -} - -# Run main function -main "$@" diff --git a/cyberpanel_standalone.sh b/cyberpanel_standalone.sh deleted file mode 100644 index 5951af816..000000000 --- a/cyberpanel_standalone.sh +++ /dev/null @@ -1,450 +0,0 @@ -#!/bin/bash - -# CyberPanel Standalone Modular Installer -# Self-contained installer with all modules included -# This version works when downloaded via curl - -set -e - -# Colors for output -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -BLUE='\033[0;34m' -PURPLE='\033[0;35m' -CYAN='\033[0;36m' -WHITE='\033[1;37m' -BOLD='\033[1m' -DIM='\033[2m' -NC='\033[0m' # No Color - -# Global variables -SERVER_OS="" -OS_FAMILY="" -PACKAGE_MANAGER="" -ARCHITECTURE="" -BRANCH_NAME="" -DEBUG_MODE=false -AUTO_INSTALL=false -INTERACTIVE_MODE=true - -# Logging function -log_message() { - echo "[$(date '+%Y-%m-%d %H:%M:%S')] [CYBERPANEL] $1" | tee -a "/var/log/cyberpanel_install.log" 2>/dev/null || echo "[$(date '+%Y-%m-%d %H:%M:%S')] [CYBERPANEL] $1" -} - -# Print colored output -print_status() { - local color=$1 - local message=$2 - echo -e "${color}${message}${NC}" - log_message "$message" -} - -# Function to show banner -show_banner() { - clear - echo -e "${BLUE}โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—${NC}" - echo -e "${BLUE}โ•‘${NC} ${BLUE}โ•‘${NC}" - echo -e "${BLUE}โ•‘${NC} ${WHITE}${BOLD}๐Ÿš€ CYBERPANEL MODULAR INSTALLER ๐Ÿš€${NC} ${BLUE}โ•‘${NC}" - echo -e "${BLUE}โ•‘${NC} ${BLUE}โ•‘${NC}" - echo -e "${BLUE}โ•‘${NC} ${CYAN}The Ultimate Web Hosting Control Panel${NC} ${BLUE}โ•‘${NC}" - echo -e "${BLUE}โ•‘${NC} ${YELLOW}Powered by OpenLiteSpeed โ€ข Fast โ€ข Secure โ€ข Scalable${NC} ${BLUE}โ•‘${NC}" - echo -e "${BLUE}โ•‘${NC} ${BLUE}โ•‘${NC}" - echo -e "${BLUE}โ•‘${NC} ${GREEN}โœจ Beautiful UI โ€ข Modular Architecture โ€ข Smart Installation โœจ${NC} ${BLUE}โ•‘${NC}" - echo -e "${BLUE}โ•‘${NC} ${BLUE}โ•‘${NC}" - echo -e "${BLUE}โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•${NC}" - echo "" -} - -# Function to detect OS -detect_os() { - print_status "$BLUE" "๐Ÿ” Detecting operating system..." - - # Detect architecture - ARCHITECTURE=$(uname -m) - case $ARCHITECTURE in - x86_64) - print_status "$GREEN" "Architecture: x86_64 (Supported)" - ;; - aarch64|arm64) - print_status "$YELLOW" "Architecture: $ARCHITECTURE (Limited support)" - ;; - *) - print_status "$RED" "Architecture: $ARCHITECTURE (Not supported)" - return 1 - ;; - esac - - # Get OS release information - local OUTPUT=$(cat /etc/*release 2>/dev/null) - if [ -z "$OUTPUT" ]; then - print_status "$RED" "โŒ Cannot read OS release information" - return 1 - fi - - # Detect OS - if echo $OUTPUT | grep -q "AlmaLinux 9" ; then - SERVER_OS="AlmaLinux9" - OS_FAMILY="rhel" - PACKAGE_MANAGER="dnf" - print_status "$GREEN" "Detected: AlmaLinux 9" - elif echo $OUTPUT | grep -q "AlmaLinux 8" ; then - SERVER_OS="AlmaLinux8" - OS_FAMILY="rhel" - PACKAGE_MANAGER="yum" - print_status "$GREEN" "Detected: AlmaLinux 8" - elif echo $OUTPUT | grep -q "CentOS Linux 9" ; then - SERVER_OS="CentOS9" - OS_FAMILY="rhel" - PACKAGE_MANAGER="dnf" - print_status "$GREEN" "Detected: CentOS Linux 9" - elif echo $OUTPUT | grep -q "CentOS Linux 8" ; then - SERVER_OS="CentOS8" - OS_FAMILY="rhel" - PACKAGE_MANAGER="yum" - print_status "$GREEN" "Detected: CentOS Linux 8" - elif echo $OUTPUT | grep -q "Rocky Linux 9" ; then - SERVER_OS="RockyLinux9" - OS_FAMILY="rhel" - PACKAGE_MANAGER="dnf" - print_status "$GREEN" "Detected: Rocky Linux 9" - elif echo $OUTPUT | grep -q "Rocky Linux 8" ; then - SERVER_OS="RockyLinux8" - OS_FAMILY="rhel" - PACKAGE_MANAGER="yum" - print_status "$GREEN" "Detected: Rocky Linux 8" - elif echo $OUTPUT | grep -q "Ubuntu 22.04" ; then - SERVER_OS="Ubuntu2204" - OS_FAMILY="debian" - PACKAGE_MANAGER="apt" - print_status "$GREEN" "Detected: Ubuntu 22.04" - elif echo $OUTPUT | grep -q "Ubuntu 20.04" ; then - SERVER_OS="Ubuntu2004" - OS_FAMILY="debian" - PACKAGE_MANAGER="apt" - print_status "$GREEN" "Detected: Ubuntu 20.04" - elif echo $OUTPUT | grep -q "Debian GNU/Linux 12" ; then - SERVER_OS="Debian12" - OS_FAMILY="debian" - PACKAGE_MANAGER="apt" - print_status "$GREEN" "Detected: Debian GNU/Linux 12" - elif echo $OUTPUT | grep -q "Debian GNU/Linux 11" ; then - SERVER_OS="Debian11" - OS_FAMILY="debian" - PACKAGE_MANAGER="apt" - print_status "$GREEN" "Detected: Debian GNU/Linux 11" - else - print_status "$RED" "โŒ Unsupported OS detected" - print_status "$YELLOW" "Supported OS: AlmaLinux 8/9, CentOS 8/9, Rocky Linux 8/9, Ubuntu 20.04/22.04, Debian 11/12" - return 1 - fi - - return 0 -} - -# Function to install dependencies -install_dependencies() { - print_status "$BLUE" "๐Ÿ“ฆ Installing dependencies..." - - case $OS_FAMILY in - "rhel") - # Install EPEL - $PACKAGE_MANAGER install -y epel-release 2>/dev/null || true - - # Install development tools - $PACKAGE_MANAGER groupinstall -y 'Development Tools' 2>/dev/null || { - $PACKAGE_MANAGER install -y gcc gcc-c++ make kernel-devel 2>/dev/null || true - } - - # Install core packages - if [ "$SERVER_OS" = "AlmaLinux9" ] || [ "$SERVER_OS" = "CentOS9" ] || [ "$SERVER_OS" = "RockyLinux9" ]; then - # AlmaLinux 9 / CentOS 9 / Rocky Linux 9 - $PACKAGE_MANAGER install -y ImageMagick gd libicu oniguruma python3 python3-pip python3-devel 2>/dev/null || true - $PACKAGE_MANAGER install -y aspell 2>/dev/null || print_status "$YELLOW" "aspell not available, skipping..." - $PACKAGE_MANAGER install -y libc-client-devel 2>/dev/null || print_status "$YELLOW" "libc-client-devel not available, skipping..." - else - # AlmaLinux 8 / CentOS 8 / Rocky Linux 8 - $PACKAGE_MANAGER install -y ImageMagick gd libicu oniguruma aspell libc-client-devel python3 python3-pip python3-devel 2>/dev/null || true - fi - ;; - "debian") - # Update package lists - apt update -qq 2>/dev/null || true - - # Install essential packages - apt install -y -qq curl wget git unzip tar gzip bzip2 2>/dev/null || true - - # Install development tools - apt install -y -qq build-essential gcc g++ make python3-dev python3-pip 2>/dev/null || true - - # Install core packages - apt install -y -qq imagemagick php-gd libicu-dev libonig-dev 2>/dev/null || true - apt install -y -qq aspell 2>/dev/null || print_status "$YELLOW" "aspell not available, skipping..." - apt install -y -qq libc-client-dev 2>/dev/null || print_status "$YELLOW" "libc-client-dev not available, skipping..." - ;; - esac - - print_status "$GREEN" "โœ… Dependencies installed successfully" -} - -# Function to install CyberPanel -install_cyberpanel() { - print_status "$BLUE" "๐Ÿš€ Installing CyberPanel..." - - # Download and run the original installer - if [ -n "$BRANCH_NAME" ]; then - curl --silent -o cyberpanel.sh "https://raw.githubusercontent.com/usmannasir/cyberpanel/$BRANCH_NAME/cyberpanel.sh" 2>/dev/null - else - curl --silent -o cyberpanel.sh "https://cyberpanel.sh/?dl&$SERVER_OS" 2>/dev/null - fi - - chmod +x cyberpanel.sh - - # Run the installer - if ./cyberpanel.sh $([ "$DEBUG_MODE" = true ] && echo "--debug") > /tmp/cyberpanel_install_output.log 2>&1; then - print_status "$GREEN" "โœ… CyberPanel installed successfully" - return 0 - else - print_status "$RED" "โŒ CyberPanel installation failed. Check /tmp/cyberpanel_install_output.log for details" - return 1 - fi -} - -# Function to apply fixes -apply_fixes() { - print_status "$BLUE" "๐Ÿ”ง Applying installation fixes..." - - # Fix database issues - systemctl start mariadb 2>/dev/null || true - systemctl enable mariadb 2>/dev/null || true - mysqladmin -u root password '1234567' 2>/dev/null || true - - # Create cyberpanel database user - mysql -u root -p1234567 -e " - CREATE DATABASE IF NOT EXISTS cyberpanel; - CREATE USER IF NOT EXISTS 'cyberpanel'@'localhost' IDENTIFIED BY 'cyberpanel'; - GRANT ALL PRIVILEGES ON cyberpanel.* TO 'cyberpanel'@'localhost'; - FLUSH PRIVILEGES; - " 2>/dev/null || true - - # Fix LiteSpeed service - cat > /etc/systemd/system/lsws.service << 'EOF' -[Unit] -Description=LiteSpeed Web Server -After=network.target - -[Service] -Type=forking -User=root -Group=root -ExecStart=/usr/local/lsws/bin/lswsctrl start -ExecStop=/usr/local/lsws/bin/lswsctrl stop -ExecReload=/usr/local/lsws/bin/lswsctrl restart -Restart=always -RestartSec=5 - -[Install] -WantedBy=multi-user.target -EOF - - systemctl daemon-reload - systemctl enable lsws - systemctl start lsws - - # Fix CyberPanel service - cat > /etc/systemd/system/cyberpanel.service << 'EOF' -[Unit] -Description=CyberPanel Web Interface -After=network.target mariadb.service - -[Service] -Type=simple -User=root -Group=root -WorkingDirectory=/usr/local/CyberCP -ExecStart=/usr/local/CyberPanel-venv/bin/python manage.py runserver 0.0.0.0:8000 -Restart=always -RestartSec=5 -Environment=DJANGO_SETTINGS_MODULE=CyberCP.settings - -[Install] -WantedBy=multi-user.target -EOF - - systemctl daemon-reload - systemctl enable cyberpanel - - print_status "$GREEN" "โœ… All fixes applied successfully" -} - -# Function to show status summary -show_status_summary() { - echo "" - echo "โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—" - echo "โ•‘ โ•‘" - echo "โ•‘ ๐Ÿ“Š CYBERPANEL INSTALLATION STATUS ๐Ÿ“Š โ•‘" - echo "โ•‘ โ•‘" - echo "โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•" - echo "" - - echo "๐Ÿ”ง CORE SERVICES STATUS:" - echo "โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•" - - # Check services - if systemctl is-active --quiet mariadb; then - echo "โœ… MariaDB Database: RUNNING" - else - echo "โŒ MariaDB Database: NOT RUNNING" - fi - - if systemctl is-active --quiet lsws; then - echo "โœ… LiteSpeed Web Server: RUNNING" - else - echo "โŒ LiteSpeed Web Server: NOT RUNNING" - fi - - if systemctl is-active --quiet cyberpanel; then - echo "โœ… CyberPanel Application: RUNNING" - else - echo "โŒ CyberPanel Application: NOT RUNNING" - fi - - echo "" - echo "๐ŸŒ NETWORK PORTS STATUS:" - echo "โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•" - - # Check ports - if netstat -tlnp | grep -q ":8090 "; then - echo "โœ… Port 8090 (CyberPanel): LISTENING" - else - echo "โŒ Port 8090 (CyberPanel): NOT LISTENING" - fi - - if netstat -tlnp | grep -q ":80 "; then - echo "โœ… Port 80 (HTTP): LISTENING" - else - echo "โŒ Port 80 (HTTP): NOT LISTENING" - fi - - echo "" - echo "๐Ÿ“Š SUMMARY:" - echo "โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•" - print_status "$GREEN" "๐ŸŽ‰ INSTALLATION COMPLETED SUCCESSFULLY!" - echo "" - echo "๐ŸŒ Access CyberPanel at: http://your-server-ip:8090" - echo "๐Ÿ‘ค Default username: admin" - echo "๐Ÿ”‘ Default password: 1234567" - echo "" - echo "โš ๏ธ IMPORTANT: Change the default password immediately!" - echo "" -} - -# Function to parse command line arguments -parse_arguments() { - while [[ $# -gt 0 ]]; do - case $1 in - -b|--branch) - BRANCH_NAME="$2" - shift 2 - ;; - --debug) - DEBUG_MODE=true - set -x - shift - ;; - --auto) - AUTO_INSTALL=true - INTERACTIVE_MODE=false - shift - ;; - -h|--help) - echo "Usage: $0 [OPTIONS]" - echo "Options:" - echo " -b, --branch BRANCH Install from specific branch/commit" - echo " --debug Enable debug mode" - echo " --auto Auto mode without prompts" - echo " -h, --help Show this help message" - echo "" - echo "Examples:" - echo " $0 # Interactive installation" - echo " $0 --debug # Debug mode installation" - echo " $0 --auto # Auto installation" - echo " $0 -b v2.5.5-dev # Install development version" - exit 0 - ;; - *) - print_status "$YELLOW" "Unknown option: $1" - shift - ;; - esac - done -} - -# Function to run interactive mode -run_interactive_mode() { - show_banner - - echo -e "${WHITE}Welcome to the CyberPanel Modular Installer!${NC}" - echo "" - echo -e "${CYAN}This installer will:${NC}" - echo "โ€ข Detect your operating system" - echo "โ€ข Install required dependencies" - echo "โ€ข Install CyberPanel" - echo "โ€ข Apply necessary fixes" - echo "โ€ข Configure services" - echo "" - - if [ -n "$BRANCH_NAME" ]; then - echo -e "${YELLOW}Installing version: $BRANCH_NAME${NC}" - else - echo -e "${YELLOW}Installing latest stable version${NC}" - fi - - echo "" - read -p "Press Enter to continue or Ctrl+C to cancel..." -} - -# Main installation function -main() { - # Initialize log file - mkdir -p /var/log - touch "/var/log/cyberpanel_install.log" - - print_status "$BLUE" "๐Ÿš€ CyberPanel Modular Installer Starting..." - print_status "$BLUE" "Log file: /var/log/cyberpanel_install.log" - - # Parse command line arguments - parse_arguments "$@" - - # Run interactive mode if not auto - if [ "$AUTO_INSTALL" = false ]; then - run_interactive_mode - fi - - # Detect OS - if ! detect_os; then - print_status "$RED" "โŒ Failed to detect operating system" - exit 1 - fi - - # Install dependencies - install_dependencies - - # Install CyberPanel - if ! install_cyberpanel; then - print_status "$RED" "โŒ CyberPanel installation failed" - exit 1 - fi - - # Apply fixes - apply_fixes - - # Show status summary - show_status_summary - - print_status "$GREEN" "๐ŸŽ‰ CyberPanel installation process completed!" -} - -# Run main function -main "$@" diff --git a/fix_installation_issues.sh b/fix_installation_issues.sh deleted file mode 100644 index 4a039be65..000000000 --- a/fix_installation_issues.sh +++ /dev/null @@ -1,245 +0,0 @@ -#!/bin/bash - -# CyberPanel Installation Issues Fix Script -# This script fixes the critical issues found during installation - -echo "โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—" -echo "โ•‘ โ•‘" -echo "โ•‘ ๐Ÿ”ง FIXING CYBERPANEL INSTALLATION ISSUES ๐Ÿ”ง โ•‘" -echo "โ•‘ โ•‘" -echo "โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•" -echo "" - -# Function to log actions -log_action() { - echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" -} - -# 1. Fix Database Connection Issues -echo "๐Ÿ—„๏ธ FIXING DATABASE CONNECTION ISSUES..." -echo "โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•" - -log_action "Starting MariaDB service..." -systemctl start mariadb -systemctl enable mariadb - -log_action "Setting MariaDB root password..." -mysqladmin -u root password '1234567' 2>/dev/null || true - -log_action "Creating cyberpanel database user..." -mysql -u root -p1234567 -e " -CREATE DATABASE IF NOT EXISTS cyberpanel; -CREATE USER IF NOT EXISTS 'cyberpanel'@'localhost' IDENTIFIED BY 'cyberpanel'; -GRANT ALL PRIVILEGES ON cyberpanel.* TO 'cyberpanel'@'localhost'; -FLUSH PRIVILEGES; -" 2>/dev/null || true - -log_action "Testing database connections..." -if mysql -u root -p1234567 -e "SELECT 1;" >/dev/null 2>&1; then - echo "โœ… MariaDB root connection: SUCCESS" -else - echo "โŒ MariaDB root connection: FAILED" -fi - -if mysql -u cyberpanel -pcyberpanel -e "SELECT 1;" >/dev/null 2>&1; then - echo "โœ… CyberPanel database connection: SUCCESS" -else - echo "โŒ CyberPanel database connection: FAILED" -fi -echo "" - -# 2. Fix LiteSpeed Service Configuration -echo "๐Ÿš€ FIXING LITESPEED SERVICE CONFIGURATION..." -echo "โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•" - -log_action "Creating LiteSpeed service file..." -cat > /etc/systemd/system/lsws.service << 'EOF' -[Unit] -Description=LiteSpeed Web Server -After=network.target - -[Service] -Type=forking -User=root -Group=root -ExecStart=/usr/local/lsws/bin/lswsctrl start -ExecStop=/usr/local/lsws/bin/lswsctrl stop -ExecReload=/usr/local/lsws/bin/lswsctrl restart -Restart=always -RestartSec=5 - -[Install] -WantedBy=multi-user.target -EOF - -log_action "Reloading systemd daemon..." -systemctl daemon-reload - -log_action "Enabling LiteSpeed service..." -systemctl enable lsws - -log_action "Starting LiteSpeed service..." -systemctl start lsws - -if systemctl is-active --quiet lsws; then - echo "โœ… LiteSpeed service: STARTED" -else - echo "โŒ LiteSpeed service: FAILED TO START" -fi -echo "" - -# 3. Fix SSL Certificates -echo "๐Ÿ” FIXING SSL CERTIFICATES..." -echo "โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•" - -log_action "Creating SSL certificate configuration..." -mkdir -p /root/cyberpanel -cat > /root/cyberpanel/cert_conf << 'EOF' -[req] -distinguished_name = req_distinguished_name -req_extensions = v3_req -prompt = no - -[req_distinguished_name] -C = US -ST = State -L = City -O = Organization -OU = Organizational Unit -CN = localhost - -[v3_req] -keyUsage = keyEncipherment, dataEncipherment -extendedKeyUsage = serverAuth -subjectAltName = @alt_names - -[alt_names] -DNS.1 = localhost -IP.1 = 127.0.0.1 -EOF - -log_action "Generating LiteSpeed admin SSL certificate..." -openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ - -keyout /usr/local/lsws/admin/conf/cert/admin.key \ - -out /usr/local/lsws/admin/conf/cert/admin.crt \ - -config /root/cyberpanel/cert_conf 2>/dev/null || true - -log_action "Setting proper permissions for SSL certificates..." -chmod 600 /usr/local/lsws/admin/conf/cert/admin.key 2>/dev/null || true -chmod 644 /usr/local/lsws/admin/conf/cert/admin.crt 2>/dev/null || true - -if [ -f "/usr/local/lsws/admin/conf/cert/admin.crt" ]; then - echo "โœ… LiteSpeed admin SSL certificate: CREATED" -else - echo "โŒ LiteSpeed admin SSL certificate: FAILED" -fi -echo "" - -# 4. Fix Admin Console Files -echo "๐Ÿ–ฅ๏ธ FIXING ADMIN CONSOLE FILES..." -echo "โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•" - -log_action "Creating admin console directories..." -mkdir -p /usr/local/lsws/admin/fcgi-bin -mkdir -p /usr/local/lsws/admin/conf - -log_action "Creating admin PHP file..." -cat > /usr/local/lsws/admin/fcgi-bin/admin_php << 'EOF' -#!/bin/bash -export PHP_LSAPI_CHILDREN=35 -export PHP_LSAPI_MAX_REQUESTS=1000 -exec /usr/local/lsws/lsphp82/bin/lsphp -b /usr/local/lsws/admin/fcgi-bin/admin_php -EOF - -chmod +x /usr/local/lsws/admin/fcgi-bin/admin_php 2>/dev/null || true - -log_action "Creating admin password file..." -htpasswd -cb /usr/local/lsws/admin/conf/htpasswd admin 1234567 2>/dev/null || true - -log_action "Setting proper ownership..." -chown -R lsadm:lsadm /usr/local/lsws/admin/ 2>/dev/null || true - -if [ -f "/usr/local/lsws/admin/fcgi-bin/admin_php" ]; then - echo "โœ… Admin console files: CREATED" -else - echo "โŒ Admin console files: FAILED" -fi -echo "" - -# 5. Fix CyberPanel Application -echo "๐ŸŽ›๏ธ FIXING CYBERPANEL APPLICATION..." -echo "โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•" - -log_action "Setting proper permissions for CyberPanel..." -chown -R root:root /usr/local/CyberCP/ 2>/dev/null || true -chmod -R 755 /usr/local/CyberCP/ 2>/dev/null || true - -log_action "Creating CyberPanel service file..." -cat > /etc/systemd/system/cyberpanel.service << 'EOF' -[Unit] -Description=CyberPanel Web Interface -After=network.target mariadb.service - -[Service] -Type=simple -User=root -Group=root -WorkingDirectory=/usr/local/CyberCP -ExecStart=/usr/local/CyberPanel-venv/bin/python manage.py runserver 0.0.0.0:8000 -Restart=always -RestartSec=5 -Environment=DJANGO_SETTINGS_MODULE=CyberCP.settings - -[Install] -WantedBy=multi-user.target -EOF - -log_action "Reloading systemd daemon..." -systemctl daemon-reload - -log_action "Enabling CyberPanel service..." -systemctl enable cyberpanel -echo "" - -# 6. Final Service Status Check -echo "๐Ÿ“Š FINAL SERVICE STATUS CHECK..." -echo "โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•" - -services=("mariadb" "lsws" "lsmcd" "cyberpanel" "watchdog") - -for service in "${services[@]}"; do - if systemctl is-active --quiet $service; then - echo "โœ… $service: RUNNING" - else - echo "โš ๏ธ $service: NOT RUNNING" - fi -done -echo "" - -# 7. Port Status Check -echo "๐ŸŒ PORT STATUS CHECK..." -echo "โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•" - -ports=("3306:MariaDB" "80:HTTP" "443:HTTPS" "8090:CyberPanel" "7080:LiteSpeed Admin") - -for port_info in "${ports[@]}"; do - port=$(echo $port_info | cut -d: -f1) - service=$(echo $port_info | cut -d: -f2) - - if netstat -tlnp | grep -q ":$port "; then - echo "โœ… Port $port ($service): LISTENING" - else - echo "โŒ Port $port ($service): NOT LISTENING" - fi -done -echo "" - -echo "โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—" -echo "โ•‘ โ•‘" -echo "โ•‘ ๐ŸŽ‰ INSTALLATION ISSUES FIXED! ๐ŸŽ‰ โ•‘" -echo "โ•‘ โ•‘" -echo "โ•‘ All critical issues have been addressed. The server is now ready for restart. โ•‘" -echo "โ•‘ โ•‘" -echo "โ•‘ After restart, run: ./service_status_check.sh โ•‘" -echo "โ•‘ โ•‘" -echo "โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•" diff --git a/plogical/mailUtilities.py b/plogical/mailUtilities.py index 00df0c6f3..59701151a 100644 --- a/plogical/mailUtilities.py +++ b/plogical/mailUtilities.py @@ -1637,6 +1637,7 @@ LogFile /var/log/clamav/clamav.log def reverse_dns_lookup(ip_address): """ Perform reverse DNS lookup for the given IP address using external DNS servers. + Falls back to local DNS resolution if external APIs are unavailable. Args: ip_address: The IP address to perform reverse DNS lookup on @@ -1652,38 +1653,35 @@ LogFile /var/log/clamav/clamav.log try: fetchURLs = requests.get('https://cyberpanel.net/dnsServers.txt', timeout=10) except (ConnectionError, Timeout) as e: - logging.CyberCPLogFileWriter.writeToFile(f'Failed to fetch DNS server list from cyberpanel.net: {str(e)}') - return [] + logging.CyberCPLogFileWriter.writeToFile(f'Failed to fetch DNS server list from cyberpanel.net: {str(e)}. Falling back to local DNS lookup.') + fetchURLs = None except RequestException as e: - logging.CyberCPLogFileWriter.writeToFile(f'Request error while fetching DNS server list: {str(e)}') - return [] + logging.CyberCPLogFileWriter.writeToFile(f'Request error while fetching DNS server list: {str(e)}. Falling back to local DNS lookup.') + fetchURLs = None - if fetchURLs.status_code != 200: - logging.CyberCPLogFileWriter.writeToFile(f'Failed to fetch DNS server list: HTTP {fetchURLs.status_code}') - return [] + # Try external API if available + if fetchURLs and fetchURLs.status_code == 200: - try: - urls_data = fetchURLs.json() - if 'urls' not in urls_data: - logging.CyberCPLogFileWriter.writeToFile('DNS server list response missing "urls" key') - return [] - urls = urls_data['urls'] - except (ValueError, KeyError) as e: - logging.CyberCPLogFileWriter.writeToFile(f'Failed to parse DNS server list JSON: {str(e)}') - return [] + try: + urls_data = fetchURLs.json() + if 'urls' not in urls_data: + logging.CyberCPLogFileWriter.writeToFile('DNS server list response missing "urls" key. Falling back to local DNS lookup.') + fetchURLs = None + else: + urls = urls_data['urls'] + if not isinstance(urls, list) or len(urls) == 0: + logging.CyberCPLogFileWriter.writeToFile('DNS server list is empty or invalid. Falling back to local DNS lookup.') + fetchURLs = None + else: + # External API is available, proceed with queries + if os.path.exists(ProcessUtilities.debugPath): + logging.CyberCPLogFileWriter.writeToFile(f'DNS urls {urls}.') - if not isinstance(urls, list) or len(urls) == 0: - logging.CyberCPLogFileWriter.writeToFile('DNS server list is empty or invalid') - return [] + results = [] + successful_queries = 0 - if os.path.exists(ProcessUtilities.debugPath): - logging.CyberCPLogFileWriter.writeToFile(f'DNS urls {urls}.') - - results = [] - successful_queries = 0 - - # Query each DNS server - for url in urls: + # Query each DNS server + for url in urls: try: response = requests.get(f'{url}/index.php?ip={ip_address}', timeout=5) @@ -1748,18 +1746,58 @@ LogFile /var/log/clamav/clamav.log logging.CyberCPLogFileWriter.writeToFile(f'Unexpected error while querying DNS server {url}: {str(e)}') continue - if os.path.exists(ProcessUtilities.debugPath): - logging.CyberCPLogFileWriter.writeToFile(f'rDNS result of {ip_address} is {str(results)} (successful queries: {successful_queries}/{len(urls)})') + if os.path.exists(ProcessUtilities.debugPath): + logging.CyberCPLogFileWriter.writeToFile(f'rDNS result of {ip_address} is {str(results)} (successful queries: {successful_queries}/{len(urls)})') - # Return results (empty list if no successful queries) - return results + # If external API returned results, return them + if results: + return results + # Otherwise fall through to local DNS lookup + logging.CyberCPLogFileWriter.writeToFile(f'External DNS API queries returned no results for {ip_address}. Falling back to local DNS lookup.') + except (ValueError, KeyError) as e: + logging.CyberCPLogFileWriter.writeToFile(f'Failed to parse DNS server list JSON: {str(e)}. Falling back to local DNS lookup.') + fetchURLs = None + else: + if fetchURLs: + logging.CyberCPLogFileWriter.writeToFile(f'Failed to fetch DNS server list: HTTP {fetchURLs.status_code if fetchURLs else "N/A"}. Falling back to local DNS lookup.') + fetchURLs = None + + # Fallback to local DNS lookup when external APIs fail or return no results + try: + import socket + rdns = socket.gethostbyaddr(ip_address)[0] + rdns_clean = rdns.rstrip('.') + logging.CyberCPLogFileWriter.writeToFile(f'Local DNS lookup successful for {ip_address}: {rdns_clean}') + return [rdns_clean] + except socket.herror as e: + logging.CyberCPLogFileWriter.writeToFile(f'Local DNS lookup failed for {ip_address}: {str(e)}') + return [] + except Exception as e: + logging.CyberCPLogFileWriter.writeToFile(f'Unexpected error in local DNS lookup for {ip_address}: {str(e)}') + return [] except ImportError as e: - logging.CyberCPLogFileWriter.writeToFile(f'Failed to import requests library: {str(e)}') - return [] + logging.CyberCPLogFileWriter.writeToFile(f'Failed to import requests library: {str(e)}. Attempting local DNS lookup.') + try: + import socket + rdns = socket.gethostbyaddr(ip_address)[0] + rdns_clean = rdns.rstrip('.') + logging.CyberCPLogFileWriter.writeToFile(f'Local DNS lookup successful for {ip_address}: {rdns_clean}') + return [rdns_clean] + except Exception as local_e: + logging.CyberCPLogFileWriter.writeToFile(f'Local DNS lookup also failed for {ip_address}: {str(local_e)}') + return [] except BaseException as e: - logging.CyberCPLogFileWriter.writeToFile(f'Unexpected error in reverse_dns_lookup for IP {ip_address}: {str(e)}') - return [] + logging.CyberCPLogFileWriter.writeToFile(f'Unexpected error in reverse_dns_lookup for IP {ip_address}: {str(e)}. Attempting local DNS lookup.') + try: + import socket + rdns = socket.gethostbyaddr(ip_address)[0] + rdns_clean = rdns.rstrip('.') + logging.CyberCPLogFileWriter.writeToFile(f'Local DNS lookup successful for {ip_address}: {rdns_clean}') + return [rdns_clean] + except Exception as local_e: + logging.CyberCPLogFileWriter.writeToFile(f'Local DNS lookup also failed for {ip_address}: {str(local_e)}') + return [] @staticmethod def SaveEmailLimitsNew(tempPath): diff --git a/simple_install.sh b/simple_install.sh deleted file mode 100644 index 3d3cdb5b8..000000000 --- a/simple_install.sh +++ /dev/null @@ -1,114 +0,0 @@ -#!/bin/sh - -# Simplified CyberPanel Installation Script -# Based on 2.4.4 approach with AlmaLinux 9 fixes - -OUTPUT=$(cat /etc/*release) - -# Detect OS and set appropriate variables -if echo $OUTPUT | grep -q "AlmaLinux 9" ; then - echo -e "\nDetecting AlmaLinux 9...\n" - SERVER_OS="AlmaLinux9" - PKG_MGR="dnf" -elif echo $OUTPUT | grep -q "AlmaLinux 8" ; then - echo -e "\nDetecting AlmaLinux 8...\n" - SERVER_OS="AlmaLinux8" - PKG_MGR="yum" -elif echo $OUTPUT | grep -q "Ubuntu 22.04" ; then - echo -e "\nDetecting Ubuntu 22.04...\n" - SERVER_OS="Ubuntu2204" - PKG_MGR="apt" -elif echo $OUTPUT | grep -q "Ubuntu 20.04" ; then - echo -e "\nDetecting Ubuntu 20.04...\n" - SERVER_OS="Ubuntu2004" - PKG_MGR="apt" -elif echo $OUTPUT | grep -q "CentOS Linux 8" ; then - echo -e "\nDetecting CentOS 8...\n" - SERVER_OS="CentOS8" - PKG_MGR="yum" -else - echo -e "\nUnsupported OS detected. This script supports:\n" - echo -e "AlmaLinux: 8, 9\n" - echo -e "Ubuntu: 20.04, 22.04\n" - echo -e "CentOS: 8\n" - exit 1 -fi - -echo "Installing basic dependencies..." - -# Install basic packages -if [ "$PKG_MGR" = "dnf" ]; then - dnf update -y - dnf install -y epel-release - dnf install -y wget curl unzip zip rsync firewalld git python3 python3-pip - dnf install -y mariadb-server mariadb-client - dnf install -y ImageMagick gd libicu oniguruma aspell libc-client -elif [ "$PKG_MGR" = "yum" ]; then - yum update -y - yum install -y epel-release - yum install -y wget curl unzip zip rsync firewalld git python3 python3-pip - yum install -y mariadb-server mariadb-client - yum install -y ImageMagick gd libicu oniguruma aspell libc-client -elif [ "$PKG_MGR" = "apt" ]; then - apt update -y - apt install -y wget curl unzip zip rsync git python3 python3-pip - apt install -y mariadb-server mariadb-client - apt install -y imagemagick php-gd php-intl php-mbstring php-pspell -fi - -# Start and enable MariaDB -echo "Starting MariaDB..." -systemctl enable mariadb -systemctl start mariadb - -# Create MySQL password file -echo "Setting up MySQL..." -mkdir -p /etc/cyberpanel -echo "cyberpanel123" > /etc/cyberpanel/mysqlPassword -chmod 600 /etc/cyberpanel/mysqlPassword - -# Secure MySQL installation -mysql -u root -e "ALTER USER 'root'@'localhost' IDENTIFIED BY 'cyberpanel123';" 2>/dev/null || true -mysql -u root -pcyberpanel123 -e "DELETE FROM mysql.user WHERE User='';" 2>/dev/null || true -mysql -u root -pcyberpanel123 -e "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');" 2>/dev/null || true -mysql -u root -pcyberpanel123 -e "DROP DATABASE IF EXISTS test;" 2>/dev/null || true -mysql -u root -pcyberpanel123 -e "DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';" 2>/dev/null || true -mysql -u root -pcyberpanel123 -e "FLUSH PRIVILEGES;" 2>/dev/null || true - -# Configure firewall -echo "Configuring firewall..." -if [ "$PKG_MGR" = "dnf" ] || [ "$PKG_MGR" = "yum" ]; then - systemctl enable firewalld - systemctl start firewalld - firewall-cmd --permanent --add-port=8090/tcp - firewall-cmd --permanent --add-port=7080/tcp - firewall-cmd --permanent --add-port=80/tcp - firewall-cmd --permanent --add-port=443/tcp - firewall-cmd --permanent --add-port=21/tcp - firewall-cmd --permanent --add-port=25/tcp - firewall-cmd --permanent --add-port=587/tcp - firewall-cmd --permanent --add-port=465/tcp - firewall-cmd --permanent --add-port=110/tcp - firewall-cmd --permanent --add-port=143/tcp - firewall-cmd --permanent --add-port=993/tcp - firewall-cmd --permanent --add-port=995/tcp - firewall-cmd --permanent --add-port=53/tcp - firewall-cmd --permanent --add-port=53/udp - firewall-cmd --reload -fi - -# Download and install CyberPanel -echo "Downloading CyberPanel..." -rm -f cyberpanel.sh -curl --silent -o cyberpanel.sh "https://cyberpanel.sh/?dl&$SERVER_OS" 2>/dev/null - -if [ -f "cyberpanel.sh" ]; then - echo "Installing CyberPanel..." - chmod +x cyberpanel.sh - ./cyberpanel.sh -else - echo "Failed to download CyberPanel installer!" - exit 1 -fi - -echo "Installation completed!" diff --git a/to-do/MARIADB_INSTALLATION_FIXES.md b/to-do/MARIADB_INSTALLATION_FIXES.md deleted file mode 100644 index f133868d3..000000000 --- a/to-do/MARIADB_INSTALLATION_FIXES.md +++ /dev/null @@ -1,88 +0,0 @@ -# MariaDB Installation Fixes - -## Issues Fixed - -### 1. MariaDB-server-compat Package Conflict -**Problem**: `MariaDB-server-compat-12.1.2-1.el9.noarch` was conflicting with MariaDB 10.11 installation, causing transaction test errors. - -**Solution**: -- Enhanced compat package removal with multiple aggressive removal attempts -- Added `--allowerasing` flag to dnf remove commands -- Added dnf exclude configuration to prevent compat package reinstallation -- Verification step to ensure all compat packages are removed before installation - -**Files Modified**: -- `cyberpanel-repo/plogical/upgrade.py` - `fix_almalinux9_mariadb()` function -- `cyberpanel-repo/install/install.py` - `installMySQL()` function - -### 2. MySQL Command Not Found Error -**Problem**: After MariaDB installation failed, the `changeMYSQLRootPassword()` function tried to use the `mysql` command which didn't exist, causing `FileNotFoundError`. - -**Solution**: -- Added verification that MariaDB binaries exist before attempting password change -- Added check for mysql/mariadb command availability -- Added MariaDB service status verification before password change -- Added wait time for MariaDB to be ready after service start - -**Files Modified**: -- `cyberpanel-repo/install/install.py` - `changeMYSQLRootPassword()` function -- `cyberpanel-repo/install/install.py` - `installMySQL()` function - -### 3. MariaDB Installation Verification -**Problem**: Installation was proceeding even when MariaDB wasn't actually installed successfully. - -**Solution**: -- Added binary existence check after installation -- Added service status verification -- Added proper error handling and return values -- Installation now fails gracefully if MariaDB wasn't installed - -**Files Modified**: -- `cyberpanel-repo/plogical/upgrade.py` - `fix_almalinux9_mariadb()` function -- `cyberpanel-repo/install/install.py` - `installMySQL()` function - -## Changes Made - -### upgrade.py -1. **Enhanced compat package removal**: - - Multiple removal attempts (dnf remove, rpm -e, individual package removal) - - Added `--allowerasing` flag - - Added dnf exclude configuration - - Verification step - -2. **Improved MariaDB installation**: - - Added `--exclude='MariaDB-server-compat*'` to dnf install command - - Added fallback with `--allowerasing` if conflicts occur - - Added binary existence verification after installation - - Proper error handling and return values - -### install.py -1. **Enhanced compat package removal** (same as upgrade.py) - -2. **Improved installation verification**: - - Check for MariaDB binaries after installation - - Verify service is running before password change - - Added wait time for service to be ready - - Proper error handling - -3. **Improved password change function**: - - Verify mysql/mariadb command exists before attempting password change - - Better error messages - - Graceful failure handling - -## Testing Recommendations - -1. Test on clean AlmaLinux 9 system -2. Test with existing MariaDB-server-compat package installed -3. Test with MariaDB 10.x already installed -4. Test with MariaDB 12.x already installed -5. Verify MariaDB service starts correctly -6. Verify mysql/mariadb commands are available -7. Verify password change succeeds - -## Notes - -- The fixes maintain backward compatibility -- All changes include proper error handling -- Installation now fails gracefully with clear error messages -- Compat package removal is more aggressive to handle edge cases