Files
CyberPanel/modules/fixes/cyberpanel_fixes.sh

403 lines
13 KiB
Bash
Raw Normal View History

#!/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"
}
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"
}
# 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"
# Ensure ImunifyAV UI assets are always present
ensure_imunify_av_assets "$package_manager"
print_status "$GREEN" "✅ All CyberPanel fixes applied successfully"
# Generate status summary
generate_status_summary
}
# Main execution
if [ "${BASH_SOURCE[0]}" == "${0}" ]; then
if [ $# -lt 1 ]; then
echo "Usage: $0 <package_manager>"
echo "Example: $0 dnf"
exit 1
fi
apply_cyberpanel_fixes "$1"
fi