2025-09-25 11:45:40 +02:00
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
|
|
# CyberPanel Fixes Module
|
|
|
|
|
# Handles common installation issues and fixes
|
|
|
|
|
# Max 500 lines - Current: ~450 lines
|
|
|
|
|
|
|
|
|
|
# Colors for output
|
|
|
|
|
RED='\033[0;31m'
|
|
|
|
|
GREEN='\033[0;32m'
|
|
|
|
|
YELLOW='\033[1;33m'
|
|
|
|
|
BLUE='\033[0;34m'
|
|
|
|
|
NC='\033[0m' # No Color
|
|
|
|
|
|
|
|
|
|
# Logging function
|
|
|
|
|
log_message() {
|
|
|
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] [CYBERPANEL-FIXES] $1" | tee -a "/var/log/cyberpanel_install.log" 2>/dev/null || echo "[$(date '+%Y-%m-%d %H:%M:%S')] [CYBERPANEL-FIXES] $1"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Print colored output
|
|
|
|
|
print_status() {
|
|
|
|
|
local color=$1
|
|
|
|
|
local message=$2
|
|
|
|
|
echo -e "${color}${message}${NC}"
|
|
|
|
|
log_message "$message"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Function to fix database connection issues
|
|
|
|
|
fix_database_issues() {
|
|
|
|
|
print_status "$BLUE" "🔧 Fixing database connection issues..."
|
|
|
|
|
|
|
|
|
|
# Start MariaDB service
|
|
|
|
|
systemctl start mariadb 2>/dev/null || true
|
|
|
|
|
systemctl enable mariadb 2>/dev/null || true
|
|
|
|
|
|
|
|
|
|
# Set MariaDB root password
|
|
|
|
|
mysqladmin -u root password '1234567' 2>/dev/null || true
|
|
|
|
|
|
|
|
|
|
# Create cyberpanel database user
|
|
|
|
|
mysql -u root -p1234567 -e "
|
|
|
|
|
CREATE DATABASE IF NOT EXISTS cyberpanel;
|
|
|
|
|
CREATE USER IF NOT EXISTS 'cyberpanel'@'localhost' IDENTIFIED BY 'cyberpanel';
|
|
|
|
|
GRANT ALL PRIVILEGES ON cyberpanel.* TO 'cyberpanel'@'localhost';
|
|
|
|
|
FLUSH PRIVILEGES;
|
|
|
|
|
" 2>/dev/null || true
|
|
|
|
|
|
|
|
|
|
print_status "$GREEN" "✅ Database issues fixed"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Function to fix LiteSpeed service configuration
|
|
|
|
|
fix_litespeed_service() {
|
|
|
|
|
print_status "$BLUE" "🔧 Fixing LiteSpeed service configuration..."
|
|
|
|
|
|
|
|
|
|
# Create LiteSpeed service file
|
|
|
|
|
cat > /etc/systemd/system/lsws.service << 'EOF'
|
|
|
|
|
[Unit]
|
|
|
|
|
Description=LiteSpeed Web Server
|
|
|
|
|
After=network.target
|
|
|
|
|
|
|
|
|
|
[Service]
|
|
|
|
|
Type=forking
|
|
|
|
|
User=root
|
|
|
|
|
Group=root
|
|
|
|
|
ExecStart=/usr/local/lsws/bin/lswsctrl start
|
|
|
|
|
ExecStop=/usr/local/lsws/bin/lswsctrl stop
|
|
|
|
|
ExecReload=/usr/local/lsws/bin/lswsctrl restart
|
|
|
|
|
Restart=always
|
|
|
|
|
RestartSec=5
|
|
|
|
|
|
|
|
|
|
[Install]
|
|
|
|
|
WantedBy=multi-user.target
|
|
|
|
|
EOF
|
|
|
|
|
|
|
|
|
|
systemctl daemon-reload
|
|
|
|
|
systemctl enable lsws
|
|
|
|
|
systemctl start lsws
|
|
|
|
|
|
|
|
|
|
print_status "$GREEN" "✅ LiteSpeed service fixed"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Function to fix SSL certificates
|
|
|
|
|
fix_ssl_certificates() {
|
|
|
|
|
print_status "$BLUE" "🔧 Fixing SSL certificates..."
|
|
|
|
|
|
|
|
|
|
mkdir -p /root/cyberpanel
|
|
|
|
|
cat > /root/cyberpanel/cert_conf << 'EOF'
|
|
|
|
|
[req]
|
|
|
|
|
distinguished_name = req_distinguished_name
|
|
|
|
|
req_extensions = v3_req
|
|
|
|
|
prompt = no
|
|
|
|
|
|
|
|
|
|
[req_distinguished_name]
|
|
|
|
|
C = US
|
|
|
|
|
ST = State
|
|
|
|
|
L = City
|
|
|
|
|
O = Organization
|
|
|
|
|
OU = Organizational Unit
|
|
|
|
|
CN = localhost
|
|
|
|
|
|
|
|
|
|
[v3_req]
|
|
|
|
|
keyUsage = keyEncipherment, dataEncipherment
|
|
|
|
|
extendedKeyUsage = serverAuth
|
|
|
|
|
subjectAltName = @alt_names
|
|
|
|
|
|
|
|
|
|
[alt_names]
|
|
|
|
|
DNS.1 = localhost
|
|
|
|
|
IP.1 = 127.0.0.1
|
|
|
|
|
EOF
|
|
|
|
|
|
|
|
|
|
# Generate SSL certificates
|
|
|
|
|
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
|
|
|
|
|
-keyout /usr/local/lsws/admin/conf/cert/admin.key \
|
|
|
|
|
-out /usr/local/lsws/admin/conf/cert/admin.crt \
|
|
|
|
|
-config /root/cyberpanel/cert_conf 2>/dev/null || true
|
|
|
|
|
|
|
|
|
|
chmod 600 /usr/local/lsws/admin/conf/cert/admin.key 2>/dev/null || true
|
|
|
|
|
chmod 644 /usr/local/lsws/admin/conf/cert/admin.crt 2>/dev/null || true
|
|
|
|
|
|
|
|
|
|
print_status "$GREEN" "✅ SSL certificates fixed"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Function to fix admin console files
|
|
|
|
|
fix_admin_console() {
|
|
|
|
|
print_status "$BLUE" "🔧 Fixing admin console files..."
|
|
|
|
|
|
|
|
|
|
mkdir -p /usr/local/lsws/admin/fcgi-bin
|
|
|
|
|
mkdir -p /usr/local/lsws/admin/conf
|
|
|
|
|
|
|
|
|
|
cat > /usr/local/lsws/admin/fcgi-bin/admin_php << 'EOF'
|
|
|
|
|
#!/bin/bash
|
|
|
|
|
export PHP_LSAPI_CHILDREN=35
|
|
|
|
|
export PHP_LSAPI_MAX_REQUESTS=1000
|
|
|
|
|
exec /usr/local/lsws/lsphp82/bin/lsphp -b /usr/local/lsws/admin/fcgi-bin/admin_php
|
|
|
|
|
EOF
|
|
|
|
|
|
|
|
|
|
chmod +x /usr/local/lsws/admin/fcgi-bin/admin_php 2>/dev/null || true
|
|
|
|
|
htpasswd -cb /usr/local/lsws/admin/conf/htpasswd admin 1234567 2>/dev/null || true
|
|
|
|
|
chown -R lsadm:lsadm /usr/local/lsws/admin/ 2>/dev/null || true
|
|
|
|
|
|
|
|
|
|
print_status "$GREEN" "✅ Admin console files fixed"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Function to fix CyberPanel service
|
|
|
|
|
fix_cyberpanel_service() {
|
|
|
|
|
print_status "$BLUE" "🔧 Fixing CyberPanel service..."
|
|
|
|
|
|
|
|
|
|
cat > /etc/systemd/system/cyberpanel.service << 'EOF'
|
|
|
|
|
[Unit]
|
|
|
|
|
Description=CyberPanel Web Interface
|
|
|
|
|
After=network.target mariadb.service
|
|
|
|
|
|
|
|
|
|
[Service]
|
|
|
|
|
Type=simple
|
|
|
|
|
User=root
|
|
|
|
|
Group=root
|
|
|
|
|
WorkingDirectory=/usr/local/CyberCP
|
|
|
|
|
ExecStart=/usr/local/CyberPanel-venv/bin/python manage.py runserver 0.0.0.0:8000
|
|
|
|
|
Restart=always
|
|
|
|
|
RestartSec=5
|
|
|
|
|
Environment=DJANGO_SETTINGS_MODULE=CyberCP.settings
|
|
|
|
|
|
|
|
|
|
[Install]
|
|
|
|
|
WantedBy=multi-user.target
|
|
|
|
|
EOF
|
|
|
|
|
|
|
|
|
|
systemctl daemon-reload
|
|
|
|
|
systemctl enable cyberpanel
|
|
|
|
|
|
|
|
|
|
print_status "$GREEN" "✅ CyberPanel service fixed"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Function to fix file permissions
|
|
|
|
|
fix_file_permissions() {
|
|
|
|
|
print_status "$BLUE" "🔧 Fixing file permissions..."
|
|
|
|
|
|
|
|
|
|
# Fix CyberPanel directory permissions
|
|
|
|
|
if [ -d "/usr/local/CyberCP" ]; then
|
|
|
|
|
chown -R root:root /usr/local/CyberCP
|
|
|
|
|
chmod -R 755 /usr/local/CyberCP
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# Fix LiteSpeed directory permissions
|
|
|
|
|
if [ -d "/usr/local/lsws" ]; then
|
|
|
|
|
chown -R lsadm:lsadm /usr/local/lsws
|
|
|
|
|
chmod -R 755 /usr/local/lsws
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# Fix log directory permissions
|
|
|
|
|
mkdir -p /var/log/cyberpanel
|
|
|
|
|
chown -R root:root /var/log/cyberpanel
|
|
|
|
|
chmod -R 755 /var/log/cyberpanel
|
|
|
|
|
|
|
|
|
|
print_status "$GREEN" "✅ File permissions fixed"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Function to fix missing dependencies
|
|
|
|
|
fix_missing_dependencies() {
|
|
|
|
|
local package_manager=$1
|
|
|
|
|
|
|
|
|
|
print_status "$BLUE" "🔧 Fixing missing dependencies..."
|
|
|
|
|
|
|
|
|
|
case $package_manager in
|
|
|
|
|
"yum"|"dnf")
|
|
|
|
|
# Install missing packages
|
|
|
|
|
$package_manager install -y python3-pip python3-devel gcc gcc-c++ make 2>/dev/null || true
|
|
|
|
|
$package_manager install -y aspell 2>/dev/null || print_status "$YELLOW" "aspell not available, skipping..."
|
|
|
|
|
$package_manager install -y libc-client-devel 2>/dev/null || print_status "$YELLOW" "libc-client-devel not available, skipping..."
|
|
|
|
|
;;
|
|
|
|
|
"apt")
|
|
|
|
|
# Install missing packages
|
|
|
|
|
apt install -y python3-pip python3-dev gcc g++ make 2>/dev/null || true
|
|
|
|
|
apt install -y aspell 2>/dev/null || print_status "$YELLOW" "aspell not available, skipping..."
|
|
|
|
|
apt install -y libc-client-dev 2>/dev/null || print_status "$YELLOW" "libc-client-dev not available, skipping..."
|
|
|
|
|
;;
|
|
|
|
|
esac
|
|
|
|
|
|
|
|
|
|
print_status "$GREEN" "✅ Missing dependencies fixed"
|
|
|
|
|
}
|
|
|
|
|
|
2025-11-15 23:25:13 +01:00
|
|
|
ensure_imunify_av_assets() {
|
|
|
|
|
local package_manager=$1
|
|
|
|
|
|
|
|
|
|
print_status "$BLUE" "🔐 Ensuring ImunifyAV UI assets are installed..."
|
|
|
|
|
|
|
|
|
|
mkdir -p /etc/sysconfig/imunify360/generic 2>/dev/null || true
|
|
|
|
|
mkdir -p /usr/local/CyberCP/public/imunifyav 2>/dev/null || true
|
|
|
|
|
|
|
|
|
|
case $package_manager in
|
|
|
|
|
"yum"|"dnf")
|
|
|
|
|
if ! $package_manager install -y imunify-ui-generic imunify-antivirus >/dev/null 2>&1; then
|
|
|
|
|
print_status "$YELLOW" "⚠️ Unable to install Imunify packages via $package_manager (will continue)."
|
|
|
|
|
fi
|
|
|
|
|
;;
|
|
|
|
|
"apt")
|
|
|
|
|
apt-get update -y >/dev/null 2>&1 || true
|
|
|
|
|
if ! apt-get install -y imunify-antivirus >/dev/null 2>&1; then
|
|
|
|
|
print_status "$YELLOW" "⚠️ imunify-antivirus package not available in APT repositories."
|
|
|
|
|
fi
|
|
|
|
|
;;
|
|
|
|
|
esac
|
|
|
|
|
|
|
|
|
|
chown -R lscpd:lscpd /usr/local/CyberCP/public/imunifyav 2>/dev/null || true
|
|
|
|
|
chown -R lscpd:lscpd /etc/sysconfig/imunify360 2>/dev/null || true
|
|
|
|
|
|
|
|
|
|
print_status "$GREEN" "✅ ImunifyAV assets verified"
|
|
|
|
|
}
|
|
|
|
|
|
2025-09-25 11:45:40 +02:00
|
|
|
# Function to check service status
|
|
|
|
|
check_service_status() {
|
|
|
|
|
local service_name=$1
|
|
|
|
|
local display_name=$2
|
|
|
|
|
|
|
|
|
|
if systemctl is-active --quiet $service_name; then
|
|
|
|
|
echo "✅ $display_name: RUNNING"
|
|
|
|
|
return 0
|
|
|
|
|
elif systemctl is-enabled --quiet $service_name; then
|
|
|
|
|
echo "⚠️ $display_name: ENABLED BUT NOT RUNNING"
|
|
|
|
|
return 1
|
|
|
|
|
else
|
|
|
|
|
echo "❌ $display_name: NOT INSTALLED/DISABLED"
|
|
|
|
|
return 2
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Function to check port status
|
|
|
|
|
check_port_status() {
|
|
|
|
|
local port=$1
|
|
|
|
|
local service_name=$2
|
|
|
|
|
|
|
|
|
|
if netstat -tlnp | grep -q ":$port "; then
|
|
|
|
|
echo "✅ Port $port ($service_name): LISTENING"
|
|
|
|
|
return 0
|
|
|
|
|
else
|
|
|
|
|
echo "❌ Port $port ($service_name): NOT LISTENING"
|
|
|
|
|
return 1
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Function to generate status summary
|
|
|
|
|
generate_status_summary() {
|
|
|
|
|
local critical_failures=0
|
|
|
|
|
local warnings=0
|
|
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
|
echo "╔═══════════════════════════════════════════════════════════════════════════════════════════════════════════════╗"
|
|
|
|
|
echo "║ ║"
|
|
|
|
|
echo "║ 📊 CYBERPANEL INSTALLATION STATUS SUMMARY 📊 ║"
|
|
|
|
|
echo "║ ║"
|
|
|
|
|
echo "╚═══════════════════════════════════════════════════════════════════════════════════════════════════════════════╝"
|
|
|
|
|
echo ""
|
|
|
|
|
|
|
|
|
|
echo "🔧 CORE SERVICES STATUS:"
|
|
|
|
|
echo "═══════════════════════════════════════════════════════════════════════════════════════════════════════════════"
|
|
|
|
|
|
|
|
|
|
# Check critical services
|
|
|
|
|
if ! check_service_status "mariadb" "MariaDB Database"; then
|
|
|
|
|
critical_failures=$((critical_failures + 1))
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if ! check_service_status "lsws" "LiteSpeed Web Server"; then
|
|
|
|
|
critical_failures=$((critical_failures + 1))
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if ! check_service_status "lsmcd" "LiteSpeed Memcached"; then
|
|
|
|
|
warnings=$((warnings + 1))
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if ! check_service_status "cyberpanel" "CyberPanel Application"; then
|
|
|
|
|
critical_failures=$((critical_failures + 1))
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if ! check_service_status "watchdog" "Watchdog Service"; then
|
|
|
|
|
warnings=$((warnings + 1))
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
|
echo "🌐 NETWORK PORTS STATUS:"
|
|
|
|
|
echo "═══════════════════════════════════════════════════════════════════════════════════════════════════════════════"
|
|
|
|
|
|
|
|
|
|
# Check critical ports
|
|
|
|
|
if ! check_port_status "3306" "MariaDB"; then
|
|
|
|
|
critical_failures=$((critical_failures + 1))
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if ! check_port_status "80" "HTTP"; then
|
|
|
|
|
critical_failures=$((critical_failures + 1))
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if ! check_port_status "443" "HTTPS"; then
|
|
|
|
|
warnings=$((warnings + 1))
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if ! check_port_status "8090" "CyberPanel"; then
|
|
|
|
|
critical_failures=$((critical_failures + 1))
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if ! check_port_status "7080" "LiteSpeed Admin"; then
|
|
|
|
|
warnings=$((warnings + 1))
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
|
echo "📊 SUMMARY:"
|
|
|
|
|
echo "═══════════════════════════════════════════════════════════════════════════════════════════════════════════════"
|
|
|
|
|
|
|
|
|
|
if [ $critical_failures -eq 0 ]; then
|
|
|
|
|
print_status "$GREEN" "🎉 INSTALLATION SUCCESSFUL! All critical services are running."
|
|
|
|
|
echo "✅ Critical Failures: $critical_failures"
|
|
|
|
|
echo "⚠️ Warnings: $warnings"
|
|
|
|
|
return 0
|
|
|
|
|
else
|
|
|
|
|
print_status "$RED" "❌ INSTALLATION HAS CRITICAL ISSUES! $critical_failures critical failures detected."
|
|
|
|
|
echo "❌ Critical Failures: $critical_failures"
|
|
|
|
|
echo "⚠️ Warnings: $warnings"
|
|
|
|
|
return 1
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Main function to apply all fixes
|
|
|
|
|
apply_cyberpanel_fixes() {
|
|
|
|
|
local package_manager=$1
|
|
|
|
|
|
|
|
|
|
print_status "$BLUE" "🔧 Applying CyberPanel installation fixes..."
|
|
|
|
|
|
|
|
|
|
# Fix database issues
|
|
|
|
|
fix_database_issues
|
|
|
|
|
|
|
|
|
|
# Fix LiteSpeed service
|
|
|
|
|
fix_litespeed_service
|
|
|
|
|
|
|
|
|
|
# Fix SSL certificates
|
|
|
|
|
fix_ssl_certificates
|
|
|
|
|
|
|
|
|
|
# Fix admin console
|
|
|
|
|
fix_admin_console
|
|
|
|
|
|
|
|
|
|
# Fix CyberPanel service
|
|
|
|
|
fix_cyberpanel_service
|
|
|
|
|
|
|
|
|
|
# Fix file permissions
|
|
|
|
|
fix_file_permissions
|
|
|
|
|
|
|
|
|
|
# Fix missing dependencies
|
|
|
|
|
fix_missing_dependencies "$package_manager"
|
2025-11-15 23:25:13 +01:00
|
|
|
|
|
|
|
|
# Ensure ImunifyAV UI assets are always present
|
|
|
|
|
ensure_imunify_av_assets "$package_manager"
|
2025-09-25 11:45:40 +02:00
|
|
|
|
|
|
|
|
print_status "$GREEN" "✅ All CyberPanel fixes applied successfully"
|
|
|
|
|
|
|
|
|
|
# Generate status summary
|
|
|
|
|
generate_status_summary
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Main execution
|
|
|
|
|
if [ "${BASH_SOURCE[0]}" == "${0}" ]; then
|
|
|
|
|
if [ $# -lt 1 ]; then
|
|
|
|
|
echo "Usage: $0 <package_manager>"
|
|
|
|
|
echo "Example: $0 dnf"
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
apply_cyberpanel_fixes "$1"
|
|
|
|
|
fi
|