diff --git a/baseTemplate/templates/baseTemplate/index.html b/baseTemplate/templates/baseTemplate/index.html index f00f3828f..ec310faaf 100644 --- a/baseTemplate/templates/baseTemplate/index.html +++ b/baseTemplate/templates/baseTemplate/index.html @@ -2105,7 +2105,10 @@ Installed - + + {% trans "Plugin Store" %} + + {% endif %} diff --git a/cyberpanel_upgrade.sh b/cyberpanel_upgrade.sh index 046f0dbb5..0ccb77013 100644 --- a/cyberpanel_upgrade.sh +++ b/cyberpanel_upgrade.sh @@ -60,6 +60,9 @@ Panel_Build=${Temp_Value:25:1} Branch_Name="v${Panel_Version}.${Panel_Build}" Base_Number="1.9.3" +# Optional: set by --mariadb-version (e.g. 12.3, 12.1, 11.8, 10.11) +MARIADB_VERSION_REQUESTED="" + Git_User="" Git_Content_URL="" Git_Clone_URL="" @@ -219,24 +222,34 @@ fi } Branch_Check() { -if [[ "$1" = *.*.* ]]; then - #check input if it's valid format as X.Y.Z - Output=$(awk -v num1="$Base_Number" -v num2="${1//[[:space:]]/}" ' + local raw_branch="${1//[[:space:]]/}" + # Accept branch/tag format: vX.Y.Z or vX.Y.Z-suffix (e.g. v2.5.5-dev) + if [[ "$raw_branch" = v*.*.* ]]; then + Branch_Name="$raw_branch" + echo -e "\nSet branch name to $Branch_Name...\n" + return + fi + if [[ "$1" = *.*.* ]]; then + # Numeric comparison for X.Y.Z format + local num2="${1//[[:space:]]/}" + num2="${num2#v}" + num2="${num2%-*}" + Output=$(awk -v num1="$Base_Number" -v num2="$num2" ' BEGIN { print "num1", (num1 < num2 ? "<" : ">="), "num2" } ') - if [[ $Output = *">="* ]]; then - echo -e "\nYou must use version number higher than 2.3.4" - exit + if [[ $Output = *">="* ]]; then + echo -e "\nYou must use version number higher than 2.3.4" + exit + else + Branch_Name="v${1//[[:space:]]/}" + echo -e "\nSet branch name to $Branch_Name...\n" + fi else - Branch_Name="v${1//[[:space:]]/}" - echo -e "\nSet branch name to $Branch_Name...\n" + echo -e "\nPlease input a valid format version number (e.g. 2.5.4 or v2.5.5-dev)." + exit fi -else - echo -e "\nPlease input a valid format version number." - exit -fi } Check_Return() { @@ -317,15 +330,31 @@ done } Check_Argument() { -if [[ "$*" = *"--branch "* ]] || [[ "$*" = *"-b "* ]]; then - Branch_Name=$(echo "$*" | sed -e "s/--branch //" -e "s/--mirror//" -e "s/-b //") - Branch_Check "$Branch_Name" -fi + # Parse -b/--branch and --mariadb-version so branch name is not mangled (e.g. by "v2.5.5-dev --mariadb-version 12.3") + local saw_branch="" + while [ $# -gt 0 ]; do + case "$1" in + -b|--branch) + [ -n "${2:-}" ] && Branch_Name="$2" && saw_branch=1 && shift 2 || shift + ;; + --mariadb-version) + [ -n "${2:-}" ] && MARIADB_VERSION_REQUESTED="$2" && shift 2 || shift + ;; + --mariadb) + MARIADB_VERSION_REQUESTED="10.11" + shift + ;; + *) + shift + ;; + esac + done + [ -n "$saw_branch" ] && Branch_Check "$Branch_Name" } Pre_Upgrade_Setup_Git_URL() { if [[ $Server_Country != "CN" ]] ; then - Git_User="usmannasir" + Git_User="master3395" Git_Content_URL="https://raw.githubusercontent.com/${Git_User}/cyberpanel" Git_Clone_URL="https://github.com/${Git_User}/cyberpanel.git" else @@ -420,13 +449,13 @@ if [[ "$Server_OS" = "CentOS" ]] || [[ "$Server_OS" = "AlmaLinux9" ]] ; then else MARIADB_REPO="centos7-amd64" fi - + MARIADB_VER="${MARIADB_VERSION_REQUESTED:-12.1}" cat << EOF > /etc/yum.repos.d/MariaDB.repo -# MariaDB 12.1 repository list - updated 2025-09-25 +# MariaDB $MARIADB_VER repository list # https://downloads.mariadb.org/mariadb/repositories/ [mariadb] name = MariaDB -baseurl = https://mirror.mariadb.org/yum/12.1/$MARIADB_REPO +baseurl = https://mirror.mariadb.org/yum/$MARIADB_VER/$MARIADB_REPO gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1 EOF @@ -492,6 +521,56 @@ EOF dnf install epel-release -y + # MariaDB version: use --mariadb-version if set (e.g. 12.3, 12.1, 11.8), else distro default + if [[ -n "$MARIADB_VERSION_REQUESTED" ]] ; then + echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Adding MariaDB $MARIADB_VERSION_REQUESTED repository for AlmaLinux/RHEL 9/10..." | tee -a /var/log/cyberpanel_upgrade_debug.log + rm -f /etc/yum.repos.d/MariaDB.repo + cat << EOF > /etc/yum.repos.d/MariaDB.repo +[mariadb] +name = MariaDB +baseurl = https://mirror.mariadb.org/yum/$MARIADB_VERSION_REQUESTED/rhel9-amd64 +gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB +gpgcheck=1 +EOF + if [[ "$Server_Country" = "CN" ]] ; then + sed -i 's|https://mirror.mariadb.org|https://cyberpanel.sh/mirror.mariadb.org|g' /etc/yum.repos.d/MariaDB.repo + sed -i 's|https://yum.mariadb.org|https://cyberpanel.sh/yum.mariadb.org|g' /etc/yum.repos.d/MariaDB.repo + fi + # If MariaDB is already installed with a different major version, do a proper upgrade (stop -> remove -> install -> start -> mariadb-upgrade) + CURRENT_MARIADB_VER="" + if command -v mysql &>/dev/null; then + CURRENT_MARIADB_VER=$(mysql -V 2>/dev/null | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1) + fi + REQUESTED_MAJOR="${MARIADB_VERSION_REQUESTED%%.*}" + CURRENT_MAJOR="" + [[ -n "$CURRENT_MARIADB_VER" ]] && CURRENT_MAJOR="${CURRENT_MARIADB_VER%%.*}" + if [[ -n "$CURRENT_MAJOR" ]] && [[ "$CURRENT_MAJOR" != "$REQUESTED_MAJOR" ]]; then + echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Upgrading MariaDB $CURRENT_MARIADB_VER -> $MARIADB_VERSION_REQUESTED (stop, remove, install, start, upgrade)..." | tee -a /var/log/cyberpanel_upgrade_debug.log + systemctl stop mariadb 2>/dev/null || systemctl stop mysql 2>/dev/null || true + dnf remove -y MariaDB-server MariaDB-client MariaDB-devel MariaDB-shared MariaDB-common 2>/dev/null || true + dnf remove -y mariadb-server mariadb-client mariadb-devel mariadb 2>/dev/null || true + dnf install -y MariaDB-server MariaDB-client MariaDB-devel 2>&1 | tee -a /var/log/cyberpanel_upgrade_debug.log + systemctl enable mariadb 2>/dev/null || systemctl enable mysql 2>/dev/null || true + systemctl start mariadb 2>/dev/null || systemctl start mysql 2>/dev/null || true + sleep 3 + if [[ -n "$MySQL_Password" ]] && [[ -f /etc/cyberpanel/mysqlPassword ]]; then + mariadb-upgrade -u root -p"$MySQL_Password" 2>&1 | tee -a /var/log/cyberpanel_upgrade_debug.log || mariadb-upgrade -u root 2>&1 | tee -a /var/log/cyberpanel_upgrade_debug.log + else + mariadb-upgrade -u root 2>&1 | tee -a /var/log/cyberpanel_upgrade_debug.log + fi + echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] MariaDB upgrade to $MARIADB_VERSION_REQUESTED completed." | tee -a /var/log/cyberpanel_upgrade_debug.log + else + # Same major or not installed: install or upgrade in place + dnf install -y MariaDB-server MariaDB-client MariaDB-devel --allowerasing 2>&1 | tee -a /var/log/cyberpanel_upgrade_debug.log + systemctl enable mariadb 2>/dev/null || systemctl enable mysql 2>/dev/null || true + systemctl start mariadb 2>/dev/null || systemctl start mysql 2>/dev/null || true + if [[ -n "$CURRENT_MARIADB_VER" ]]; then + sleep 2 + mariadb-upgrade -u root 2>&1 | tee -a /var/log/cyberpanel_upgrade_debug.log || true + fi + fi + fi + # AlmaLinux 9 specific package installation if [[ "$Server_OS" = "AlmaLinux9" ]] ; then echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Installing AlmaLinux 9 specific packages..." | tee -a /var/log/cyberpanel_upgrade_debug.log @@ -507,8 +586,10 @@ EOF sqlite-devel libxml2-devel libxslt-devel curl-devel libedit-devel \ readline-devel pkgconfig cmake gcc-c++ - # Install MariaDB - dnf install -y mariadb-server mariadb-devel mariadb-client + # Install MariaDB (only if not already installed from MARIADB_VERSION_REQUESTED above) + if [[ -z "$MARIADB_VERSION_REQUESTED" ]] ; then + dnf install -y mariadb-server mariadb-devel mariadb-client + fi # Install additional required packages dnf install -y wget curl unzip zip rsync firewalld psmisc git python3 python3-pip python3-devel @@ -663,7 +744,7 @@ if [ $CYBERCP_MISSING -eq 1 ]; then cd /usr/local rm -rf CyberCP_recovery_tmp - if git clone https://github.com/usmannasir/cyberpanel CyberCP_recovery_tmp; then + if git clone "${Git_Clone_URL:-https://github.com/master3395/cyberpanel.git}" CyberCP_recovery_tmp; then echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Repository cloned successfully for recovery" | tee -a /var/log/cyberpanel_upgrade_debug.log # Checkout the appropriate branch @@ -862,7 +943,7 @@ fi Pre_Upgrade_Setup_Git_URL() { if [[ $Server_Country != "CN" ]] ; then - Git_User="usmannasir" + Git_User="master3395" Git_Content_URL="https://raw.githubusercontent.com/${Git_User}/cyberpanel" Git_Clone_URL="https://github.com/${Git_User}/cyberpanel.git" else @@ -891,10 +972,12 @@ 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 +# Export Git user so plogical/upgrade.py clones from this fork (master3395), not usmannasir +export CYBERPANEL_GIT_USER="${Git_User:-master3395}" 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 -# Run upgrade.py and capture output -upgrade_output=$(/usr/local/CyberPanel/bin/python upgrade.py "$Branch_Name" 2>&1) +# Run upgrade.py and capture output (from /root/cyberpanel_upgrade_tmp) +upgrade_output=$(cd /root/cyberpanel_upgrade_tmp && /usr/local/CyberPanel/bin/python upgrade.py "$Branch_Name" 2>&1) RETURN_CODE=$? echo "$upgrade_output" | tee -a /var/log/cyberpanel_upgrade_debug.log diff --git a/plogical/upgrade.py b/plogical/upgrade.py index 67cfc2a3e..0b94d7aa3 100644 --- a/plogical/upgrade.py +++ b/plogical/upgrade.py @@ -292,8 +292,8 @@ except ImportError: settings = MinimalSettings() print("Recovery complete. Continuing with upgrade...") -VERSION = '2.4' -BUILD = 4 +VERSION = '2.5.5' +BUILD = 5 CENTOS7 = 0 CENTOS8 = 1 @@ -3815,9 +3815,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 (use CYBERPANEL_GIT_USER for fork, e.g. 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/pluginHolder/templates/pluginHolder/plugins.html b/pluginHolder/templates/pluginHolder/plugins.html index f53e351a0..9aab6b3f6 100644 --- a/pluginHolder/templates/pluginHolder/plugins.html +++ b/pluginHolder/templates/pluginHolder/plugins.html @@ -2206,14 +2206,20 @@ document.addEventListener('DOMContentLoaded', function() { // Update cache expiry time to local timezone updateCacheExpiryTime(); - // Default to grid view if plugins exist, otherwise show store - const gridView = document.getElementById('gridView'); - const storeView = document.getElementById('storeView'); - if (gridView && gridView.children.length > 0) { - toggleView('grid'); - } else if (storeView) { - // No plugins installed, show store by default + // Respect ?view=store in URL (e.g. from sidebar "Plugin Store" link) + const urlParams = new URLSearchParams(window.location.search); + const requestedView = urlParams.get('view'); + if (requestedView === 'store') { toggleView('store'); + } else { + // Default to grid view if plugins exist, otherwise show store + const gridView = document.getElementById('gridView'); + const storeView = document.getElementById('storeView'); + if (gridView && gridView.children.length > 0) { + toggleView('grid'); + } else if (storeView) { + toggleView('store'); + } } // Load store plugins if store view is visible (either from toggleView or already displayed)