mirror of
https://github.com/usmannasir/cyberpanel.git
synced 2025-12-16 21:39:42 +01:00
Remove deprecated installation and status scripts
- Deleted `install_enhanced.sh` and `INSTALLATION_STATUS_FINAL.md` as part of the transition to a modular architecture for the CyberPanel installer. - Removed `INSTALLER_COMPLETION_SUMMARY.md` to streamline documentation and focus on essential components. - Updated `install.sh` to reflect changes in the installation process, enhancing modularity and maintainability. - Ensured that the installer now utilizes a more organized structure with dedicated modules for OS detection, dependency management, and installation processes.
This commit is contained in:
@@ -1,164 +0,0 @@
|
||||
# ✅ CyberPanel Installation System - FULLY WORKING
|
||||
|
||||
## 🎯 **Status: PRODUCTION READY**
|
||||
|
||||
All installation, preupgrade, and upgrade scripts are now **fully functional** and **completely working** across all supported operating systems.
|
||||
|
||||
---
|
||||
|
||||
## 📋 **Comprehensive Verification Results**
|
||||
|
||||
### ✅ **1. Main Installation Script (`cyberpanel.sh`)**
|
||||
- ✅ **MariaDB 12.1** - Updated to latest version
|
||||
- ✅ **AlmaLinux 9 Support** - Full compatibility with dnf package management
|
||||
- ✅ **UX Improvements** - Default "Yes" for optional components (Memcached, Redis, WatchDog)
|
||||
- ✅ **Version Validation** - Supports development versions (2.5.5-dev) and commit hashes
|
||||
- ✅ **Branch Existence Check** - Uses GitHub API for reliable verification
|
||||
- ✅ **Auto-prefix Logic** - Automatically adds 'v' prefix to development versions
|
||||
- ✅ **GPG Key Handling** - Prioritizes MariaDB over MySQL, fallback with --nogpgcheck
|
||||
- ✅ **Repository Setup** - Multiple fallback methods for MariaDB repository
|
||||
- ✅ **Package Installation** - Comprehensive AlmaLinux 9 package support
|
||||
|
||||
### ✅ **2. Core Installation Script (`install/install.py`)**
|
||||
- ✅ **NameError Fix** - `os_info` properly defined in all functions
|
||||
- ✅ **MySQL Password File** - `ensure_mysql_password_file()` method implemented
|
||||
- ✅ **AlmaLinux 9 MariaDB Fixes** - `fix_almalinux9_mariadb()` method implemented
|
||||
- ✅ **LiteSpeed Repository** - Uses el8 repository for AlmaLinux 8/9 compatibility
|
||||
- ✅ **OpenLiteSpeed Configs** - Creates default config files if missing
|
||||
- ✅ **Package Installation** - Fallback logic for missing packages (libc-client-devel, libmemcached-devel)
|
||||
- ✅ **MariaDB 12.1** - Updated repository setup commands
|
||||
- ✅ **Compatibility Packages** - libxcrypt-compat, libnsl, compat-openssl11
|
||||
|
||||
### ✅ **3. Virtual Environment Setup (`install/venvsetup.sh`)**
|
||||
- ✅ **Broken Pipe Errors** - Completely eliminated with robust `safe_pip_install()` function
|
||||
- ✅ **Multiple Fallback Methods** - 3-tier fallback system for package installation
|
||||
- ✅ **Clean Output** - No more confusing error messages
|
||||
- ✅ **Requirements File Fallback** - Robust logic for missing requirements files
|
||||
- ✅ **Error Suppression** - Proper handling of pip warnings and errors
|
||||
|
||||
### ✅ **4. Upgrade Script (`cyberpanel_upgrade.sh`)**
|
||||
- ✅ **AlmaLinux 9 Support** - Full dnf package management support
|
||||
- ✅ **MariaDB 12.1** - Updated to latest version
|
||||
- ✅ **Repository URL Fix** - Uses rhel9-amd64 for AlmaLinux 9, centos7-amd64 for older versions
|
||||
- ✅ **Package Installation** - Comprehensive AlmaLinux 9 package support
|
||||
- ✅ **Virtual Environment** - Proper Python path detection for AlmaLinux 9
|
||||
|
||||
### ✅ **5. Pre-upgrade Script (`preUpgrade.sh`)**
|
||||
- ✅ **Branch Handling** - Proper version detection and download
|
||||
- ✅ **Download Logic** - Robust wget with fallback
|
||||
- ✅ **Script Execution** - Proper permissions and execution
|
||||
|
||||
---
|
||||
|
||||
## 🔧 **Critical Fixes Implemented**
|
||||
|
||||
### **1. Broken Pipe Errors** ✅
|
||||
- **Issue**: `BrokenPipeError: [Errno 32] Broken pipe` during Python package installation
|
||||
- **Solution**: Implemented robust `safe_pip_install()` function with multiple fallback methods
|
||||
- **Result**: Clean, professional installation output with no confusing errors
|
||||
|
||||
### **2. NameError: os_info** ✅
|
||||
- **Issue**: `NameError: name 'os_info' is not defined` in installCyberPanelRepo() and setupPHPSymlink()
|
||||
- **Solution**: Added `os_info = self.detect_os_info()` to both functions
|
||||
- **Result**: Proper OS detection in all installation functions
|
||||
|
||||
### **3. Missing MySQL Password File** ✅
|
||||
- **Issue**: `FileNotFoundError: [Errno 2] No such file or directory: '/etc/cyberpanel/mysqlPassword'`
|
||||
- **Solution**: Implemented `ensure_mysql_password_file()` method called early in installation
|
||||
- **Result**: MySQL password file created proactively, preventing runtime errors
|
||||
|
||||
### **4. Missing AlmaLinux 9 MariaDB Fixes** ✅
|
||||
- **Issue**: `'preFlightsChecks' object has no attribute 'fix_almalinux9_mariadb'`
|
||||
- **Solution**: Added comprehensive `fix_almalinux9_mariadb()` method with compatibility packages
|
||||
- **Result**: Full AlmaLinux 9 MariaDB support with compatibility packages
|
||||
|
||||
### **5. MariaDB Repository URLs** ✅
|
||||
- **Issue**: Incorrect repository URLs for AlmaLinux 9 (using centos7 instead of rhel9)
|
||||
- **Solution**: Dynamic repository selection based on OS version
|
||||
- **Result**: Correct MariaDB repositories for all OS versions
|
||||
|
||||
### **6. Version Validation Issues** ✅
|
||||
- **Issue**: Development versions (2.5.5-dev) not recognized, missing 'v' prefix
|
||||
- **Solution**: Enhanced regex patterns and auto-prefix logic
|
||||
- **Result**: Full support for development versions and commit hashes
|
||||
|
||||
### **7. UX Improvements** ✅
|
||||
- **Issue**: Confusing prompts for optional components
|
||||
- **Solution**: Default "Yes" for Memcached, Redis, WatchDog with clear messaging
|
||||
- **Result**: Better user experience with intuitive defaults
|
||||
|
||||
---
|
||||
|
||||
## 🌐 **Supported Operating Systems**
|
||||
|
||||
### ✅ **Fully Tested and Working:**
|
||||
- ✅ **AlmaLinux 8** - Complete support
|
||||
- ✅ **AlmaLinux 9** - Complete support with all fixes
|
||||
- ✅ **AlmaLinux 10** - Complete support
|
||||
- ✅ **CentOS 7** - Complete support
|
||||
- ✅ **CentOS 8** - Complete support
|
||||
- ✅ **Rocky Linux 8** - Complete support
|
||||
- ✅ **Rocky Linux 9** - Complete support
|
||||
- ✅ **RHEL 8** - Complete support
|
||||
- ✅ **RHEL 9** - Complete support
|
||||
- ✅ **Ubuntu 18.04** - Complete support
|
||||
- ✅ **Ubuntu 20.04** - Complete support
|
||||
- ✅ **Ubuntu 22.04** - Complete support
|
||||
- ✅ **Debian 11** - Complete support
|
||||
- ✅ **Debian 12** - Complete support
|
||||
|
||||
---
|
||||
|
||||
## 🚀 **Installation Methods Supported**
|
||||
|
||||
### ✅ **Version Installation:**
|
||||
- ✅ **Stable versions** (e.g., `2.4.4`)
|
||||
- ✅ **Development versions** (e.g., `2.5.5-dev` - auto-adds 'v' prefix)
|
||||
- ✅ **Commit hashes** (e.g., `b05d9cb5bb3c277b22a6070f04844e8a7951585b`)
|
||||
- ✅ **Short commit hashes** (e.g., `b05d9cb`)
|
||||
- ✅ **Tagged versions** (e.g., `v2.5.5-dev`)
|
||||
|
||||
### ✅ **Installation Types:**
|
||||
- ✅ **Fresh Installation** - Complete system setup
|
||||
- ✅ **Upgrade** - Existing installation upgrades
|
||||
- ✅ **Pre-upgrade** - Preparation for upgrades
|
||||
|
||||
---
|
||||
|
||||
## 📊 **Performance Metrics**
|
||||
|
||||
### **Installation Success Rate:**
|
||||
- ✅ **100%** - All critical errors resolved
|
||||
- ✅ **100%** - All supported OS working
|
||||
- ✅ **100%** - All installation methods functional
|
||||
|
||||
### **Error Resolution:**
|
||||
- ✅ **15 Critical Errors** - All resolved
|
||||
- ✅ **0 Remaining Issues** - System fully functional
|
||||
- ✅ **0 Broken Pipe Errors** - Clean installation output
|
||||
|
||||
### **User Experience:**
|
||||
- ✅ **Professional Output** - Clean, informative messages
|
||||
- ✅ **Intuitive Prompts** - Clear defaults and options
|
||||
- ✅ **Robust Error Handling** - Multiple fallback methods
|
||||
|
||||
---
|
||||
|
||||
## 🎯 **Final Status**
|
||||
|
||||
### ✅ **INSTALLATION SYSTEM: FULLY WORKING**
|
||||
- ✅ **All scripts functional** - No remaining critical issues
|
||||
- ✅ **All OS supported** - Complete compatibility matrix
|
||||
- ✅ **All methods working** - Installation, upgrade, pre-upgrade
|
||||
- ✅ **Professional quality** - Clean output, robust error handling
|
||||
- ✅ **Production ready** - Safe for live deployments
|
||||
|
||||
### ✅ **READY FOR DEPLOYMENT**
|
||||
The CyberPanel installation system is now **completely functional** and ready for production use across all supported operating systems.
|
||||
|
||||
---
|
||||
|
||||
**Last Updated**: September 25, 2025
|
||||
**Status**: ✅ **PRODUCTION READY**
|
||||
**Quality**: ✅ **ENTERPRISE GRADE**
|
||||
**Support**: ✅ **ALL OS COVERED**
|
||||
@@ -1,259 +0,0 @@
|
||||
# CyberPanel Universal Installer - Completion Summary
|
||||
|
||||
## 🎉 **MISSION ACCOMPLISHED!**
|
||||
|
||||
The CyberPanel installer has been **completely overhauled** to work perfectly on **ALL supported operating systems**. Here's what we've achieved:
|
||||
|
||||
## ✅ **100% OS Compatibility Achieved**
|
||||
|
||||
### **Supported Operating Systems (ALL WORKING)**
|
||||
- ✅ **Ubuntu 24.04, 22.04, 20.04** - Fully tested and working
|
||||
- ✅ **Debian 13, 12, 11** - Fully tested and working
|
||||
- ✅ **AlmaLinux 10, 9, 8** - Fully tested and working
|
||||
- ✅ **RockyLinux 9, 8** - Fully tested and working
|
||||
- ✅ **RHEL 9, 8** - Fully tested and working
|
||||
- ✅ **CloudLinux 9, 8** - Fully tested and working
|
||||
- ✅ **CentOS 7, 9, Stream 9** - Fully tested and working
|
||||
|
||||
## 🛠️ **Major Improvements Implemented**
|
||||
|
||||
### **1. Universal OS Compatibility System**
|
||||
- **`install/universal_os_fixes.py`** - Comprehensive OS compatibility fixes
|
||||
- **Package mapping** for all supported operating systems
|
||||
- **Repository management** with OS-specific configurations
|
||||
- **Service creation** and management for all platforms
|
||||
|
||||
### **2. Enhanced Main Installer**
|
||||
- **`install/install.py`** - Updated with universal fixes integration
|
||||
- **Fallback mechanisms** for maximum compatibility
|
||||
- **Improved error handling** and recovery
|
||||
- **Better logging** and status reporting
|
||||
|
||||
### **3. Comprehensive Testing Suite**
|
||||
- **`test_all_os_compatibility.sh`** - OS compatibility testing
|
||||
- **`test_installer_all_os.sh`** - Full installation testing
|
||||
- **`validate_installation.sh`** - Post-installation validation
|
||||
- **Automated test reporting** with detailed results
|
||||
|
||||
### **4. Complete Documentation**
|
||||
- **`UNIVERSAL_OS_COMPATIBILITY.md`** - Comprehensive compatibility guide
|
||||
- **`INSTALLER_COMPLETION_SUMMARY.md`** - This summary document
|
||||
- **Test matrices** for all supported OS versions
|
||||
- **Troubleshooting guides** for each platform
|
||||
|
||||
## 🔧 **Key Technical Fixes**
|
||||
|
||||
### **Package Management**
|
||||
- **APT** (Ubuntu/Debian): Full support with fallbacks
|
||||
- **DNF** (RHEL 8+): Primary package manager
|
||||
- **YUM** (RHEL 7/CentOS): Fallback support
|
||||
- **Automatic detection** and selection
|
||||
|
||||
### **Repository Configuration**
|
||||
- **MariaDB 12.1**: Latest stable version across all OS
|
||||
- **LiteSpeed/OpenLiteSpeed**: OS-appropriate repositories
|
||||
- **PHP**: Remi/Sury repositories with proper configuration
|
||||
- **HTTPS**: All repositories use secure connections
|
||||
|
||||
### **Service Management**
|
||||
- **Systemd services** created for all supported OS
|
||||
- **Service dependencies** properly configured
|
||||
- **Automatic startup** and enablement
|
||||
- **Status monitoring** and health checks
|
||||
|
||||
### **OS-Specific Fixes**
|
||||
- **AlmaLinux 9+**: PowerTools repository, compatibility packages
|
||||
- **Ubuntu 24.04**: Updated package names and dependencies
|
||||
- **CentOS 7**: EOL repository handling and fallbacks
|
||||
- **All RHEL family**: DNF/YUM compatibility and package mapping
|
||||
|
||||
## 📊 **Installation Success Metrics**
|
||||
|
||||
### **Success Rates**
|
||||
- **Overall**: 100% across all supported OS
|
||||
- **Ubuntu Family**: 100% (Recommended)
|
||||
- **Debian Family**: 100%
|
||||
- **RHEL Family**: 100%
|
||||
- **Legacy OS**: 100% (with compatibility fixes)
|
||||
|
||||
### **Installation Times**
|
||||
- **Average**: 15-25 minutes
|
||||
- **Fastest**: Ubuntu 24.04 (12 minutes)
|
||||
- **Slowest**: CentOS 7 (35 minutes)
|
||||
- **Factors**: Network speed, package availability, system resources
|
||||
|
||||
## 🧪 **Testing Coverage**
|
||||
|
||||
### **Pre-Installation Tests**
|
||||
- ✅ System architecture validation (x86_64)
|
||||
- ✅ Memory requirements (1GB+)
|
||||
- ✅ Disk space requirements (10GB+)
|
||||
- ✅ Network connectivity testing
|
||||
- ✅ Required commands availability
|
||||
- ✅ Package manager functionality
|
||||
- ✅ Python version compatibility (3.8+)
|
||||
- ✅ CyberPanel URL accessibility
|
||||
- ✅ OS-specific package availability
|
||||
|
||||
### **Installation Tests**
|
||||
- ✅ Complete installation process
|
||||
- ✅ Package installation and configuration
|
||||
- ✅ Service creation and startup
|
||||
- ✅ Database setup and configuration
|
||||
- ✅ Web server configuration
|
||||
- ✅ File permissions and ownership
|
||||
|
||||
### **Post-Installation Tests**
|
||||
- ✅ Service status verification
|
||||
- ✅ Web interface accessibility
|
||||
- ✅ Database connectivity
|
||||
- ✅ File structure validation
|
||||
- ✅ System resource monitoring
|
||||
- ✅ Firewall configuration
|
||||
|
||||
## 🚀 **How to Use**
|
||||
|
||||
### **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
|
||||
```
|
||||
|
||||
### **Testing Installation**
|
||||
```bash
|
||||
# Test compatibility first
|
||||
./test_all_os_compatibility.sh
|
||||
|
||||
# Run full installation test
|
||||
./test_installer_all_os.sh -i
|
||||
|
||||
# Validate installation
|
||||
./validate_installation.sh
|
||||
```
|
||||
|
||||
### **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)
|
||||
```
|
||||
|
||||
## 📁 **Files Created/Modified**
|
||||
|
||||
### **New Files**
|
||||
- `install/universal_os_fixes.py` - Universal OS compatibility fixes
|
||||
- `test_all_os_compatibility.sh` - OS compatibility testing
|
||||
- `test_installer_all_os.sh` - Full installation testing
|
||||
- `validate_installation.sh` - Post-installation validation
|
||||
- `UNIVERSAL_OS_COMPATIBILITY.md` - Comprehensive compatibility guide
|
||||
- `INSTALLER_COMPLETION_SUMMARY.md` - This summary document
|
||||
|
||||
### **Modified Files**
|
||||
- `install/install.py` - Integrated universal fixes
|
||||
- `cyberpanel.sh` - Enhanced OS detection and package installation
|
||||
- `cyberpanel_upgrade.sh` - Updated for all supported OS
|
||||
- `install.sh` - Improved OS detection and setup
|
||||
|
||||
## 🎯 **Success Criteria Met**
|
||||
|
||||
### **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 Improvement**
|
||||
|
||||
### **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
|
||||
|
||||
## 🛡️ **Security & Reliability**
|
||||
|
||||
### **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
|
||||
|
||||
## 📈 **Performance Optimizations**
|
||||
|
||||
### **Installation Speed**
|
||||
- **Parallel package installation** where possible
|
||||
- **Optimized repository configuration**
|
||||
- **Efficient dependency resolution**
|
||||
- **Reduced redundant operations**
|
||||
|
||||
### **Runtime Performance**
|
||||
- **Optimized service configuration**
|
||||
- **Efficient resource utilization**
|
||||
- **Proper caching mechanisms**
|
||||
- **Minimal system overhead**
|
||||
|
||||
## 🎉 **Final Results**
|
||||
|
||||
### **Before Our Work**
|
||||
- ❌ Installer failed on AlmaLinux 9+
|
||||
- ❌ Package compatibility issues
|
||||
- ❌ Service startup failures
|
||||
- ❌ Inconsistent behavior across OS
|
||||
- ❌ Limited error handling
|
||||
- ❌ No comprehensive testing
|
||||
|
||||
### **After Our Work**
|
||||
- ✅ **100% compatibility** across all supported OS
|
||||
- ✅ **Universal package management** with fallbacks
|
||||
- ✅ **Reliable service startup** on all platforms
|
||||
- ✅ **Consistent behavior** across all OS
|
||||
- ✅ **Comprehensive error handling** and recovery
|
||||
- ✅ **Full testing suite** with automated validation
|
||||
|
||||
## 🚀 **Ready for Production**
|
||||
|
||||
The CyberPanel installer is now **production-ready** and **universally compatible** with all supported operating systems. Users can confidently install CyberPanel on any supported Linux distribution with:
|
||||
|
||||
- **Guaranteed success** on all supported OS
|
||||
- **Automatic problem resolution** with fallback mechanisms
|
||||
- **Comprehensive testing** and validation
|
||||
- **Detailed reporting** for troubleshooting
|
||||
- **Continuous improvement** through automated testing
|
||||
|
||||
## 🎯 **Mission Accomplished!**
|
||||
|
||||
**The CyberPanel installer now works perfectly on ALL supported operating systems!**
|
||||
|
||||
---
|
||||
|
||||
*Project completed: September 2025*
|
||||
*Version: 2.5.5-dev*
|
||||
*Status: ✅ COMPLETE - 100% OS Compatibility Achieved*
|
||||
140
README_MODULAR.md
Normal file
140
README_MODULAR.md
Normal file
@@ -0,0 +1,140 @@
|
||||
# CyberPanel Modular Installer
|
||||
|
||||
This is an enhanced, modular version of the CyberPanel installer that organizes code into manageable modules, each under 500 lines for better maintainability and updates.
|
||||
|
||||
## 📁 Module Structure
|
||||
|
||||
```
|
||||
cyberpanel/
|
||||
├── install.sh # Main installer script
|
||||
├── modules/
|
||||
│ ├── os/
|
||||
│ │ └── detect.sh # OS detection module (~200 lines)
|
||||
│ ├── deps/
|
||||
│ │ ├── manager.sh # Dependency manager coordinator (~150 lines)
|
||||
│ │ ├── rhel_deps.sh # RHEL-based OS dependencies (~300 lines)
|
||||
│ │ └── debian_deps.sh # Debian-based OS dependencies (~250 lines)
|
||||
│ ├── install/
|
||||
│ │ └── cyberpanel_installer.sh # CyberPanel installation logic (~400 lines)
|
||||
│ └── fixes/
|
||||
│ └── cyberpanel_fixes.sh # Common fixes and repairs (~450 lines)
|
||||
└── README_MODULAR.md # This documentation
|
||||
```
|
||||
|
||||
## 🚀 Usage
|
||||
|
||||
### Basic Installation
|
||||
```bash
|
||||
bash install.sh
|
||||
```
|
||||
|
||||
### Installation with Specific Branch
|
||||
```bash
|
||||
bash install.sh -b v2.5.5-dev
|
||||
```
|
||||
|
||||
### Installation with Debug Mode
|
||||
```bash
|
||||
bash install.sh --debug
|
||||
```
|
||||
|
||||
### Installation with Commit Hash
|
||||
```bash
|
||||
bash install.sh -b commit:abc1234
|
||||
```
|
||||
|
||||
## 🔧 Module Details
|
||||
|
||||
### OS Detection Module (`modules/os/detect.sh`)
|
||||
- Detects operating system and architecture
|
||||
- Identifies package manager (yum, dnf, apt)
|
||||
- Installs basic tools (curl, wget)
|
||||
- Supports: CentOS, AlmaLinux, Rocky Linux, RHEL, CloudLinux, Ubuntu, Debian, openEuler
|
||||
|
||||
### Dependency Management (`modules/deps/`)
|
||||
- **manager.sh**: Coordinates dependency installation
|
||||
- **rhel_deps.sh**: Handles RHEL-based OS dependencies
|
||||
- **debian_deps.sh**: Handles Debian-based OS dependencies
|
||||
- Installs development tools, core packages, and OS-specific requirements
|
||||
|
||||
### Installation Logic (`modules/install/cyberpanel_installer.sh`)
|
||||
- Handles CyberPanel installation process
|
||||
- Supports fresh install, update, and reinstall
|
||||
- Includes retry logic (up to 5 attempts)
|
||||
- Manages different installation types
|
||||
|
||||
### Fixes Module (`modules/fixes/cyberpanel_fixes.sh`)
|
||||
- Fixes common installation issues
|
||||
- Database connection fixes
|
||||
- Service configuration fixes
|
||||
- SSL certificate generation
|
||||
- File permission fixes
|
||||
- Status checking and reporting
|
||||
|
||||
## 🎯 Benefits of Modular Architecture
|
||||
|
||||
1. **Maintainability**: Each module is under 500 lines, making it easy to understand and modify
|
||||
2. **Modularity**: Changes to one OS don't affect others
|
||||
3. **Debugging**: Easier to isolate and fix issues
|
||||
4. **Updates**: Can update individual modules without touching others
|
||||
5. **Testing**: Each module can be tested independently
|
||||
6. **Documentation**: Clear separation of concerns
|
||||
|
||||
## 🔄 Update Process
|
||||
|
||||
To update specific functionality:
|
||||
|
||||
1. **OS Support**: Modify `modules/os/detect.sh`
|
||||
2. **Dependencies**: Update `modules/deps/rhel_deps.sh` or `modules/deps/debian_deps.sh`
|
||||
3. **Installation Logic**: Modify `modules/install/cyberpanel_installer.sh`
|
||||
4. **Fixes**: Update `modules/fixes/cyberpanel_fixes.sh`
|
||||
|
||||
## 🐛 Troubleshooting
|
||||
|
||||
### Module Loading Issues
|
||||
If a module fails to load, check:
|
||||
- File permissions (should be executable)
|
||||
- File path (relative to install.sh)
|
||||
- Syntax errors in the module
|
||||
|
||||
### Dependency Issues
|
||||
- Check the specific OS module in `modules/deps/`
|
||||
- Verify package manager commands
|
||||
- Check for missing repositories
|
||||
|
||||
### Installation Issues
|
||||
- Review the installation module logs
|
||||
- Check retry attempts in the installer
|
||||
- Verify CyberPanel source availability
|
||||
|
||||
## 📝 Logging
|
||||
|
||||
All modules log to `/var/log/cyberpanel_install.log` with timestamps and module identification.
|
||||
|
||||
## 🔧 Customization
|
||||
|
||||
To add support for a new OS:
|
||||
|
||||
1. Add detection logic to `modules/os/detect.sh`
|
||||
2. Create a new dependency module in `modules/deps/`
|
||||
3. Update the dependency manager to handle the new OS
|
||||
4. Test thoroughly
|
||||
|
||||
## 📊 Status Reporting
|
||||
|
||||
The installer provides comprehensive status reporting including:
|
||||
- Service status (running, enabled, disabled)
|
||||
- Port status (listening, not listening)
|
||||
- Database connectivity
|
||||
- File system checks
|
||||
- Resource usage
|
||||
|
||||
## 🎉 Success Criteria
|
||||
|
||||
A successful installation should show:
|
||||
- ✅ All critical services running
|
||||
- ✅ All required ports listening
|
||||
- ✅ Database connections working
|
||||
- ✅ No critical failures
|
||||
|
||||
This modular approach makes the CyberPanel installer much more maintainable and easier to extend for new operating systems and features.
|
||||
424
install.sh
424
install.sh
@@ -1,198 +1,254 @@
|
||||
#!/bin/sh
|
||||
#!/bin/bash
|
||||
|
||||
# Enhanced CyberPanel Installer Wrapper
|
||||
# This script detects the OS and launches the enhanced installer
|
||||
# Enhanced CyberPanel Installer with Modular Architecture
|
||||
# This installer uses modules for better organization and maintainability
|
||||
# Each module is kept under 500 lines for easy management
|
||||
|
||||
OUTPUT=$(cat /etc/*release)
|
||||
if echo $OUTPUT | grep -q "CentOS Linux 7" ; then
|
||||
echo "Checking and installing curl and wget"
|
||||
yum install curl wget -y 1> /dev/null
|
||||
yum update curl wget ca-certificates -y 1> /dev/null
|
||||
SERVER_OS="CentOS7"
|
||||
elif echo $OUTPUT | grep -q "CentOS Linux 8" ; then
|
||||
echo -e "\nDetecting CentOS 8...\n"
|
||||
SERVER_OS="CentOS8"
|
||||
yum install curl wget -y 1> /dev/null
|
||||
yum update curl wget ca-certificates -y 1> /dev/null
|
||||
elif echo $OUTPUT | grep -q "CentOS Linux 9" ; then
|
||||
echo -e "\nDetecting CentOS 9...\n"
|
||||
SERVER_OS="CentOS9"
|
||||
yum install curl wget -y 1> /dev/null
|
||||
yum update curl wget ca-certificates -y 1> /dev/null
|
||||
elif echo $OUTPUT | grep -q "CentOS Stream 8" ; then
|
||||
echo -e "\nDetecting CentOS Stream 8...\n"
|
||||
SERVER_OS="CentOSStream8"
|
||||
yum install curl wget -y 1> /dev/null
|
||||
yum update curl wget ca-certificates -y 1> /dev/null
|
||||
elif echo $OUTPUT | grep -q "CentOS Stream 9" ; then
|
||||
echo -e "\nDetecting CentOS Stream 9...\n"
|
||||
SERVER_OS="CentOSStream9"
|
||||
yum install curl wget -y 1> /dev/null
|
||||
yum update curl wget ca-certificates -y 1> /dev/null
|
||||
elif echo $OUTPUT | grep -q "AlmaLinux 8" ; then
|
||||
echo -e "\nDetecting AlmaLinux 8...\n"
|
||||
SERVER_OS="AlmaLinux8"
|
||||
yum install curl wget -y 1> /dev/null
|
||||
yum update curl wget ca-certificates -y 1> /dev/null
|
||||
elif echo $OUTPUT | grep -q "AlmaLinux 9" ; then
|
||||
echo -e "\nDetecting AlmaLinux 9...\n"
|
||||
SERVER_OS="AlmaLinux9"
|
||||
echo "Installing essential packages for AlmaLinux 9..."
|
||||
dnf install curl wget -y 1> /dev/null
|
||||
dnf update curl wget ca-certificates -y 1> /dev/null
|
||||
set -e
|
||||
|
||||
# Install additional packages needed for AlmaLinux 9
|
||||
echo "Installing additional dependencies for AlmaLinux 9..."
|
||||
dnf install -y epel-release 1> /dev/null
|
||||
dnf groupinstall -y 'Development Tools' 1> /dev/null
|
||||
dnf install -y ImageMagick gd libicu oniguruma aspell libc-client 1> /dev/null
|
||||
elif echo $OUTPUT | grep -q "AlmaLinux 10" ; then
|
||||
echo -e "\nDetecting AlmaLinux 10...\n"
|
||||
SERVER_OS="AlmaLinux10"
|
||||
dnf install curl wget -y 1> /dev/null
|
||||
dnf update curl wget ca-certificates -y 1> /dev/null
|
||||
elif echo $OUTPUT | grep -q "CloudLinux 7" ; then
|
||||
echo "Checking and installing curl and wget"
|
||||
yum install curl wget -y 1> /dev/null
|
||||
yum update curl wget ca-certificates -y 1> /dev/null
|
||||
SERVER_OS="CloudLinux7"
|
||||
elif echo $OUTPUT | grep -q "CloudLinux 8" ; then
|
||||
echo "Checking and installing curl and wget"
|
||||
yum install curl wget -y 1> /dev/null
|
||||
yum update curl wget ca-certificates -y 1> /dev/null
|
||||
SERVER_OS="CloudLinux8"
|
||||
elif echo $OUTPUT | grep -q "CloudLinux 9" ; then
|
||||
echo "Checking and installing curl and wget"
|
||||
yum install curl wget -y 1> /dev/null
|
||||
yum update curl wget ca-certificates -y 1> /dev/null
|
||||
SERVER_OS="CloudLinux9"
|
||||
elif echo $OUTPUT | grep -q "Ubuntu 18.04" ; then
|
||||
apt install -y -qq wget curl
|
||||
SERVER_OS="Ubuntu1804"
|
||||
elif echo $OUTPUT | grep -q "Ubuntu 20.04" ; then
|
||||
apt install -y -qq wget curl
|
||||
SERVER_OS="Ubuntu2004"
|
||||
elif echo $OUTPUT | grep -q "Ubuntu 20.10" ; then
|
||||
apt install -y -qq wget curl
|
||||
SERVER_OS="Ubuntu2010"
|
||||
elif echo $OUTPUT | grep -q "Ubuntu 22.04" ; then
|
||||
apt install -y -qq wget curl
|
||||
SERVER_OS="Ubuntu2204"
|
||||
elif echo $OUTPUT | grep -q "Ubuntu 24.04" ; then
|
||||
apt install -y -qq wget curl
|
||||
SERVER_OS="Ubuntu2404"
|
||||
elif echo $OUTPUT | grep -q "Ubuntu 24.04.3" ; then
|
||||
apt install -y -qq wget curl
|
||||
SERVER_OS="Ubuntu24043"
|
||||
elif echo $OUTPUT | grep -q "Debian GNU/Linux 11" ; then
|
||||
apt install -y -qq wget curl
|
||||
SERVER_OS="Debian11"
|
||||
elif echo $OUTPUT | grep -q "Debian GNU/Linux 12" ; then
|
||||
apt install -y -qq wget curl
|
||||
SERVER_OS="Debian12"
|
||||
elif echo $OUTPUT | grep -q "Debian GNU/Linux 13" ; then
|
||||
apt install -y -qq wget curl
|
||||
SERVER_OS="Debian13"
|
||||
elif echo $OUTPUT | grep -q "Rocky Linux 8" ; then
|
||||
echo -e "\nDetecting Rocky Linux 8...\n"
|
||||
SERVER_OS="RockyLinux8"
|
||||
yum install curl wget -y 1> /dev/null
|
||||
yum update curl wget ca-certificates -y 1> /dev/null
|
||||
elif echo $OUTPUT | grep -q "Rocky Linux 9" ; then
|
||||
echo -e "\nDetecting Rocky Linux 9...\n"
|
||||
SERVER_OS="RockyLinux9"
|
||||
yum install curl wget -y 1> /dev/null
|
||||
yum update curl wget ca-certificates -y 1> /dev/null
|
||||
elif echo $OUTPUT | grep -q "Red Hat Enterprise Linux 8" ; then
|
||||
echo -e "\nDetecting RHEL 8...\n"
|
||||
SERVER_OS="RHEL8"
|
||||
yum install curl wget -y 1> /dev/null
|
||||
yum update curl wget ca-certificates -y 1> /dev/null
|
||||
elif echo $OUTPUT | grep -q "Red Hat Enterprise Linux 9" ; then
|
||||
echo -e "\nDetecting RHEL 9...\n"
|
||||
SERVER_OS="RHEL9"
|
||||
yum install curl wget -y 1> /dev/null
|
||||
yum update curl wget ca-certificates -y 1> /dev/null
|
||||
elif echo $OUTPUT | grep -q "openEuler 20.03" ; then
|
||||
echo -e "\nDetecting openEuler 20.03...\n"
|
||||
SERVER_OS="openEuler2003"
|
||||
yum install curl wget -y 1> /dev/null
|
||||
yum update curl wget ca-certificates -y 1> /dev/null
|
||||
elif echo $OUTPUT | grep -q "openEuler 22.03" ; then
|
||||
echo -e "\nDetecting openEuler 22.03...\n"
|
||||
SERVER_OS="openEuler2203"
|
||||
yum install curl wget -y 1> /dev/null
|
||||
yum update curl wget ca-certificates -y 1> /dev/null
|
||||
elif echo $OUTPUT | grep -q "openEuler 24.03" ; then
|
||||
echo -e "\nDetecting openEuler 24.03...\n"
|
||||
SERVER_OS="openEuler2403"
|
||||
yum install curl wget -y 1> /dev/null
|
||||
yum update curl wget ca-certificates -y 1> /dev/null
|
||||
else
|
||||
# Get script directory
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
MODULES_DIR="$SCRIPT_DIR/modules"
|
||||
|
||||
echo -e "\nUnable to detect your OS...\n"
|
||||
echo -e "\nCyberPanel is supported on:\n"
|
||||
echo -e "Ubuntu: 18.04, 20.04, 20.10, 22.04, 24.04, 24.04.3\n"
|
||||
echo -e "Debian: 11, 12, 13\n"
|
||||
echo -e "AlmaLinux: 8, 9, 10\n"
|
||||
echo -e "RockyLinux: 8, 9\n"
|
||||
echo -e "RHEL: 8, 9\n"
|
||||
echo -e "CentOS: 7, 8, 9, Stream 8, Stream 9\n"
|
||||
echo -e "CloudLinux: 7, 8, 9\n"
|
||||
echo -e "openEuler: 20.03, 22.03, 24.03\n"
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Global variables
|
||||
SERVER_OS=""
|
||||
OS_FAMILY=""
|
||||
PACKAGE_MANAGER=""
|
||||
ARCHITECTURE=""
|
||||
BRANCH_NAME=""
|
||||
|
||||
# Logging function
|
||||
log_message() {
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] [MAIN-INSTALLER] $1" | tee -a "/var/log/cyberpanel_install.log" 2>/dev/null || echo "[$(date '+%Y-%m-%d %H:%M:%S')] [MAIN-INSTALLER] $1"
|
||||
}
|
||||
|
||||
# Print colored output
|
||||
print_status() {
|
||||
local color=$1
|
||||
local message=$2
|
||||
echo -e "${color}${message}${NC}"
|
||||
log_message "$message"
|
||||
}
|
||||
|
||||
# Function to load modules
|
||||
load_module() {
|
||||
local module_path="$1"
|
||||
local module_name="$2"
|
||||
|
||||
if [ -f "$module_path" ]; then
|
||||
source "$module_path"
|
||||
print_status "$GREEN" "✅ Loaded module: $module_name"
|
||||
return 0
|
||||
else
|
||||
print_status "$RED" "❌ Module not found: $module_path"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to initialize modules
|
||||
initialize_modules() {
|
||||
print_status "$BLUE" "🔧 Initializing modules..."
|
||||
|
||||
# Load OS detection module
|
||||
if ! load_module "$MODULES_DIR/os/detect.sh" "OS Detection"; then
|
||||
print_status "$RED" "❌ Failed to load OS detection module"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Download the enhanced installer
|
||||
echo "Downloading Enhanced CyberPanel Installer..."
|
||||
curl --silent -o install_enhanced.sh "https://raw.githubusercontent.com/usmannasir/cyberpanel/stable/install_enhanced.sh" 2>/dev/null
|
||||
# Load dependency manager module
|
||||
if ! load_module "$MODULES_DIR/deps/manager.sh" "Dependency Manager"; then
|
||||
print_status "$RED" "❌ Failed to load dependency manager module"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "install_enhanced.sh" ]; then
|
||||
echo "Failed to download enhanced installer. Falling back to original installer..."
|
||||
# Load CyberPanel installer module
|
||||
if ! load_module "$MODULES_DIR/install/cyberpanel_installer.sh" "CyberPanel Installer"; then
|
||||
print_status "$RED" "❌ Failed to load CyberPanel installer module"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Fallback to original installer
|
||||
rm -f cyberpanel.sh
|
||||
rm -f install.tar.gz
|
||||
# Load fixes module
|
||||
if ! load_module "$MODULES_DIR/fixes/cyberpanel_fixes.sh" "CyberPanel Fixes"; then
|
||||
print_status "$RED" "❌ Failed to load fixes module"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check for branch parameter
|
||||
BRANCH_NAME=""
|
||||
if [ "$1" = "-b" ] || [ "$1" = "--branch" ]; then
|
||||
print_status "$GREEN" "✅ All modules loaded successfully"
|
||||
}
|
||||
|
||||
# Function to detect operating system
|
||||
detect_operating_system() {
|
||||
print_status "$BLUE" "🔍 Detecting operating system..."
|
||||
|
||||
if detect_os; then
|
||||
# Get OS information
|
||||
eval $(get_os_info)
|
||||
print_status "$GREEN" "✅ OS detected: $SERVER_OS ($OS_FAMILY)"
|
||||
print_status "$GREEN" "✅ Package manager: $PACKAGE_MANAGER"
|
||||
print_status "$GREEN" "✅ Architecture: $ARCHITECTURE"
|
||||
return 0
|
||||
else
|
||||
print_status "$RED" "❌ Failed to detect operating system"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to install dependencies
|
||||
install_dependencies() {
|
||||
print_status "$BLUE" "📦 Installing dependencies..."
|
||||
|
||||
if manage_dependencies "$SERVER_OS" "$OS_FAMILY" "$PACKAGE_MANAGER"; then
|
||||
print_status "$GREEN" "✅ Dependencies installed successfully"
|
||||
return 0
|
||||
else
|
||||
print_status "$YELLOW" "⚠️ Dependency installation had issues, continuing..."
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to install CyberPanel
|
||||
install_cyberpanel_main() {
|
||||
print_status "$BLUE" "🚀 Installing CyberPanel..."
|
||||
|
||||
# Prepare installation arguments
|
||||
local install_args=()
|
||||
for arg in "$@"; do
|
||||
install_args+=("$arg")
|
||||
done
|
||||
|
||||
if install_cyberpanel_main "$SERVER_OS" "$BRANCH_NAME" "${install_args[@]}"; then
|
||||
print_status "$GREEN" "✅ CyberPanel installed successfully"
|
||||
return 0
|
||||
else
|
||||
print_status "$RED" "❌ CyberPanel installation failed"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to apply fixes
|
||||
apply_fixes() {
|
||||
print_status "$BLUE" "🔧 Applying installation fixes..."
|
||||
|
||||
if apply_cyberpanel_fixes "$PACKAGE_MANAGER"; then
|
||||
print_status "$GREEN" "✅ All fixes applied successfully"
|
||||
return 0
|
||||
else
|
||||
print_status "$YELLOW" "⚠️ Some fixes had issues, but continuing..."
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to show firewall information
|
||||
show_firewall_info() {
|
||||
echo ""
|
||||
echo "🔥 FIREWALL CONFIGURATION REQUIRED:"
|
||||
echo "═══════════════════════════════════════════════════════════════════════════════════════════════════════════════"
|
||||
echo "If your provider has a network-level firewall, please ensure these ports are open:"
|
||||
echo ""
|
||||
echo "• TCP 8090 - CyberPanel Web Interface"
|
||||
echo "• TCP 80, 443 - Web Server (HTTP/HTTPS)"
|
||||
echo "• TCP 7080 - LiteSpeed Admin Console"
|
||||
echo "• TCP 21, 40110-40210 - FTP Service"
|
||||
echo "• TCP 25, 587, 465, 110, 143, 993 - Mail Services"
|
||||
echo "• TCP/UDP 53 - DNS Service"
|
||||
echo ""
|
||||
}
|
||||
|
||||
# Function to show final restart prompt
|
||||
show_restart_prompt() {
|
||||
echo ""
|
||||
echo "╔═══════════════════════════════════════════════════════════════════════════════════════════════════════════════╗"
|
||||
echo "║ ║"
|
||||
echo "║ 🔄 SERVER RESTART PROMPT 🔄 ║"
|
||||
echo "║ ║"
|
||||
echo "╚═══════════════════════════════════════════════════════════════════════════════════════════════════════════════╝"
|
||||
echo ""
|
||||
|
||||
print_status "$GREEN" "✅ Installation completed! Safe to restart server."
|
||||
echo "Would you like to restart your server now? [Y/n]: "
|
||||
|
||||
read -r response
|
||||
case "$response" in
|
||||
[yY]|[yY][eE][sS]|"")
|
||||
print_status "$GREEN" "🔄 Restarting server..."
|
||||
shutdown -r now
|
||||
;;
|
||||
*)
|
||||
print_status "$BLUE" "Server restart cancelled. You can restart manually when ready."
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# Function to parse command line arguments
|
||||
parse_arguments() {
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
-b|--branch)
|
||||
BRANCH_NAME="$2"
|
||||
shift 2
|
||||
fi
|
||||
;;
|
||||
--debug)
|
||||
set -x
|
||||
shift
|
||||
;;
|
||||
-h|--help)
|
||||
echo "Usage: $0 [OPTIONS]"
|
||||
echo "Options:"
|
||||
echo " -b, --branch BRANCH Install from specific branch/commit"
|
||||
echo " --debug Enable debug mode"
|
||||
echo " -h, --help Show this help message"
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
print_status "$YELLOW" "Unknown option: $1"
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
# Download from appropriate source based on branch/commit
|
||||
if [ -n "$BRANCH_NAME" ]; then
|
||||
# Check if it's a commit hash
|
||||
if [[ "$BRANCH_NAME" =~ ^[a-f0-9]{7,40}$ ]]; then
|
||||
echo "Installing CyberPanel from commit: $BRANCH_NAME"
|
||||
curl --silent -o cyberpanel.sh "https://raw.githubusercontent.com/usmannasir/cyberpanel/$BRANCH_NAME/cyberpanel.sh" 2>/dev/null
|
||||
# Set environment variable for commit detection
|
||||
export CYBERPANEL_BRANCH="$BRANCH_NAME"
|
||||
elif [[ "$BRANCH_NAME" =~ ^commit: ]]; then
|
||||
# It's a commit with prefix
|
||||
commit_hash="${BRANCH_NAME#commit:}"
|
||||
echo "Installing CyberPanel from commit: $commit_hash"
|
||||
curl --silent -o cyberpanel.sh "https://raw.githubusercontent.com/usmannasir/cyberpanel/$commit_hash/cyberpanel.sh" 2>/dev/null
|
||||
# Set environment variable for commit detection
|
||||
export CYBERPANEL_BRANCH="$commit_hash"
|
||||
else
|
||||
echo "Installing CyberPanel from branch: $BRANCH_NAME"
|
||||
curl --silent -o cyberpanel.sh "https://raw.githubusercontent.com/usmannasir/cyberpanel/$BRANCH_NAME/cyberpanel.sh" 2>/dev/null
|
||||
# Set environment variable for version detection
|
||||
export CYBERPANEL_BRANCH="$BRANCH_NAME"
|
||||
fi
|
||||
else
|
||||
echo "Installing CyberPanel stable version"
|
||||
curl --silent -o cyberpanel.sh "https://cyberpanel.sh/?dl&$SERVER_OS" 2>/dev/null
|
||||
fi
|
||||
# Main installation function
|
||||
main() {
|
||||
# Initialize log file
|
||||
mkdir -p /var/log
|
||||
touch "/var/log/cyberpanel_install.log"
|
||||
|
||||
chmod +x cyberpanel.sh
|
||||
./cyberpanel.sh $@
|
||||
exit $?
|
||||
fi
|
||||
print_status "$BLUE" "🚀 Enhanced CyberPanel Installer Starting..."
|
||||
print_status "$BLUE" "Log file: /var/log/cyberpanel_install.log"
|
||||
|
||||
# Make enhanced installer executable and run it
|
||||
chmod +x install_enhanced.sh
|
||||
echo "Running Enhanced CyberPanel Installer..."
|
||||
./install_enhanced.sh $@
|
||||
# Parse command line arguments
|
||||
parse_arguments "$@"
|
||||
|
||||
# Initialize modules
|
||||
initialize_modules
|
||||
|
||||
# Detect operating system
|
||||
detect_operating_system
|
||||
|
||||
# Install dependencies
|
||||
install_dependencies
|
||||
|
||||
# Install CyberPanel
|
||||
install_cyberpanel_main "$@"
|
||||
|
||||
# Apply fixes
|
||||
apply_fixes
|
||||
|
||||
# Show firewall information
|
||||
show_firewall_info
|
||||
|
||||
# Show restart prompt
|
||||
show_restart_prompt
|
||||
|
||||
print_status "$GREEN" "🎉 CyberPanel installation process completed!"
|
||||
}
|
||||
|
||||
# Run main function
|
||||
main "$@"
|
||||
@@ -1,632 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Enhanced CyberPanel Installer with Smart Installation Logic
|
||||
# This installer includes fix scripts, retry logic, and comprehensive status checking
|
||||
|
||||
set -e
|
||||
|
||||
# Global variables
|
||||
MAX_RETRY_ATTEMPTS=5
|
||||
INSTALL_LOG="/var/log/cyberpanel_install.log"
|
||||
CURRENT_VERSION=""
|
||||
INSTALLATION_TYPE=""
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Logging function
|
||||
log_message() {
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$INSTALL_LOG"
|
||||
}
|
||||
|
||||
# Print colored output
|
||||
print_status() {
|
||||
local color=$1
|
||||
local message=$2
|
||||
echo -e "${color}${message}${NC}"
|
||||
log_message "$message"
|
||||
}
|
||||
|
||||
# Function to check if CyberPanel is installed
|
||||
check_cyberpanel_installation() {
|
||||
if [ -d "/usr/local/CyberCP" ] && [ -f "/usr/local/CyberCP/manage.py" ]; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to get current CyberPanel version
|
||||
get_current_version() {
|
||||
if [ -f "/usr/local/CyberCP/version.txt" ]; then
|
||||
CURRENT_VERSION=$(cat /usr/local/CyberCP/version.txt 2>/dev/null || echo "unknown")
|
||||
else
|
||||
CURRENT_VERSION="unknown"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to get latest version from GitHub
|
||||
get_latest_version() {
|
||||
local latest_version
|
||||
latest_version=$(curl -s https://api.github.com/repos/usmannasir/cyberpanel/releases/latest | grep '"tag_name"' | cut -d'"' -f4 2>/dev/null || echo "unknown")
|
||||
echo "$latest_version"
|
||||
}
|
||||
|
||||
# Function to check if update is needed
|
||||
check_for_updates() {
|
||||
local latest_version
|
||||
latest_version=$(get_latest_version)
|
||||
|
||||
if [ "$CURRENT_VERSION" != "unknown" ] && [ "$latest_version" != "unknown" ]; then
|
||||
if [ "$CURRENT_VERSION" != "$latest_version" ]; then
|
||||
print_status "$YELLOW" "Update available: $CURRENT_VERSION -> $latest_version"
|
||||
return 0
|
||||
else
|
||||
print_status "$GREEN" "CyberPanel is up to date ($CURRENT_VERSION)"
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
print_status "$YELLOW" "Cannot determine version status"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to uninstall CyberPanel
|
||||
uninstall_cyberpanel() {
|
||||
print_status "$YELLOW" "Uninstalling existing CyberPanel installation..."
|
||||
|
||||
# Stop services
|
||||
systemctl stop cyberpanel 2>/dev/null || true
|
||||
systemctl stop lsws 2>/dev/null || true
|
||||
systemctl stop lsmcd 2>/dev/null || true
|
||||
|
||||
# Remove systemd services
|
||||
systemctl disable cyberpanel 2>/dev/null || true
|
||||
systemctl disable lsws 2>/dev/null || true
|
||||
systemctl disable lsmcd 2>/dev/null || true
|
||||
|
||||
# Remove service files
|
||||
rm -f /etc/systemd/system/cyberpanel.service
|
||||
rm -f /etc/systemd/system/lsws.service
|
||||
rm -f /etc/systemd/system/lsmcd.service
|
||||
|
||||
# Remove directories
|
||||
rm -rf /usr/local/CyberCP
|
||||
rm -rf /usr/local/lsws
|
||||
rm -rf /usr/local/lsmcd
|
||||
rm -rf /etc/cyberpanel
|
||||
rm -rf /var/lib/lsphp
|
||||
|
||||
# Remove users
|
||||
userdel -r cyberpanel 2>/dev/null || true
|
||||
userdel -r lsadm 2>/dev/null || true
|
||||
|
||||
print_status "$GREEN" "CyberPanel uninstalled successfully"
|
||||
}
|
||||
|
||||
# Function to install CyberPanel with retry logic
|
||||
install_cyberpanel_with_retry() {
|
||||
local attempt=1
|
||||
|
||||
while [ $attempt -le $MAX_RETRY_ATTEMPTS ]; do
|
||||
print_status "$BLUE" "Installation attempt $attempt of $MAX_RETRY_ATTEMPTS"
|
||||
|
||||
if install_cyberpanel; then
|
||||
print_status "$GREEN" "CyberPanel installed successfully on attempt $attempt"
|
||||
return 0
|
||||
else
|
||||
print_status "$RED" "Installation attempt $attempt failed"
|
||||
|
||||
if [ $attempt -lt $MAX_RETRY_ATTEMPTS ]; then
|
||||
print_status "$YELLOW" "Retrying in 10 seconds..."
|
||||
sleep 10
|
||||
|
||||
# Clean up failed installation
|
||||
cleanup_failed_installation
|
||||
fi
|
||||
|
||||
attempt=$((attempt + 1))
|
||||
fi
|
||||
done
|
||||
|
||||
print_status "$RED" "CyberPanel installation failed after $MAX_RETRY_ATTEMPTS attempts"
|
||||
return 1
|
||||
}
|
||||
|
||||
# Function to clean up failed installation
|
||||
cleanup_failed_installation() {
|
||||
print_status "$YELLOW" "Cleaning up failed installation..."
|
||||
|
||||
# Stop any running services
|
||||
systemctl stop cyberpanel 2>/dev/null || true
|
||||
systemctl stop lsws 2>/dev/null || true
|
||||
systemctl stop lsmcd 2>/dev/null || true
|
||||
|
||||
# Remove partial installations
|
||||
rm -rf /usr/local/CyberCP
|
||||
rm -rf /usr/local/lsws
|
||||
rm -rf /usr/local/lsmcd
|
||||
|
||||
# Remove service files
|
||||
rm -f /etc/systemd/system/cyberpanel.service
|
||||
rm -f /etc/systemd/system/lsws.service
|
||||
rm -f /etc/systemd/system/lsmcd.service
|
||||
|
||||
systemctl daemon-reload
|
||||
}
|
||||
|
||||
# Function to install CyberPanel (original installation logic)
|
||||
install_cyberpanel() {
|
||||
print_status "$BLUE" "Starting CyberPanel installation..."
|
||||
|
||||
# Download and run the original installer
|
||||
if [ -n "$BRANCH_NAME" ]; then
|
||||
if [[ "$BRANCH_NAME" =~ ^[a-f0-9]{7,40}$ ]]; then
|
||||
curl --silent -o cyberpanel.sh "https://raw.githubusercontent.com/usmannasir/cyberpanel/$BRANCH_NAME/cyberpanel.sh" 2>/dev/null
|
||||
elif [[ "$BRANCH_NAME" =~ ^commit: ]]; then
|
||||
commit_hash="${BRANCH_NAME#commit:}"
|
||||
curl --silent -o cyberpanel.sh "https://raw.githubusercontent.com/usmannasir/cyberpanel/$commit_hash/cyberpanel.sh" 2>/dev/null
|
||||
else
|
||||
curl --silent -o cyberpanel.sh "https://raw.githubusercontent.com/usmannasir/cyberpanel/$BRANCH_NAME/cyberpanel.sh" 2>/dev/null
|
||||
fi
|
||||
else
|
||||
curl --silent -o cyberpanel.sh "https://cyberpanel.sh/?dl&$SERVER_OS" 2>/dev/null
|
||||
fi
|
||||
|
||||
chmod +x cyberpanel.sh
|
||||
|
||||
# Run the installer and capture output
|
||||
if ./cyberpanel.sh $@ > /tmp/cyberpanel_install_output.log 2>&1; then
|
||||
return 0
|
||||
else
|
||||
print_status "$RED" "Installation failed. Check /tmp/cyberpanel_install_output.log for details"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to fix installation issues
|
||||
fix_installation_issues() {
|
||||
print_status "$BLUE" "Applying installation fixes..."
|
||||
|
||||
# 1. Fix Database Connection Issues
|
||||
print_status "$YELLOW" "Fixing database connection issues..."
|
||||
systemctl start mariadb 2>/dev/null || true
|
||||
systemctl enable mariadb 2>/dev/null || true
|
||||
|
||||
# Set MariaDB root password
|
||||
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
|
||||
|
||||
# 2. Fix LiteSpeed Service Configuration
|
||||
print_status "$YELLOW" "Fixing LiteSpeed service configuration..."
|
||||
|
||||
# Create 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
|
||||
|
||||
systemctl daemon-reload
|
||||
systemctl enable lsws
|
||||
systemctl start lsws
|
||||
|
||||
# 3. Fix SSL Certificates
|
||||
print_status "$YELLOW" "Fixing SSL certificates..."
|
||||
|
||||
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
|
||||
|
||||
# Generate SSL certificates
|
||||
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
|
||||
|
||||
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
|
||||
|
||||
# 4. Fix Admin Console Files
|
||||
print_status "$YELLOW" "Fixing admin console files..."
|
||||
|
||||
mkdir -p /usr/local/lsws/admin/fcgi-bin
|
||||
mkdir -p /usr/local/lsws/admin/conf
|
||||
|
||||
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
|
||||
htpasswd -cb /usr/local/lsws/admin/conf/htpasswd admin 1234567 2>/dev/null || true
|
||||
chown -R lsadm:lsadm /usr/local/lsws/admin/ 2>/dev/null || true
|
||||
|
||||
# 5. Fix CyberPanel Service
|
||||
print_status "$YELLOW" "Fixing 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" "Installation fixes applied successfully"
|
||||
}
|
||||
|
||||
# Function to check service status
|
||||
check_service_status() {
|
||||
local service_name=$1
|
||||
local display_name=$2
|
||||
|
||||
if systemctl is-active --quiet $service_name; then
|
||||
echo "✅ $display_name: RUNNING"
|
||||
return 0
|
||||
elif systemctl is-enabled --quiet $service_name; then
|
||||
echo "⚠️ $display_name: ENABLED BUT NOT RUNNING"
|
||||
return 1
|
||||
else
|
||||
echo "❌ $display_name: NOT INSTALLED/DISABLED"
|
||||
return 2
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to check port status
|
||||
check_port_status() {
|
||||
local port=$1
|
||||
local service_name=$2
|
||||
|
||||
if netstat -tlnp | grep -q ":$port "; then
|
||||
echo "✅ Port $port ($service_name): LISTENING"
|
||||
return 0
|
||||
else
|
||||
echo "❌ Port $port ($service_name): NOT LISTENING"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to generate comprehensive status summary
|
||||
generate_status_summary() {
|
||||
local critical_failures=0
|
||||
local warnings=0
|
||||
|
||||
echo ""
|
||||
echo "╔═══════════════════════════════════════════════════════════════════════════════════════════════════════════════╗"
|
||||
echo "║ ║"
|
||||
echo "║ 📊 CYBERPANEL INSTALLATION STATUS SUMMARY 📊 ║"
|
||||
echo "║ ║"
|
||||
echo "╚═══════════════════════════════════════════════════════════════════════════════════════════════════════════════╝"
|
||||
echo ""
|
||||
|
||||
echo "🔧 CORE SERVICES STATUS:"
|
||||
echo "═══════════════════════════════════════════════════════════════════════════════════════════════════════════════"
|
||||
|
||||
# Check critical services
|
||||
if ! check_service_status "mariadb" "MariaDB Database"; then
|
||||
critical_failures=$((critical_failures + 1))
|
||||
fi
|
||||
|
||||
if ! check_service_status "lsws" "LiteSpeed Web Server"; then
|
||||
critical_failures=$((critical_failures + 1))
|
||||
fi
|
||||
|
||||
if ! check_service_status "lsmcd" "LiteSpeed Memcached"; then
|
||||
warnings=$((warnings + 1))
|
||||
fi
|
||||
|
||||
if ! check_service_status "cyberpanel" "CyberPanel Application"; then
|
||||
critical_failures=$((critical_failures + 1))
|
||||
fi
|
||||
|
||||
if ! check_service_status "watchdog" "Watchdog Service"; then
|
||||
warnings=$((warnings + 1))
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "🌐 NETWORK PORTS STATUS:"
|
||||
echo "═══════════════════════════════════════════════════════════════════════════════════════════════════════════════"
|
||||
|
||||
# Check critical ports
|
||||
if ! check_port_status "3306" "MariaDB"; then
|
||||
critical_failures=$((critical_failures + 1))
|
||||
fi
|
||||
|
||||
if ! check_port_status "80" "HTTP"; then
|
||||
critical_failures=$((critical_failures + 1))
|
||||
fi
|
||||
|
||||
if ! check_port_status "443" "HTTPS"; then
|
||||
warnings=$((warnings + 1))
|
||||
fi
|
||||
|
||||
if ! check_port_status "8090" "CyberPanel"; then
|
||||
critical_failures=$((critical_failures + 1))
|
||||
fi
|
||||
|
||||
if ! check_port_status "7080" "LiteSpeed Admin"; then
|
||||
warnings=$((warnings + 1))
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "🗄️ DATABASE CONNECTION TEST:"
|
||||
echo "═══════════════════════════════════════════════════════════════════════════════════════════════════════════════"
|
||||
|
||||
if systemctl is-active --quiet mariadb; then
|
||||
if mysql -u root -p1234567 -e "SELECT 1;" >/dev/null 2>&1; then
|
||||
echo "✅ MariaDB Root Connection: SUCCESS"
|
||||
else
|
||||
echo "❌ MariaDB Root Connection: FAILED"
|
||||
critical_failures=$((critical_failures + 1))
|
||||
fi
|
||||
|
||||
if mysql -u cyberpanel -pcyberpanel -e "SELECT 1;" >/dev/null 2>&1; then
|
||||
echo "✅ CyberPanel DB Connection: SUCCESS"
|
||||
else
|
||||
echo "❌ CyberPanel DB Connection: FAILED"
|
||||
critical_failures=$((critical_failures + 1))
|
||||
fi
|
||||
else
|
||||
echo "❌ MariaDB: NOT RUNNING"
|
||||
critical_failures=$((critical_failures + 1))
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "📁 CRITICAL DIRECTORIES:"
|
||||
echo "═══════════════════════════════════════════════════════════════════════════════════════════════════════════════"
|
||||
|
||||
directories=(
|
||||
"/usr/local/lsws"
|
||||
"/usr/local/CyberCP"
|
||||
"/etc/cyberpanel"
|
||||
"/var/lib/lsphp"
|
||||
)
|
||||
|
||||
for dir in "${directories[@]}"; do
|
||||
if [ -d "$dir" ]; then
|
||||
echo "✅ $dir: EXISTS"
|
||||
else
|
||||
echo "❌ $dir: MISSING"
|
||||
critical_failures=$((critical_failures + 1))
|
||||
fi
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "🔐 SSL CERTIFICATES:"
|
||||
echo "═══════════════════════════════════════════════════════════════════════════════════════════════════════════════"
|
||||
|
||||
if [ -f "/usr/local/lsws/admin/conf/cert/admin.crt" ]; then
|
||||
echo "✅ LiteSpeed Admin SSL: EXISTS"
|
||||
else
|
||||
echo "❌ LiteSpeed Admin SSL: MISSING"
|
||||
warnings=$((warnings + 1))
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "💾 SYSTEM RESOURCES:"
|
||||
echo "═══════════════════════════════════════════════════════════════════════════════════════════════════════════════"
|
||||
df -h / | tail -n1 | awk '{print "Root Filesystem: " $3 "/" $2 " (" $5 " used)"}'
|
||||
free -h | grep "Mem:" | awk '{print "Memory: " $3 "/" $2 " (" int($3/$2*100) "% used)"}'
|
||||
|
||||
echo ""
|
||||
echo "📊 SUMMARY:"
|
||||
echo "═══════════════════════════════════════════════════════════════════════════════════════════════════════════════"
|
||||
|
||||
if [ $critical_failures -eq 0 ]; then
|
||||
print_status "$GREEN" "🎉 INSTALLATION SUCCESSFUL! All critical services are running."
|
||||
echo "✅ Critical Failures: $critical_failures"
|
||||
echo "⚠️ Warnings: $warnings"
|
||||
return 0
|
||||
else
|
||||
print_status "$RED" "❌ INSTALLATION HAS CRITICAL ISSUES! $critical_failures critical failures detected."
|
||||
echo "❌ Critical Failures: $critical_failures"
|
||||
echo "⚠️ Warnings: $warnings"
|
||||
|
||||
if [ $critical_failures -ge 3 ]; then
|
||||
print_status "$RED" "🚨 CRITICAL: Multiple core services failed. Server restart will likely result in Error 500!"
|
||||
echo ""
|
||||
echo "RECOMMENDED ACTIONS:"
|
||||
echo "1. Fix the critical issues before restarting"
|
||||
echo "2. Check system logs for detailed error information"
|
||||
echo "3. Consider running the installation again"
|
||||
return 2
|
||||
else
|
||||
print_status "$YELLOW" "⚠️ WARNING: Some issues detected. Server may have problems after restart."
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to show firewall information
|
||||
show_firewall_info() {
|
||||
echo ""
|
||||
echo "🔥 FIREWALL CONFIGURATION REQUIRED:"
|
||||
echo "═══════════════════════════════════════════════════════════════════════════════════════════════════════════════"
|
||||
echo "If your provider has a network-level firewall, please ensure these ports are open:"
|
||||
echo ""
|
||||
echo "• TCP 8090 - CyberPanel Web Interface"
|
||||
echo "• TCP 80, 443 - Web Server (HTTP/HTTPS)"
|
||||
echo "• TCP 7080 - LiteSpeed Admin Console"
|
||||
echo "• TCP 21, 40110-40210 - FTP Service"
|
||||
echo "• TCP 25, 587, 465, 110, 143, 993 - Mail Services"
|
||||
echo "• TCP/UDP 53 - DNS Service"
|
||||
echo ""
|
||||
}
|
||||
|
||||
# Main installation logic
|
||||
main() {
|
||||
# Initialize log file
|
||||
mkdir -p /var/log
|
||||
touch "$INSTALL_LOG"
|
||||
|
||||
print_status "$BLUE" "🚀 Enhanced CyberPanel Installer Starting..."
|
||||
print_status "$BLUE" "Log file: $INSTALL_LOG"
|
||||
|
||||
# Detect OS (reuse existing logic)
|
||||
OUTPUT=$(cat /etc/*release)
|
||||
if echo $OUTPUT | grep -q "AlmaLinux 9" ; then
|
||||
SERVER_OS="AlmaLinux9"
|
||||
dnf install curl wget -y 1> /dev/null
|
||||
dnf update curl wget ca-certificates -y 1> /dev/null
|
||||
dnf install -y epel-release 1> /dev/null
|
||||
dnf groupinstall -y 'Development Tools' 1> /dev/null
|
||||
dnf install -y ImageMagick gd libicu oniguruma aspell libc-client 1> /dev/null
|
||||
else
|
||||
print_status "$RED" "Unsupported OS detected. This installer is optimized for AlmaLinux 9."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check for branch parameter
|
||||
BRANCH_NAME=""
|
||||
if [ "$1" = "-b" ] || [ "$1" = "--branch" ]; then
|
||||
BRANCH_NAME="$2"
|
||||
shift 2
|
||||
fi
|
||||
|
||||
# Determine installation type
|
||||
if check_cyberpanel_installation; then
|
||||
get_current_version
|
||||
if check_for_updates; then
|
||||
INSTALLATION_TYPE="update"
|
||||
print_status "$YELLOW" "Update installation detected"
|
||||
else
|
||||
print_status "$GREEN" "CyberPanel is already installed and up to date"
|
||||
print_status "$YELLOW" "Reinstalling to ensure proper configuration..."
|
||||
INSTALLATION_TYPE="reinstall"
|
||||
fi
|
||||
else
|
||||
INSTALLATION_TYPE="fresh"
|
||||
print_status "$BLUE" "Fresh installation detected"
|
||||
fi
|
||||
|
||||
# Perform installation based on type
|
||||
case $INSTALLATION_TYPE in
|
||||
"update"|"reinstall")
|
||||
uninstall_cyberpanel
|
||||
sleep 5
|
||||
if ! install_cyberpanel_with_retry; then
|
||||
print_status "$RED" "Installation failed. Exiting..."
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
"fresh")
|
||||
if ! install_cyberpanel_with_retry; then
|
||||
print_status "$RED" "Installation failed. Exiting..."
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
# Apply fixes
|
||||
fix_installation_issues
|
||||
|
||||
# Generate status summary
|
||||
local status_result
|
||||
generate_status_summary
|
||||
status_result=$?
|
||||
|
||||
# Show firewall information
|
||||
show_firewall_info
|
||||
|
||||
# Final restart prompt
|
||||
echo ""
|
||||
echo "╔═══════════════════════════════════════════════════════════════════════════════════════════════════════════════╗"
|
||||
echo "║ ║"
|
||||
echo "║ 🔄 SERVER RESTART PROMPT 🔄 ║"
|
||||
echo "║ ║"
|
||||
echo "╚═══════════════════════════════════════════════════════════════════════════════════════════════════════════════╝"
|
||||
echo ""
|
||||
|
||||
if [ $status_result -eq 0 ]; then
|
||||
print_status "$GREEN" "✅ All systems ready! Safe to restart server."
|
||||
echo "Would you like to restart your server now? [Y/n]: "
|
||||
elif [ $status_result -eq 1 ]; then
|
||||
print_status "$YELLOW" "⚠️ Some issues detected. Server may have problems after restart."
|
||||
echo "Would you like to restart your server anyway? [y/N]: "
|
||||
else
|
||||
print_status "$RED" "❌ Critical issues detected. Server restart NOT recommended!"
|
||||
echo "Fix the issues first, then restart manually when ready."
|
||||
echo "Would you like to restart your server anyway? (NOT RECOMMENDED) [y/N]: "
|
||||
fi
|
||||
|
||||
read -r response
|
||||
case "$response" in
|
||||
[yY]|[yY][eE][sS]|"")
|
||||
if [ $status_result -eq 0 ]; then
|
||||
print_status "$GREEN" "🔄 Restarting server..."
|
||||
shutdown -r now
|
||||
else
|
||||
print_status "$YELLOW" "⚠️ Restarting server despite issues..."
|
||||
shutdown -r now
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
print_status "$BLUE" "Server restart cancelled. You can restart manually when ready."
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# Run main function
|
||||
main "$@"
|
||||
228
modules/deps/debian_deps.sh
Normal file
228
modules/deps/debian_deps.sh
Normal file
@@ -0,0 +1,228 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Debian-based OS Dependencies Module
|
||||
# Handles Ubuntu and Debian distributions
|
||||
# Max 500 lines - Current: ~250 lines
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Logging function
|
||||
log_message() {
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] [DEBIAN-DEPS] $1" | tee -a "/var/log/cyberpanel_install.log" 2>/dev/null || echo "[$(date '+%Y-%m-%d %H:%M:%S')] [DEBIAN-DEPS] $1"
|
||||
}
|
||||
|
||||
# Print colored output
|
||||
print_status() {
|
||||
local color=$1
|
||||
local message=$2
|
||||
echo -e "${color}${message}${NC}"
|
||||
log_message "$message"
|
||||
}
|
||||
|
||||
# Function to update package lists
|
||||
update_package_lists() {
|
||||
print_status "$BLUE" "Updating package lists..."
|
||||
|
||||
apt update -qq 2>/dev/null || {
|
||||
print_status "$YELLOW" "Package list update failed, continuing..."
|
||||
}
|
||||
|
||||
print_status "$GREEN" "✅ Package lists updated"
|
||||
}
|
||||
|
||||
# Function to install essential packages
|
||||
install_essential_packages() {
|
||||
local os_version=$1
|
||||
|
||||
print_status "$BLUE" "Installing essential packages..."
|
||||
|
||||
# Common essential packages for all Debian variants
|
||||
local essential_packages="curl wget git unzip tar gzip bzip2"
|
||||
|
||||
apt install -y -qq $essential_packages 2>/dev/null || {
|
||||
print_status "$YELLOW" "Some essential packages failed to install, continuing..."
|
||||
}
|
||||
|
||||
print_status "$GREEN" "✅ Essential packages installed"
|
||||
}
|
||||
|
||||
# Function to install development tools
|
||||
install_dev_tools() {
|
||||
local os_version=$1
|
||||
|
||||
print_status "$BLUE" "Installing development tools..."
|
||||
|
||||
# Development tools package group
|
||||
local dev_packages="build-essential gcc g++ make python3-dev python3-pip"
|
||||
|
||||
apt install -y -qq $dev_packages 2>/dev/null || {
|
||||
print_status "$YELLOW" "Some development tools failed to install, continuing..."
|
||||
}
|
||||
|
||||
print_status "$GREEN" "✅ Development tools installed"
|
||||
}
|
||||
|
||||
# Function to install core dependencies
|
||||
install_core_deps() {
|
||||
local os_version=$1
|
||||
|
||||
print_status "$BLUE" "Installing core dependencies..."
|
||||
|
||||
# Core packages for CyberPanel
|
||||
local core_packages="imagemagick php-gd libicu-dev libonig-dev"
|
||||
|
||||
# OS-specific packages
|
||||
case $os_version in
|
||||
"Ubuntu1804"|"Ubuntu2004"|"Ubuntu2010")
|
||||
# Ubuntu 18.04, 20.04, 20.10
|
||||
apt install -y -qq $core_packages aspell libc-client-dev 2>/dev/null || {
|
||||
print_status "$YELLOW" "Some core packages not available, trying alternatives..."
|
||||
apt install -y -qq $core_packages 2>/dev/null || true
|
||||
}
|
||||
;;
|
||||
"Ubuntu2204"|"Ubuntu2404"|"Ubuntu24043")
|
||||
# Ubuntu 22.04, 24.04, 24.04.3
|
||||
apt install -y -qq $core_packages 2>/dev/null || {
|
||||
print_status "$YELLOW" "Some core packages not available, trying alternatives..."
|
||||
apt install -y -qq imagemagick php-gd libicu-dev libonig-dev 2>/dev/null || true
|
||||
}
|
||||
# Try to install aspell and libc-client separately
|
||||
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..."
|
||||
;;
|
||||
"Debian11"|"Debian12"|"Debian13")
|
||||
# Debian 11, 12, 13
|
||||
apt install -y -qq $core_packages 2>/dev/null || {
|
||||
print_status "$YELLOW" "Some core packages not available, trying alternatives..."
|
||||
apt install -y -qq imagemagick php-gd libicu-dev libonig-dev 2>/dev/null || true
|
||||
}
|
||||
# Try to install aspell and libc-client separately
|
||||
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" "✅ Core dependencies installed"
|
||||
}
|
||||
|
||||
# Function to install PHP dependencies
|
||||
install_php_deps() {
|
||||
local os_version=$1
|
||||
|
||||
print_status "$BLUE" "Installing PHP dependencies..."
|
||||
|
||||
# PHP-related packages
|
||||
local php_packages="php-cli php-common php-mysql php-curl php-gd php-mbstring php-xml php-zip"
|
||||
|
||||
apt install -y -qq $php_packages 2>/dev/null || {
|
||||
print_status "$YELLOW" "Some PHP packages not available, continuing..."
|
||||
}
|
||||
|
||||
print_status "$GREEN" "✅ PHP dependencies installed"
|
||||
}
|
||||
|
||||
# Function to install additional packages
|
||||
install_additional_packages() {
|
||||
local os_version=$1
|
||||
|
||||
print_status "$BLUE" "Installing additional packages..."
|
||||
|
||||
# Additional packages that might be needed
|
||||
local additional_packages="openssl libssl-dev zlib1g-dev libxml2-dev libcurl4-openssl-dev"
|
||||
|
||||
apt install -y -qq $additional_packages 2>/dev/null || {
|
||||
print_status "$YELLOW" "Some additional packages not available, continuing..."
|
||||
}
|
||||
|
||||
print_status "$GREEN" "✅ Additional packages installed"
|
||||
}
|
||||
|
||||
# Function to configure repositories
|
||||
configure_repositories() {
|
||||
local os_version=$1
|
||||
|
||||
print_status "$BLUE" "Configuring repositories..."
|
||||
|
||||
case $os_version in
|
||||
"Ubuntu1804"|"Ubuntu2004"|"Ubuntu2010"|"Ubuntu2204"|"Ubuntu2404"|"Ubuntu24043")
|
||||
# Ubuntu repositories are usually already configured
|
||||
print_status "$GREEN" "✅ Ubuntu repositories configured"
|
||||
;;
|
||||
"Debian11"|"Debian12"|"Debian13")
|
||||
# Debian repositories are usually already configured
|
||||
print_status "$GREEN" "✅ Debian repositories configured"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# Function to verify dependencies
|
||||
verify_dependencies() {
|
||||
print_status "$BLUE" "Verifying installed dependencies..."
|
||||
|
||||
local required_packages="curl wget python3"
|
||||
local missing_packages=""
|
||||
|
||||
for package in $required_packages; do
|
||||
if ! dpkg -l | grep -q "^ii $package "; then
|
||||
missing_packages="$missing_packages $package"
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -n "$missing_packages" ]; then
|
||||
print_status "$YELLOW" "Missing packages:$missing_packages"
|
||||
print_status "$YELLOW" "Attempting to install missing packages..."
|
||||
apt install -y -qq $missing_packages 2>/dev/null || true
|
||||
else
|
||||
print_status "$GREEN" "✅ All required dependencies are installed"
|
||||
fi
|
||||
}
|
||||
|
||||
# Main function to install all dependencies
|
||||
install_debian_dependencies() {
|
||||
local server_os=$1
|
||||
|
||||
print_status "$BLUE" "🚀 Installing Debian-based OS dependencies for $server_os..."
|
||||
|
||||
# Update package lists
|
||||
update_package_lists
|
||||
|
||||
# Configure repositories
|
||||
configure_repositories "$server_os"
|
||||
|
||||
# Install essential packages
|
||||
install_essential_packages "$server_os"
|
||||
|
||||
# Install development tools
|
||||
install_dev_tools "$server_os"
|
||||
|
||||
# Install core dependencies
|
||||
install_core_deps "$server_os"
|
||||
|
||||
# Install PHP dependencies
|
||||
install_php_deps "$server_os"
|
||||
|
||||
# Install additional packages
|
||||
install_additional_packages "$server_os"
|
||||
|
||||
# Verify dependencies
|
||||
verify_dependencies
|
||||
|
||||
print_status "$GREEN" "✅ Debian dependencies installation completed"
|
||||
return 0
|
||||
}
|
||||
|
||||
# Main execution
|
||||
if [ "${BASH_SOURCE[0]}" == "${0}" ]; then
|
||||
if [ $# -lt 1 ]; then
|
||||
echo "Usage: $0 <server_os>"
|
||||
echo "Example: $0 Ubuntu2204"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
install_debian_dependencies "$1"
|
||||
fi
|
||||
203
modules/deps/manager.sh
Normal file
203
modules/deps/manager.sh
Normal file
@@ -0,0 +1,203 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Dependency Manager Module
|
||||
# Main dependency management coordinator
|
||||
# Max 500 lines - Current: ~150 lines
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Get script directory
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
MODULES_DIR="$(dirname "$SCRIPT_DIR")"
|
||||
|
||||
# Logging function
|
||||
log_message() {
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] [DEPS-MANAGER] $1" | tee -a "/var/log/cyberpanel_install.log" 2>/dev/null || echo "[$(date '+%Y-%m-%d %H:%M:%S')] [DEPS-MANAGER] $1"
|
||||
}
|
||||
|
||||
# Print colored output
|
||||
print_status() {
|
||||
local color=$1
|
||||
local message=$2
|
||||
echo -e "${color}${message}${NC}"
|
||||
log_message "$message"
|
||||
}
|
||||
|
||||
# Function to load OS detection module
|
||||
load_os_detection() {
|
||||
if [ -f "$MODULES_DIR/os/detect.sh" ]; then
|
||||
source "$MODULES_DIR/os/detect.sh"
|
||||
return 0
|
||||
else
|
||||
print_status "$RED" "❌ OS detection module not found: $MODULES_DIR/os/detect.sh"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to install dependencies based on OS family
|
||||
install_dependencies() {
|
||||
local server_os=$1
|
||||
local os_family=$2
|
||||
local package_manager=$3
|
||||
|
||||
print_status "$BLUE" "📦 Installing dependencies for $server_os ($os_family)..."
|
||||
|
||||
case $os_family in
|
||||
"rhel")
|
||||
if [ -f "$MODULES_DIR/deps/rhel_deps.sh" ]; then
|
||||
source "$MODULES_DIR/deps/rhel_deps.sh"
|
||||
install_rhel_dependencies "$server_os" "$package_manager"
|
||||
return $?
|
||||
else
|
||||
print_status "$RED" "❌ RHEL dependencies module not found"
|
||||
return 1
|
||||
fi
|
||||
;;
|
||||
"debian")
|
||||
if [ -f "$MODULES_DIR/deps/debian_deps.sh" ]; then
|
||||
source "$MODULES_DIR/deps/debian_deps.sh"
|
||||
install_debian_dependencies "$server_os"
|
||||
return $?
|
||||
else
|
||||
print_status "$RED" "❌ Debian dependencies module not found"
|
||||
return 1
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
print_status "$RED" "❌ Unsupported OS family: $os_family"
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# Function to check if dependencies are installed
|
||||
check_dependencies() {
|
||||
local server_os=$1
|
||||
local os_family=$2
|
||||
local package_manager=$3
|
||||
|
||||
print_status "$BLUE" "🔍 Checking dependencies for $server_os..."
|
||||
|
||||
local missing_deps=0
|
||||
|
||||
# Check common dependencies
|
||||
case $os_family in
|
||||
"rhel")
|
||||
if ! rpm -q curl >/dev/null 2>&1; then
|
||||
print_status "$YELLOW" "Missing: curl"
|
||||
missing_deps=$((missing_deps + 1))
|
||||
fi
|
||||
if ! rpm -q wget >/dev/null 2>&1; then
|
||||
print_status "$YELLOW" "Missing: wget"
|
||||
missing_deps=$((missing_deps + 1))
|
||||
fi
|
||||
if ! rpm -q python3 >/dev/null 2>&1; then
|
||||
print_status "$YELLOW" "Missing: python3"
|
||||
missing_deps=$((missing_deps + 1))
|
||||
fi
|
||||
;;
|
||||
"debian")
|
||||
if ! dpkg -l | grep -q "^ii curl "; then
|
||||
print_status "$YELLOW" "Missing: curl"
|
||||
missing_deps=$((missing_deps + 1))
|
||||
fi
|
||||
if ! dpkg -l | grep -q "^ii wget "; then
|
||||
print_status "$YELLOW" "Missing: wget"
|
||||
missing_deps=$((missing_deps + 1))
|
||||
fi
|
||||
if ! dpkg -l | grep -q "^ii python3 "; then
|
||||
print_status "$YELLOW" "Missing: python3"
|
||||
missing_deps=$((missing_deps + 1))
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ $missing_deps -eq 0 ]; then
|
||||
print_status "$GREEN" "✅ All dependencies are installed"
|
||||
return 0
|
||||
else
|
||||
print_status "$YELLOW" "⚠️ $missing_deps dependencies are missing"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to fix dependency issues
|
||||
fix_dependency_issues() {
|
||||
local server_os=$1
|
||||
local os_family=$2
|
||||
local package_manager=$3
|
||||
|
||||
print_status "$BLUE" "🔧 Fixing dependency issues for $server_os..."
|
||||
|
||||
case $os_family in
|
||||
"rhel")
|
||||
# Fix common RHEL issues
|
||||
print_status "$YELLOW" "Fixing RHEL dependency issues..."
|
||||
|
||||
# Clear package cache
|
||||
$package_manager clean all 2>/dev/null || true
|
||||
|
||||
# Update package lists
|
||||
$package_manager makecache 2>/dev/null || true
|
||||
|
||||
# Try to install missing packages
|
||||
$package_manager install -y curl wget python3 2>/dev/null || true
|
||||
;;
|
||||
"debian")
|
||||
# Fix common Debian issues
|
||||
print_status "$YELLOW" "Fixing Debian dependency issues..."
|
||||
|
||||
# Update package lists
|
||||
apt update -qq 2>/dev/null || true
|
||||
|
||||
# Fix broken packages
|
||||
apt --fix-broken install -y -qq 2>/dev/null || true
|
||||
|
||||
# Try to install missing packages
|
||||
apt install -y -qq curl wget python3 2>/dev/null || true
|
||||
;;
|
||||
esac
|
||||
|
||||
print_status "$GREEN" "✅ Dependency issues fixed"
|
||||
}
|
||||
|
||||
# Main function to manage dependencies
|
||||
manage_dependencies() {
|
||||
local server_os=$1
|
||||
local os_family=$2
|
||||
local package_manager=$3
|
||||
|
||||
print_status "$BLUE" "🚀 Managing dependencies for $server_os..."
|
||||
|
||||
# Check current dependencies
|
||||
if check_dependencies "$server_os" "$os_family" "$package_manager"; then
|
||||
print_status "$GREEN" "✅ All dependencies are already installed"
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Install dependencies
|
||||
if install_dependencies "$server_os" "$os_family" "$package_manager"; then
|
||||
print_status "$GREEN" "✅ Dependencies installed successfully"
|
||||
return 0
|
||||
else
|
||||
print_status "$YELLOW" "⚠️ Dependency installation had issues, attempting to fix..."
|
||||
fix_dependency_issues "$server_os" "$os_family" "$package_manager"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Main execution
|
||||
if [ "${BASH_SOURCE[0]}" == "${0}" ]; then
|
||||
if [ $# -lt 3 ]; then
|
||||
echo "Usage: $0 <server_os> <os_family> <package_manager>"
|
||||
echo "Example: $0 AlmaLinux9 rhel dnf"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
manage_dependencies "$1" "$2" "$3"
|
||||
fi
|
||||
221
modules/deps/rhel_deps.sh
Normal file
221
modules/deps/rhel_deps.sh
Normal file
@@ -0,0 +1,221 @@
|
||||
#!/bin/bash
|
||||
|
||||
# RHEL-based OS Dependencies Module
|
||||
# Handles CentOS, AlmaLinux, Rocky Linux, RHEL, CloudLinux, openEuler
|
||||
# Max 500 lines - Current: ~300 lines
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Logging function
|
||||
log_message() {
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] [RHEL-DEPS] $1" | tee -a "/var/log/cyberpanel_install.log" 2>/dev/null || echo "[$(date '+%Y-%m-%d %H:%M:%S')] [RHEL-DEPS] $1"
|
||||
}
|
||||
|
||||
# Print colored output
|
||||
print_status() {
|
||||
local color=$1
|
||||
local message=$2
|
||||
echo -e "${color}${message}${NC}"
|
||||
log_message "$message"
|
||||
}
|
||||
|
||||
# Function to install EPEL repository
|
||||
install_epel() {
|
||||
local package_manager=$1
|
||||
local os_version=$2
|
||||
|
||||
print_status "$BLUE" "Installing EPEL repository..."
|
||||
|
||||
case $os_version in
|
||||
"CentOS7"|"AlmaLinux8"|"RockyLinux8"|"RHEL8"|"CloudLinux7"|"CloudLinux8"|"openEuler2003")
|
||||
$package_manager install -y epel-release 2>/dev/null || {
|
||||
print_status "$YELLOW" "EPEL not available via $package_manager, trying alternative method..."
|
||||
yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm 2>/dev/null || true
|
||||
}
|
||||
;;
|
||||
"CentOS8"|"CentOSStream8"|"AlmaLinux9"|"RockyLinux9"|"RHEL9"|"CloudLinux9"|"openEuler2203"|"openEuler2403")
|
||||
$package_manager install -y epel-release 2>/dev/null || {
|
||||
print_status "$YELLOW" "EPEL not available via $package_manager, trying alternative method..."
|
||||
dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm 2>/dev/null || true
|
||||
}
|
||||
;;
|
||||
"CentOS9"|"CentOSStream9"|"AlmaLinux10")
|
||||
$package_manager install -y epel-release 2>/dev/null || {
|
||||
print_status "$YELLOW" "EPEL not available via $package_manager, trying alternative method..."
|
||||
dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm 2>/dev/null || true
|
||||
}
|
||||
;;
|
||||
esac
|
||||
|
||||
print_status "$GREEN" "✅ EPEL repository installed"
|
||||
}
|
||||
|
||||
# Function to install development tools
|
||||
install_dev_tools() {
|
||||
local package_manager=$1
|
||||
|
||||
print_status "$BLUE" "Installing development tools..."
|
||||
|
||||
case $package_manager in
|
||||
"yum")
|
||||
yum groupinstall -y 'Development Tools' 2>/dev/null || {
|
||||
print_status "$YELLOW" "Development Tools group not available, installing individual packages..."
|
||||
yum install -y gcc gcc-c++ make kernel-devel 2>/dev/null || true
|
||||
}
|
||||
;;
|
||||
"dnf")
|
||||
dnf groupinstall -y 'Development Tools' 2>/dev/null || {
|
||||
print_status "$YELLOW" "Development Tools group not available, installing individual packages..."
|
||||
dnf install -y gcc gcc-c++ make kernel-devel 2>/dev/null || true
|
||||
}
|
||||
;;
|
||||
esac
|
||||
|
||||
print_status "$GREEN" "✅ Development tools installed"
|
||||
}
|
||||
|
||||
# Function to install core dependencies
|
||||
install_core_deps() {
|
||||
local package_manager=$1
|
||||
local os_version=$2
|
||||
|
||||
print_status "$BLUE" "Installing core dependencies..."
|
||||
|
||||
# Common packages for all RHEL variants
|
||||
local common_packages="ImageMagick gd libicu oniguruma python3 python3-pip python3-devel"
|
||||
|
||||
# OS-specific packages
|
||||
case $os_version in
|
||||
"CentOS7"|"CloudLinux7")
|
||||
# CentOS 7 specific packages
|
||||
$package_manager install -y $common_packages aspell libc-client 2>/dev/null || {
|
||||
print_status "$YELLOW" "Some packages not available on CentOS 7, continuing..."
|
||||
}
|
||||
;;
|
||||
"CentOS8"|"CentOSStream8"|"AlmaLinux8"|"RockyLinux8"|"RHEL8"|"CloudLinux8"|"openEuler2003")
|
||||
# CentOS 8 / RHEL 8 family
|
||||
$package_manager install -y $common_packages aspell libc-client-devel 2>/dev/null || {
|
||||
print_status "$YELLOW" "Some packages not available, trying alternatives..."
|
||||
$package_manager install -y $common_packages 2>/dev/null || true
|
||||
}
|
||||
;;
|
||||
"CentOS9"|"CentOSStream9"|"AlmaLinux9"|"RockyLinux9"|"RHEL9"|"CloudLinux9"|"openEuler2203"|"openEuler2403")
|
||||
# CentOS 9 / RHEL 9 family
|
||||
$package_manager install -y $common_packages 2>/dev/null || {
|
||||
print_status "$YELLOW" "Some packages not available, trying alternatives..."
|
||||
$package_manager install -y ImageMagick gd libicu oniguruma python3 python3-pip python3-devel 2>/dev/null || true
|
||||
}
|
||||
# Try to install aspell and libc-client separately
|
||||
$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..."
|
||||
;;
|
||||
"AlmaLinux10")
|
||||
# AlmaLinux 10 specific
|
||||
$package_manager install -y $common_packages 2>/dev/null || {
|
||||
print_status "$YELLOW" "Some packages not available, trying alternatives..."
|
||||
$package_manager install -y ImageMagick gd libicu oniguruma python3 python3-pip python3-devel 2>/dev/null || true
|
||||
}
|
||||
;;
|
||||
esac
|
||||
|
||||
print_status "$GREEN" "✅ Core dependencies installed"
|
||||
}
|
||||
|
||||
# Function to install additional packages
|
||||
install_additional_packages() {
|
||||
local package_manager=$1
|
||||
local os_version=$2
|
||||
|
||||
print_status "$BLUE" "Installing additional packages..."
|
||||
|
||||
# Additional packages that might be needed
|
||||
local additional_packages="git wget curl unzip tar gzip bzip2"
|
||||
|
||||
$package_manager install -y $additional_packages 2>/dev/null || {
|
||||
print_status "$YELLOW" "Some additional packages not available, continuing..."
|
||||
}
|
||||
|
||||
# OS-specific additional packages
|
||||
case $os_version in
|
||||
"CentOS7"|"CloudLinux7")
|
||||
# CentOS 7 specific
|
||||
$package_manager install -y openssl-devel zlib-devel 2>/dev/null || true
|
||||
;;
|
||||
"CentOS8"|"CentOSStream8"|"AlmaLinux8"|"RockyLinux8"|"RHEL8"|"CloudLinux8"|"openEuler2003")
|
||||
# CentOS 8 / RHEL 8 family
|
||||
$package_manager install -y openssl-devel zlib-devel 2>/dev/null || true
|
||||
;;
|
||||
"CentOS9"|"CentOSStream9"|"AlmaLinux9"|"RockyLinux9"|"RHEL9"|"CloudLinux9"|"openEuler2203"|"openEuler2403")
|
||||
# CentOS 9 / RHEL 9 family
|
||||
$package_manager install -y openssl-devel zlib-devel 2>/dev/null || true
|
||||
;;
|
||||
esac
|
||||
|
||||
print_status "$GREEN" "✅ Additional packages installed"
|
||||
}
|
||||
|
||||
# Function to verify dependencies
|
||||
verify_dependencies() {
|
||||
local package_manager=$1
|
||||
|
||||
print_status "$BLUE" "Verifying installed dependencies..."
|
||||
|
||||
local required_packages="curl wget python3"
|
||||
local missing_packages=""
|
||||
|
||||
for package in $required_packages; do
|
||||
if ! $package_manager list installed | grep -q "^$package\."; then
|
||||
missing_packages="$missing_packages $package"
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -n "$missing_packages" ]; then
|
||||
print_status "$YELLOW" "Missing packages:$missing_packages"
|
||||
print_status "$YELLOW" "Attempting to install missing packages..."
|
||||
$package_manager install -y $missing_packages 2>/dev/null || true
|
||||
else
|
||||
print_status "$GREEN" "✅ All required dependencies are installed"
|
||||
fi
|
||||
}
|
||||
|
||||
# Main function to install all dependencies
|
||||
install_rhel_dependencies() {
|
||||
local server_os=$1
|
||||
local package_manager=$2
|
||||
|
||||
print_status "$BLUE" "🚀 Installing RHEL-based OS dependencies for $server_os..."
|
||||
|
||||
# Install EPEL repository
|
||||
install_epel "$package_manager" "$server_os"
|
||||
|
||||
# Install development tools
|
||||
install_dev_tools "$package_manager"
|
||||
|
||||
# Install core dependencies
|
||||
install_core_deps "$package_manager" "$server_os"
|
||||
|
||||
# Install additional packages
|
||||
install_additional_packages "$package_manager" "$server_os"
|
||||
|
||||
# Verify dependencies
|
||||
verify_dependencies "$package_manager"
|
||||
|
||||
print_status "$GREEN" "✅ RHEL dependencies installation completed"
|
||||
return 0
|
||||
}
|
||||
|
||||
# Main execution
|
||||
if [ "${BASH_SOURCE[0]}" == "${0}" ]; then
|
||||
if [ $# -lt 2 ]; then
|
||||
echo "Usage: $0 <server_os> <package_manager>"
|
||||
echo "Example: $0 AlmaLinux9 dnf"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
install_rhel_dependencies "$1" "$2"
|
||||
fi
|
||||
371
modules/fixes/cyberpanel_fixes.sh
Normal file
371
modules/fixes/cyberpanel_fixes.sh
Normal file
@@ -0,0 +1,371 @@
|
||||
#!/bin/bash
|
||||
|
||||
# CyberPanel Fixes Module
|
||||
# Handles common installation issues and fixes
|
||||
# Max 500 lines - Current: ~450 lines
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Logging function
|
||||
log_message() {
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] [CYBERPANEL-FIXES] $1" | tee -a "/var/log/cyberpanel_install.log" 2>/dev/null || echo "[$(date '+%Y-%m-%d %H:%M:%S')] [CYBERPANEL-FIXES] $1"
|
||||
}
|
||||
|
||||
# Print colored output
|
||||
print_status() {
|
||||
local color=$1
|
||||
local message=$2
|
||||
echo -e "${color}${message}${NC}"
|
||||
log_message "$message"
|
||||
}
|
||||
|
||||
# Function to fix database connection issues
|
||||
fix_database_issues() {
|
||||
print_status "$BLUE" "🔧 Fixing database connection issues..."
|
||||
|
||||
# Start MariaDB service
|
||||
systemctl start mariadb 2>/dev/null || true
|
||||
systemctl enable mariadb 2>/dev/null || true
|
||||
|
||||
# Set MariaDB root password
|
||||
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
|
||||
|
||||
print_status "$GREEN" "✅ Database issues fixed"
|
||||
}
|
||||
|
||||
# Function to fix LiteSpeed service configuration
|
||||
fix_litespeed_service() {
|
||||
print_status "$BLUE" "🔧 Fixing LiteSpeed service configuration..."
|
||||
|
||||
# Create 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
|
||||
|
||||
systemctl daemon-reload
|
||||
systemctl enable lsws
|
||||
systemctl start lsws
|
||||
|
||||
print_status "$GREEN" "✅ LiteSpeed service fixed"
|
||||
}
|
||||
|
||||
# Function to fix SSL certificates
|
||||
fix_ssl_certificates() {
|
||||
print_status "$BLUE" "🔧 Fixing SSL certificates..."
|
||||
|
||||
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
|
||||
|
||||
# Generate SSL certificates
|
||||
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
|
||||
|
||||
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
|
||||
|
||||
print_status "$GREEN" "✅ SSL certificates fixed"
|
||||
}
|
||||
|
||||
# Function to fix admin console files
|
||||
fix_admin_console() {
|
||||
print_status "$BLUE" "🔧 Fixing admin console files..."
|
||||
|
||||
mkdir -p /usr/local/lsws/admin/fcgi-bin
|
||||
mkdir -p /usr/local/lsws/admin/conf
|
||||
|
||||
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
|
||||
htpasswd -cb /usr/local/lsws/admin/conf/htpasswd admin 1234567 2>/dev/null || true
|
||||
chown -R lsadm:lsadm /usr/local/lsws/admin/ 2>/dev/null || true
|
||||
|
||||
print_status "$GREEN" "✅ Admin console files fixed"
|
||||
}
|
||||
|
||||
# Function to fix CyberPanel service
|
||||
fix_cyberpanel_service() {
|
||||
print_status "$BLUE" "🔧 Fixing 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" "✅ CyberPanel service fixed"
|
||||
}
|
||||
|
||||
# Function to fix file permissions
|
||||
fix_file_permissions() {
|
||||
print_status "$BLUE" "🔧 Fixing file permissions..."
|
||||
|
||||
# Fix CyberPanel directory permissions
|
||||
if [ -d "/usr/local/CyberCP" ]; then
|
||||
chown -R root:root /usr/local/CyberCP
|
||||
chmod -R 755 /usr/local/CyberCP
|
||||
fi
|
||||
|
||||
# Fix LiteSpeed directory permissions
|
||||
if [ -d "/usr/local/lsws" ]; then
|
||||
chown -R lsadm:lsadm /usr/local/lsws
|
||||
chmod -R 755 /usr/local/lsws
|
||||
fi
|
||||
|
||||
# Fix log directory permissions
|
||||
mkdir -p /var/log/cyberpanel
|
||||
chown -R root:root /var/log/cyberpanel
|
||||
chmod -R 755 /var/log/cyberpanel
|
||||
|
||||
print_status "$GREEN" "✅ File permissions fixed"
|
||||
}
|
||||
|
||||
# Function to fix missing dependencies
|
||||
fix_missing_dependencies() {
|
||||
local package_manager=$1
|
||||
|
||||
print_status "$BLUE" "🔧 Fixing missing dependencies..."
|
||||
|
||||
case $package_manager in
|
||||
"yum"|"dnf")
|
||||
# Install missing packages
|
||||
$package_manager install -y python3-pip python3-devel gcc gcc-c++ make 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..."
|
||||
;;
|
||||
"apt")
|
||||
# Install missing packages
|
||||
apt install -y python3-pip python3-dev gcc g++ make 2>/dev/null || true
|
||||
apt install -y aspell 2>/dev/null || print_status "$YELLOW" "aspell not available, skipping..."
|
||||
apt install -y libc-client-dev 2>/dev/null || print_status "$YELLOW" "libc-client-dev not available, skipping..."
|
||||
;;
|
||||
esac
|
||||
|
||||
print_status "$GREEN" "✅ Missing dependencies fixed"
|
||||
}
|
||||
|
||||
# Function to check service status
|
||||
check_service_status() {
|
||||
local service_name=$1
|
||||
local display_name=$2
|
||||
|
||||
if systemctl is-active --quiet $service_name; then
|
||||
echo "✅ $display_name: RUNNING"
|
||||
return 0
|
||||
elif systemctl is-enabled --quiet $service_name; then
|
||||
echo "⚠️ $display_name: ENABLED BUT NOT RUNNING"
|
||||
return 1
|
||||
else
|
||||
echo "❌ $display_name: NOT INSTALLED/DISABLED"
|
||||
return 2
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to check port status
|
||||
check_port_status() {
|
||||
local port=$1
|
||||
local service_name=$2
|
||||
|
||||
if netstat -tlnp | grep -q ":$port "; then
|
||||
echo "✅ Port $port ($service_name): LISTENING"
|
||||
return 0
|
||||
else
|
||||
echo "❌ Port $port ($service_name): NOT LISTENING"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to generate status summary
|
||||
generate_status_summary() {
|
||||
local critical_failures=0
|
||||
local warnings=0
|
||||
|
||||
echo ""
|
||||
echo "╔═══════════════════════════════════════════════════════════════════════════════════════════════════════════════╗"
|
||||
echo "║ ║"
|
||||
echo "║ 📊 CYBERPANEL INSTALLATION STATUS SUMMARY 📊 ║"
|
||||
echo "║ ║"
|
||||
echo "╚═══════════════════════════════════════════════════════════════════════════════════════════════════════════════╝"
|
||||
echo ""
|
||||
|
||||
echo "🔧 CORE SERVICES STATUS:"
|
||||
echo "═══════════════════════════════════════════════════════════════════════════════════════════════════════════════"
|
||||
|
||||
# Check critical services
|
||||
if ! check_service_status "mariadb" "MariaDB Database"; then
|
||||
critical_failures=$((critical_failures + 1))
|
||||
fi
|
||||
|
||||
if ! check_service_status "lsws" "LiteSpeed Web Server"; then
|
||||
critical_failures=$((critical_failures + 1))
|
||||
fi
|
||||
|
||||
if ! check_service_status "lsmcd" "LiteSpeed Memcached"; then
|
||||
warnings=$((warnings + 1))
|
||||
fi
|
||||
|
||||
if ! check_service_status "cyberpanel" "CyberPanel Application"; then
|
||||
critical_failures=$((critical_failures + 1))
|
||||
fi
|
||||
|
||||
if ! check_service_status "watchdog" "Watchdog Service"; then
|
||||
warnings=$((warnings + 1))
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "🌐 NETWORK PORTS STATUS:"
|
||||
echo "═══════════════════════════════════════════════════════════════════════════════════════════════════════════════"
|
||||
|
||||
# Check critical ports
|
||||
if ! check_port_status "3306" "MariaDB"; then
|
||||
critical_failures=$((critical_failures + 1))
|
||||
fi
|
||||
|
||||
if ! check_port_status "80" "HTTP"; then
|
||||
critical_failures=$((critical_failures + 1))
|
||||
fi
|
||||
|
||||
if ! check_port_status "443" "HTTPS"; then
|
||||
warnings=$((warnings + 1))
|
||||
fi
|
||||
|
||||
if ! check_port_status "8090" "CyberPanel"; then
|
||||
critical_failures=$((critical_failures + 1))
|
||||
fi
|
||||
|
||||
if ! check_port_status "7080" "LiteSpeed Admin"; then
|
||||
warnings=$((warnings + 1))
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "📊 SUMMARY:"
|
||||
echo "═══════════════════════════════════════════════════════════════════════════════════════════════════════════════"
|
||||
|
||||
if [ $critical_failures -eq 0 ]; then
|
||||
print_status "$GREEN" "🎉 INSTALLATION SUCCESSFUL! All critical services are running."
|
||||
echo "✅ Critical Failures: $critical_failures"
|
||||
echo "⚠️ Warnings: $warnings"
|
||||
return 0
|
||||
else
|
||||
print_status "$RED" "❌ INSTALLATION HAS CRITICAL ISSUES! $critical_failures critical failures detected."
|
||||
echo "❌ Critical Failures: $critical_failures"
|
||||
echo "⚠️ Warnings: $warnings"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Main function to apply all fixes
|
||||
apply_cyberpanel_fixes() {
|
||||
local package_manager=$1
|
||||
|
||||
print_status "$BLUE" "🔧 Applying CyberPanel installation fixes..."
|
||||
|
||||
# Fix database issues
|
||||
fix_database_issues
|
||||
|
||||
# Fix LiteSpeed service
|
||||
fix_litespeed_service
|
||||
|
||||
# Fix SSL certificates
|
||||
fix_ssl_certificates
|
||||
|
||||
# Fix admin console
|
||||
fix_admin_console
|
||||
|
||||
# Fix CyberPanel service
|
||||
fix_cyberpanel_service
|
||||
|
||||
# Fix file permissions
|
||||
fix_file_permissions
|
||||
|
||||
# Fix missing dependencies
|
||||
fix_missing_dependencies "$package_manager"
|
||||
|
||||
print_status "$GREEN" "✅ All CyberPanel fixes applied successfully"
|
||||
|
||||
# Generate status summary
|
||||
generate_status_summary
|
||||
}
|
||||
|
||||
# Main execution
|
||||
if [ "${BASH_SOURCE[0]}" == "${0}" ]; then
|
||||
if [ $# -lt 1 ]; then
|
||||
echo "Usage: $0 <package_manager>"
|
||||
echo "Example: $0 dnf"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
apply_cyberpanel_fixes "$1"
|
||||
fi
|
||||
275
modules/install/cyberpanel_installer.sh
Normal file
275
modules/install/cyberpanel_installer.sh
Normal file
@@ -0,0 +1,275 @@
|
||||
#!/bin/bash
|
||||
|
||||
# CyberPanel Installation Module
|
||||
# Handles the actual CyberPanel installation process
|
||||
# Max 500 lines - Current: ~400 lines
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Global variables
|
||||
MAX_RETRY_ATTEMPTS=5
|
||||
INSTALL_LOG="/var/log/cyberpanel_install.log"
|
||||
CURRENT_VERSION=""
|
||||
INSTALLATION_TYPE=""
|
||||
|
||||
# Logging function
|
||||
log_message() {
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] [CYBERPANEL-INSTALL] $1" | tee -a "$INSTALL_LOG" 2>/dev/null || echo "[$(date '+%Y-%m-%d %H:%M:%S')] [CYBERPANEL-INSTALL] $1"
|
||||
}
|
||||
|
||||
# Print colored output
|
||||
print_status() {
|
||||
local color=$1
|
||||
local message=$2
|
||||
echo -e "${color}${message}${NC}"
|
||||
log_message "$message"
|
||||
}
|
||||
|
||||
# Function to check if CyberPanel is installed
|
||||
check_cyberpanel_installation() {
|
||||
if [ -d "/usr/local/CyberCP" ] && [ -f "/usr/local/CyberCP/manage.py" ]; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to get current CyberPanel version
|
||||
get_current_version() {
|
||||
if [ -f "/usr/local/CyberCP/version.txt" ]; then
|
||||
CURRENT_VERSION=$(cat /usr/local/CyberCP/version.txt 2>/dev/null || echo "unknown")
|
||||
else
|
||||
CURRENT_VERSION="unknown"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to get latest version from GitHub
|
||||
get_latest_version() {
|
||||
local latest_version
|
||||
latest_version=$(curl -s https://api.github.com/repos/usmannasir/cyberpanel/releases/latest | grep '"tag_name"' | cut -d'"' -f4 2>/dev/null || echo "unknown")
|
||||
echo "$latest_version"
|
||||
}
|
||||
|
||||
# Function to check if update is needed
|
||||
check_for_updates() {
|
||||
local latest_version
|
||||
latest_version=$(get_latest_version)
|
||||
|
||||
if [ "$CURRENT_VERSION" != "unknown" ] && [ "$latest_version" != "unknown" ]; then
|
||||
if [ "$CURRENT_VERSION" != "$latest_version" ]; then
|
||||
print_status "$YELLOW" "Update available: $CURRENT_VERSION -> $latest_version"
|
||||
return 0
|
||||
else
|
||||
print_status "$GREEN" "CyberPanel is up to date ($CURRENT_VERSION)"
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
print_status "$YELLOW" "Cannot determine version status"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to uninstall CyberPanel
|
||||
uninstall_cyberpanel() {
|
||||
print_status "$YELLOW" "Uninstalling existing CyberPanel installation..."
|
||||
|
||||
# Stop services
|
||||
systemctl stop cyberpanel 2>/dev/null || true
|
||||
systemctl stop lsws 2>/dev/null || true
|
||||
systemctl stop lsmcd 2>/dev/null || true
|
||||
|
||||
# Remove systemd services
|
||||
systemctl disable cyberpanel 2>/dev/null || true
|
||||
systemctl disable lsws 2>/dev/null || true
|
||||
systemctl disable lsmcd 2>/dev/null || true
|
||||
|
||||
# Remove service files
|
||||
rm -f /etc/systemd/system/cyberpanel.service
|
||||
rm -f /etc/systemd/system/lsws.service
|
||||
rm -f /etc/systemd/system/lsmcd.service
|
||||
|
||||
# Remove directories
|
||||
rm -rf /usr/local/CyberCP
|
||||
rm -rf /usr/local/lsws
|
||||
rm -rf /usr/local/lsmcd
|
||||
rm -rf /etc/cyberpanel
|
||||
rm -rf /var/lib/lsphp
|
||||
|
||||
# Remove users
|
||||
userdel -r cyberpanel 2>/dev/null || true
|
||||
userdel -r lsadm 2>/dev/null || true
|
||||
|
||||
print_status "$GREEN" "CyberPanel uninstalled successfully"
|
||||
}
|
||||
|
||||
# Function to install CyberPanel with retry logic
|
||||
install_cyberpanel_with_retry() {
|
||||
local attempt=1
|
||||
local server_os=$1
|
||||
local branch_name=$2
|
||||
shift 2
|
||||
local install_args=("$@")
|
||||
|
||||
while [ $attempt -le $MAX_RETRY_ATTEMPTS ]; do
|
||||
print_status "$BLUE" "Installation attempt $attempt of $MAX_RETRY_ATTEMPTS"
|
||||
|
||||
if install_cyberpanel "$server_os" "$branch_name" "${install_args[@]}"; then
|
||||
print_status "$GREEN" "CyberPanel installed successfully on attempt $attempt"
|
||||
return 0
|
||||
else
|
||||
print_status "$RED" "Installation attempt $attempt failed"
|
||||
|
||||
if [ $attempt -lt $MAX_RETRY_ATTEMPTS ]; then
|
||||
print_status "$YELLOW" "Retrying in 10 seconds..."
|
||||
sleep 10
|
||||
|
||||
# Clean up failed installation
|
||||
cleanup_failed_installation
|
||||
fi
|
||||
|
||||
attempt=$((attempt + 1))
|
||||
fi
|
||||
done
|
||||
|
||||
print_status "$RED" "CyberPanel installation failed after $MAX_RETRY_ATTEMPTS attempts"
|
||||
return 1
|
||||
}
|
||||
|
||||
# Function to clean up failed installation
|
||||
cleanup_failed_installation() {
|
||||
print_status "$YELLOW" "Cleaning up failed installation..."
|
||||
|
||||
# Stop any running services
|
||||
systemctl stop cyberpanel 2>/dev/null || true
|
||||
systemctl stop lsws 2>/dev/null || true
|
||||
systemctl stop lsmcd 2>/dev/null || true
|
||||
|
||||
# Remove partial installations
|
||||
rm -rf /usr/local/CyberCP
|
||||
rm -rf /usr/local/lsws
|
||||
rm -rf /usr/local/lsmcd
|
||||
|
||||
# Remove service files
|
||||
rm -f /etc/systemd/system/cyberpanel.service
|
||||
rm -f /etc/systemd/system/lsws.service
|
||||
rm -f /etc/systemd/system/lsmcd.service
|
||||
|
||||
systemctl daemon-reload
|
||||
}
|
||||
|
||||
# Function to install CyberPanel (original installation logic)
|
||||
install_cyberpanel() {
|
||||
local server_os=$1
|
||||
local branch_name=$2
|
||||
shift 2
|
||||
local install_args=("$@")
|
||||
|
||||
print_status "$BLUE" "Starting CyberPanel installation..."
|
||||
|
||||
# Download and run the original installer
|
||||
if [ -n "$branch_name" ]; then
|
||||
if [[ "$branch_name" =~ ^[a-f0-9]{7,40}$ ]]; then
|
||||
curl --silent -o cyberpanel.sh "https://raw.githubusercontent.com/usmannasir/cyberpanel/$branch_name/cyberpanel.sh" 2>/dev/null
|
||||
elif [[ "$branch_name" =~ ^commit: ]]; then
|
||||
commit_hash="${branch_name#commit:}"
|
||||
curl --silent -o cyberpanel.sh "https://raw.githubusercontent.com/usmannasir/cyberpanel/$commit_hash/cyberpanel.sh" 2>/dev/null
|
||||
else
|
||||
curl --silent -o cyberpanel.sh "https://raw.githubusercontent.com/usmannasir/cyberpanel/$branch_name/cyberpanel.sh" 2>/dev/null
|
||||
fi
|
||||
else
|
||||
curl --silent -o cyberpanel.sh "https://cyberpanel.sh/?dl&$server_os" 2>/dev/null
|
||||
fi
|
||||
|
||||
chmod +x cyberpanel.sh
|
||||
|
||||
# Run the installer and capture output
|
||||
if ./cyberpanel.sh "${install_args[@]}" > /tmp/cyberpanel_install_output.log 2>&1; then
|
||||
return 0
|
||||
else
|
||||
print_status "$RED" "Installation failed. Check /tmp/cyberpanel_install_output.log for details"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to determine installation type
|
||||
determine_installation_type() {
|
||||
if check_cyberpanel_installation; then
|
||||
get_current_version
|
||||
if check_for_updates; then
|
||||
INSTALLATION_TYPE="update"
|
||||
print_status "$YELLOW" "Update installation detected"
|
||||
else
|
||||
print_status "$GREEN" "CyberPanel is already installed and up to date"
|
||||
print_status "$YELLOW" "Reinstalling to ensure proper configuration..."
|
||||
INSTALLATION_TYPE="reinstall"
|
||||
fi
|
||||
else
|
||||
INSTALLATION_TYPE="fresh"
|
||||
print_status "$BLUE" "Fresh installation detected"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to perform installation based on type
|
||||
perform_installation() {
|
||||
local server_os=$1
|
||||
local branch_name=$2
|
||||
shift 2
|
||||
local install_args=("$@")
|
||||
|
||||
case $INSTALLATION_TYPE in
|
||||
"update"|"reinstall")
|
||||
uninstall_cyberpanel
|
||||
sleep 5
|
||||
if ! install_cyberpanel_with_retry "$server_os" "$branch_name" "${install_args[@]}"; then
|
||||
print_status "$RED" "Installation failed. Exiting..."
|
||||
return 1
|
||||
fi
|
||||
;;
|
||||
"fresh")
|
||||
if ! install_cyberpanel_with_retry "$server_os" "$branch_name" "${install_args[@]}"; then
|
||||
print_status "$RED" "Installation failed. Exiting..."
|
||||
return 1
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
# Main installation function
|
||||
install_cyberpanel_main() {
|
||||
local server_os=$1
|
||||
local branch_name=$2
|
||||
shift 2
|
||||
local install_args=("$@")
|
||||
|
||||
print_status "$BLUE" "🚀 Starting CyberPanel installation process..."
|
||||
|
||||
# Determine installation type
|
||||
determine_installation_type
|
||||
|
||||
# Perform installation
|
||||
if perform_installation "$server_os" "$branch_name" "${install_args[@]}"; then
|
||||
print_status "$GREEN" "✅ CyberPanel installation completed successfully"
|
||||
return 0
|
||||
else
|
||||
print_status "$RED" "❌ CyberPanel installation failed"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Main execution
|
||||
if [ "${BASH_SOURCE[0]}" == "${0}" ]; then
|
||||
if [ $# -lt 1 ]; then
|
||||
echo "Usage: $0 <server_os> [branch_name] [install_args...]"
|
||||
echo "Example: $0 AlmaLinux9 v2.5.5-dev --debug"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
install_cyberpanel_main "$@"
|
||||
fi
|
||||
366
modules/os/detect.sh
Normal file
366
modules/os/detect.sh
Normal file
@@ -0,0 +1,366 @@
|
||||
#!/bin/bash
|
||||
|
||||
# OS Detection Module for CyberPanel Installer
|
||||
# This module handles OS detection and basic package manager setup
|
||||
# Max 500 lines - Current: ~200 lines
|
||||
|
||||
# Global variables
|
||||
SERVER_OS=""
|
||||
OS_FAMILY=""
|
||||
PACKAGE_MANAGER=""
|
||||
ARCHITECTURE=""
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Logging function
|
||||
log_message() {
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] [OS-DETECT] $1" | tee -a "/var/log/cyberpanel_install.log" 2>/dev/null || echo "[$(date '+%Y-%m-%d %H:%M:%S')] [OS-DETECT] $1"
|
||||
}
|
||||
|
||||
# Print colored output
|
||||
print_status() {
|
||||
local color=$1
|
||||
local message=$2
|
||||
echo -e "${color}${message}${NC}"
|
||||
log_message "$message"
|
||||
}
|
||||
|
||||
# Function to detect system architecture
|
||||
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
|
||||
return 0
|
||||
}
|
||||
|
||||
# Function to detect CentOS variants
|
||||
detect_centos() {
|
||||
local OUTPUT=$1
|
||||
|
||||
if echo $OUTPUT | grep -q "CentOS Linux 7" ; then
|
||||
SERVER_OS="CentOS7"
|
||||
OS_FAMILY="rhel"
|
||||
PACKAGE_MANAGER="yum"
|
||||
print_status "$GREEN" "Detected: CentOS Linux 7"
|
||||
return 0
|
||||
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"
|
||||
return 0
|
||||
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"
|
||||
return 0
|
||||
elif echo $OUTPUT | grep -q "CentOS Stream 8" ; then
|
||||
SERVER_OS="CentOSStream8"
|
||||
OS_FAMILY="rhel"
|
||||
PACKAGE_MANAGER="yum"
|
||||
print_status "$GREEN" "Detected: CentOS Stream 8"
|
||||
return 0
|
||||
elif echo $OUTPUT | grep -q "CentOS Stream 9" ; then
|
||||
SERVER_OS="CentOSStream9"
|
||||
OS_FAMILY="rhel"
|
||||
PACKAGE_MANAGER="dnf"
|
||||
print_status "$GREEN" "Detected: CentOS Stream 9"
|
||||
return 0
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
# Function to detect AlmaLinux variants
|
||||
detect_almalinux() {
|
||||
local OUTPUT=$1
|
||||
|
||||
if echo $OUTPUT | grep -q "AlmaLinux 8" ; then
|
||||
SERVER_OS="AlmaLinux8"
|
||||
OS_FAMILY="rhel"
|
||||
PACKAGE_MANAGER="yum"
|
||||
print_status "$GREEN" "Detected: AlmaLinux 8"
|
||||
return 0
|
||||
elif echo $OUTPUT | grep -q "AlmaLinux 9" ; then
|
||||
SERVER_OS="AlmaLinux9"
|
||||
OS_FAMILY="rhel"
|
||||
PACKAGE_MANAGER="dnf"
|
||||
print_status "$GREEN" "Detected: AlmaLinux 9"
|
||||
return 0
|
||||
elif echo $OUTPUT | grep -q "AlmaLinux 10" ; then
|
||||
SERVER_OS="AlmaLinux10"
|
||||
OS_FAMILY="rhel"
|
||||
PACKAGE_MANAGER="dnf"
|
||||
print_status "$GREEN" "Detected: AlmaLinux 10"
|
||||
return 0
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
# Function to detect Rocky Linux variants
|
||||
detect_rocky() {
|
||||
local OUTPUT=$1
|
||||
|
||||
if echo $OUTPUT | grep -q "Rocky Linux 8" ; then
|
||||
SERVER_OS="RockyLinux8"
|
||||
OS_FAMILY="rhel"
|
||||
PACKAGE_MANAGER="yum"
|
||||
print_status "$GREEN" "Detected: Rocky Linux 8"
|
||||
return 0
|
||||
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"
|
||||
return 0
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
# Function to detect RHEL variants
|
||||
detect_rhel() {
|
||||
local OUTPUT=$1
|
||||
|
||||
if echo $OUTPUT | grep -q "Red Hat Enterprise Linux 8" ; then
|
||||
SERVER_OS="RHEL8"
|
||||
OS_FAMILY="rhel"
|
||||
PACKAGE_MANAGER="yum"
|
||||
print_status "$GREEN" "Detected: Red Hat Enterprise Linux 8"
|
||||
return 0
|
||||
elif echo $OUTPUT | grep -q "Red Hat Enterprise Linux 9" ; then
|
||||
SERVER_OS="RHEL9"
|
||||
OS_FAMILY="rhel"
|
||||
PACKAGE_MANAGER="dnf"
|
||||
print_status "$GREEN" "Detected: Red Hat Enterprise Linux 9"
|
||||
return 0
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
# Function to detect CloudLinux variants
|
||||
detect_cloudlinux() {
|
||||
local OUTPUT=$1
|
||||
|
||||
if echo $OUTPUT | grep -q "CloudLinux 7" ; then
|
||||
SERVER_OS="CloudLinux7"
|
||||
OS_FAMILY="rhel"
|
||||
PACKAGE_MANAGER="yum"
|
||||
print_status "$GREEN" "Detected: CloudLinux 7"
|
||||
return 0
|
||||
elif echo $OUTPUT | grep -q "CloudLinux 8" ; then
|
||||
SERVER_OS="CloudLinux8"
|
||||
OS_FAMILY="rhel"
|
||||
PACKAGE_MANAGER="yum"
|
||||
print_status "$GREEN" "Detected: CloudLinux 8"
|
||||
return 0
|
||||
elif echo $OUTPUT | grep -q "CloudLinux 9" ; then
|
||||
SERVER_OS="CloudLinux9"
|
||||
OS_FAMILY="rhel"
|
||||
PACKAGE_MANAGER="dnf"
|
||||
print_status "$GREEN" "Detected: CloudLinux 9"
|
||||
return 0
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
# Function to detect Ubuntu variants
|
||||
detect_ubuntu() {
|
||||
local OUTPUT=$1
|
||||
|
||||
if echo $OUTPUT | grep -q "Ubuntu 18.04" ; then
|
||||
SERVER_OS="Ubuntu1804"
|
||||
OS_FAMILY="debian"
|
||||
PACKAGE_MANAGER="apt"
|
||||
print_status "$GREEN" "Detected: Ubuntu 18.04"
|
||||
return 0
|
||||
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"
|
||||
return 0
|
||||
elif echo $OUTPUT | grep -q "Ubuntu 20.10" ; then
|
||||
SERVER_OS="Ubuntu2010"
|
||||
OS_FAMILY="debian"
|
||||
PACKAGE_MANAGER="apt"
|
||||
print_status "$GREEN" "Detected: Ubuntu 20.10"
|
||||
return 0
|
||||
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"
|
||||
return 0
|
||||
elif echo $OUTPUT | grep -q "Ubuntu 24.04" ; then
|
||||
SERVER_OS="Ubuntu2404"
|
||||
OS_FAMILY="debian"
|
||||
PACKAGE_MANAGER="apt"
|
||||
print_status "$GREEN" "Detected: Ubuntu 24.04"
|
||||
return 0
|
||||
elif echo $OUTPUT | grep -q "Ubuntu 24.04.3" ; then
|
||||
SERVER_OS="Ubuntu24043"
|
||||
OS_FAMILY="debian"
|
||||
PACKAGE_MANAGER="apt"
|
||||
print_status "$GREEN" "Detected: Ubuntu 24.04.3"
|
||||
return 0
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
# Function to detect Debian variants
|
||||
detect_debian() {
|
||||
local OUTPUT=$1
|
||||
|
||||
if 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"
|
||||
return 0
|
||||
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"
|
||||
return 0
|
||||
elif echo $OUTPUT | grep -q "Debian GNU/Linux 13" ; then
|
||||
SERVER_OS="Debian13"
|
||||
OS_FAMILY="debian"
|
||||
PACKAGE_MANAGER="apt"
|
||||
print_status "$GREEN" "Detected: Debian GNU/Linux 13"
|
||||
return 0
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
# Function to detect openEuler variants
|
||||
detect_openeuler() {
|
||||
local OUTPUT=$1
|
||||
|
||||
if echo $OUTPUT | grep -q "openEuler 20.03" ; then
|
||||
SERVER_OS="openEuler2003"
|
||||
OS_FAMILY="rhel"
|
||||
PACKAGE_MANAGER="yum"
|
||||
print_status "$GREEN" "Detected: openEuler 20.03"
|
||||
return 0
|
||||
elif echo $OUTPUT | grep -q "openEuler 22.03" ; then
|
||||
SERVER_OS="openEuler2203"
|
||||
OS_FAMILY="rhel"
|
||||
PACKAGE_MANAGER="yum"
|
||||
print_status "$GREEN" "Detected: openEuler 22.03"
|
||||
return 0
|
||||
elif echo $OUTPUT | grep -q "openEuler 24.03" ; then
|
||||
SERVER_OS="openEuler2403"
|
||||
OS_FAMILY="rhel"
|
||||
PACKAGE_MANAGER="yum"
|
||||
print_status "$GREEN" "Detected: openEuler 24.03"
|
||||
return 0
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
# Main OS detection function
|
||||
detect_os() {
|
||||
print_status "$BLUE" "🔍 Detecting operating system..."
|
||||
|
||||
# Detect architecture first
|
||||
if ! detect_architecture; then
|
||||
print_status "$RED" "❌ Unsupported architecture: $ARCHITECTURE"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# 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
|
||||
|
||||
# Try to detect each OS family
|
||||
if detect_centos "$OUTPUT"; then
|
||||
return 0
|
||||
elif detect_almalinux "$OUTPUT"; then
|
||||
return 0
|
||||
elif detect_rocky "$OUTPUT"; then
|
||||
return 0
|
||||
elif detect_rhel "$OUTPUT"; then
|
||||
return 0
|
||||
elif detect_cloudlinux "$OUTPUT"; then
|
||||
return 0
|
||||
elif detect_ubuntu "$OUTPUT"; then
|
||||
return 0
|
||||
elif detect_debian "$OUTPUT"; then
|
||||
return 0
|
||||
elif detect_openeuler "$OUTPUT"; then
|
||||
return 0
|
||||
else
|
||||
print_status "$RED" "❌ Unable to detect your OS..."
|
||||
print_status "$YELLOW" "Supported operating systems:"
|
||||
echo -e "• Ubuntu: 18.04, 20.04, 20.10, 22.04, 24.04, 24.04.3"
|
||||
echo -e "• Debian: 11, 12, 13"
|
||||
echo -e "• AlmaLinux: 8, 9, 10"
|
||||
echo -e "• RockyLinux: 8, 9"
|
||||
echo -e "• RHEL: 8, 9"
|
||||
echo -e "• CentOS: 7, 8, 9, Stream 8, Stream 9"
|
||||
echo -e "• CloudLinux: 7, 8, 9"
|
||||
echo -e "• openEuler: 20.03, 22.03, 24.03"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to install basic tools
|
||||
install_basic_tools() {
|
||||
print_status "$BLUE" "📦 Installing basic tools..."
|
||||
|
||||
case $PACKAGE_MANAGER in
|
||||
"yum"|"dnf")
|
||||
$PACKAGE_MANAGER install curl wget -y 1> /dev/null
|
||||
$PACKAGE_MANAGER update curl wget ca-certificates -y 1> /dev/null
|
||||
;;
|
||||
"apt")
|
||||
apt update -qq 2>/dev/null
|
||||
apt install -y -qq wget curl 2>/dev/null
|
||||
;;
|
||||
*)
|
||||
print_status "$RED" "❌ Unknown package manager: $PACKAGE_MANAGER"
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
|
||||
print_status "$GREEN" "✅ Basic tools installed successfully"
|
||||
return 0
|
||||
}
|
||||
|
||||
# Function to get OS information
|
||||
get_os_info() {
|
||||
echo "SERVER_OS=$SERVER_OS"
|
||||
echo "OS_FAMILY=$OS_FAMILY"
|
||||
echo "PACKAGE_MANAGER=$PACKAGE_MANAGER"
|
||||
echo "ARCHITECTURE=$ARCHITECTURE"
|
||||
}
|
||||
|
||||
# Main execution
|
||||
if [ "${BASH_SOURCE[0]}" == "${0}" ]; then
|
||||
detect_os
|
||||
if [ $? -eq 0 ]; then
|
||||
install_basic_tools
|
||||
get_os_info
|
||||
else
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
Reference in New Issue
Block a user