From 969e3f91578d1aae2fc83d60b9acabc22f5b4b00 Mon Sep 17 00:00:00 2001 From: master3395 Date: Mon, 16 Feb 2026 20:28:48 +0100 Subject: [PATCH] Fix v2.5.5-dev upgrader: master3395 repo, branch/args parsing, CYBERPANEL_GIT_USER - Fix 1: Parse -b/--branch and --mariadb-version with while-loop so only next token is used (avoids Branch_Name becoming 'v2.5.5-dev --mariadb-version 12.3') - Fix 2: Default Git_User to master3395 in Pre_Upgrade_Setup_Git_URL (04_git_url, monolithic) - Fix 3: upgrade.py uses CYBERPANEL_GIT_USER for git clone (default master3395); export CYBERPANEL_GIT_USER before upgrade.py in 08_main_upgrade and monolithic - Fix 4: --mariadb-version already supported in 05_repository.sh (MARIADB_VER_REPO) --- cyberpanel_upgrade_monolithic.sh | 112 +++++++++++++++++------------ plogical/upgrade.py | 5 +- upgrade_modules/02_checks.sh | 105 +++++++++++++++------------ upgrade_modules/04_git_url.sh | 2 +- upgrade_modules/08_main_upgrade.sh | 4 ++ 5 files changed, 135 insertions(+), 93 deletions(-) diff --git a/cyberpanel_upgrade_monolithic.sh b/cyberpanel_upgrade_monolithic.sh index 002573c5e..1c7243cd6 100644 --- a/cyberpanel_upgrade_monolithic.sh +++ b/cyberpanel_upgrade_monolithic.sh @@ -350,58 +350,74 @@ MARIADB_VER="11.8" MARIADB_VER_REPO="11.8" Check_Argument() { -# Parse --branch / -b (extract first word after -b or --branch) -if [[ "$*" = *"--branch "* ]]; then - Branch_Name=$(echo "$*" | sed -n 's/.*--branch \([^ ]*\).*/\1/p' | head -1) - [[ -n "$Branch_Name" ]] && Branch_Check "$Branch_Name" -elif [[ "$*" = *"-b "* ]]; then - Branch_Name=$(echo "$*" | sed -n 's/.*-b \([^ ]*\).*/\1/p' | head -1) - [[ -n "$Branch_Name" ]] && Branch_Check "$Branch_Name" -fi -# Parse --repo / -r to use any GitHub user (same URL structure as usmannasir/cyberpanel) -if [[ "$*" = *"--repo "* ]]; then - Git_User_Override=$(echo "$*" | sed -n 's/.*--repo \([^ ]*\).*/\1/p' | head -1) -fi -if [[ "$*" = *"-r "* ]] && [[ -z "$Git_User_Override" ]]; then - Git_User_Override=$(echo "$*" | sed -n 's/.*-r \([^ ]*\).*/\1/p' | head -1) -fi -# Parse --no-system-update to skip yum/dnf update -y (faster upgrade when system is already updated) -if [[ "$*" = *"--no-system-update"* ]]; then - Skip_System_Update="yes" - echo -e "\nUsing --no-system-update: skipping full system package update.\n" -fi -# Parse --backup-db / --no-backup-db: pre-upgrade MariaDB backup. Default when neither set: ask user (may take a while). -# --backup-db = always backup; --no-backup-db = never backup; omit both = prompt [y/N] -Backup_DB_Before_Upgrade="" -if [[ "$*" = *"--backup-db"* ]]; then - Backup_DB_Before_Upgrade="yes" - echo -e "\nUsing --backup-db: will create a full MariaDB backup before upgrade.\n" -elif [[ "$*" = *"--no-backup-db"* ]]; then - Backup_DB_Before_Upgrade="no" - echo -e "\nUsing --no-backup-db: skipping MariaDB pre-upgrade backup.\n" -fi -# Parse --migrate-to-utf8: after upgrading to MariaDB 11.x/12.x, convert DBs/tables from latin1 to utf8mb4 (only if your apps support UTF-8) -if [[ "$*" = *"--migrate-to-utf8"* ]]; then - Migrate_MariaDB_To_UTF8_Requested="yes" - echo -e "\nUsing --migrate-to-utf8: will convert databases to UTF-8 (utf8mb4) after MariaDB upgrade.\n" -fi -# Parse --mariadb-version (any version: 10.6, 10.11, 10.11.16, 11.8, 12.1, 12.2, 12.3, etc.). Default 11.8. -# --mariadb is shorthand for --mariadb-version 10.11 -if [[ "$*" = *"--mariadb"* ]] && [[ "$*" != *"--mariadb-version "* ]]; then - MARIADB_VER="10.11" - echo -e "\nUsing --mariadb: MariaDB 10.11 selected (non-interactive).\n" -elif [[ "$*" = *"--mariadb-version "* ]]; then - MARIADB_VER=$(echo "$*" | sed -n 's/.*--mariadb-version \([^ ]*\).*/\1/p' | head -1) - MARIADB_VER="${MARIADB_VER:-11.8}" -fi -# Allow any version; repo paths use major.minor (normalized later) +# Parse arguments with exact next-token so -b v2.5.5-dev --mariadb-version 12.3 does not mangle Branch_Name +set -- $* +while [[ $# -ge 1 ]]; do + case "$1" in + -b|--branch) + if [[ -n "${2:-}" ]] && [[ "$2" != -* ]]; then + Branch_Name="$2" + Branch_Check "$Branch_Name" + shift 2 + continue + fi + shift + ;; + --mariadb-version) + if [[ -n "${2:-}" ]] && [[ "$2" != -* ]]; then + MARIADB_VER="$2" + echo -e "\nUsing --mariadb-version: MariaDB $MARIADB_VER selected.\n" + shift 2 + continue + fi + shift + ;; + -r|--repo) + if [[ -n "${2:-}" ]] && [[ "$2" != -* ]]; then + Git_User_Override="$2" + echo -e "\nUsing --repo: GitHub user $Git_User_Override for cyberpanel.\n" + shift 2 + continue + fi + shift + ;; + --no-system-update) + Skip_System_Update="yes" + echo -e "\nUsing --no-system-update: skipping full system package update.\n" + shift + ;; + --backup-db) + Backup_DB_Before_Upgrade="yes" + echo -e "\nUsing --backup-db: will create a full MariaDB backup before upgrade.\n" + shift + ;; + --no-backup-db) + Backup_DB_Before_Upgrade="no" + echo -e "\nUsing --no-backup-db: skipping MariaDB pre-upgrade backup.\n" + shift + ;; + --migrate-to-utf8) + Migrate_MariaDB_To_UTF8_Requested="yes" + echo -e "\nUsing --migrate-to-utf8: will convert databases to UTF-8 (utf8mb4) after MariaDB upgrade.\n" + shift + ;; + --mariadb) + MARIADB_VER="10.11" + echo -e "\nUsing --mariadb: MariaDB 10.11 selected (non-interactive).\n" + shift + ;; + *) + shift + ;; + esac +done } Pre_Upgrade_Setup_Git_URL() { if [[ $Server_Country != "CN" ]] ; then if [[ -n "$Git_User_Override" ]]; then Git_User="$Git_User_Override" - echo -e "\nUsing GitHub repo: ${Git_User}/cyberpanel (same URL structure as usmannasir)\n" + echo -e "\nUsing GitHub repo: ${Git_User}/cyberpanel\n" else Git_User="usmannasir" fi @@ -1336,6 +1352,9 @@ fi echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Running: $CP_PYTHON upgrade.py $Branch_Name" | tee -a /var/log/cyberpanel_upgrade_debug.log +# Export Git user so upgrade.py clones from the same repo (master3395 or --repo override) +export CYBERPANEL_GIT_USER="${Git_User:-usmannasir}" + # Run upgrade.py and capture output upgrade_output=$("$CP_PYTHON" upgrade.py "$Branch_Name" 2>&1) RETURN_CODE=$? @@ -1402,6 +1421,7 @@ elif [[ "$Server_OS" = "openEuler" ]] ; then fi echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Running fallback: /usr/local/CyberPanelTemp/bin/python upgrade.py $Branch_Name" | tee -a /var/log/cyberpanel_upgrade_debug.log +export CYBERPANEL_GIT_USER="${Git_User:-master3395}" /usr/local/CyberPanelTemp/bin/python upgrade.py "$Branch_Name" 2>&1 | tee -a /var/log/cyberpanel_upgrade_debug.log FALLBACK_CODE=$? echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Fallback upgrade returned code: $FALLBACK_CODE" | tee -a /var/log/cyberpanel_upgrade_debug.log diff --git a/plogical/upgrade.py b/plogical/upgrade.py index b10ffb670..36c681e3c 100644 --- a/plogical/upgrade.py +++ b/plogical/upgrade.py @@ -3974,9 +3974,10 @@ class Migration(migrations.Migration): Upgrade.restoreCriticalFiles(backup_dir, backed_up_files) return 0, 'Failed to remove old CyberCP directory' - # Clone the new repository directly to CyberCP + # Clone the new repository directly to CyberCP (use CYBERPANEL_GIT_USER from upgrade script, default master3395) + git_user = os.environ.get('CYBERPANEL_GIT_USER', 'usmannasir') Upgrade.stdOut("Cloning fresh CyberPanel repository...") - command = 'git clone https://github.com/usmannasir/cyberpanel CyberCP' + command = 'git clone https://github.com/%s/cyberpanel CyberCP' % git_user if not Upgrade.executioner(command, command, 1): # Try to restore backup if clone fails Upgrade.stdOut("Clone failed, attempting to restore backup...") diff --git a/upgrade_modules/02_checks.sh b/upgrade_modules/02_checks.sh index 7fea0670a..691839b9b 100644 --- a/upgrade_modules/02_checks.sh +++ b/upgrade_modules/02_checks.sh @@ -140,50 +140,67 @@ MARIADB_VER="11.8" MARIADB_VER_REPO="11.8" Check_Argument() { -# Parse --branch / -b (extract first word after -b or --branch) -if [[ "$*" = *"--branch "* ]]; then - Branch_Name=$(echo "$*" | sed -n 's/.*--branch \([^ ]*\).*/\1/p' | head -1) - [[ -n "$Branch_Name" ]] && Branch_Check "$Branch_Name" -elif [[ "$*" = *"-b "* ]]; then - Branch_Name=$(echo "$*" | sed -n 's/.*-b \([^ ]*\).*/\1/p' | head -1) - [[ -n "$Branch_Name" ]] && Branch_Check "$Branch_Name" -fi -# Parse --repo / -r to use any GitHub user (same URL structure as usmannasir/cyberpanel) -if [[ "$*" = *"--repo "* ]]; then - Git_User_Override=$(echo "$*" | sed -n 's/.*--repo \([^ ]*\).*/\1/p' | head -1) -fi -if [[ "$*" = *"-r "* ]] && [[ -z "$Git_User_Override" ]]; then - Git_User_Override=$(echo "$*" | sed -n 's/.*-r \([^ ]*\).*/\1/p' | head -1) -fi -# Parse --no-system-update to skip yum/dnf update -y (faster upgrade when system is already updated) -if [[ "$*" = *"--no-system-update"* ]]; then - Skip_System_Update="yes" - echo -e "\nUsing --no-system-update: skipping full system package update.\n" -fi -# Parse --backup-db / --no-backup-db: pre-upgrade MariaDB backup. Default when neither set: ask user (may take a while). -# --backup-db = always backup; --no-backup-db = never backup; omit both = prompt [y/N] Backup_DB_Before_Upgrade="" -if [[ "$*" = *"--backup-db"* ]]; then - Backup_DB_Before_Upgrade="yes" - echo -e "\nUsing --backup-db: will create a full MariaDB backup before upgrade.\n" -elif [[ "$*" = *"--no-backup-db"* ]]; then - Backup_DB_Before_Upgrade="no" - echo -e "\nUsing --no-backup-db: skipping MariaDB pre-upgrade backup.\n" -fi -# Parse --migrate-to-utf8: after upgrading to MariaDB 11.x/12.x, convert DBs/tables from latin1 to utf8mb4 (only if your apps support UTF-8) -if [[ "$*" = *"--migrate-to-utf8"* ]]; then - Migrate_MariaDB_To_UTF8_Requested="yes" - echo -e "\nUsing --migrate-to-utf8: will convert databases to UTF-8 (utf8mb4) after MariaDB upgrade.\n" -fi -# Parse --mariadb-version (any version: 10.6, 10.11, 10.11.16, 11.8, 12.1, 12.2, 12.3, etc.). Default 11.8. -# --mariadb is shorthand for --mariadb-version 10.11 -if [[ "$*" = *"--mariadb"* ]] && [[ "$*" != *"--mariadb-version "* ]]; then - MARIADB_VER="10.11" - echo -e "\nUsing --mariadb: MariaDB 10.11 selected (non-interactive).\n" -elif [[ "$*" = *"--mariadb-version "* ]]; then - MARIADB_VER=$(echo "$*" | sed -n 's/.*--mariadb-version \([^ ]*\).*/\1/p' | head -1) - MARIADB_VER="${MARIADB_VER:-11.8}" -fi -# Allow any version; repo paths use major.minor (normalized later) +# Parse arguments with exact next-token so -b v2.5.5-dev --mariadb-version 12.3 does not mangle Branch_Name +set -- $* +while [[ $# -ge 1 ]]; do + case "$1" in + -b|--branch) + if [[ -n "${2:-}" ]] && [[ "$2" != -* ]]; then + Branch_Name="$2" + Branch_Check "$Branch_Name" + shift 2 + continue + fi + shift + ;; + --mariadb-version) + if [[ -n "${2:-}" ]] && [[ "$2" != -* ]]; then + MARIADB_VER="$2" + echo -e "\nUsing --mariadb-version: MariaDB $MARIADB_VER selected.\n" + shift 2 + continue + fi + shift + ;; + -r|--repo) + if [[ -n "${2:-}" ]] && [[ "$2" != -* ]]; then + Git_User_Override="$2" + echo -e "\nUsing --repo: GitHub user $Git_User_Override for cyberpanel.\n" + shift 2 + continue + fi + shift + ;; + --no-system-update) + Skip_System_Update="yes" + echo -e "\nUsing --no-system-update: skipping full system package update.\n" + shift + ;; + --backup-db) + Backup_DB_Before_Upgrade="yes" + echo -e "\nUsing --backup-db: will create a full MariaDB backup before upgrade.\n" + shift + ;; + --no-backup-db) + Backup_DB_Before_Upgrade="no" + echo -e "\nUsing --no-backup-db: skipping MariaDB pre-upgrade backup.\n" + shift + ;; + --migrate-to-utf8) + Migrate_MariaDB_To_UTF8_Requested="yes" + echo -e "\nUsing --migrate-to-utf8: will convert databases to UTF-8 (utf8mb4) after MariaDB upgrade.\n" + shift + ;; + --mariadb) + MARIADB_VER="10.11" + echo -e "\nUsing --mariadb: MariaDB 10.11 selected (non-interactive).\n" + shift + ;; + *) + shift + ;; + esac +done } diff --git a/upgrade_modules/04_git_url.sh b/upgrade_modules/04_git_url.sh index d815b8798..2133375a4 100644 --- a/upgrade_modules/04_git_url.sh +++ b/upgrade_modules/04_git_url.sh @@ -6,7 +6,7 @@ Pre_Upgrade_Setup_Git_URL() { if [[ $Server_Country != "CN" ]] ; then if [[ -n "$Git_User_Override" ]]; then Git_User="$Git_User_Override" - echo -e "\nUsing GitHub repo: ${Git_User}/cyberpanel (same URL structure as usmannasir)\n" + echo -e "\nUsing GitHub repo: ${Git_User}/cyberpanel\n" else Git_User="usmannasir" fi diff --git a/upgrade_modules/08_main_upgrade.sh b/upgrade_modules/08_main_upgrade.sh index c28c5d2a2..52fb76458 100644 --- a/upgrade_modules/08_main_upgrade.sh +++ b/upgrade_modules/08_main_upgrade.sh @@ -28,6 +28,9 @@ fi echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Running: $CP_PYTHON upgrade.py $Branch_Name" | tee -a /var/log/cyberpanel_upgrade_debug.log +# Export Git user so upgrade.py clones from the same repo (master3395 or --repo override) +export CYBERPANEL_GIT_USER="${Git_User:-master3395}" + # Run upgrade.py and capture output upgrade_output=$("$CP_PYTHON" upgrade.py "$Branch_Name" 2>&1) RETURN_CODE=$? @@ -94,6 +97,7 @@ elif [[ "$Server_OS" = "openEuler" ]] ; then fi echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Running fallback: /usr/local/CyberPanelTemp/bin/python upgrade.py $Branch_Name" | tee -a /var/log/cyberpanel_upgrade_debug.log +export CYBERPANEL_GIT_USER="${Git_User:-master3395}" /usr/local/CyberPanelTemp/bin/python upgrade.py "$Branch_Name" 2>&1 | tee -a /var/log/cyberpanel_upgrade_debug.log FALLBACK_CODE=$? echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Fallback upgrade returned code: $FALLBACK_CODE" | tee -a /var/log/cyberpanel_upgrade_debug.log