From cb2ec327ce155d3b3df5ab035de8028933e9f089 Mon Sep 17 00:00:00 2001 From: master3395 Date: Mon, 26 Jan 2026 22:29:01 +0100 Subject: [PATCH] Improve installer script patching with Python for better reliability - Uses Python to properly parse and modify installer script - Handles multiple patterns for dnf/yum install commands - Adds --exclude=MariaDB-server* to all relevant commands - Falls back to sed if Python fails - More robust than simple sed replacements --- cyberpanel.sh | 69 +++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 59 insertions(+), 10 deletions(-) diff --git a/cyberpanel.sh b/cyberpanel.sh index 0af6fe80b..1c831195b 100644 --- a/cyberpanel.sh +++ b/cyberpanel.sh @@ -790,17 +790,66 @@ except: # Create a backup cp cyberpanel_installer.sh cyberpanel_installer.sh.backup - # Patch dnf install commands to exclude MariaDB-server - # This prevents the installer from trying to upgrade MariaDB - sed -i 's/dnf install\([^;]*\)mariadb-server/dnf install\1--exclude=MariaDB-server* mariadb-server/g' cyberpanel_installer.sh 2>/dev/null - sed -i 's/dnf install\([^;]*\)MariaDB-server/dnf install\1--exclude=MariaDB-server* MariaDB-server/g' cyberpanel_installer.sh 2>/dev/null + # Use Python to properly patch the installer script + python3 << 'PYTHON_PATCH' 2>/dev/null || { +import re +import sys + +try: + with open('cyberpanel_installer.sh', 'r') as f: + content = f.read() + + original_content = content + + # Pattern 1: dnf/yum install commands with mariadb-server/MariaDB-server + # Add --exclude=MariaDB-server* before mariadb-server packages + patterns = [ + (r'(dnf install[^;]*?)(mariadb-server|MariaDB-server)', r'\1--exclude=MariaDB-server* \2'), + (r'(yum install[^;]*?)(mariadb-server|MariaDB-server)', r'\1--exclude=MariaDB-server* \2'), + (r'(dnf install[^;]*?)(\s+)(mariadb-server|MariaDB-server)', r'\1\2--exclude=MariaDB-server* \3'), + (r'(yum install[^;]*?)(\s+)(mariadb-server|MariaDB-server)', r'\1\2--exclude=MariaDB-server* \3'), + ] + + for pattern, replacement in patterns: + content = re.sub(pattern, replacement, content, flags=re.IGNORECASE) + + # Pattern 2: If dnf/yum install doesn't have --exclude yet, add it + # This catches commands like "dnf install -y mariadb-server mariadb-devel" + lines = content.split('\n') + new_lines = [] + for line in lines: + # Check if line contains dnf/yum install and mariadb-server but not --exclude + if re.search(r'(dnf|yum)\s+install', line, re.IGNORECASE) and \ + re.search(r'mariadb-server|MariaDB-server', line, re.IGNORECASE) and \ + '--exclude=MariaDB-server' not in line: + # Add --exclude=MariaDB-server* after install flags but before packages + line = re.sub( + r'((?:dnf|yum)\s+install\s+(?:-[^\s]*\s*)*)', + r'\1--exclude=MariaDB-server* ', + line, + flags=re.IGNORECASE + ) + new_lines.append(line) + + content = '\n'.join(new_lines) + + # Only write if content changed + if content != original_content: + with open('cyberpanel_installer.sh', 'w') as f: + f.write(content) + print("Installer script patched successfully") + else: + print("No changes needed in installer script") - # Also patch yum commands - sed -i 's/yum install\([^;]*\)mariadb-server/yum install\1--exclude=MariaDB-server* mariadb-server/g' cyberpanel_installer.sh 2>/dev/null - sed -i 's/yum install\([^;]*\)MariaDB-server/yum install\1--exclude=MariaDB-server* MariaDB-server/g' cyberpanel_installer.sh 2>/dev/null - - # Add exclude to any dnf/yum install command that might install MariaDB - sed -i 's/\(dnf\|yum\) install -y\([^;]*\)$/\1 install -y --exclude=MariaDB-server*\2/g' cyberpanel_installer.sh 2>/dev/null +except Exception as e: + print(f"Error patching installer script: {e}") + sys.exit(1) +PYTHON_PATCH + # Fallback: Simple sed-based patching if Python fails + sed -i 's/\(dnf\|yum\) install\([^;]*\)mariadb-server/\1 install\2--exclude=MariaDB-server* mariadb-server/gi' cyberpanel_installer.sh 2>/dev/null + sed -i 's/\(dnf\|yum\) install\([^;]*\)MariaDB-server/\1 install\2--exclude=MariaDB-server* MariaDB-server/gi' cyberpanel_installer.sh 2>/dev/null + print_status "Installer script patched (fallback method)" + } print_status "Installer script patched to exclude MariaDB-server from installation" fi