Install/upgrade and CPScripts: preserve all local changes

- cyberpanel_install_monolithic.sh, cyberpanel_upgrade_monolithic.sh
- install/ (install.py, venvsetup), install_modules/02_install_core.sh
- plogical/upgrade.py
- upgrade_modules/03_mariadb.sh, 05_repository.sh
- CPScripts: phpmyadmin_version_changer.sh, snappymail_version_changer.sh
- to-do/ (MARIADB-ROLLBACK-FROM-BACKUP.md)
This commit is contained in:
master3395
2026-02-17 13:37:20 +01:00
parent c2e474d724
commit 026460fbcb
12 changed files with 421 additions and 153 deletions

View File

@@ -0,0 +1,58 @@
#!/bin/bash
# Change phpMyAdmin version: download chosen version, preserve config.inc.php and phpmyadminsignin.php.
# Run as root: bash /usr/local/CyberCP/CPScripts/phpmyadmin_version_changer.sh [VERSION]
set -e
PMA_DIR="/usr/local/CyberCP/public/phpmyadmin"
TMP_CONFIG="/tmp/cyberpanel_pma_config.inc.php.bak"
TMP_SIGNON="/tmp/cyberpanel_pma_phpmyadminsignin.php.bak"
LOG="/var/log/cyberpanel_upgrade_debug.log"
log() { echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] $*" | tee -a "$LOG"; }
if [[ $(id -u) -ne 0 ]]; then
echo "Run as root: sudo bash $0 [VERSION]"
exit 1
fi
PMA_VER="${1:-}"
if [[ -z "$PMA_VER" ]]; then
PMA_VER=$(curl -sS "https://api.github.com/repos/phpmyadmin/phpmyadmin/releases/latest" 2>/dev/null | grep -o '"tag_name": "[^"]*' | sed 's/"tag_name": "//;s/^RELEASE_//;s/_/./g' | head -1)
[[ -z "$PMA_VER" ]] && PMA_VER="5.2.3"
fi
PMA_VER="${PMA_VER// /}"
[[ "$PMA_VER" =~ ^[0-9]_[0-9]_[0-9]$ ]] && PMA_VER="${PMA_VER//_/.}"
log "Using phpMyAdmin version: $PMA_VER"
[[ -d "/usr/local/CyberCP/public" ]] || mkdir -p /usr/local/CyberCP/public
SAVED_CONFIG=false
SAVED_SIGNON=false
[[ -f "$PMA_DIR/config.inc.php" ]] && cp -a "$PMA_DIR/config.inc.php" "$TMP_CONFIG" && SAVED_CONFIG=true
[[ -f "$PMA_DIR/phpmyadminsignin.php" ]] && cp -a "$PMA_DIR/phpmyadminsignin.php" "$TMP_SIGNON" && SAVED_SIGNON=true
TARBALL="/usr/local/CyberCP/public/phpmyadmin.tar.gz"
URL="https://files.phpmyadmin.net/phpMyAdmin/${PMA_VER}/phpMyAdmin-${PMA_VER}-all-languages.tar.gz"
wget -q -O "$TARBALL" "$URL" || { log "ERROR: Download failed"; exit 1; }
[[ $(stat -c%s "$TARBALL" 2>/dev/null) -gt 1000000 ]] || { log "ERROR: Tarball too small"; exit 1; }
rm -rf "$PMA_DIR"
tar -xzf "$TARBALL" -C /usr/local/CyberCP/public/
rm -f "$TARBALL"
EXTRACTED=$(ls -d /usr/local/CyberCP/public/phpMyAdmin-*-all-languages 2>/dev/null | head -1)
[[ -n "$EXTRACTED" ]] && [[ -d "$EXTRACTED" ]] && mv "$EXTRACTED" "$PMA_DIR" || { log "ERROR: Extract failed"; exit 1; }
if [[ "$SAVED_CONFIG" = true ]] && [[ -f "$TMP_CONFIG" ]]; then
cp -a "$TMP_CONFIG" "$PMA_DIR/config.inc.php"
rm -f "$TMP_CONFIG"
fi
if [[ ! -f "$PMA_DIR/config.inc.php" ]] && [[ -f "$PMA_DIR/config.sample.inc.php" ]]; then
cp -a "$PMA_DIR/config.sample.inc.php" "$PMA_DIR/config.inc.php"
fi
[[ -f "$PMA_DIR/config.inc.php" ]] && (grep -q "TempDir" "$PMA_DIR/config.inc.php" 2>/dev/null || echo -e "\n\$cfg['TempDir'] = '/usr/local/CyberCP/public/phpmyadmin/tmp';" >> "$PMA_DIR/config.inc.php")
[[ "$SAVED_SIGNON" = true ]] && [[ -f "$TMP_SIGNON" ]] && cp -a "$TMP_SIGNON" "$PMA_DIR/phpmyadminsignin.php" && rm -f "$TMP_SIGNON"
[[ "$SAVED_SIGNON" != true ]] && [[ -f /usr/local/CyberCP/plogical/phpmyadminsignin.php ]] && cp -a /usr/local/CyberCP/plogical/phpmyadminsignin.php "$PMA_DIR/phpmyadminsignin.php"
sed -i "s/'localhost'/'127.0.0.1'/g" "$PMA_DIR/phpmyadminsignin.php" 2>/dev/null || true
mkdir -p "$PMA_DIR/tmp"
id lscpd &>/dev/null && chown -R lscpd:lscpd "$PMA_DIR"
chmod -R 755 "$PMA_DIR"
log "phpMyAdmin changed to version $PMA_VER"
echo "phpMyAdmin version $PMA_VER installed."

View File

@@ -0,0 +1,85 @@
#!/bin/bash
# Change SnappyMail version: download chosen version, preserve data dirs, replace app files, fix data path and perms.
# Run as root: bash /usr/local/CyberCP/CPScripts/snappymail_version_changer.sh [VERSION]
# Example: bash snappymail_version_changer.sh 2.38.2
# Data under /usr/local/lscp/cyberpanel/snappymail/data is never removed.
set -e
PUBLIC_SNAPPY="/usr/local/CyberCP/public/snappymail"
DATA_PATH="/usr/local/lscp/cyberpanel/snappymail/data"
LOG="/var/log/cyberpanel_upgrade_debug.log"
log() { echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] $*" | tee -a "$LOG"; }
if [[ $(id -u) -ne 0 ]]; then
echo "Run as root: sudo bash $0 [VERSION]"
exit 1
fi
# Version: argument or latest from API or default
SNAPPY_VER="${1:-}"
if [[ -z "$SNAPPY_VER" ]]; then
SNAPPY_VER=$(curl -sS "https://api.github.com/repos/the-djmaze/snappymail/releases/latest" 2>/dev/null | grep -o '"tag_name": "v[^"]*' | sed 's/"tag_name": "v//' | head -1)
[[ -z "$SNAPPY_VER" ]] && SNAPPY_VER="2.38.2"
log "Using SnappyMail version: $SNAPPY_VER (from API or default)"
else
SNAPPY_VER="${SNAPPY_VER// /}"
log "Using SnappyMail version: $SNAPPY_VER (from argument)"
fi
[[ -d "/usr/local/CyberCP/public" ]] || mkdir -p /usr/local/CyberCP/public
cd /usr/local/CyberCP/public || exit 1
# Download zip (data dirs are NOT under public/snappymail; we only replace app tree)
ZIP="snappymail-${SNAPPY_VER}.zip"
URL="https://github.com/the-djmaze/snappymail/releases/download/v${SNAPPY_VER}/${ZIP}"
log "Downloading $URL ..."
if ! wget -q -O "$ZIP" "$URL"; then
log "ERROR: Download failed. Check version at https://github.com/the-djmaze/snappymail/releases"
exit 1
fi
# Replace only app tree; do not remove DATA_PATH or public/snappymail/data if it exists
if [[ -d "$PUBLIC_SNAPPY" ]]; then
rm -rf "$PUBLIC_SNAPPY"
log "Removed existing public/snappymail app tree (data preserved under $DATA_PATH)"
fi
unzip -q "$ZIP" -d "$PUBLIC_SNAPPY"
rm -f "$ZIP"
# Fix data path in include.php
INCLUDE_PHP=""
for inc in "$PUBLIC_SNAPPY"/snappymail/v/*/include.php; do
[[ -f "$inc" ]] && INCLUDE_PHP="$inc" && break
done
if [[ -n "$INCLUDE_PHP" ]] && [[ -f "$INCLUDE_PHP" ]]; then
if grep -q "\$sCustomDataPath = ''" "$INCLUDE_PHP" 2>/dev/null; then
sed -i "s|\$sCustomDataPath = '';|\$sCustomDataPath = '/usr/local/lscp/cyberpanel/snappymail/data';|" "$INCLUDE_PHP"
log "Set data path in include.php"
fi
fi
# Ensure data dirs exist
mkdir -p "$DATA_PATH/_data_/_default_/configs"
mkdir -p "$DATA_PATH/_data_/_default_/domains"
mkdir -p "$DATA_PATH/_data_/_default_/storage"
mkdir -p "$DATA_PATH/_data_/_default_/temp"
mkdir -p "$DATA_PATH/_data_/_default_/cache"
# Permissions
find "$PUBLIC_SNAPPY" -type d -exec chmod 755 {} \;
find "$PUBLIC_SNAPPY" -type f -exec chmod 644 {} \;
if id lscpd &>/dev/null; then
chown -R lscpd:lscpd "$PUBLIC_SNAPPY"
chown -R lscpd:lscpd "$DATA_PATH"
log "Set ownership lscpd:lscpd"
fi
chmod -R 775 "$DATA_PATH" 2>/dev/null || true
# Optional: run CyberPanel SnappyMail integration if present
if [[ -f /usr/local/CyberCP/snappymail_cyberpanel.php ]]; then
for php in /usr/local/lsws/lsphp83/bin/php /usr/local/lsws/lsphp82/bin/php /usr/local/lsws/lsphp81/bin/php /usr/local/lsws/lsphp80/bin/php; do
[[ -x "$php" ]] && $php /usr/local/CyberCP/snappymail_cyberpanel.php 2>/dev/null && break
done
fi
log "SnappyMail changed to version $SNAPPY_VER"
echo "SnappyMail version changed to $SNAPPY_VER. Data preserved under $DATA_PATH"

View File

@@ -625,11 +625,14 @@ install_cyberpanel_direct() {
# Ask MariaDB version (after web server choice) if not set via --mariadb-version
if [ -z "$MARIADB_VER" ]; then
echo ""
echo " MariaDB version: 10.11, 11.8 (LTS, default) or 12.1?"
read -r -t 60 -p " Enter 10.11, 11.8 or 12.1 [11.8]: " MARIADB_VER || true
echo " MariaDB version: 10.11, 11.8 (LTS, default), 12.1, 12.2, 12.3 or other X.Y?"
read -r -t 60 -p " Enter version [11.8]: " MARIADB_VER || true
MARIADB_VER="${MARIADB_VER:-11.8}"
MARIADB_VER="${MARIADB_VER// /}"
if [ "$MARIADB_VER" != "10.11" ] && [ "$MARIADB_VER" != "11.8" ] && [ "$MARIADB_VER" != "12.1" ]; then
# Normalize to major.minor (e.g. 12.3.1 -> 12.3)
if [[ "$MARIADB_VER" =~ ^([0-9]+)\.([0-9]+) ]]; then
MARIADB_VER="${BASH_REMATCH[1]}.${BASH_REMATCH[2]}"
else
MARIADB_VER="11.8"
fi
echo " Using MariaDB $MARIADB_VER"

View File

@@ -792,7 +792,8 @@ EOF
sed -i 's|https://yum.mariadb.org/RPM-GPG-KEY-MariaDB|https://cyberpanel.sh/yum.mariadb.org/RPM-GPG-KEY-MariaDB|g' /etc/yum.repos.d/MariaDB.repo
fi
dnf clean metadata --disablerepo='*' --enablerepo=mariadb 2>/dev/null || true
# MariaDB 10 -> 11 or 11 -> 12: RPM scriptlet blocks in-place upgrade; do manual stop, remove old server, install target, start, mariadb-upgrade
# MariaDB 10 -> 11 or 11 -> 12: RPM scriptlet blocks in-place upgrade; do manual stop, remove old server, install target, start, mariadb-upgrade.
# Data in /var/lib/mysql is preserved; no databases are dropped.
MARIADB_OLD_10=$(rpm -qa 'MariaDB-server-10*' 2>/dev/null | head -1)
[[ -z "$MARIADB_OLD_10" ]] && MARIADB_OLD_10=$(rpm -qa 2>/dev/null | grep -E '^MariaDB-server-10\.' | head -1)
MARIADB_OLD_11=$(rpm -qa 'MariaDB-server-11*' 2>/dev/null | head -1)
@@ -811,7 +812,7 @@ EOF
printf "[client]\nssl=0\nskip-ssl\n" > /etc/my.cnf.d/cyberpanel-client.cnf 2>/dev/null || true
systemctl start mariadb 2>/dev/null || true
sleep 2
mariadb-upgrade -u root 2>/dev/null || true
mariadb-upgrade --force -u root 2>/dev/null || true
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] MariaDB manual upgrade to $MARIADB_VER_REPO completed." | tee -a /var/log/cyberpanel_upgrade_debug.log
elif [[ -n "$MARIADB_OLD_11" ]] && [[ "$MARIADB_VER_REPO" =~ ^12\. ]]; then
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] MariaDB 11.x detected; performing manual upgrade to $MARIADB_VER_REPO (stop, remove, install, start, mariadb-upgrade)..." | tee -a /var/log/cyberpanel_upgrade_debug.log
@@ -825,7 +826,7 @@ EOF
printf "[client]\nssl=0\nskip-ssl\n" > /etc/my.cnf.d/cyberpanel-client.cnf 2>/dev/null || true
systemctl start mariadb 2>/dev/null || true
sleep 2
mariadb-upgrade -u root 2>/dev/null || true
mariadb-upgrade --force -u root 2>/dev/null || true
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] MariaDB manual upgrade to $MARIADB_VER_REPO completed (11->12)." | tee -a /var/log/cyberpanel_upgrade_debug.log
else
# Normal install/upgrade (same version or 10.11)
@@ -848,7 +849,7 @@ EOF
printf "[client]\nssl=0\nskip-ssl\n" > /etc/my.cnf.d/cyberpanel-client.cnf 2>/dev/null || true
systemctl start mariadb 2>/dev/null || true
sleep 2
mariadb-upgrade -u root 2>/dev/null || true
mariadb-upgrade --force -u root 2>/dev/null || true
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] MariaDB manual 11->12 fallback completed." | tee -a /var/log/cyberpanel_upgrade_debug.log
fi
fi
@@ -899,7 +900,7 @@ EOF
printf "[client]\nssl=0\nskip-ssl\n" > /etc/my.cnf.d/cyberpanel-client.cnf 2>/dev/null || true
systemctl start mariadb 2>/dev/null || true
sleep 2
mariadb-upgrade -u root 2>/dev/null || true
mariadb-upgrade --force -u root 2>/dev/null || true
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] MariaDB manual upgrade to $MARIADB_VER_REPO completed (AlmaLinux 9)." | tee -a /var/log/cyberpanel_upgrade_debug.log
elif [[ -n "$MARIADB_OLD_11_AL9" ]] && [[ "$MARIADB_VER_REPO" =~ ^12\. ]]; then
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] MariaDB 11.x detected (AlmaLinux 9); manual upgrade to $MARIADB_VER_REPO..." | tee -a /var/log/cyberpanel_upgrade_debug.log
@@ -913,7 +914,7 @@ EOF
printf "[client]\nssl=0\nskip-ssl\n" > /etc/my.cnf.d/cyberpanel-client.cnf 2>/dev/null || true
systemctl start mariadb 2>/dev/null || true
sleep 2
mariadb-upgrade -u root 2>/dev/null || true
mariadb-upgrade --force -u root 2>/dev/null || true
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] MariaDB manual upgrade to $MARIADB_VER_REPO completed (AlmaLinux 9, 11->12)." | tee -a /var/log/cyberpanel_upgrade_debug.log
else
dnf install -y --enablerepo=mariadb MariaDB-server MariaDB-devel 2>/dev/null || dnf install -y mariadb-server mariadb-devel

View File

@@ -55,6 +55,24 @@ FetchCloudLinuxAlmaVersionVersion = install_utils.FetchCloudLinuxAlmaVersionVers
get_distro = install_utils.get_distro
def _normalize_mariadb_version(ver):
"""Accept 10.3-10.11, 11.0-11.8, 12.0-12.x; return major.minor for repo or 11.8 if invalid."""
if not ver or not isinstance(ver, str):
return '11.8'
v = ver.strip()
m = re.match(r'^(\d+)\.(\d+)(?:\.\d+)*$', v)
if not m:
return '11.8'
major, minor = int(m.group(1)), int(m.group(2))
if major == 10 and 3 <= minor <= 11:
return '10.%d' % minor
if major == 11 and 0 <= minor <= 8:
return '11.%d' % minor
if major == 12 and 0 <= minor <= 99:
return '12.%d' % minor
return '11.8'
def get_Ubuntu_release():
release = install_utils.get_Ubuntu_release(use_print=False, exit_on_error=True)
if release == -1:
@@ -1871,7 +1889,7 @@ module cyberpanel_ols {
except (ValueError, TypeError):
pass
# Set up MariaDB repository only if not already installed (version from --mariadb-version: 10.11, 11.8 or 12.1)
# Set up MariaDB repository only if not already installed (version from --mariadb-version: 10.3-10.11, 11.0-11.8, 12.0-12.x)
mariadb_ver = getattr(preFlightsChecks, 'mariadb_version', '11.8')
command = f'curl -LsS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | bash -s -- --mariadb-server-version={mariadb_ver}'
self.call(command, self.distro, command, command, 1, 1, os.EX_OSERR, True)
@@ -1904,9 +1922,14 @@ module cyberpanel_ols {
shell=True, timeout=5, capture_output=True
)
self.stdOut("Temporarily removed MariaDB-server from dnf exclude for installation (fallback)", 1)
# Install from official MariaDB repo (capitalized package names); --nobest for 10.11/11.8 on el9
# Install from official MariaDB repo (capitalized package names); --nobest for 10.x and 11.0-11.8 on el9
mariadb_packages = 'MariaDB-server MariaDB-client MariaDB-backup MariaDB-devel'
if mariadb_ver in ('10.11', '11.8'):
try:
maj_min = tuple(int(x) for x in mariadb_ver.split('.')[:2])
use_nobest = (maj_min[0] == 10) or (maj_min[0] == 11 and maj_min[1] <= 8)
except (ValueError, IndexError):
use_nobest = True
if use_nobest:
command = f'dnf install -y --nobest {mariadb_packages}'
else:
command = f'dnf install -y {mariadb_packages}'
@@ -3824,18 +3847,23 @@ class Migration(migrations.Migration):
except Exception:
pass
# Resolve phpMyAdmin version (same as upgrade path)
phpmyadmin_version = '5.2.3'
try:
from plogical.versionFetcher import get_latest_phpmyadmin_version
latest_version = get_latest_phpmyadmin_version()
if latest_version and latest_version != phpmyadmin_version:
self.stdOut(f"Using latest phpMyAdmin version: {latest_version}", 1)
phpmyadmin_version = latest_version
else:
self.stdOut(f"Using fallback phpMyAdmin version: {phpmyadmin_version}", 1)
except Exception as e:
self.stdOut(f"Failed to fetch latest phpMyAdmin version, using fallback: {e}", 1)
# Resolve phpMyAdmin version: CLI override (--phpmyadmin-version), else latest from API, else fallback
phpmyadmin_version = getattr(preFlightsChecks, 'phpmyadmin_version', None) or ''
phpmyadmin_version = (phpmyadmin_version or '').strip()
if not phpmyadmin_version or not re.match(r'^\d+\.\d+\.\d+$', phpmyadmin_version):
phpmyadmin_version = '5.2.3'
try:
from plogical.versionFetcher import get_latest_phpmyadmin_version
latest_version = get_latest_phpmyadmin_version()
if latest_version and re.match(r'^\d+\.\d+\.\d+$', latest_version):
self.stdOut(f"Using latest phpMyAdmin version: {latest_version}", 1)
phpmyadmin_version = latest_version
else:
self.stdOut(f"Using fallback phpMyAdmin version: {phpmyadmin_version}", 1)
except Exception as e:
self.stdOut(f"Failed to fetch latest phpMyAdmin version, using fallback: {e}", 1)
else:
self.stdOut(f"Using phpMyAdmin version: {phpmyadmin_version}", 1)
self.stdOut("Installing phpMyAdmin...", 1)
tarball = '/usr/local/CyberCP/public/phpmyadmin.tar.gz'
@@ -4544,27 +4572,40 @@ user_query = SELECT email as user, password, 'vmail' as uid, 'vmail' as gid, '/h
def downoad_and_install_raindloop(self):
try:
#######
if not os.path.exists("/usr/local/CyberCP/public"):
os.mkdir("/usr/local/CyberCP/public")
if os.path.exists("/usr/local/CyberCP/public/snappymail"):
return 0
# Version: CLI override (--snappymail-version), then latest from API, else class default
snappy_ver = getattr(preFlightsChecks, 'snappymail_version', None) or ''
snappy_ver = (snappy_ver or '').strip()
if not snappy_ver or not re.match(r'^\d+\.\d+(\.\d+)?$', snappy_ver):
try:
from plogical.versionFetcher import get_latest_snappymail_version
latest = get_latest_snappymail_version()
if latest and re.match(r'^\d+\.\d+', latest):
snappy_ver = latest
else:
snappy_ver = preFlightsChecks.SnappyVersion
except Exception:
snappy_ver = preFlightsChecks.SnappyVersion
self.stdOut("Using SnappyMail version: %s" % snappy_ver, 1)
os.chdir("/usr/local/CyberCP/public")
command = 'wget https://github.com/the-djmaze/snappymail/releases/download/v%s/snappymail-%s.zip' % (preFlightsChecks.SnappyVersion, preFlightsChecks.SnappyVersion)
command = 'wget https://github.com/the-djmaze/snappymail/releases/download/v%s/snappymail-%s.zip' % (snappy_ver, snappy_ver)
preFlightsChecks.call(command, self.distro, command, command, 1, 1, os.EX_OSERR)
#############
command = 'unzip snappymail-%s.zip -d /usr/local/CyberCP/public/snappymail' % (preFlightsChecks.SnappyVersion)
command = 'unzip snappymail-%s.zip -d /usr/local/CyberCP/public/snappymail' % (snappy_ver,)
preFlightsChecks.call(command, self.distro, command, command, 1, 1, os.EX_OSERR)
try:
os.remove("snappymail-%s.zip" % (preFlightsChecks.SnappyVersion))
os.remove("snappymail-%s.zip" % (snappy_ver,))
except:
pass
@@ -6616,14 +6657,19 @@ def main():
parser.add_argument('--mysqluser', help='MySQL user if remote is chosen.')
parser.add_argument('--mysqlpassword', help='MySQL password if remote is chosen.')
parser.add_argument('--mysqlport', help='MySQL port if remote is chosen.')
parser.add_argument('--mariadb-version', default='11.8', help='MariaDB version: 10.11, 11.8 (LTS, default) or 12.1')
parser.add_argument('--mariadb-version', default='11.8', help='MariaDB version: 10.3-10.11, 11.0-11.8, 12.0-12.x (default 11.8)')
parser.add_argument('--phpmyadmin-version', default='', help='phpMyAdmin version (e.g. 5.2.3); empty = latest from API')
parser.add_argument('--snappymail-version', default='', help='SnappyMail version (e.g. 2.38.2); empty = latest from API')
args = parser.parse_args()
# Normalize and validate MariaDB version choice (default 11.8)
mariadb_ver = (getattr(args, 'mariadb_version', None) or '11.8').strip()
if mariadb_ver not in ('10.11', '11.8', '12.1'):
mariadb_ver = '11.8'
mariadb_ver = _normalize_mariadb_version(getattr(args, 'mariadb_version', None) or '11.8')
preFlightsChecks.mariadb_version = mariadb_ver
# Optional phpMyAdmin/SnappyMail version overrides (empty = use latest from API)
if getattr(args, 'phpmyadmin_version', ''):
preFlightsChecks.phpmyadmin_version = (args.phpmyadmin_version or '').strip()
if getattr(args, 'snappymail_version', ''):
preFlightsChecks.snappymail_version = (args.snappymail_version or '').strip()
logging.InstallLog.ServerIP = args.publicip
logging.InstallLog.writeToFile("Starting CyberPanel installation..,10")

View File

@@ -8,10 +8,13 @@ if [[ $debug == "0" ]] ; then
fi
if [[ $debug == "1" ]] ; then
EXTRA_VER_ARGS=""
[[ -n "${PHPMYADMIN_VER:-}" ]] && EXTRA_VER_ARGS="$EXTRA_VER_ARGS --phpmyadmin-version ${PHPMYADMIN_VER}"
[[ -n "${SNAPPYMAIL_VER:-}" ]] && EXTRA_VER_ARGS="$EXTRA_VER_ARGS --snappymail-version ${SNAPPYMAIL_VER}"
if [[ $DEV == "ON" ]] ; then
/usr/local/CyberPanel/bin/python install.py $SERVER_IP $SERIAL_NO $LICENSE_KEY --mariadb-version "${MARIADB_VER:-11.8}"
/usr/local/CyberPanel/bin/python install.py $SERVER_IP $SERIAL_NO $LICENSE_KEY --mariadb-version "${MARIADB_VER:-11.8}" $EXTRA_VER_ARGS
else
/usr/local/CyberPanel/bin/python2 install.py $SERVER_IP $SERIAL_NO $LICENSE_KEY --mariadb-version "${MARIADB_VER:-11.8}"
/usr/local/CyberPanel/bin/python2 install.py $SERVER_IP $SERIAL_NO $LICENSE_KEY --mariadb-version "${MARIADB_VER:-11.8}" $EXTRA_VER_ARGS
fi
if grep "CyberPanel installation successfully completed" /var/log/installLogs.txt > /dev/null; then

View File

@@ -925,9 +925,12 @@ fi
if [[ $debug == "1" ]] ; then
if [[ $DEV == "ON" ]] ; then
/usr/local/CyberPanel/bin/python install.py $SERVER_IP $SERIAL_NO $LICENSE_KEY --mariadb-version "${MARIADB_VER:-11.8}"
EXTRA_VER_ARGS=""
[[ -n "${PHPMYADMIN_VER:-}" ]] && EXTRA_VER_ARGS="$EXTRA_VER_ARGS --phpmyadmin-version ${PHPMYADMIN_VER}"
[[ -n "${SNAPPYMAIL_VER:-}" ]] && EXTRA_VER_ARGS="$EXTRA_VER_ARGS --snappymail-version ${SNAPPYMAIL_VER}"
/usr/local/CyberPanel/bin/python install.py $SERVER_IP $SERIAL_NO $LICENSE_KEY --mariadb-version "${MARIADB_VER:-11.8}" $EXTRA_VER_ARGS
else
/usr/local/CyberPanel/bin/python2 install.py $SERVER_IP $SERIAL_NO $LICENSE_KEY --mariadb-version "${MARIADB_VER:-11.8}"
/usr/local/CyberPanel/bin/python2 install.py $SERVER_IP $SERIAL_NO $LICENSE_KEY --mariadb-version "${MARIADB_VER:-11.8}" $EXTRA_VER_ARGS
fi
if grep "CyberPanel installation successfully completed" /var/log/installLogs.txt > /dev/null; then

View File

@@ -87,11 +87,14 @@ install_cyberpanel_direct() {
# Ask MariaDB version (after web server choice) if not set via --mariadb-version
if [ -z "$MARIADB_VER" ]; then
echo ""
echo " MariaDB version: 10.11, 11.8 (LTS, default) or 12.1?"
read -r -t 60 -p " Enter 10.11, 11.8 or 12.1 [11.8]: " MARIADB_VER || true
echo " MariaDB version: 10.11, 11.8 (LTS, default), 12.1, 12.2, 12.3 or other X.Y?"
read -r -t 60 -p " Enter version [11.8]: " MARIADB_VER || true
MARIADB_VER="${MARIADB_VER:-11.8}"
MARIADB_VER="${MARIADB_VER// /}"
if [ "$MARIADB_VER" != "10.11" ] && [ "$MARIADB_VER" != "11.8" ] && [ "$MARIADB_VER" != "12.1" ]; then
# Normalize to major.minor (e.g. 12.3.1 -> 12.3)
if [[ "$MARIADB_VER" =~ ^([0-9]+)\.([0-9]+) ]]; then
MARIADB_VER="${BASH_REMATCH[1]}.${BASH_REMATCH[2]}"
else
MARIADB_VER="11.8"
fi
echo " Using MariaDB $MARIADB_VER"

View File

@@ -1194,27 +1194,58 @@ module cyberpanel_ols {
def download_install_phpmyadmin():
try:
cwd = os.getcwd()
pma_dir = '/usr/local/CyberCP/public/phpmyadmin'
tmp_config = '/tmp/cyberpanel_pma_config.inc.php'
tmp_signon = '/tmp/cyberpanel_pma_phpmyadminsignin.php'
if not os.path.exists("/usr/local/CyberCP/public"):
os.mkdir("/usr/local/CyberCP/public")
# Preserve existing config and signon before removing phpmyadmin (for up/downgrade)
saved_config = False
saved_signon = False
if os.path.isdir(pma_dir):
if os.path.isfile(os.path.join(pma_dir, 'config.inc.php')):
try:
shutil.copy2(os.path.join(pma_dir, 'config.inc.php'), tmp_config)
saved_config = True
except Exception:
pass
if os.path.isfile(os.path.join(pma_dir, 'phpmyadminsignin.php')):
try:
shutil.copy2(os.path.join(pma_dir, 'phpmyadminsignin.php'), tmp_signon)
saved_signon = True
except Exception:
pass
try:
shutil.rmtree("/usr/local/CyberCP/public/phpmyadmin")
except:
shutil.rmtree(pma_dir)
except Exception:
pass
# Try to fetch latest phpMyAdmin version from GitHub
phpmyadmin_version = '5.2.3' # Fallback version
try:
from plogical.versionFetcher import get_latest_phpmyadmin_version
latest_version = get_latest_phpmyadmin_version()
if latest_version and latest_version != phpmyadmin_version:
Upgrade.stdOut(f"Using latest phpMyAdmin version: {latest_version}", 0)
phpmyadmin_version = latest_version
else:
Upgrade.stdOut(f"Using fallback phpMyAdmin version: {phpmyadmin_version}", 0)
except Exception as e:
Upgrade.stdOut(f"Failed to fetch latest phpMyAdmin version, using fallback: {e}", 0)
# Version: /etc/cyberpanel/phpmyadmin_version, then latest from API, then fallback
phpmyadmin_version = '5.2.3'
version_file = '/etc/cyberpanel/phpmyadmin_version'
if os.path.isfile(version_file):
try:
with open(version_file, 'r') as f:
raw = (f.read() or '').strip()
if raw and len(raw) < 20 and all(c.isdigit() or c == '.' for c in raw):
phpmyadmin_version = raw
Upgrade.stdOut(f"Using phpMyAdmin version from {version_file}: {phpmyadmin_version}", 0)
except Exception:
pass
if phpmyadmin_version == '5.2.3':
try:
from plogical.versionFetcher import get_latest_phpmyadmin_version
latest_version = get_latest_phpmyadmin_version()
if latest_version and latest_version != phpmyadmin_version:
Upgrade.stdOut(f"Using latest phpMyAdmin version: {latest_version}", 0)
phpmyadmin_version = latest_version
else:
Upgrade.stdOut(f"Using fallback phpMyAdmin version: {phpmyadmin_version}", 0)
except Exception as e:
Upgrade.stdOut(f"Failed to fetch latest phpMyAdmin version, using fallback: {e}", 0)
Upgrade.stdOut("Installing phpMyAdmin...", 0)
@@ -1227,36 +1258,46 @@ module cyberpanel_ols {
command = 'tar -xzf /usr/local/CyberCP/public/phpmyadmin.tar.gz -C /usr/local/CyberCP/public/'
Upgrade.executioner_silent(command, 'Extract phpMyAdmin')
# Move extracted dir to phpmyadmin (support phpMyAdmin-X.Y.Z-all-languages or similar)
import glob
extracted = glob.glob('/usr/local/CyberCP/public/phpMyAdmin-*-all-languages')
if not extracted:
extracted = glob.glob('/usr/local/CyberCP/public/phpMyAdmin-*')
if extracted:
if os.path.exists('/usr/local/CyberCP/public/phpmyadmin'):
shutil.rmtree('/usr/local/CyberCP/public/phpmyadmin')
os.rename(extracted[0], '/usr/local/CyberCP/public/phpmyadmin')
if os.path.exists(pma_dir):
shutil.rmtree(pma_dir)
os.rename(extracted[0], pma_dir)
else:
Upgrade.executioner('mv /usr/local/CyberCP/public/phpMyAdmin-*-all-languages /usr/local/CyberCP/public/phpmyadmin', 0)
command = 'rm -f /usr/local/CyberCP/public/phpmyadmin.tar.gz'
Upgrade.executioner_silent(command, 'Cleanup phpMyAdmin tar.gz')
if not os.path.isdir('/usr/local/CyberCP/public/phpmyadmin'):
if not os.path.isdir(pma_dir):
raise RuntimeError('phpMyAdmin directory was not created after extract/mv')
Upgrade.stdOut("phpMyAdmin installation completed.", 0)
## Write secret phrase
rString = ''.join([random.choice(string.ascii_letters + string.digits) for n in range(32)])
data = open('/usr/local/CyberCP/public/phpmyadmin/config.sample.inc.php', 'r').readlines()
writeToFile = open('/usr/local/CyberCP/public/phpmyadmin/config.inc.php', 'w')
writeE = 1
phpMyAdminContent = """
# Restore preserved config/signon and apply minimal overrides, or create new config
if saved_config and os.path.isfile(tmp_config):
shutil.copy2(tmp_config, os.path.join(pma_dir, 'config.inc.php'))
try:
os.remove(tmp_config)
except Exception:
pass
# Ensure TempDir and host/port present (append if missing)
with open(os.path.join(pma_dir, 'config.inc.php'), 'r') as f:
cfg_content = f.read()
if "TempDir" not in cfg_content:
with open(os.path.join(pma_dir, 'config.inc.php'), 'a') as f:
f.write("\n$cfg['TempDir'] = '/usr/local/CyberCP/public/phpmyadmin/tmp';\n")
if "'host'" not in cfg_content and 'host' not in cfg_content:
with open(os.path.join(pma_dir, 'config.inc.php'), 'a') as f:
f.write("$cfg['Servers'][$i]['host'] = '127.0.0.1';\n$cfg['Servers'][$i]['port'] = '3306';\n")
else:
rString = ''.join([random.choice(string.ascii_letters + string.digits) for n in range(32)])
data = open(os.path.join(pma_dir, 'config.sample.inc.php'), 'r').readlines()
writeToFile = open(os.path.join(pma_dir, 'config.inc.php'), 'w')
writeE = 1
phpMyAdminContent = """
$cfg['Servers'][$i]['AllowNoPassword'] = false;
$cfg['Servers'][$i]['auth_type'] = 'signon';
$cfg['Servers'][$i]['SignonSession'] = 'SignonSession';
@@ -1265,48 +1306,44 @@ $cfg['Servers'][$i]['LogoutURL'] = 'phpmyadminsignin.php?logout';
$cfg['Servers'][$i]['host'] = '127.0.0.1';
$cfg['Servers'][$i]['port'] = '3306';
"""
for items in data:
if items.find('blowfish_secret') > -1:
writeToFile.writelines(
"$cfg['blowfish_secret'] = '" + rString + "'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */\n")
elif items.find('/* Authentication type */') > -1:
writeToFile.writelines(items)
writeToFile.write(phpMyAdminContent)
writeE = 0
elif items.find("$cfg['Servers'][$i]['AllowNoPassword']") > -1:
writeE = 1
else:
if writeE:
for items in data:
if items.find('blowfish_secret') > -1:
writeToFile.writelines(
"$cfg['blowfish_secret'] = '" + rString + "'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */\n")
elif items.find('/* Authentication type */') > -1:
writeToFile.writelines(items)
writeToFile.writelines("$cfg['TempDir'] = '/usr/local/CyberCP/public/phpmyadmin/tmp';\n")
writeToFile.close()
writeToFile.write(phpMyAdminContent)
writeE = 0
elif items.find("$cfg['Servers'][$i]['AllowNoPassword']") > -1:
writeE = 1
else:
if writeE:
writeToFile.writelines(items)
writeToFile.writelines("$cfg['TempDir'] = '/usr/local/CyberCP/public/phpmyadmin/tmp';\n")
writeToFile.close()
os.mkdir('/usr/local/CyberCP/public/phpmyadmin/tmp')
command = 'cp /usr/local/CyberCP/plogical/phpmyadminsignin.php /usr/local/CyberCP/public/phpmyadmin/phpmyadminsignin.php'
Upgrade.executioner(command, 0)
if saved_signon and os.path.isfile(tmp_signon):
shutil.copy2(tmp_signon, os.path.join(pma_dir, 'phpmyadminsignin.php'))
try:
os.remove(tmp_signon)
except Exception:
pass
else:
command = 'cp /usr/local/CyberCP/plogical/phpmyadminsignin.php /usr/local/CyberCP/public/phpmyadmin/phpmyadminsignin.php'
Upgrade.executioner(command, 0)
passFile = "/etc/cyberpanel/mysqlPassword"
try:
import json
jsonData = json.loads(open(passFile, 'r').read())
mysqluser = jsonData['mysqluser']
mysqlpassword = jsonData['mysqlpassword']
mysqlport = jsonData.get('mysqlport', 3306)
mysqlhost = jsonData.get('mysqlhost', '127.0.0.1') or '127.0.0.1'
if mysqlhost == 'localhost':
mysqlhost = '127.0.0.1'
command = "sed -i 's|localhost|%s|g' /usr/local/CyberCP/public/phpmyadmin/phpmyadminsignin.php" % (
mysqlhost)
command = "sed -i 's|localhost|%s|g' /usr/local/CyberCP/public/phpmyadmin/phpmyadminsignin.php" % (mysqlhost)
Upgrade.executioner(command, 0)
except:
except Exception:
pass
command = 'chown -R lscpd:lscpd /usr/local/CyberCP/public/phpmyadmin'
@@ -1346,52 +1383,36 @@ $cfg['Servers'][$i]['port'] = '3306';
@staticmethod
def downoad_and_install_raindloop():
try:
#######
# if os.path.exists("/usr/local/CyberCP/public/rainloop"):
#
# if os.path.exists("/usr/local/lscp/cyberpanel/rainloop/data"):
# pass
# else:
# command = "mv /usr/local/CyberCP/public/rainloop/data /usr/local/lscp/cyberpanel/rainloop/data"
# Upgrade.executioner(command, 0)
#
# command = "chown -R lscpd:lscpd /usr/local/lscp/cyberpanel/rainloop/data"
# Upgrade.executioner(command, 0)
#
# iPath = os.listdir('/usr/local/CyberCP/public/rainloop/rainloop/v/')
#
# path = "/usr/local/CyberCP/public/snappymail/snappymail/v/%s/include.php" % (iPath[0])
#
# data = open(path, 'r').readlines()
# writeToFile = open(path, 'w')
#
# for items in data:
# if items.find("$sCustomDataPath = '';") > -1:
# writeToFile.writelines(
# " $sCustomDataPath = '/usr/local/lscp/cyberpanel/rainloop/data';\n")
# else:
# writeToFile.writelines(items)
#
# writeToFile.close()
# return 0
# Data preservation: only /usr/local/CyberCP/public/snappymail (app files) is replaced.
# Data under /usr/local/lscp/cyberpanel/snappymail/data and public/snappymail/data is never deleted.
cwd = os.getcwd()
if not os.path.exists("/usr/local/CyberCP/public"):
os.mkdir("/usr/local/CyberCP/public")
# Try to fetch latest SnappyMail version from GitHub
try:
from plogical.versionFetcher import get_latest_snappymail_version
latest_version = get_latest_snappymail_version()
if latest_version and latest_version != Upgrade.SnappyVersion:
Upgrade.stdOut(f"Using latest SnappyMail version: {latest_version}", 0)
Upgrade.SnappyVersion = latest_version
else:
Upgrade.stdOut(f"Using fallback SnappyMail version: {Upgrade.SnappyVersion}", 0)
except Exception as e:
Upgrade.stdOut(f"Failed to fetch latest SnappyMail version, using fallback: {e}", 0)
# Version: /etc/cyberpanel/snappymail_version, then latest from API, then fallback
snappy_version = Upgrade.SnappyVersion
version_file = '/etc/cyberpanel/snappymail_version'
if os.path.isfile(version_file):
try:
with open(version_file, 'r') as f:
raw = (f.read() or '').strip()
if raw and len(raw) < 20 and all(c.isdigit() or c == '.' for c in raw):
snappy_version = raw
Upgrade.stdOut(f"Using SnappyMail version from {version_file}: {snappy_version}", 0)
except Exception:
pass
if snappy_version == Upgrade.SnappyVersion:
try:
from plogical.versionFetcher import get_latest_snappymail_version
latest_version = get_latest_snappymail_version()
if latest_version and latest_version != Upgrade.SnappyVersion:
Upgrade.stdOut(f"Using latest SnappyMail version: {latest_version}", 0)
snappy_version = latest_version
else:
Upgrade.stdOut(f"Using fallback SnappyMail version: {Upgrade.SnappyVersion}", 0)
except Exception as e:
Upgrade.stdOut(f"Failed to fetch latest SnappyMail version, using fallback: {e}", 0)
os.chdir("/usr/local/CyberCP/public")
@@ -1401,7 +1422,7 @@ $cfg['Servers'][$i]['port'] = '3306';
while (1):
command = 'wget -q https://github.com/the-djmaze/snappymail/releases/download/v%s/snappymail-%s.zip' % (
Upgrade.SnappyVersion, Upgrade.SnappyVersion)
snappy_version, snappy_version)
cmd = shlex.split(command)
res = subprocess.call(cmd, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
if res != 0:
@@ -1415,11 +1436,12 @@ $cfg['Servers'][$i]['port'] = '3306';
count = 0
# Replace only app tree; data dirs (/usr/local/lscp/cyberpanel/snappymail/data, etc.) are preserved
if os.path.exists('/usr/local/CyberCP/public/snappymail'):
shutil.rmtree('/usr/local/CyberCP/public/snappymail')
while (1):
command = 'unzip -q snappymail-%s.zip -d /usr/local/CyberCP/public/snappymail' % (Upgrade.SnappyVersion)
command = 'unzip -q snappymail-%s.zip -d /usr/local/CyberCP/public/snappymail' % (snappy_version,)
cmd = shlex.split(command)
res = subprocess.call(cmd, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
@@ -1430,7 +1452,7 @@ $cfg['Servers'][$i]['port'] = '3306';
else:
break
try:
os.remove("snappymail-%s.zip" % (Upgrade.SnappyVersion))
os.remove("snappymail-%s.zip" % (snappy_version,))
except:
pass
@@ -4510,14 +4532,20 @@ echo $oConfig->Save() ? 'Done' : 'Error';
subprocess.run(command, shell=True, capture_output=True)
# Install MariaDB from official repository (version from /etc/cyberpanel/mariadb_version or default 11.8)
# Accept any major.minor supported by mariadb_repo_setup (10.3-10.11, 11.0-11.8, 12.0-12.x); safe regex to avoid injection
mariadb_ver = "11.8"
try:
mariadb_version_file = "/etc/cyberpanel/mariadb_version"
if os.path.isfile(mariadb_version_file):
with open(mariadb_version_file, "r") as f:
raw = f.read().strip()
if raw in ("11.8", "12.1"):
mariadb_ver = raw
raw = (f.read() or "").strip()
if raw:
import re
m = re.match(r'^(\d+)\.(\d+)(?:\.\d+)*$', raw)
if m:
major, minor = int(m.group(1)), int(m.group(2))
if (major == 10 and 3 <= minor <= 11) or (major == 11 and 0 <= minor <= 8) or (major == 12 and 0 <= minor <= 99):
mariadb_ver = "%d.%d" % (major, minor)
except Exception:
pass
Upgrade.stdOut("Setting up official MariaDB %s repository..." % mariadb_ver, 1)

View File

@@ -0,0 +1,33 @@
# MariaDB rollback using upgrade backups
When you run a CyberPanel upgrade with MariaDB version change, an optional full backup of all databases can be created in two places:
1. **Legacy path:** `/root/cyberpanel_mariadb_backups/mariadb_backup_before_upgrade_YYYYMMDD_HHMMSS.sql.gz`
2. **Standard path:** `/root/db-upgrade-backups/YYYY-MM-DD_HHMMSS/all_databases.sql.gz`
To roll back to the previous MariaDB state (e.g. after a failed or undesired upgrade):
1. Stop MariaDB: `systemctl stop mariadb` (or `mysql`/`mysqld` on your system).
2. Restore the dump (example for the standard path):
```bash
BACKUP_DIR="/root/db-upgrade-backups/2026-02-17_010304" # use your actual folder
gunzip -c "$BACKUP_DIR/all_databases.sql.gz" | mariadb --skip-ssl -u root -p
```
Or if the backup is in the legacy location:
```bash
gunzip -c /root/cyberpanel_mariadb_backups/mariadb_backup_before_upgrade_*.sql.gz | mariadb --skip-ssl -u root -p
```
You will be prompted for the MariaDB root password (stored in `/etc/cyberpanel/mysqlPassword`).
3. If you need to reinstall the previous MariaDB server version, use the official MariaDB repo for that version, then start the service and run `mariadb-upgrade --force` if required.
**Note:** Restoring over an existing data directory is destructive. Only use this when you intend to replace the current databases with the backup. For a safe test, back up the current `/var/lib/mysql` first.
## Optional standalone version managers
For advanced MariaDB/phpMyAdmin version changes without running the full upgrade, you can use the community scripts from [cyberpanel-mods](https://github.com/master3395/cyberpanel-mods) (version-managers):
- [mariadb_version_manager_enhanced.sh](https://github.com/master3395/cyberpanel-mods/blob/main/version-managers/mariadb_version_manager_enhanced.sh) interactive MariaDB version manager (backup, remove, add repo, install, secure).
- [mariadb_v_changer.sh](https://github.com/master3395/cyberpanel-mods/blob/main/version-managers/mariadb_v_changer.sh) simple prompt-based MariaDB version changer.
- [phpmyadmin_v_changer.sh](https://github.com/master3395/cyberpanel-mods/blob/main/version-managers/phpmyadmin_v_changer.sh) phpMyAdmin version changer (preserves config/signon).
CyberPanel install/upgrade now integrates equivalent behaviour (version choice, backup path, config preservation) so these scripts are optional for users who prefer a standalone workflow.

View File

@@ -14,7 +14,7 @@ Pre_Upgrade_CentOS7_MySQL() {
mv /etc/cnfbackup/my.cnf.d /etc/
systemctl enable mariadb 2>/dev/null || systemctl enable mysql
systemctl start mariadb 2>/dev/null || systemctl start mysql
mariadb-upgrade -uroot -p"$MySQL_Password" 2>/dev/null || mysql_upgrade -uroot -p"$MySQL_Password"
mariadb-upgrade --force -uroot -p"$MySQL_Password" 2>/dev/null || mysql_upgrade --force -uroot -p"$MySQL_Password" 2>/dev/null || true
fi
mariadb -uroot -p"$MySQL_Password" -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '$MySQL_Password';flush privileges" 2>/dev/null || mysql -uroot -p"$MySQL_Password" -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '$MySQL_Password';flush privileges"
Ensure_MariaDB_Client_No_SSL
@@ -41,6 +41,8 @@ Maybe_Backup_MariaDB_Before_Upgrade() {
Backup_MariaDB_Before_Upgrade() {
local pass="" backup_dir="/root/cyberpanel_mariadb_backups" backup_file=""
local std_backup_base="/root/db-upgrade-backups"
local std_backup_dir="${std_backup_base}/$(date +%Y-%m-%d_%H%M%S)"
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Starting MariaDB pre-upgrade backup... (this may take a few minutes)" | tee -a /var/log/cyberpanel_upgrade_debug.log
[[ -f /etc/cyberpanel/mysqlPassword ]] || { echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] MariaDB pre-upgrade backup: skipped (no password file)." | tee -a /var/log/cyberpanel_upgrade_debug.log; return 0; }
if grep -q '"mysqlpassword"' /etc/cyberpanel/mysqlPassword 2>/dev/null; then
@@ -55,6 +57,8 @@ Backup_MariaDB_Before_Upgrade() {
(mariadb-dump --skip-ssl -u root -p"$pass" --all-databases --single-transaction --routines --triggers --events 2>/dev/null || mysqldump --skip-ssl -u root -p"$pass" --all-databases --single-transaction --routines --triggers --events 2>/dev/null) | gzip > "$backup_file" 2>/dev/null
if [[ -s "$backup_file" ]]; then
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] MariaDB backup created: $backup_file" | tee -a /var/log/cyberpanel_upgrade_debug.log
mkdir -p "$std_backup_dir"
cp -a "$backup_file" "$std_backup_dir/all_databases.sql.gz" 2>/dev/null && echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] MariaDB backup also saved to: $std_backup_dir/all_databases.sql.gz" | tee -a /var/log/cyberpanel_upgrade_debug.log || true
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] MariaDB pre-upgrade backup: done." | tee -a /var/log/cyberpanel_upgrade_debug.log
else
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] WARNING: MariaDB backup file empty or failed." | tee -a /var/log/cyberpanel_upgrade_debug.log

View File

@@ -259,7 +259,8 @@ EOF
sed -i 's|https://yum.mariadb.org/RPM-GPG-KEY-MariaDB|https://cyberpanel.sh/yum.mariadb.org/RPM-GPG-KEY-MariaDB|g' /etc/yum.repos.d/MariaDB.repo
fi
dnf clean metadata --disablerepo='*' --enablerepo=mariadb 2>/dev/null || true
# MariaDB 10 -> 11 or 11 -> 12: RPM scriptlet blocks in-place upgrade; do manual stop, remove old server, install target, start, mariadb-upgrade
# MariaDB 10 -> 11 or 11 -> 12: RPM scriptlet blocks in-place upgrade; do manual stop, remove old server, install target, start, mariadb-upgrade.
# Data in /var/lib/mysql is preserved; no databases are dropped.
MARIADB_OLD_10=$(rpm -qa 'MariaDB-server-10*' 2>/dev/null | head -1)
[[ -z "$MARIADB_OLD_10" ]] && MARIADB_OLD_10=$(rpm -qa 2>/dev/null | grep -E '^MariaDB-server-10\.' | head -1)
MARIADB_OLD_11=$(rpm -qa 'MariaDB-server-11*' 2>/dev/null | head -1)
@@ -278,7 +279,7 @@ EOF
printf "[client]\nssl=0\nskip-ssl\n" > /etc/my.cnf.d/cyberpanel-client.cnf 2>/dev/null || true
systemctl start mariadb 2>/dev/null || true
sleep 2
mariadb-upgrade -u root 2>/dev/null || true
mariadb-upgrade --force -u root 2>/dev/null || true
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] MariaDB manual upgrade to $MARIADB_VER_REPO completed." | tee -a /var/log/cyberpanel_upgrade_debug.log
elif [[ -n "$MARIADB_OLD_11" ]] && [[ "$MARIADB_VER_REPO" =~ ^12\. ]]; then
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] MariaDB 11.x detected; performing manual upgrade to $MARIADB_VER_REPO (stop, remove, install, start, mariadb-upgrade)..." | tee -a /var/log/cyberpanel_upgrade_debug.log
@@ -292,7 +293,7 @@ EOF
printf "[client]\nssl=0\nskip-ssl\n" > /etc/my.cnf.d/cyberpanel-client.cnf 2>/dev/null || true
systemctl start mariadb 2>/dev/null || true
sleep 2
mariadb-upgrade -u root 2>/dev/null || true
mariadb-upgrade --force -u root 2>/dev/null || true
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] MariaDB manual upgrade to $MARIADB_VER_REPO completed (11->12)." | tee -a /var/log/cyberpanel_upgrade_debug.log
else
# Normal install/upgrade (same version or 10.11)
@@ -315,7 +316,7 @@ EOF
printf "[client]\nssl=0\nskip-ssl\n" > /etc/my.cnf.d/cyberpanel-client.cnf 2>/dev/null || true
systemctl start mariadb 2>/dev/null || true
sleep 2
mariadb-upgrade -u root 2>/dev/null || true
mariadb-upgrade --force -u root 2>/dev/null || true
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] MariaDB manual 11->12 fallback completed." | tee -a /var/log/cyberpanel_upgrade_debug.log
fi
fi
@@ -366,7 +367,7 @@ EOF
printf "[client]\nssl=0\nskip-ssl\n" > /etc/my.cnf.d/cyberpanel-client.cnf 2>/dev/null || true
systemctl start mariadb 2>/dev/null || true
sleep 2
mariadb-upgrade -u root 2>/dev/null || true
mariadb-upgrade --force -u root 2>/dev/null || true
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] MariaDB manual upgrade to $MARIADB_VER_REPO completed (AlmaLinux 9)." | tee -a /var/log/cyberpanel_upgrade_debug.log
elif [[ -n "$MARIADB_OLD_11_AL9" ]] && [[ "$MARIADB_VER_REPO" =~ ^12\. ]]; then
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] MariaDB 11.x detected (AlmaLinux 9); manual upgrade to $MARIADB_VER_REPO..." | tee -a /var/log/cyberpanel_upgrade_debug.log
@@ -380,7 +381,7 @@ EOF
printf "[client]\nssl=0\nskip-ssl\n" > /etc/my.cnf.d/cyberpanel-client.cnf 2>/dev/null || true
systemctl start mariadb 2>/dev/null || true
sleep 2
mariadb-upgrade -u root 2>/dev/null || true
mariadb-upgrade --force -u root 2>/dev/null || true
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] MariaDB manual upgrade to $MARIADB_VER_REPO completed (AlmaLinux 9, 11->12)." | tee -a /var/log/cyberpanel_upgrade_debug.log
else
dnf install -y --enablerepo=mariadb MariaDB-server MariaDB-devel 2>/dev/null || dnf install -y mariadb-server mariadb-devel