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