mirror of
https://github.com/usmannasir/cyberpanel.git
synced 2025-10-26 07:46:35 +01:00
1447 lines
63 KiB
Bash
1447 lines
63 KiB
Bash
#!/bin/bash
|
|
|
|
#set -e -o pipefail
|
|
#set -x
|
|
#set -u
|
|
|
|
#CyberPanel installer script for CentOS 7, CentOS 8, CloudLinux 7, AlmaLinux 8, AlmaLinux 9, AlmaLinux 10, RockyLinux 8, Ubuntu 18.04, Ubuntu 20.04, Ubuntu 20.10, Ubuntu 22.04, Ubuntu 24.04, Ubuntu 24.04.3, openEuler 20.03 and openEuler 22.03
|
|
#For whoever may edit this script, please follow:
|
|
#Please use Pre_Install_xxx() and Post_Install_xxx() if you want to something respectively before or after the panel installation
|
|
#and update below accordingly
|
|
#Please use variable/functions name as MySomething or My_Something, and please try not to use too-short abbreviation :)
|
|
#Please use On/Off, True/False, Yes/No.
|
|
|
|
Sudo_Test=$(set)
|
|
#for SUDO check
|
|
|
|
Set_Default_Variables() {
|
|
|
|
# Clear old log files
|
|
echo -e "Clearing old log files..."
|
|
rm -f /var/log/cyberpanel_upgrade_debug.log
|
|
rm -f /var/log/installLogs.txt
|
|
rm -f /var/log/upgradeLogs.txt
|
|
|
|
# Initialize new debug log
|
|
echo -e "\n\n========================================" > /var/log/cyberpanel_upgrade_debug.log
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Starting CyberPanel Upgrade Script" >> /var/log/cyberpanel_upgrade_debug.log
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Old log files have been cleared" >> /var/log/cyberpanel_upgrade_debug.log
|
|
echo -e "========================================\n" >> /var/log/cyberpanel_upgrade_debug.log
|
|
|
|
#### this is temp code for csf
|
|
|
|
rm -Rfv /usr/local/CyberCP/configservercsf
|
|
rm -fv /home/cyberpanel/plugins/configservercsf
|
|
rm -Rfv /usr/local/CyberCP/public/static/configservercsf
|
|
|
|
sed -i "/configservercsf/d" /usr/local/CyberCP/CyberCP/settings.py
|
|
sed -i "/configservercsf/d" /usr/local/CyberCP/CyberCP/urls.py
|
|
if [ ! -e /etc/cxs/cxs.pl ]; then
|
|
sed -i "/configserver/d" /usr/local/CyberCP/baseTemplate/templates/baseTemplate/index.html
|
|
fi
|
|
#systemctl restart lscpd
|
|
### this is temp code for csf
|
|
|
|
|
|
|
|
export LC_CTYPE=en_US.UTF-8
|
|
echo -e "\nFetching latest data from CyberPanel server...\n"
|
|
echo -e "This may take few seconds..."
|
|
|
|
Server_Country="Unknown"
|
|
Server_OS=""
|
|
Server_OS_Version=""
|
|
Server_Provider='Undefined'
|
|
|
|
Temp_Value=$(curl --silent --max-time 30 -4 https://cyberpanel.net/version.txt)
|
|
Panel_Version=${Temp_Value:12:3}
|
|
Panel_Build=${Temp_Value:25:1}
|
|
|
|
Branch_Name="v${Panel_Version}.${Panel_Build}"
|
|
Base_Number="1.9.3"
|
|
|
|
Git_User=""
|
|
Git_Content_URL=""
|
|
Git_Clone_URL=""
|
|
|
|
MySQL_Version=$(mysql -V | grep -P '\d+.\d+.\d+' -o)
|
|
MySQL_Password=$(cat /etc/cyberpanel/mysqlPassword)
|
|
|
|
|
|
LSWS_Latest_URL="https://cyberpanel.sh/update.litespeedtech.com/ws/latest.php"
|
|
LSWS_Tmp=$(curl --silent --max-time 30 -4 "$LSWS_Latest_URL")
|
|
LSWS_Stable_Line=$(echo "$LSWS_Tmp" | grep "LSWS_STABLE")
|
|
LSWS_Stable_Version=$(expr "$LSWS_Stable_Line" : '.*LSWS_STABLE=\(.*\) BUILD .*')
|
|
#grab the LSWS latest stable version.
|
|
|
|
Debug_Log2 "Starting Upgrade...1"
|
|
|
|
rm -rf /root/cyberpanel_upgrade_tmp
|
|
mkdir -p /root/cyberpanel_upgrade_tmp
|
|
cd /root/cyberpanel_upgrade_tmp || exit
|
|
}
|
|
|
|
Debug_Log() {
|
|
echo -e "\n${1}=${2}\n" >> "/var/log/cyberpanel_debug_upgrade_$(date +"%Y-%m-%d")_${Random_Log_Name}.log"
|
|
}
|
|
|
|
Debug_Log2() {
|
|
echo -e "\n${1}" >> /var/log/upgradeLogs.txt
|
|
}
|
|
|
|
Check_Root() {
|
|
echo -e "\nChecking root privileges..."
|
|
if echo "$Sudo_Test" | grep SUDO >/dev/null; then
|
|
echo -e "\nYou are using SUDO, please run as root user...\n"
|
|
echo -e "\nIf you don't have direct access to root user, please run \e[31msudo su -\e[39m command (do NOT miss the \e[31m-\e[39m at end or it will fail) and then run installation command again."
|
|
exit
|
|
fi
|
|
|
|
if [[ $(id -u) != 0 ]] >/dev/null; then
|
|
echo -e "\nYou must run as root user to install CyberPanel...\n"
|
|
echo -e "or run the following command: (do NOT miss the quotes)"
|
|
echo -e "\e[31msudo su -c \"sh <(curl https://cyberpanel.sh || wget -O - https://cyberpanel.sh)\"\e[39m"
|
|
exit 1
|
|
else
|
|
echo -e "\nYou are running as root...\n"
|
|
fi
|
|
}
|
|
|
|
Check_Server_IP() {
|
|
echo -e "Checking server location...\n"
|
|
|
|
Server_Country=$(curl --silent --max-time 10 -4 https://cyberpanel.sh/?country)
|
|
if [[ ${#Server_Country} != "2" ]] ; then
|
|
Server_Country="Unknown"
|
|
fi
|
|
|
|
if [[ "$Debug" = "On" ]] ; then
|
|
Debug_Log "Server_Country" "$Server_Country"
|
|
fi
|
|
|
|
if [[ "$*" = *"--mirror"* ]] ; then
|
|
Server_Country="CN"
|
|
echo -e "Forced to use mirror server due to --mirror argument...\n"
|
|
fi
|
|
|
|
if [[ "$Server_Country" = *"CN"* ]] ; then
|
|
Server_Country="CN"
|
|
echo -e "Setting up to use mirror server...\n"
|
|
fi
|
|
}
|
|
|
|
Check_OS() {
|
|
if [[ ! -f /etc/os-release ]] ; then
|
|
echo -e "Unable to detect the Operating System...\n"
|
|
exit
|
|
fi
|
|
|
|
if ! uname -m | grep -qE 'x86_64|aarch64' ; then
|
|
echo -e "x86_64 or ARM system is required...\n"
|
|
exit
|
|
fi
|
|
|
|
if grep -q -E "CentOS Linux 7|CentOS Linux 8|CentOS Stream" /etc/os-release ; then
|
|
Server_OS="CentOS"
|
|
elif grep -q "Red Hat Enterprise Linux" /etc/os-release ; then
|
|
Server_OS="RedHat"
|
|
elif grep -q -E "CloudLinux 7|CloudLinux 8|CloudLinux 9" /etc/os-release ; then
|
|
Server_OS="CloudLinux"
|
|
elif grep -q -E "Rocky Linux" /etc/os-release ; then
|
|
Server_OS="RockyLinux"
|
|
elif grep -q -E "AlmaLinux-8|AlmaLinux-9|AlmaLinux-10" /etc/os-release ; then
|
|
Server_OS="AlmaLinux"
|
|
elif grep -q -E "Ubuntu 18.04|Ubuntu 20.04|Ubuntu 20.10|Ubuntu 22.04|Ubuntu 24.04" /etc/os-release ; then
|
|
Server_OS="Ubuntu"
|
|
elif grep -q -E "openEuler 20.03|openEuler 22.03" /etc/os-release ; then
|
|
Server_OS="openEuler"
|
|
else
|
|
echo -e "Unable to detect your system..."
|
|
echo -e "\nCyberPanel is supported on x86_64 based Ubuntu 18.04, Ubuntu 20.04, Ubuntu 20.10, Ubuntu 22.04, Ubuntu 24.04, Ubuntu 24.04.3, CentOS 7, CentOS 8, AlmaLinux 8, AlmaLinux 9, AlmaLinux 10, RockyLinux 8, CloudLinux 7, CloudLinux 8, CloudLinux 9, openEuler 20.03, openEuler 22.03...\n"
|
|
Debug_Log2 "CyberPanel is supported on x86_64 based Ubuntu 18.04, Ubuntu 20.04, Ubuntu 20.10, Ubuntu 22.04, Ubuntu 24.04, Ubuntu 24.04.3, CentOS 7, CentOS 8, AlmaLinux 8, AlmaLinux 9, AlmaLinux 10, RockyLinux 8, CloudLinux 7, CloudLinux 8, CloudLinux 9, openEuler 20.03, openEuler 22.03... [404]"
|
|
exit
|
|
fi
|
|
|
|
Server_OS_Version=$(grep VERSION_ID /etc/os-release | awk -F[=,] '{print $2}' | tr -d \" | head -c2 | tr -d . )
|
|
#to make 20.04 display as 20, etc.
|
|
|
|
echo -e "System: $Server_OS $Server_OS_Version detected...\n"
|
|
|
|
if [[ $Server_OS = "CloudLinux" ]] || [[ "$Server_OS" = "AlmaLinux" ]] || [[ "$Server_OS" = "RockyLinux" ]] || [[ "$Server_OS" = "RedHat" ]]; then
|
|
Server_OS="CentOS"
|
|
#CloudLinux gives version id like 7.8, 7.9, so cut it to show first number only
|
|
#treat CloudLinux, Rocky and Alma as CentOS
|
|
fi
|
|
|
|
if [[ "$Debug" = "On" ]] ; then
|
|
Debug_Log "Server_OS" "$Server_OS $Server_OS_Version"
|
|
fi
|
|
|
|
}
|
|
|
|
Check_Provider() {
|
|
if hash dmidecode >/dev/null 2>&1; then
|
|
if [[ "$(dmidecode -s bios-vendor)" = "Google" ]]; then
|
|
Server_Provider="Google Cloud Platform"
|
|
elif [[ "$(dmidecode -s bios-vendor)" = "DigitalOcean" ]]; then
|
|
Server_Provider="Digital Ocean"
|
|
elif [[ "$(dmidecode -s system-product-name | cut -c 1-7)" = "Alibaba" ]]; then
|
|
Server_Provider="Alibaba Cloud"
|
|
elif [[ "$(dmidecode -s system-manufacturer)" = "Microsoft Corporation" ]]; then
|
|
Server_Provider="Microsoft Azure"
|
|
elif [[ -d /usr/local/qcloud ]]; then
|
|
Server_Provider="Tencent Cloud"
|
|
else
|
|
Server_Provider="Undefined"
|
|
fi
|
|
else
|
|
Server_Provider='Undefined'
|
|
fi
|
|
|
|
if [[ -f /sys/devices/virtual/dmi/id/product_uuid ]]; then
|
|
if [[ "$(cut -c 1-3 /sys/devices/virtual/dmi/id/product_uuid)" = 'EC2' ]] && [[ -d /home/ubuntu ]]; then
|
|
Server_Provider='Amazon Web Service'
|
|
fi
|
|
fi
|
|
|
|
if [[ "$Debug" = "On" ]] ; then
|
|
Debug_Log "Server_Provider" "$Server_Provider"
|
|
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:]]/}" '
|
|
BEGIN {
|
|
print "num1", (num1 < num2 ? "<" : ">="), "num2"
|
|
}
|
|
')
|
|
if [[ $Output = *">="* ]]; then
|
|
echo -e "\nYou must use version number higher than 1.9.4"
|
|
exit
|
|
else
|
|
Branch_Name="v${1//[[:space:]]/}"
|
|
echo -e "\nSet branch name to $Branch_Name...\n"
|
|
fi
|
|
else
|
|
echo -e "\nPlease input a valid format version number."
|
|
exit
|
|
fi
|
|
}
|
|
|
|
Check_Return() {
|
|
#check previous command result , 0 = ok , non-0 = something wrong.
|
|
# shellcheck disable=SC2181
|
|
local LAST_EXIT_CODE=$?
|
|
if [[ $LAST_EXIT_CODE != "0" ]]; then
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] ERROR: Command failed with exit code: $LAST_EXIT_CODE" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
if [[ -n "$1" ]] ; then
|
|
echo -e "\n\n\n$1"
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Error message: $1" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
fi
|
|
echo -e "above command failed..."
|
|
Debug_Log2 "command failed. For more information read /var/log/installLogs.txt [404]"
|
|
|
|
# Check if this is a critical error that should stop the upgrade
|
|
if [[ "$2" = "no_exit" ]] || [[ "$3" = "continue" ]]; then
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Continuing despite error..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
else
|
|
# Only exit for critical errors
|
|
if [[ "$1" == *"Virtualenv creation failed"* ]] || [[ "$1" == *"Python upgrade.py"* ]]; then
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] FATAL: Critical error, exiting" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
exit $LAST_EXIT_CODE
|
|
else
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Non-critical error, continuing..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
fi
|
|
fi
|
|
else
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Command succeeded" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
fi
|
|
}
|
|
# check command success or not
|
|
|
|
Regenerate_Cert() {
|
|
cat <<EOF >/usr/local/CyberCP/cert_conf
|
|
[req]
|
|
prompt=no
|
|
distinguished_name=cyberpanel
|
|
[cyberpanel]
|
|
commonName = www.example.com
|
|
countryName = CP
|
|
localityName = CyberPanel
|
|
organizationName = CyberPanel
|
|
organizationalUnitName = CyberPanel
|
|
stateOrProvinceName = CP
|
|
emailAddress = mail@example.com
|
|
name = CyberPanel
|
|
surname = CyberPanel
|
|
givenName = CyberPanel
|
|
initials = CP
|
|
dnQualifier = CyberPanel
|
|
[server_exts]
|
|
extendedKeyUsage = 1.3.6.1.5.5.7.3.1
|
|
EOF
|
|
if [[ $1 == "8090" ]]; then
|
|
openssl req -x509 -config /usr/local/CyberCP/cert_conf -extensions 'server_exts' -nodes -days 820 -newkey rsa:2048 -keyout /usr/local/lscp/conf/key.pem -out /usr/local/lscp/conf/cert.pem
|
|
fi
|
|
|
|
if [[ $1 == "7080" ]]; then
|
|
if [[ -f /usr/local/lsws/admin/conf/webadmin.key ]]; then
|
|
key_path="/usr/local/lsws/admin/conf/webadmin.key"
|
|
cert_path="/usr/local/lsws/admin/conf/webadmin.crt"
|
|
else
|
|
key_path="/usr/local/lsws/admin/conf/cert/admin.key"
|
|
cert_path="/usr/local/lsws/admin/conf/cert/admin.crt"
|
|
fi
|
|
openssl req -x509 -config /usr/local/CyberCP/cert_conf -extensions 'server_exts' -nodes -days 820 -newkey rsa:2048 -keyout $key_path -out $cert_path
|
|
fi
|
|
rm -f /usr/local/CyberCP/cert_conf
|
|
}
|
|
|
|
Retry_Command() {
|
|
# shellcheck disable=SC2034
|
|
for i in {1..50};
|
|
do
|
|
eval "$1" && break || echo -e "\n$1 has failed for $i times\nWait for 3 seconds and try again...\n"; sleep 3;
|
|
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
|
|
}
|
|
|
|
Pre_Upgrade_Setup_Git_URL() {
|
|
if [[ $Server_Country != "CN" ]] ; then
|
|
Git_User="usmannasir"
|
|
Git_Content_URL="https://raw.githubusercontent.com/${Git_User}/cyberpanel"
|
|
Git_Clone_URL="https://github.com/${Git_User}/cyberpanel.git"
|
|
else
|
|
Git_User="qtwrk"
|
|
Git_Content_URL="https://gitee.com/${Git_User}/cyberpanel/raw"
|
|
Git_Clone_URL="https://gitee.com/${Git_User}/cyberpanel.git"
|
|
fi
|
|
|
|
if [[ "$Debug" = "On" ]] ; then
|
|
Debug_Log "Git_URL" "$Git_Content_URL"
|
|
fi
|
|
}
|
|
|
|
Pre_Upgrade_CentOS7_MySQL() {
|
|
if [[ "$MySQL_Version" = "10.1" ]]; then
|
|
cp /etc/my.cnf /etc/my.cnf.bak
|
|
mkdir /etc/cnfbackup
|
|
cp -R /etc/my.cnf.d/ /etc/cnfbackup/
|
|
|
|
yum remove MariaDB-server MariaDB-client galera -y
|
|
yum --enablerepo=mariadb -y install MariaDB-server MariaDB-client galera
|
|
|
|
cp -f /etc/my.cnf.bak /etc/my.cnf
|
|
rm -rf /etc/my.cnf.d/
|
|
mv /etc/cnfbackup/my.cnf.d /etc/
|
|
|
|
systemctl enable mysql
|
|
systemctl start mysql
|
|
|
|
mysql_upgrade -uroot -p"$MySQL_Password"
|
|
|
|
fi
|
|
|
|
mysql -uroot -p"$MySQL_Password" -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '$MySQL_Password';flush privileges"
|
|
}
|
|
|
|
Pre_Upgrade_Setup_Repository() {
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Pre_Upgrade_Setup_Repository started for OS: $Server_OS" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
|
|
if [[ "$Server_OS" = "CentOS" ]] ; then
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Setting up CentOS repositories..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
rm -f /etc/yum.repos.d/CyberPanel.repo
|
|
rm -f /etc/yum.repos.d/litespeed.repo
|
|
if [[ "$Server_Country" = "CN" ]] ; then
|
|
curl -o /etc/yum.repos.d/litespeed.repo https://cyberpanel.sh/litespeed/litespeed_cn.repo
|
|
else
|
|
curl -o /etc/yum.repos.d/litespeed.repo https://cyberpanel.sh/litespeed/litespeed.repo
|
|
fi
|
|
yum clean all
|
|
yum update -y
|
|
yum autoremove epel-release -y
|
|
rm -f /etc/yum.repos.d/epel.repo
|
|
rm -f /etc/yum.repos.d/epel.repo.rpmsave
|
|
yum autoremove epel-release -y
|
|
#all pre-upgrade operation for CentOS both 7/8
|
|
|
|
if [[ "$Server_OS_Version" = "7" ]] ; then
|
|
yum install epel-release -y
|
|
yum -y install yum-utils
|
|
yum -y groupinstall development
|
|
rm -f /etc/yum.repos.d/dovecot.repo
|
|
rm -f /etc/yum.repos.d/frank.repo
|
|
rm -f /etc/yum.repos.d/ius-archive.repo
|
|
rm -f /etc/yum.repos.d/ius.repo
|
|
rm -f /etc/yum.repos.d/ius-testing.repo
|
|
#rm -f /etc/yum.repos.d/lux.repo
|
|
rm -f /etc/yum.repos.d/powerdns-auth-*
|
|
|
|
rm -f /etc/yum.repos.d/MariaDB.repo
|
|
rm -f /etc/yum.repos.d/MariaDB.repo.rpmsave
|
|
|
|
yum erase gf-* -y
|
|
|
|
rm -f /etc/yum.repos.d/gf.repo
|
|
rm -f /etc/yum.repos.d/gf.repo.rpmsave
|
|
|
|
rm -f /etc/yum.repos.d/copart-restic-epel-7.repo.repo
|
|
rm -f /etc/yum.repos.d/copart-restic-epel-7.repo.rpmsave
|
|
|
|
rm -f /etc/yum.repos.d/ius-archive.repo
|
|
rm -f /etc/yum.repos.d/ius.repo
|
|
rm -f /etc/yum.repos.d/ius-testing.repo
|
|
|
|
yum clean all
|
|
|
|
curl -o /etc/yum.repos.d/powerdns-auth-43.repo https://cyberpanel.sh/repo.powerdns.com/repo-files/centos-auth-43.repo
|
|
Check_Return "yum repo" "no_exit"
|
|
|
|
cat << EOF > /etc/yum.repos.d/MariaDB.repo
|
|
# MariaDB 10.4 CentOS repository list - created 2021-08-06 02:01 UTC
|
|
# http://downloads.mariadb.org/mariadb/repositories/
|
|
[mariadb]
|
|
name = MariaDB
|
|
baseurl = http://yum.mariadb.org/10.4/centos7-amd64
|
|
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
|
|
gpgcheck=1
|
|
EOF
|
|
|
|
yum install yum-plugin-copr -y
|
|
yum copr enable copart/restic -y
|
|
rpm -ivh https://cyberpanel.sh/repo.ius.io/ius-release-el7.rpm
|
|
|
|
if [[ "$Server_Country" = "CN" ]] ; then
|
|
sed -i 's|http://yum.mariadb.org|https://cyberpanel.sh/yum.mariadb.org|g' /etc/yum.repos.d/MariaDB.repo
|
|
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
|
|
# use MariaDB Mirror
|
|
sed -i 's|https://download.copr.fedorainfracloud.org|https://cyberpanel.sh/download.copr.fedorainfracloud.org|g' /etc/yum.repos.d/_copr_copart-restic.repo
|
|
sed -i 's|http://repo.iotti.biz|https://cyberpanel.sh/repo.iotti.biz|g' /etc/yum.repos.d/frank.repo
|
|
sed -i "s|mirrorlist=http://mirrorlist.ghettoforge.org/el/7/gf/\$basearch/mirrorlist|baseurl=https://cyberpanel.sh/mirror.ghettoforge.net/distributions/gf/el/7/gf/x86_64/|g" /etc/yum.repos.d/gf.repo
|
|
sed -i "s|mirrorlist=http://mirrorlist.ghettoforge.org/el/7/plus/\$basearch/mirrorlist|baseurl=https://cyberpanel.sh/mirror.ghettoforge.net/distributions/gf/el/7/plus/x86_64/|g" /etc/yum.repos.d/gf.repo
|
|
sed -i 's|https://repo.ius.io|https://cyberpanel.sh/repo.ius.io|g' /etc/yum.repos.d/ius.repo
|
|
sed -i 's|http://repo.iotti.biz|https://cyberpanel.sh/repo.iotti.biz|g' /etc/yum.repos.d/lux.repo
|
|
sed -i 's|http://repo.powerdns.com|https://cyberpanel.sh/repo.powerdns.com|g' /etc/yum.repos.d/powerdns-auth-43.repo
|
|
sed -i 's|https://repo.powerdns.com|https://cyberpanel.sh/repo.powerdns.com|g' /etc/yum.repos.d/powerdns-auth-43.repo
|
|
fi
|
|
yum install yum-plugin-priorities -y
|
|
|
|
yum update -y
|
|
|
|
yum install -y wget strace htop net-tools telnet curl which bc telnet htop libevent-devel gcc libattr-devel xz-devel gpgme-devel curl-devel git socat openssl-devel MariaDB-shared mariadb-devel python36u python36u-pip python36u-devel bind-utils
|
|
|
|
Pre_Upgrade_CentOS7_MySQL
|
|
|
|
#all pre-upgrade operation for CentOS 7
|
|
elif [[ "$Server_OS_Version" = "8" ]] ; then
|
|
# cat <<EOF >/etc/yum.repos.d/CentOS-PowerTools-CyberPanel.repo
|
|
#[powertools-for-cyberpanel]
|
|
#name=CentOS Linux \$releasever - PowerTools
|
|
#mirrorlist=http://mirrorlist.centos.org/?release=\$releasever&arch=\$basearch&repo=PowerTools&infra=\$infra
|
|
#baseurl=http://mirror.centos.org/\$contentdir/\$releasever/PowerTools/\$basearch/os/
|
|
#gpgcheck=1
|
|
#enabled=1
|
|
#gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
|
|
#EOF
|
|
rm -f /etc/yum.repos.d/CentOS-PowerTools-CyberPanel.repo
|
|
|
|
if [[ "$Server_Country" = "CN" ]] ; then
|
|
dnf --nogpg install -y https://cyberpanel.sh/mirror.ghettoforge.net/distributions/gf/gf-release-latest.gf.el8.noarch.rpm
|
|
else
|
|
dnf --nogpg install -y https://mirror.ghettoforge.net/distributions/gf/gf-release-latest.gf.el8.noarch.rpm
|
|
fi
|
|
|
|
dnf install epel-release -y
|
|
|
|
dnf install -y wget strace htop net-tools telnet curl which bc telnet htop libevent-devel gcc libattr-devel xz-devel mariadb-connector-c-devel curl-devel git platform-python-devel tar socat bind-utils
|
|
dnf install gpgme-devel -y
|
|
dnf install python3 -y
|
|
|
|
elif [[ "$Server_OS_Version" = "9" ]] || [[ "$Server_OS_Version" = "10" ]] ; then
|
|
rm -f /etc/yum.repos.d/CentOS-PowerTools-CyberPanel.repo
|
|
|
|
if [[ "$Server_Country" = "CN" ]] ; then
|
|
dnf --nogpg install -y https://cyberpanel.sh/mirror.ghettoforge.net/distributions/gf/gf-release-latest.gf.el9.noarch.rpm
|
|
else
|
|
dnf --nogpg install -y https://mirror.ghettoforge.net/distributions/gf/gf-release-latest.gf.el9.noarch.rpm
|
|
fi
|
|
|
|
dnf install epel-release -y
|
|
|
|
dnf install -y wget strace htop net-tools telnet curl which bc telnet htop libevent-devel gcc libattr-devel xz-devel mariadb-connector-c-devel curl-devel git platform-python-devel tar socat bind-utils
|
|
dnf install gpgme-devel -y
|
|
dnf install python3 -y
|
|
fi
|
|
elif [[ "$Server_OS" = "Ubuntu" ]] ; then
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Setting up Ubuntu repositories..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
|
|
# Ensure nobody group exists (required for various operations)
|
|
if ! getent group nobody > /dev/null 2>&1 ; then
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Creating 'nobody' group..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
groupadd nobody
|
|
fi
|
|
|
|
apt update -y
|
|
export DEBIAN_FRONTEND=noninteractive ; apt-get -o Dpkg::Options::="--force-confold" upgrade -y
|
|
|
|
if [[ "$Server_OS_Version" = "22" ]] || [[ "$Server_OS_Version" = "24" ]] ; then
|
|
if [[ "$Server_OS_Version" = "24" ]]; then
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Installing Ubuntu 24.04 specific packages..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
else
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Installing Ubuntu 22.04 specific packages..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
fi
|
|
# Install Python development packages required for virtualenv on Ubuntu 22.04/24.04
|
|
DEBIAN_FRONTEND=noninteractive apt install -y python3-dev python3-venv python3-pip python3-setuptools python3-wheel
|
|
DEBIAN_FRONTEND=noninteractive apt install -y dnsutils net-tools htop telnet libcurl4-gnutls-dev libgnutls28-dev libgcrypt20-dev libattr1 libattr1-dev liblzma-dev libgpgme-dev libcurl4-gnutls-dev libssl-dev nghttp2 libnghttp2-dev idn2 libidn2-dev libidn2-0-dev librtmp-dev libpsl-dev nettle-dev libgnutls28-dev libldap2-dev libgssapi-krb5-2 libk5crypto3 libkrb5-dev libcomerr2 libldap2-dev virtualenv git socat vim unzip zip libmariadb-dev-compat libmariadb-dev
|
|
|
|
else
|
|
DEBIAN_FRONTEND=noninteractive apt install -y htop telnet libcurl4-gnutls-dev libgnutls28-dev libgcrypt20-dev libattr1 libattr1-dev liblzma-dev libgpgme-dev libmariadbclient-dev libcurl4-gnutls-dev libssl-dev nghttp2 libnghttp2-dev idn2 libidn2-dev libidn2-0-dev librtmp-dev libpsl-dev nettle-dev libgnutls28-dev libldap2-dev libgssapi-krb5-2 libk5crypto3 libkrb5-dev libcomerr2 libldap2-dev virtualenv git dnsutils
|
|
fi
|
|
DEBIAN_FRONTEND=noninteractive apt install -y python3-pip
|
|
DEBIAN_FRONTEND=noninteractive apt install -y build-essential libssl-dev libffi-dev python3-dev
|
|
DEBIAN_FRONTEND=noninteractive apt install -y python3-venv
|
|
|
|
### fix for pip issue on ubuntu 22 and 24
|
|
|
|
apt-get remove --purge virtualenv -y
|
|
# Handle Ubuntu 24.04's externally-managed-environment policy
|
|
if [[ "$Server_OS_Version" = "24" ]]; then
|
|
echo -e "Ubuntu 24.04 detected - using apt for virtualenv installation"
|
|
DEBIAN_FRONTEND=noninteractive apt-get install -y python3-virtualenv
|
|
else
|
|
pip uninstall -y virtualenv 2>/dev/null || true
|
|
rm -rf /usr/lib/python3/dist-packages/virtualenv*
|
|
pip3 install --upgrade virtualenv
|
|
fi
|
|
|
|
|
|
if [[ "$Server_OS_Version" = "18" ]] ; then
|
|
:
|
|
#all pre-upgrade operation for Ubuntu 18
|
|
elif [[ "$Server_OS_Version" = "20" ]] ; then
|
|
# if ! grep -q "focal" /etc/apt/sources.list.d/dovecot.list ; then
|
|
# sed -i 's|ce-2.3-latest/ubuntu/bionic bionic main|ce-2.3-latest/ubuntu/focal focal main|g' /etc/apt/sources.list.d/dovecot.list
|
|
# rm -rf /etc/dovecot-backup
|
|
# cp -r /etc/dovecot /etc/dovecot-backup
|
|
# apt update
|
|
# DEBIAN_FRONTEND=noninteractive apt -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" remove -y dovecot-mysql dovecot-pop3d dovecot-imapd
|
|
# DEBIAN_FRONTEND=noninteractive apt -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" install -y dovecot-mysql dovecot-pop3d dovecot-imapd
|
|
# systemctl restart dovecot
|
|
# fi
|
|
#fix ubuntu 20 webmail login issue
|
|
|
|
rm -f /etc/apt/sources.list.d/dovecot.list
|
|
apt update
|
|
DEBIAN_FRONTEND=noninteractive DEBIAN_PRIORITY=critical apt -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade -y
|
|
fi
|
|
#all pre-upgrade operation for Ubuntu 20
|
|
fi
|
|
if [[ "$Server_OS" = "openEuler" ]] ; then
|
|
rm -f /etc/yum.repos.d/CyberPanel.repo
|
|
rm -f /etc/yum.repos.d/litespeed.repo
|
|
|
|
yum clean all
|
|
yum update -y
|
|
|
|
dnf install -y wget strace htop net-tools telnet curl which bc telnet htop libevent-devel gcc libattr-devel xz-devel mariadb-devel curl-devel git python3-devel tar socat bind-utils
|
|
dnf install gpgme-devel -y
|
|
dnf install python3 -y
|
|
fi
|
|
#all pre-upgrade operation for openEuler
|
|
}
|
|
|
|
Download_Requirement() {
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Starting Download_Requirement function..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
for i in {1..50};
|
|
do
|
|
if [[ "$Server_OS_Version" = "22" ]] || [[ "$Server_OS_Version" = "24" ]] || [[ "$Server_OS_Version" = "9" ]] || [[ "$Server_OS_Version" = "10" ]]; then
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Downloading requirements.txt for OS version $Server_OS_Version" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
wget -O /usr/local/requirments.txt "${Git_Content_URL}/${Branch_Name}/requirments.txt" 2>&1 | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
else
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Downloading requirements-old.txt for OS version $Server_OS_Version" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
wget -O /usr/local/requirments.txt "${Git_Content_URL}/${Branch_Name}/requirments-old.txt" 2>&1 | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
fi
|
|
if grep -q "Django==" /usr/local/requirments.txt ; then
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Requirements file downloaded successfully" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
break
|
|
else
|
|
echo -e "\n Requirement list has failed to download for $i times..."
|
|
echo -e "Wait for 30 seconds and try again...\n"
|
|
sleep 30
|
|
fi
|
|
done
|
|
#special made function for Gitee.com, for whatever reason sometimes it fails to download this file
|
|
}
|
|
|
|
|
|
|
|
Pre_Upgrade_Required_Components() {
|
|
|
|
# Check if CyberCP directory exists but is incomplete/damaged
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Checking CyberCP directory integrity..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
|
|
# Define essential CyberCP components
|
|
CYBERCP_ESSENTIAL_DIRS=(
|
|
"/usr/local/CyberCP/CyberCP"
|
|
"/usr/local/CyberCP/plogical"
|
|
"/usr/local/CyberCP/websiteFunctions"
|
|
"/usr/local/CyberCP/manage"
|
|
)
|
|
|
|
CYBERCP_MISSING=0
|
|
for dir in "${CYBERCP_ESSENTIAL_DIRS[@]}"; do
|
|
if [ ! -d "$dir" ]; then
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] WARNING: Essential directory missing: $dir" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
CYBERCP_MISSING=1
|
|
fi
|
|
done
|
|
|
|
# If essential directories are missing, perform recovery
|
|
if [ $CYBERCP_MISSING -eq 1 ]; then
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] RECOVERY: CyberCP installation appears damaged or incomplete. Initiating recovery..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
|
|
# Backup any remaining configuration files if they exist
|
|
if [ -f "/usr/local/CyberCP/CyberCP/settings.py" ]; then
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Backing up existing settings.py..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
cp /usr/local/CyberCP/CyberCP/settings.py /tmp/cyberpanel_settings_backup.py
|
|
fi
|
|
|
|
# Clone fresh CyberPanel repository
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Cloning fresh CyberPanel repository for recovery..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
cd /usr/local
|
|
rm -rf CyberCP_recovery_tmp
|
|
|
|
if git clone https://github.com/usmannasir/cyberpanel 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
|
|
cd CyberCP_recovery_tmp
|
|
git checkout "$Branch_Name" 2>/dev/null || git checkout stable
|
|
|
|
# Copy missing components while preserving existing configurations
|
|
for dir in "${CYBERCP_ESSENTIAL_DIRS[@]}"; do
|
|
if [ ! -d "$dir" ]; then
|
|
# Extract relative path after /usr/local/CyberCP/
|
|
relative_path=${dir#/usr/local/CyberCP/}
|
|
if [ -d "/usr/local/CyberCP_recovery_tmp/$relative_path" ]; then
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Restoring missing directory: $dir" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
mkdir -p "$(dirname "$dir")"
|
|
cp -r "/usr/local/CyberCP_recovery_tmp/$relative_path" "$dir"
|
|
fi
|
|
fi
|
|
done
|
|
|
|
# Restore settings.py if it was backed up
|
|
if [ -f "/tmp/cyberpanel_settings_backup.py" ]; then
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Restoring backed up settings.py..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
cp /tmp/cyberpanel_settings_backup.py /usr/local/CyberCP/CyberCP/settings.py
|
|
fi
|
|
|
|
# Clean up temporary clone
|
|
rm -rf /usr/local/CyberCP_recovery_tmp
|
|
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Recovery completed. CyberCP structure restored." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
else
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] ERROR: Failed to clone repository for recovery" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Please run full installation instead of upgrade" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
exit 1
|
|
fi
|
|
|
|
cd /root/cyberpanel_upgrade_tmp || cd /root
|
|
fi
|
|
|
|
if [ "$Server_OS" = "Ubuntu" ]; then
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Preparing Ubuntu environment for virtualenv..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
rm -rf /usr/local/CyberPanel
|
|
|
|
# For Ubuntu 22.04 and 24.04, handle virtualenv installation properly
|
|
if [[ "$Server_OS_Version" = "22" ]] || [[ "$Server_OS_Version" = "24" ]]; then
|
|
if [[ "$Server_OS_Version" = "24" ]]; then
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Ubuntu 24.04: Using apt for virtualenv installation (externally-managed-environment policy)..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
# Ubuntu 24.04 has externally-managed-environment, use apt
|
|
DEBIAN_FRONTEND=noninteractive apt-get install -y python3-virtualenv python3-venv
|
|
else
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Ubuntu 22.04: Installing/upgrading virtualenv with proper dependencies..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
# Remove system virtualenv if it exists to avoid conflicts
|
|
apt remove -y python3-virtualenv 2>/dev/null || true
|
|
# Install latest virtualenv via pip
|
|
pip3 install --upgrade pip setuptools wheel
|
|
pip3 install --upgrade virtualenv
|
|
fi
|
|
else
|
|
pip3 install --upgrade virtualenv
|
|
fi
|
|
else
|
|
rm -rf /usr/local/CyberPanel
|
|
if [ -e /usr/bin/pip3 ]; then
|
|
PIP3="/usr/bin/pip3"
|
|
else
|
|
PIP3="pip3.6"
|
|
fi
|
|
$PIP3 install --default-timeout=3600 virtualenv
|
|
Check_Return
|
|
fi
|
|
|
|
if [[ -f /usr/local/CyberPanel/bin/python2 ]]; then
|
|
echo -e "\nPython 2 dectected, doing re-setup...\n"
|
|
rm -rf /usr/local/CyberPanel/bin
|
|
if [[ "$Server_OS" = "Ubuntu" ]] && ([[ "$Server_OS_Version" = "22" ]] || [[ "$Server_OS_Version" = "24" ]]); then
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Ubuntu $Server_OS_Version detected, using python3 -m venv..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
python3 -m venv /usr/local/CyberPanel
|
|
elif [[ "$Server_OS" = "CentOS" ]] && ([[ "$Server_OS_Version" = "9" ]] || [[ "$Server_OS_Version" = "10" ]]); then
|
|
PYTHON_PATH=$(which python3 2>/dev/null || which python3.9 2>/dev/null || echo "/usr/bin/python3")
|
|
virtualenv -p "$PYTHON_PATH" --system-site-packages /usr/local/CyberPanel
|
|
else
|
|
virtualenv -p /usr/bin/python3 --system-site-packages /usr/local/CyberPanel
|
|
fi
|
|
Check_Return
|
|
elif [[ -d /usr/local/CyberPanel/bin/ ]]; then
|
|
echo -e "\nNo need to re-setup virtualenv at /usr/local/CyberPanel...\n"
|
|
else
|
|
#!/bin/bash
|
|
|
|
echo -e "\nNothing found, need fresh setup...\n"
|
|
|
|
# Attempt to create a virtual environment
|
|
if [[ "$Server_OS" = "Ubuntu" ]] && ([[ "$Server_OS_Version" = "22" ]] || [[ "$Server_OS_Version" = "24" ]]); then
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Ubuntu $Server_OS_Version detected, using python3 -m venv..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
python3 -m venv /usr/local/CyberPanel
|
|
elif [[ "$Server_OS" = "CentOS" ]] && ([[ "$Server_OS_Version" = "9" ]] || [[ "$Server_OS_Version" = "10" ]]); then
|
|
PYTHON_PATH=$(which python3 2>/dev/null || which python3.9 2>/dev/null || echo "/usr/bin/python3")
|
|
virtualenv -p "$PYTHON_PATH" --system-site-packages /usr/local/CyberPanel
|
|
else
|
|
virtualenv -p /usr/bin/python3 --system-site-packages /usr/local/CyberPanel
|
|
fi
|
|
|
|
# Check if the virtualenv command failed
|
|
if [ $? -ne 0 ]; then
|
|
echo "virtualenv command failed."
|
|
|
|
# Check if the operating system is AlmaLinux
|
|
if grep -q "AlmaLinux" /etc/os-release; then
|
|
echo "Operating system is AlmaLinux."
|
|
|
|
# Check if the 'packaging' module is installed via RPM
|
|
if rpm -q python3-packaging >/dev/null 2>&1; then
|
|
echo "'packaging' module installed via RPM. Proceeding with uninstallation."
|
|
|
|
# Uninstall the 'packaging' module using RPM
|
|
sudo dnf remove python3-packaging -y
|
|
|
|
# Check if uninstallation was successful
|
|
if [ $? -eq 0 ]; then
|
|
echo "Successfully uninstalled 'packaging' module."
|
|
|
|
# Install and upgrade 'packaging' using pip
|
|
pip install --upgrade packaging
|
|
|
|
# Verify the installation
|
|
if [ $? -eq 0 ]; then
|
|
echo "'packaging' module reinstalled and upgraded successfully."
|
|
if [[ "$Server_OS" = "Ubuntu" ]] && ([[ "$Server_OS_Version" = "22" ]] || [[ "$Server_OS_Version" = "24" ]]); then
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Ubuntu $Server_OS_Version detected, using python3 -m venv..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
python3 -m venv /usr/local/CyberPanel
|
|
elif [[ "$Server_OS" = "CentOS" ]] && ([[ "$Server_OS_Version" = "9" ]] || [[ "$Server_OS_Version" = "10" ]]); then
|
|
PYTHON_PATH=$(which python3 2>/dev/null || which python3.9 2>/dev/null || echo "/usr/bin/python3")
|
|
virtualenv -p "$PYTHON_PATH" --system-site-packages /usr/local/CyberPanel
|
|
else
|
|
virtualenv -p /usr/bin/python3 --system-site-packages /usr/local/CyberPanel
|
|
fi
|
|
else
|
|
echo "Failed to install 'packaging' module using pip."
|
|
fi
|
|
else
|
|
echo "Failed to uninstall 'packaging' module using RPM."
|
|
fi
|
|
else
|
|
echo "'packaging' module is not installed via RPM. No action taken."
|
|
fi
|
|
else
|
|
echo "Operating system is not AlmaLinux. No action taken."
|
|
fi
|
|
else
|
|
echo "virtualenv command executed successfully."
|
|
fi
|
|
fi
|
|
|
|
# shellcheck disable=SC1091
|
|
. /usr/local/CyberPanel/bin/activate
|
|
pip install --upgrade setuptools packaging
|
|
|
|
Download_Requirement
|
|
|
|
if [[ "$Server_OS" = "CentOS" ]] ; then
|
|
# $PIP3 install --default-timeout=3600 virtualenv==16.7.9
|
|
# Check_Return
|
|
$PIP3 install --default-timeout=3600 --ignore-installed -r /usr/local/requirments.txt
|
|
Check_Return
|
|
elif [[ "$Server_OS" = "Ubuntu" ]] ; then
|
|
# shellcheck disable=SC1091
|
|
. /usr/local/CyberPanel/bin/activate
|
|
Check_Return
|
|
# pip3 install --default-timeout=3600 virtualenv==16.7.9
|
|
# Check_Return
|
|
pip3 install --default-timeout=3600 --ignore-installed -r /usr/local/requirments.txt
|
|
Check_Return
|
|
elif [[ "$Server_OS" = "openEuler" ]] ; then
|
|
# pip3 install --default-timeout=3600 virtualenv==16.7.9
|
|
# Check_Return
|
|
pip3 install --default-timeout=3600 --ignore-installed -r /usr/local/requirments.txt
|
|
Check_Return
|
|
fi
|
|
|
|
#virtualenv -p /usr/bin/python3 --system-site-packages /usr/local/CyberPanel
|
|
# Check_Return
|
|
|
|
wget "${Git_Content_URL}/${Branch_Name}/plogical/upgrade.py"
|
|
|
|
if [[ "$Server_Country" = "CN" ]] ; then
|
|
sed -i 's|git clone https://github.com/usmannasir/cyberpanel|echo git cloned|g' upgrade.py
|
|
|
|
Retry_Command "git clone ${Git_Clone_URL}"
|
|
Check_Return "git clone ${Git_Clone_URL}"
|
|
|
|
# shellcheck disable=SC2086
|
|
sed -i 's|https://raw.githubusercontent.com/usmannasir/cyberpanel/stable/install/litespeed/httpd_config.xml|'${Git_Content_URL}/${Branch_Name}'//install/litespeed/httpd_config.xml|g' upgrade.py
|
|
sed -i 's|https://cyberpanel.sh/composer.sh|https://gitee.com/qtwrk/cyberpanel/raw/stable/install/composer_cn.sh|g' upgrade.py
|
|
fi
|
|
|
|
}
|
|
|
|
Pre_Upgrade_Setup_Git_URL() {
|
|
if [[ $Server_Country != "CN" ]] ; then
|
|
Git_User="usmannasir"
|
|
Git_Content_URL="https://raw.githubusercontent.com/${Git_User}/cyberpanel"
|
|
Git_Clone_URL="https://github.com/${Git_User}/cyberpanel.git"
|
|
else
|
|
Git_User="qtwrk"
|
|
Git_Content_URL="https://gitee.com/${Git_User}/cyberpanel/raw"
|
|
Git_Clone_URL="https://gitee.com/${Git_User}/cyberpanel.git"
|
|
fi
|
|
|
|
if [[ "$Debug" = "On" ]] ; then
|
|
Debug_Log "Git_URL" "$Git_Content_URL"
|
|
fi
|
|
}
|
|
|
|
Pre_Upgrade_Branch_Input() {
|
|
echo -e "\nPress the Enter key to continue with latest version, or enter specific version such as: \e[31m1.9.4\e[39m , \e[31m1.9.5\e[39m ...etc"
|
|
echo -e "\nIf nothing is input in 10 seconds, script will proceed with the latest stable version. "
|
|
echo -e "\nPlease press the Enter key or specify a version number, or wait for 10 seconds: "
|
|
printf "%s" ""
|
|
read -r -t 10 Tmp_Input
|
|
if [[ $Tmp_Input = "" ]]; then
|
|
echo -e "Branch name set to $Branch_Name"
|
|
else
|
|
Branch_Check "$Tmp_Input"
|
|
fi
|
|
}
|
|
|
|
Main_Upgrade() {
|
|
echo -e "\n[$(date +"%Y-%m-%d %H:%M:%S")] Starting Main_Upgrade function..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
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)
|
|
RETURN_CODE=$?
|
|
echo "$upgrade_output" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
|
|
# Check for TypeError specifically
|
|
if echo "$upgrade_output" | grep -q "TypeError: expected string or bytes-like object"; then
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] WARNING: TypeError detected in upgrade.py, but continuing..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
# Check if upgrade actually completed despite the error
|
|
if echo "$upgrade_output" | grep -q "Upgrade Completed"; then
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Upgrade completed despite TypeError" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
RETURN_CODE=0
|
|
fi
|
|
fi
|
|
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Python upgrade.py returned code: $RETURN_CODE" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
|
|
# Check if the command was successful (return code 0)
|
|
if [ $RETURN_CODE -eq 0 ]; then
|
|
echo "Upgrade successful."
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] First upgrade attempt successful" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
else
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] First upgrade attempt failed with code $RETURN_CODE, starting fallback..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
|
|
|
|
if [ -e /usr/bin/pip3 ]; then
|
|
PIP3="/usr/bin/pip3"
|
|
else
|
|
PIP3="pip3.6"
|
|
fi
|
|
|
|
rm -rf /usr/local/CyberPanelTemp
|
|
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Creating temporary virtual environment for fallback upgrade..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
|
|
# Try python3 -m venv first (more reliable on Ubuntu 22.04)
|
|
if python3 -m venv --system-site-packages /usr/local/CyberPanelTemp 2>/dev/null; then
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Temporary virtualenv created with python3 -m venv" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
else
|
|
# Fallback to virtualenv command
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Trying virtualenv command for temporary environment..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
virtualenv -p /usr/bin/python3 --system-site-packages /usr/local/CyberPanelTemp 2>&1 | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
fi
|
|
|
|
# shellcheck disable=SC1091
|
|
. /usr/local/CyberPanelTemp/bin/activate
|
|
|
|
wget -O /usr/local/requirments-old.txt "${Git_Content_URL}/${Branch_Name}/requirments-old.txt"
|
|
|
|
if [[ "$Server_OS" = "CentOS" ]] ; then
|
|
# $PIP3 install --default-timeout=3600 virtualenv==16.7.9
|
|
# Check_Return
|
|
$PIP3 install --default-timeout=3600 --ignore-installed -r /usr/local/requirments-old.txt
|
|
Check_Return
|
|
elif [[ "$Server_OS" = "Ubuntu" ]] ; then
|
|
# shellcheck disable=SC1091
|
|
. /usr/local/CyberPanelTemp/bin/activate
|
|
Check_Return
|
|
pip3 install --default-timeout=3600 --ignore-installed -r /usr/local/requirments-old.txt
|
|
Check_Return
|
|
elif [[ "$Server_OS" = "openEuler" ]] ; then
|
|
pip3 install --default-timeout=3600 --ignore-installed -r /usr/local/requirments-old.txt
|
|
Check_Return
|
|
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
|
|
/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
|
|
Check_Return
|
|
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Removing temporary environment..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
rm -rf /usr/local/CyberPanelTemp
|
|
|
|
fi
|
|
|
|
echo -e "\n[$(date +"%Y-%m-%d %H:%M:%S")] Starting post-upgrade cleanup..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
|
|
# Check if we need to recreate due to Python 2
|
|
NEEDS_RECREATE=0
|
|
if [[ -f /usr/local/CyberCP/bin/python2 ]]; then
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Found Python 2 in CyberCP, will recreate with Python 3..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
NEEDS_RECREATE=1
|
|
fi
|
|
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Removing old CyberCP virtual environment directories..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
rm -rf /usr/local/CyberCP/bin
|
|
rm -rf /usr/local/CyberCP/lib
|
|
rm -rf /usr/local/CyberCP/lib64
|
|
rm -rf /usr/local/CyberCP/pyvenv.cfg
|
|
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Checking CyberCP virtual environment status after cleanup..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
|
|
# After removing directories, we always need to recreate
|
|
if [[ $NEEDS_RECREATE -eq 1 ]] || [[ ! -d /usr/local/CyberCP/bin ]]; then
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Creating/recreating CyberCP virtual environment with Python 3..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
|
|
# First ensure the directory exists
|
|
mkdir -p /usr/local/CyberCP
|
|
|
|
# For Ubuntu 22.04+, we need to handle virtualenv differently
|
|
VENV_SUCCESS=0
|
|
|
|
# First try using python3 -m venv (more reliable on Ubuntu 22.04)
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Attempting to create virtual environment using python3 -m venv..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
virtualenv_output=$(python3 -m venv --system-site-packages /usr/local/CyberCP 2>&1)
|
|
VENV_CODE=$?
|
|
echo "$virtualenv_output" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
|
|
if [[ $VENV_CODE -eq 0 ]] && [[ -f /usr/local/CyberCP/bin/activate ]]; then
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Virtual environment created successfully using python3 -m venv" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
VENV_SUCCESS=1
|
|
else
|
|
# If that fails, try virtualenv command
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] python3 -m venv failed, trying virtualenv command..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
|
|
# On Ubuntu 22.04, we need to ensure proper virtualenv installation
|
|
if [[ "$Server_OS" = "Ubuntu" ]] && [[ "$Server_OS_Version" = "22" ]]; then
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Ubuntu 22.04 detected, ensuring virtualenv is properly installed..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
pip3 install --upgrade virtualenv 2>&1 | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
elif [[ "$Server_OS" = "CentOS" ]] && ([[ "$Server_OS_Version" = "9" ]] || [[ "$Server_OS_Version" = "10" ]]); then
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] AlmaLinux/Rocky Linux 9/10 detected, ensuring virtualenv is properly installed..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
pip3 install --upgrade virtualenv 2>&1 | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
fi
|
|
|
|
# Find the correct python3 path
|
|
if [[ "$Server_OS" = "CentOS" ]] && ([[ "$Server_OS_Version" = "9" ]] || [[ "$Server_OS_Version" = "10" ]]); then
|
|
PYTHON_PATH=$(which python3 2>/dev/null || which python3.9 2>/dev/null || echo "/usr/bin/python3")
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Using Python path: $PYTHON_PATH" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
virtualenv_output=$(virtualenv -p "$PYTHON_PATH" /usr/local/CyberCP 2>&1)
|
|
else
|
|
virtualenv_output=$(virtualenv -p /usr/bin/python3 /usr/local/CyberCP 2>&1)
|
|
fi
|
|
VENV_CODE=$?
|
|
echo "$virtualenv_output" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
|
|
# Check if TypeError occurred (common on Ubuntu 22.04)
|
|
if echo "$virtualenv_output" | grep -q "TypeError"; then
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] WARNING: TypeError detected, attempting workaround..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
|
|
# Try alternative method using explicit system-site-packages
|
|
virtualenv_output=$(virtualenv --python=/usr/bin/python3 --system-site-packages /usr/local/CyberCP 2>&1)
|
|
VENV_CODE=$?
|
|
echo "$virtualenv_output" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
fi
|
|
|
|
if [[ -f /usr/local/CyberCP/bin/activate ]]; then
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Virtual environment created successfully" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
VENV_SUCCESS=1
|
|
VENV_CODE=0
|
|
fi
|
|
fi
|
|
|
|
if [[ $VENV_SUCCESS -eq 0 ]]; then
|
|
VENV_CODE=1
|
|
fi
|
|
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Virtualenv creation returned code: $VENV_CODE" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
|
|
if [[ $VENV_CODE -ne 0 ]]; then
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] FATAL: Virtualenv creation failed with code $VENV_CODE" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
echo -e "Virtualenv creation failed. Please check the logs at /var/log/cyberpanel_upgrade_debug.log"
|
|
exit $VENV_CODE
|
|
fi
|
|
else
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] CyberCP virtualenv already exists, skipping recreation" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
echo -e "\nNo need to re-setup virtualenv at /usr/local/CyberCP...\n"
|
|
fi
|
|
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Removing old requirements file..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
rm -f /usr/local/requirments.txt
|
|
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Downloading new requirements..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
Download_Requirement
|
|
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Installing Python packages..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
if [ "$Server_OS" = "Ubuntu" ]; then
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Ubuntu detected, activating virtual environment..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
# shellcheck disable=SC1091
|
|
. /usr/local/CyberCP/bin/activate 2>&1 | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
ACTIVATE_CODE=$?
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Activate returned code: $ACTIVATE_CODE" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
Check_Return
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Upgrading setuptools and packaging..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
pip install --upgrade setuptools packaging 2>&1 | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Installing requirements..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
pip3 install --default-timeout=3600 --ignore-installed -r /usr/local/requirments.txt 2>&1 | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
PIP_CODE=$?
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Pip install returned code: $PIP_CODE" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
Check_Return
|
|
else
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Non-Ubuntu OS, activating virtual environment..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
# shellcheck disable=SC1091
|
|
source /usr/local/CyberCP/bin/activate 2>&1 | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
ACTIVATE_CODE=$?
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Activate returned code: $ACTIVATE_CODE" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
Check_Return
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Installing requirements..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
/usr/local/CyberCP/bin/pip3 install --default-timeout=3600 --ignore-installed -r /usr/local/requirments.txt 2>&1 | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
PIP_CODE=$?
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Pip install returned code: $PIP_CODE" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
Check_Return
|
|
fi
|
|
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Verifying Django installation..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
# Test if Django is installed
|
|
if ! /usr/local/CyberCP/bin/python -c "import django" 2>/dev/null; then
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] WARNING: Django not found, installing requirements again..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
|
|
# Re-activate virtual environment
|
|
source /usr/local/CyberCP/bin/activate
|
|
|
|
# Re-install requirements
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Re-installing Python requirements..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
pip install --upgrade pip setuptools wheel packaging 2>&1 | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
pip install --default-timeout=3600 --ignore-installed -r /usr/local/requirments.txt 2>&1 | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
else
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Django is properly installed" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
fi
|
|
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Installing WSGI-LSAPI..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
|
|
# Save current directory
|
|
UPGRADE_CWD=$(pwd)
|
|
|
|
cd /tmp || exit
|
|
rm -rf wsgi-lsapi-2.1*
|
|
|
|
wget -q https://www.litespeedtech.com/packages/lsapi/wsgi-lsapi-2.1.tgz 2>&1 | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
tar xf wsgi-lsapi-2.1.tgz
|
|
cd wsgi-lsapi-2.1 || exit
|
|
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Configuring WSGI..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
/usr/local/CyberPanel/bin/python ./configure.py 2>&1 | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
make 2>&1 | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Installing lswsgi binary..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
rm -f /usr/local/CyberCP/bin/lswsgi
|
|
cp lswsgi /usr/local/CyberCP/bin/
|
|
|
|
# Return to original directory
|
|
cd "$UPGRADE_CWD" || cd /root
|
|
|
|
# Final verification
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Running final verification..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
if /usr/local/CyberCP/bin/python -c "import django" 2>/dev/null && [[ -f /usr/local/CyberCP/bin/lswsgi ]]; then
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] All components successfully installed!" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
else
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] WARNING: Some components may be missing, check logs" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
fi
|
|
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Main_Upgrade function completed" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
}
|
|
|
|
Post_Upgrade_System_Tweak() {
|
|
if [[ "$Server_OS" = "CentOS" ]] ; then
|
|
|
|
#for cenots 7/8
|
|
if [[ "$Server_OS_Version" = "7" ]] ; then
|
|
sed -i 's|error_reporting = E_ALL \& ~E_DEPRECATED \& ~E_STRICT|error_reporting = E_ALL \& ~E_DEPRECATED \& ~E_STRICT|g' /usr/local/lsws/{lsphp72,lsphp73}/etc/php.ini
|
|
#fix php.ini & issue
|
|
if ! yum list installed lsphp74-devel ; then
|
|
yum install -y lsphp74-devel
|
|
fi
|
|
if [[ ! -f /usr/local/lsws/lsphp74/lib64/php/modules/zip.so ]] ; then
|
|
if yum list installed libzip-devel >/dev/null 2>&1 ; then
|
|
yum remove -y libzip-devel
|
|
fi
|
|
yum install -y https://cyberpanel.sh/misc/libzip-0.11.2-6.el7.psychotic.x86_64.rpm
|
|
yum install -y https://cyberpanel.sh/misc/libzip-devel-0.11.2-6.el7.psychotic.x86_64.rpm
|
|
yum install lsphp74-devel
|
|
if [[ ! -d /usr/local/lsws/lsphp74/tmp ]]; then
|
|
mkdir /usr/local/lsws/lsphp74/tmp
|
|
fi
|
|
/usr/local/lsws/lsphp74/bin/pecl channel-update pecl.php.net
|
|
/usr/local/lsws/lsphp74/bin/pear config-set temp_dir /usr/local/lsws/lsphp74/tmp
|
|
if /usr/local/lsws/lsphp74/bin/pecl install zip ; then
|
|
echo "extension=zip.so" >/usr/local/lsws/lsphp74/etc/php.d/20-zip.ini
|
|
chmod 755 /usr/local/lsws/lsphp74/lib64/php/modules/zip.so
|
|
else
|
|
echo -e "\nlsphp74-zip compilation failed..."
|
|
fi
|
|
#fix old legacy lsphp74-zip issue on centos 7
|
|
fi
|
|
|
|
|
|
#for centos 7
|
|
elif [[ "$Server_OS_Version" = "8" ]] ; then
|
|
:
|
|
#for centos 8
|
|
fi
|
|
fi
|
|
|
|
if [[ "$Server_OS" = "Ubuntu" ]] ; then
|
|
|
|
if ! dpkg -l lsphp74-dev >/dev/null 2>&1 ; then
|
|
apt install -y lsphp74-dev
|
|
fi
|
|
|
|
if [[ ! -f /usr/sbin/ipset ]] ; then
|
|
ln -s /sbin/ipset /usr/sbin/ipset
|
|
fi
|
|
|
|
#for ubuntu 18/20
|
|
if [[ "$Server_OS_Version" = "18" ]] ; then
|
|
:
|
|
#for ubuntu 18
|
|
elif [[ "$Server_OS_Version" = "20" ]] ; then
|
|
:
|
|
#for ubuntu 20
|
|
fi
|
|
fi
|
|
|
|
sed -i "s|lsws-5.3.8|lsws-$LSWS_Stable_Version|g" /usr/local/CyberCP/serverStatus/serverStatusUtil.py
|
|
sed -i "s|lsws-5.4.2|lsws-$LSWS_Stable_Version|g" /usr/local/CyberCP/serverStatus/serverStatusUtil.py
|
|
sed -i "s|lsws-5.3.5|lsws-$LSWS_Stable_Version|g" /usr/local/CyberCP/serverStatus/serverStatusUtil.py
|
|
|
|
if [[ "$Server_Country" = "CN" ]] ; then
|
|
sed -i 's|https://www.litespeedtech.com/|https://cyberpanel.sh/www.litespeedtech.com/|g' /usr/local/CyberCP/serverStatus/serverStatusUtil.py
|
|
sed -i 's|http://license.litespeedtech.com/|https://cyberpanel.sh/license.litespeedtech.com/|g' /usr/local/CyberCP/serverStatus/serverStatusUtil.py
|
|
fi
|
|
|
|
sed -i 's|python2|python|g' /usr/bin/adminPass
|
|
chmod 700 /usr/bin/adminPass
|
|
|
|
rm -f /usr/bin/php
|
|
ln -s /usr/local/lsws/lsphp74/bin/php /usr/bin/php
|
|
|
|
if [[ -f /etc/cyberpanel/webadmin_passwd ]]; then
|
|
chmod 600 /etc/cyberpanel/webadmin_passwd
|
|
fi
|
|
|
|
chown lsadm:lsadm /usr/local/lsws/admin/conf/htpasswd
|
|
chmod 600 /usr/local/lsws/admin/conf/htpasswd
|
|
|
|
if [[ -f /etc/pure-ftpd/pure-ftpd.conf ]]; then
|
|
sed -i 's|NoAnonymous no|NoAnonymous yes|g' /etc/pure-ftpd/pure-ftpd.conf
|
|
fi
|
|
|
|
Tmp_Output=$(timeout 3 openssl s_client -connect 127.0.0.1:8090 2>/dev/null)
|
|
if echo "$Tmp_Output" | grep -q "mail@example.com" ; then
|
|
# it is using default installer generated cert
|
|
Regenerate_Cert 8090
|
|
fi
|
|
|
|
|
|
Tmp_Output=$(timeout 3 openssl s_client -connect 127.0.0.1:7080 2>/dev/null)
|
|
if echo "$Tmp_Output" | grep -q "mail@example.com" ; then
|
|
Regenerate_Cert 7080
|
|
fi
|
|
|
|
if [[ ! -f /usr/bin/cyberpanel_utility ]]; then
|
|
wget -q -O /usr/bin/cyberpanel_utility https://cyberpanel.sh/misc/cyberpanel_utility.sh
|
|
chmod 700 /usr/bin/cyberpanel_utility
|
|
fi
|
|
|
|
if [[ -f /etc/cyberpanel/watchdog.sh ]] ; then
|
|
watchdog kill
|
|
rm -f /etc/cyberpanel/watchdog.sh
|
|
rm -f /usr/local/bin/watchdog
|
|
wget -O /etc/cyberpanel/watchdog.sh "${Git_Content_URL}/${Branch_Name}/CPScripts/watchdog.sh"
|
|
chmod 700 /etc/cyberpanel/watchdog.sh
|
|
ln -s /etc/cyberpanel/watchdog.sh /usr/local/bin/watchdog
|
|
watchdog status
|
|
fi
|
|
|
|
|
|
rm -f /usr/local/composer.sh
|
|
rm -f /usr/local/requirments.txt
|
|
|
|
chown -R cyberpanel:cyberpanel /usr/local/CyberCP/lib
|
|
chown -R cyberpanel:cyberpanel /usr/local/CyberCP/lib64
|
|
|
|
# Fix missing lsphp binary in /usr/local/lscp/fcgi-bin/ after upgrade
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Checking and restoring lsphp binary if missing..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
if [[ ! -f /usr/local/lscp/fcgi-bin/lsphp ]] || [[ ! -s /usr/local/lscp/fcgi-bin/lsphp ]]; then
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] lsphp binary missing or empty, attempting to restore..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
|
|
# Ensure fcgi-bin directory exists
|
|
mkdir -p /usr/local/lscp/fcgi-bin
|
|
|
|
# Find the latest available PHP version and use it
|
|
PHP_RESTORED=0
|
|
|
|
# Try to find the latest lsphp version (check from newest to oldest)
|
|
for PHP_VER in 83 82 81 80 74 73 72; do
|
|
if [[ -f /usr/local/lsws/lsphp${PHP_VER}/bin/lsphp ]]; then
|
|
# Try to create symlink first (preferred)
|
|
if ln -sf /usr/local/lsws/lsphp${PHP_VER}/bin/lsphp /usr/local/lscp/fcgi-bin/lsphp 2>/dev/null; then
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] lsphp symlink created from lsphp${PHP_VER}" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
else
|
|
# If symlink fails, copy the file
|
|
cp -f /usr/local/lsws/lsphp${PHP_VER}/bin/lsphp /usr/local/lscp/fcgi-bin/lsphp
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] lsphp binary copied from lsphp${PHP_VER}" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
fi
|
|
chown root:root /usr/local/lscp/fcgi-bin/lsphp
|
|
chmod 755 /usr/local/lscp/fcgi-bin/lsphp
|
|
PHP_RESTORED=1
|
|
break
|
|
fi
|
|
done
|
|
|
|
# If no lsphp version found, try php binary as fallback
|
|
if [[ $PHP_RESTORED -eq 0 ]]; then
|
|
for PHP_VER in 83 82 81 80 74 73 72; do
|
|
if [[ -f /usr/local/lsws/lsphp${PHP_VER}/bin/php ]]; then
|
|
# Try to create symlink first (preferred)
|
|
if ln -sf /usr/local/lsws/lsphp${PHP_VER}/bin/php /usr/local/lscp/fcgi-bin/lsphp 2>/dev/null; then
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] lsphp symlink created from php${PHP_VER} (lsphp fallback)" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
else
|
|
# If symlink fails, copy the file
|
|
cp -f /usr/local/lsws/lsphp${PHP_VER}/bin/php /usr/local/lscp/fcgi-bin/lsphp
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] lsphp binary copied from php${PHP_VER} (lsphp fallback)" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
fi
|
|
chown root:root /usr/local/lscp/fcgi-bin/lsphp
|
|
chmod 755 /usr/local/lscp/fcgi-bin/lsphp
|
|
PHP_RESTORED=1
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
|
|
# If no lsphp version found, try admin_php5 as fallback
|
|
if [[ $PHP_RESTORED -eq 0 ]]; then
|
|
if [[ -f /usr/local/lscp/admin/fcgi-bin/admin_php5 ]]; then
|
|
cp -f /usr/local/lscp/admin/fcgi-bin/admin_php5 /usr/local/lscp/fcgi-bin/lsphp
|
|
chown root:root /usr/local/lscp/fcgi-bin/lsphp
|
|
chmod 755 /usr/local/lscp/fcgi-bin/lsphp
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] lsphp binary restored from admin_php5 (fallback)" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
elif [[ -f /usr/local/lscp/admin/fcgi-bin/admin_php ]]; then
|
|
cp -f /usr/local/lscp/admin/fcgi-bin/admin_php /usr/local/lscp/fcgi-bin/lsphp
|
|
chown root:root /usr/local/lscp/fcgi-bin/lsphp
|
|
chmod 755 /usr/local/lscp/fcgi-bin/lsphp
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] lsphp binary restored from admin_php (fallback)" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
elif [[ -f /usr/local/lsws/admin/fcgi-bin/admin_php5 ]]; then
|
|
cp -f /usr/local/lsws/admin/fcgi-bin/admin_php5 /usr/local/lscp/fcgi-bin/lsphp
|
|
chown root:root /usr/local/lscp/fcgi-bin/lsphp
|
|
chmod 755 /usr/local/lscp/fcgi-bin/lsphp
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] lsphp binary restored from lsws admin_php5 (fallback)" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
else
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] ERROR: Could not find any PHP binary to restore lsphp" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
fi
|
|
fi
|
|
|
|
# Create symlinks if they don't exist
|
|
if [[ -f /usr/local/lscp/fcgi-bin/lsphp ]]; then
|
|
if [[ ! -f /usr/local/lscp/fcgi-bin/lsphp4 ]]; then
|
|
ln -sf ./lsphp /usr/local/lscp/fcgi-bin/lsphp4
|
|
fi
|
|
if [[ ! -f /usr/local/lscp/fcgi-bin/lsphp5 ]]; then
|
|
ln -sf ./lsphp /usr/local/lscp/fcgi-bin/lsphp5
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
# Fix missing lscpd binary in /usr/local/lscp/bin/ after upgrade
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Checking and restoring lscpd binary if missing..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
if [[ ! -f /usr/local/lscp/bin/lscpd ]] || [[ ! -s /usr/local/lscp/bin/lscpd ]]; then
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] lscpd binary missing or empty, attempting to restore..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
|
|
# Ensure lscp bin directory exists
|
|
mkdir -p /usr/local/lscp/bin
|
|
|
|
# Select the correct lscpd binary based on OS and version
|
|
lscpd_selection='lscpd-0.3.1'
|
|
|
|
# Check if this is an ARM system
|
|
if uname -a | grep -q 'aarch64'; then
|
|
lscpd_selection='lscpd.aarch64'
|
|
else
|
|
# For x86_64 systems, check Ubuntu version
|
|
if [[ "$Server_OS" = "Ubuntu" ]] && [[ -f /etc/lsb-release ]]; then
|
|
ubuntu_version=$(grep 'DISTRIB_RELEASE' /etc/lsb-release | cut -d'=' -f2 | cut -d'.' -f1)
|
|
if [[ "$ubuntu_version" = "22" ]] || [[ "$ubuntu_version" = "24" ]]; then
|
|
lscpd_selection='lscpd.0.4.0'
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Selected lscpd binary: $lscpd_selection" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
|
|
# Copy the selected binary from CyberCP to lscp bin
|
|
if [[ -f /usr/local/CyberCP/${lscpd_selection} ]]; then
|
|
cp -f /usr/local/CyberCP/${lscpd_selection} /usr/local/lscp/bin/${lscpd_selection}
|
|
rm -f /usr/local/lscp/bin/lscpd
|
|
mv /usr/local/lscp/bin/${lscpd_selection} /usr/local/lscp/bin/lscpd
|
|
chmod 755 /usr/local/lscp/bin/lscpd
|
|
chown root:root /usr/local/lscp/bin/lscpd
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] lscpd binary restored successfully from ${lscpd_selection}" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
else
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] ERROR: Could not find lscpd source binary ${lscpd_selection} in /usr/local/CyberCP/" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
fi
|
|
else
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] lscpd binary exists and is valid" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
fi
|
|
|
|
if [[ "$Server_OS_Version" = "9" ]] || [[ "$Server_OS_Version" = "10" ]] || [[ "$Server_OS_Version" = "18" ]] || [[ "$Server_OS_Version" = "8" ]] || [[ "$Server_OS_Version" = "20" ]] || [[ "$Server_OS_Version" = "24" ]]; then
|
|
echo "PYTHONHOME=/usr" > /usr/local/lscp/conf/pythonenv.conf
|
|
else
|
|
# Uncomment and use the following lines if necessary for other OS versions
|
|
# rsync -av --ignore-existing /usr/lib64/python3.9/ /usr/local/CyberCP/lib64/python3.9/
|
|
# Check_Return
|
|
:
|
|
fi
|
|
|
|
# Fix SnappyMail directory permissions for Ubuntu 24.04 and other systems
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Checking SnappyMail directories..." | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
|
|
# Create SnappyMail data directories if they don't exist
|
|
mkdir -p /usr/local/lscp/cyberpanel/snappymail/data/_data_/_default_/configs/
|
|
mkdir -p /usr/local/lscp/cyberpanel/snappymail/data/_data_/_default_/domains/
|
|
mkdir -p /usr/local/lscp/cyberpanel/snappymail/data/_data_/_default_/storage/
|
|
mkdir -p /usr/local/lscp/cyberpanel/snappymail/data/_data_/_default_/temp/
|
|
mkdir -p /usr/local/lscp/cyberpanel/snappymail/data/_data_/_default_/cache/
|
|
|
|
# Ensure proper ownership for SnappyMail data directories
|
|
if id -u lscpd >/dev/null 2>&1; then
|
|
chown -R lscpd:lscpd /usr/local/lscp/cyberpanel/snappymail/
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Set SnappyMail ownership to lscpd:lscpd" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
else
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] WARNING: lscpd user not found, skipping ownership change" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
fi
|
|
|
|
# Set proper permissions for SnappyMail data directories (group writable)
|
|
chmod -R 775 /usr/local/lscp/cyberpanel/snappymail/data/
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Set SnappyMail data directory permissions to 775 (group writable)" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
|
|
# Ensure web server users are in the lscpd group for access
|
|
usermod -a -G lscpd nobody 2>/dev/null || true
|
|
|
|
# Fix SnappyMail public directory ownership (critical fix)
|
|
chown -R lscpd:lscpd /usr/local/CyberCP/public/snappymail/data 2>/dev/null || true
|
|
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] Added web server users to lscpd group and fixed SnappyMail ownership" | tee -a /var/log/cyberpanel_upgrade_debug.log
|
|
|
|
systemctl restart lscpd
|
|
|
|
}
|
|
|
|
Post_Install_Display_Final_Info() {
|
|
|
|
Panel_Port=$(cat /usr/local/lscp/conf/bind.conf)
|
|
if [[ $Panel_Port = "" ]] ; then
|
|
Panel_Port="8090"
|
|
fi
|
|
|
|
if curl -I -XGET -k "https://127.0.0.1:${Panel_Port#*:}" | grep -q "200 OK" ; then
|
|
echo "###################################################################"
|
|
echo " CyberPanel Upgraded "
|
|
echo "###################################################################"
|
|
else
|
|
echo -e "\nSeems something wrong with upgrade, please check...\n"
|
|
fi
|
|
rm -rf /root/cyberpanel_upgrade_tmp
|
|
}
|
|
|
|
if [[ ! -d /etc/cyberpanel ]] ; then
|
|
echo -e "\n\nCan not detect CyberCP..."
|
|
exit
|
|
fi
|
|
|
|
if [[ "$*" = *"--debug"* ]] ; then
|
|
Debug="On"
|
|
Random_Log_Name=$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 5)
|
|
find /var/log -name 'cyberpanel_debug_upgrade_*' -exec rm {} +
|
|
echo -e "$(date)" > "/var/log/cyberpanel_debug_upgrade_$(date +"%Y-%m-%d")_${Random_Log_Name}.log"
|
|
chmod 600 "/var/log/cyberpanel_debug_upgrade_$(date +"%Y-%m-%d")_${Random_Log_Name}.log"
|
|
fi
|
|
|
|
Set_Default_Variables
|
|
|
|
Check_Root
|
|
|
|
Check_Server_IP "$@"
|
|
|
|
Check_OS
|
|
|
|
Check_Provider
|
|
|
|
Check_Argument "$@"
|
|
|
|
if [[ "$*" != *"--branch "* ]] && [[ "$*" != *"-b "* ]] ; then
|
|
Pre_Upgrade_Branch_Input
|
|
fi
|
|
|
|
Pre_Upgrade_Setup_Repository
|
|
|
|
Pre_Upgrade_Setup_Git_URL
|
|
|
|
Pre_Upgrade_Required_Components
|
|
|
|
Main_Upgrade
|
|
|
|
Post_Upgrade_System_Tweak
|
|
|
|
Post_Install_Display_Final_Info
|