#!/bin/bash

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin

pyenv_bin=/www/server/panel/pyenv/bin

rep_path=${pyenv_bin}:$PATH

if [ -d "$pyenv_bin" ];then

    PATH=$rep_path

fi

export PATH

LANG=en_US.UTF-8



Font_Yellow='\033[1;33m'

Font_Suffix='\033[0m'



setup_path=/www

is64bit=$(getconf LONG_BIT)

if [ "${is64bit}" != '64' ];then

    echo "抱歉, 面板新版本不再支持32位系统, 无法进行升级";

    echo "退出、不做任何操作"

    exit 1

fi

Centos6Check=$(cat /etc/redhat-release 2>/dev/null | grep ' 6.' | grep -iE 'centos|Red Hat')

if [ "${Centos6Check}" ];then

    echo "Centos6不支持升级宝塔面板，建议备份数据重装更换Centos7/8安装宝塔面板"

    exit 1

fi 

up_plugin=0



download_file(){

    dst_file=$1

    tmp_file=/tmp/bt_tmp_file.temp

    if [ -f $tmp_file ];then

        rm -f $tmp_file

    fi

    wget -O ${tmp_file} $2 -T 20

    tmp_size=$(du -b $tmp_file|awk '{print $1}')

    if [ $tmp_size -lt 10 ];then

        echo "|-文件下载失败 $dst_file"

        return

    fi



    if [ -f $dst_file ];then

        rm -f $dst_file

    fi



    mv -f $tmp_file $dst_file



    if [ -f $tmp_file ];then

        rm -f $tmp_file

    fi

}



Red_Error(){

    echo '=================================================';

    printf '\033[1;31;40m%b\033[0m\n' "$1";

    exit 0;

}



check_panel(){

    if [ ! -d /www/server/panel/BTPanel ];then

        up_plugin=1

    fi

}



select_node(){

    public_file=/www/server/panel/install/public.sh

    if [ ! -f $public_file ];then

        download_file $public_file https://download.miku.ci/install/public.sh

    fi



    . "$public_file" >/dev/null 2>&1



    download_Url=$NODE_URL

    downloads_Url=https://download.miku.ci

}



get_version(){

    if [ -n "$version" ]; then

        return

    fi

    version=$(curl -Ss --connect-timeout 5 -m 2 https://www\.miku.ci/api/panel/get_version)

    if [ "$version" = '' ];then

        version='13.0.0'

    fi

}



if [ "$1" ];then

    version=$1

fi



install_pack(){

    if [ -f /usr/bin/yum ];then

        yum install libcurl-devel libffi-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel -y

    else

        apt install libcurl4-openssl-dev net-tools swig build-essential libffi-dev zlib1g-dev libbz2-dev libssl-dev libncurses-dev libsqlite3-dev libreadline-dev tk-dev libgdbm-dev libdb-dev libdb++-dev libpcap-dev xz-utils -y

    fi

}



install_python(){

    curl -Ss --connect-timeout 3 -m 60 $download_Url/install/pip_select.sh|bash >/dev/null 2>&1

    pyenv_path="/www/server/panel"

    python_bin=$pyenv_path/pyenv/bin/python

    if [ -f $pyenv_path/pyenv/bin/python ];then

        is_ssl=$($python_bin -c "import ssl" 2>&1|grep cannot)

        python_check_output=$($pyenv_path/pyenv/bin/python3.7 -V 2>&1)

        python_check_status=$?

        echo -e "\033[36m|- 当前面板 Python 运行环境：${python_check_output}\033[0m"

        if [ $python_check_status -eq 0 ] && [ -z "${is_ssl}" ];then

            chmod -R 700 $pyenv_path/pyenv/bin

            is_package=$($python_bin -m psutil 2>&1|grep package)

            if [ "$is_package" = "" ];then

                wget -O $pyenv_path/pyenv/pip.txt $download_Url/install/pyenv/pip-3.7.16.txt -T 15

                $pyenv_path/pyenv/bin/pip install -U pip

                $pyenv_path/pyenv/bin/pip install -U setuptools==65.5.0

                $pyenv_path/pyenv/bin/pip install -r $pyenv_path/pyenv/pip.txt

            fi

            source $pyenv_path/pyenv/bin/activate

            chmod -R 700 $pyenv_path/pyenv/bin

            return

        else

            rm -rf $pyenv_path/pyenv

        fi

    fi



    is_loongarch64=$(uname -a|grep loongarch64)

    if [ "$is_loongarch64" != "" ] && [ -f "/usr/bin/yum" ];then

        yumPacks="python3-devel python3-pip python3-psutil python3-gevent python3-pyOpenSSL python3-paramiko python3-flask python3-rsa python3-requests python3-six python3-websocket-client"

        yum install -y ${yumPacks}

        for yumPack in ${yumPacks}

        do

            rpmPack=$(rpm -q ${yumPack})

            packCheck=$(echo ${rpmPack}|grep not)

            if [ "${packCheck}" ]; then

                yum install ${yumPack} -y

            fi

        done



        pip3 install -U pip

        pip3 install Pillow psutil pyinotify pycryptodome upyun oss2 pymysql qrcode qiniu redis pymongo Cython configparser cos-python-sdk-v5 supervisor gevent-websocket pyopenssl

        pip3 install flask==1.1.4

        pip3 install Pillow -U



        pyenv_bin=/www/server/panel/pyenv/bin

        mkdir -p $pyenv_bin

        ln -sf /usr/local/bin/pip3 $pyenv_bin/pip

        ln -sf /usr/local/bin/pip3 $pyenv_bin/pip3

        ln -sf /usr/local/bin/pip3 $pyenv_bin/pip3.7



        if [ -f "/usr/bin/python3.7" ];then

            ln -sf /usr/bin/python3.7 $pyenv_bin/python

            ln -sf /usr/bin/python3.7 $pyenv_bin/python3

            ln -sf /usr/bin/python3.7 $pyenv_bin/python3.7

        elif [ -f "/usr/bin/python3.6"  ]; then

            ln -sf /usr/bin/python3.6 $pyenv_bin/python

            ln -sf /usr/bin/python3.6 $pyenv_bin/python3

            ln -sf /usr/bin/python3.6 $pyenv_bin/python3.7

        fi



        echo > $pyenv_bin/activate



        return

    fi



    install_pack

    py_version="3.7.16"

    mkdir -p $pyenv_path

    echo "True" > /www/disk.pl

    if [ ! -w /www/disk.pl ];then

        Red_Error "ERROR: Install python env fielded." "ERROR: /www目录无法写入，请检查目录/用户/磁盘权限！"

    fi

    os_type='el'

    os_version='7'

    is_export_openssl=0

    Get_Versions

    Centos6_Openssl

    Other_Openssl

    echo "OS: $os_type - $os_version"

    is_aarch64=$(uname -a|grep aarch64)

    if [ "$is_aarch64" != "" ];then

        is64bit="aarch64"

    fi

    up_plugin=1



    if [ -f "/www/server/panel/pymake.pl" ];then

        os_version=""

        rm -f /www/server/panel/pymake.pl

    fi  

    echo "==============================================="

    echo "正在下载面板运行环境，请稍等..............."

    echo "==============================================="

    if [ "${os_version}" != "" ];then

        pyenv_file="/www/pyenv.tar.gz"

        wget -O $pyenv_file $download_Url/install/pyenv/pyenv-${os_type}${os_version}-x${is64bit}.tar.gz -T 20

        if [ "$?" != "0" ];then

            get_node_url $download_Url

            wget -O $pyenv_file $download_Url/install/pyenv/pyenv-${os_type}${os_version}-x${is64bit}.tar.gz -T 20

        fi

        tmp_size=$(du -b $pyenv_file|awk '{print $1}')

        if [ $tmp_size -gt 703460 ];then

            echo "Install python env..."

            tar zxvf $pyenv_file -C $pyenv_path/ > /dev/null

            chmod -R 700 $pyenv_path/pyenv/bin

            if [ -f $pyenv_path/pyenv/bin/python ];then

                python_check_output=$($pyenv_path/pyenv/bin/python3.7 -V 2>&1)

                python_check_status=$?

                echo -e "\033[36m|- 当前面板 Python 运行环境：${python_check_output}\033[0m"

                if [ $python_check_status -eq 0 ];then

                    rm -f $pyenv_file

                    ln -sf $pyenv_path/pyenv/bin/pip3.7 /usr/bin/btpip

                    ln -sf $pyenv_path/pyenv/bin/python3.7 /usr/bin/btpython

                    source $pyenv_path/pyenv/bin/activate

                    return

                else

                    rm -f $pyenv_file

                    rm -rf $pyenv_path/pyenv

                fi

            else

                rm -f $pyenv_file

                rm -rf $pyenv_path/pyenv

            fi

        fi

        rm -f $pyenv_file

        echo "预编译环境下载失败，开始编译安装Python..."

    fi

    if [ -f /usr/local/openssl/lib/libssl.so ];then

        export LDFLAGS="-L/usr/local/openssl/lib"

        export CPPFLAGS="-I/usr/local/openssl/include"

        export PKG_CONFIG_PATH="/usr/local/openssl/lib/pkgconfig"

        echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/openssl/lib" >> /etc/profile

        source /etc/profile

    fi

    cd /www

    python_src='/www/python_src.tar.xz'

    python_src_path="/www/Python-${py_version}"

    wget -O $python_src $download_Url/src/Python-${py_version}.tar.xz -T 15

    tmp_size=$(du -b $python_src|awk '{print $1}')

    if [ $tmp_size -lt 10703460 ];then

        rm -f $python_src

        Red_Error "ERROR: Download python source code fielded." "ERROR: 下载宝塔运行环境失败，请尝试重新安装！"

    fi

    tar xvf $python_src

    rm -f $python_src

    cd $python_src_path

    ./configure --prefix=$pyenv_path/pyenv

    make -j$cpu_cpunt

    make install

    if [ ! -f $pyenv_path/pyenv/bin/python3.7 ];then

        rm -rf $python_src_path

        Red_Error "ERROR: Make python env fielded." "ERROR: 编译宝塔运行环境失败！"

    fi

    cd ~

    rm -rf $python_src_path

    wget -O $pyenv_path/pyenv/bin/activate $download_Url/install/pyenv/activate.panel -T 5

    wget -O $pyenv_path/pyenv/pip.txt $download_Url/install/pyenv/pip-3.7.16.txt -T 5

    ln -sf $pyenv_path/pyenv/bin/pip3.7 $pyenv_path/pyenv/bin/pip

    ln -sf $pyenv_path/pyenv/bin/python3.7 $pyenv_path/pyenv/bin/python

    ln -sf $pyenv_path/pyenv/bin/pip3.7 /usr/bin/btpip

    ln -sf $pyenv_path/pyenv/bin/python3.7 /usr/bin/btpython

    chmod -R 700 $pyenv_path/pyenv/bin

    $pyenv_path/pyenv/bin/pip install -U pip

    $pyenv_path/pyenv/bin/pip install -U setuptools==65.5.0

    $pyenv_path/pyenv/bin/pip install -U wheel==0.34.2 

    $pyenv_path/pyenv/bin/pip install -r $pyenv_path/pyenv/pip.txt



    wget -O pip-packs.txt $download_Url/install/pyenv/pip-packs.txt

    echo "正在后台安装pip依赖请稍等.........."

    PIP_PACKS=$(cat pip-packs.txt)

    for P_PACK in ${PIP_PACKS};

    do

        btpip show ${P_PACK} > /dev/null 2>&1

        if [ "$?" == "1" ];then

            btpip install ${P_PACK}

        fi 

    done



    rm -f pip-packs.txt



    source $pyenv_path/pyenv/bin/activate



    btpip install psutil

    btpip install gevent



    is_gevent=$($python_bin -m gevent 2>&1|grep -oE package)

    is_psutil=$($python_bin -m psutil 2>&1|grep -oE package)

    if [ "${is_gevent}" != "${is_psutil}" ];then

        Red_Error "ERROR: psutil/gevent install failed!"

    fi

}



sync_python_lib(){

    pip_list=$(pip list 2>/dev/null|grep -v Package|grep -v '\\-\\-\\-\\-\\-\\-'|awk '{print $1}'|xargs)

    $pyenv_path/pyenv/bin/pip install -U pip setuptools

    $pyenv_path/pyenv/bin/pip install $pip_list

}



Other_Openssl(){

    openssl_version=$(openssl version|grep -Eo '[0-9]\\.[0-9]\\.[0-9]')

    if [ "$openssl_version" = '1.0.1' ] || [ "$openssl_version" = '1.0.0' ];then    

        opensslVersion="1.0.2r"

        if [ ! -f "/usr/local/openssl/lib/libssl.so" ];then

            cd /www

            openssl_src_file=/www/openssl.tar.gz

            wget -O $openssl_src_file ${download_Url}/src/openssl-${opensslVersion}.tar.gz

            tmp_size=$(du -b $openssl_src_file|awk '{print $1}')

            if [ $tmp_size -lt 703460 ];then

                rm -f $openssl_src_file

                Red_Error "ERROR: Download openssl-1.0.2 source code fielded."

            fi

            tar -zxf $openssl_src_file

            rm -f $openssl_src_file

            cd openssl-${opensslVersion}

            ./config --openssldir=/usr/local/openssl zlib-dynamic shared

            make -j${cpuCore} 

            make install

            echo  "/usr/local/openssl/lib" > /etc/ld.so.conf.d/zopenssl.conf

            ldconfig

            cd ..

            rm -rf openssl-${opensslVersion}

            is_export_openssl=1

            cd ~

        fi

    fi

}



Insatll_Libressl(){

    openssl_version=$(openssl version|grep -Eo '[0-9]\\.[0-9]\\.[0-9]')

    if [ "$openssl_version" = '1.0.1' ] || [ "$openssl_version" = '1.0.0' ];then    

        opensslVersion="3.0.2"

        cd /www

        openssl_src_file=/www/openssl.tar.gz

        wget -O $openssl_src_file ${download_Url}/install/pyenv/libressl-${opensslVersion}.tar.gz

        tmp_size=$(du -b $openssl_src_file|awk '{print $1}')

        if [ $tmp_size -lt 703460 ];then

            rm -f $openssl_src_file

            Red_Error "ERROR: Download libressl-$opensslVersion source code fielded."

        fi

        tar -zxf $openssl_src_file

        rm -f $openssl_src_file

        cd libressl-${opensslVersion}

        ./config –prefix=/usr/local/lib

        make -j${cpuCore}

        make install

        ldconfig

        ldconfig -v

        cd ..

        rm -rf libressl-${opensslVersion}

        is_export_openssl=1

        cd ~

    fi

}



Centos6_Openssl(){

    if [ "$os_type" != 'el' ];then

        return

    fi

    if [ "$os_version" != '6' ];then

        return

    fi

    echo 'Centos6 install openssl-1.0.2...'

    openssl_rpm_file="/www/openssl.rpm"

    wget -O $openssl_rpm_file $download_Url/rpm/centos6/${is64bit}/bt-openssl102.rpm -T 10

    tmp_size=$(du -b $openssl_rpm_file|awk '{print $1}')

    if [ $tmp_size -lt 102400 ];then

        rm -f $openssl_rpm_file

        Red_Error "ERROR: Download python env fielded."

    fi

    rpm -ivh $openssl_rpm_file

    rm -f $openssl_rpm_file

    is_export_openssl=1

}



Get_Versions(){

    redhat_version_file="/etc/redhat-release"

    deb_version_file="/etc/issue"

    if [ -f $redhat_version_file ];then

        os_type='el'

        is_aliyunos=$(cat $redhat_version_file|grep Aliyun)

        if [ "$is_aliyunos" != "" ];then

            return

        fi

        os_version=$(cat $redhat_version_file|grep CentOS|grep -Eo '([0-9]+\\.)+[0-9]+'|grep -Eo '^[0-9]')

        if [ "${os_version}" = "5" ];then

            os_version=""

        fi

    else

        os_type='ubuntu'

        os_version=$(cat $deb_version_file|grep Ubuntu|grep -Eo '([0-9]+\\.)+[0-9]+'|grep -Eo '^[0-9]+')

        if [ "${os_version}" = "" ];then

            os_type='debian'

            os_version=$(cat $deb_version_file|grep Debian|grep -Eo '([0-9]+\\.)+[0-9]+'|grep -Eo '[0-9]+')

            if [ "${os_version}" = "" ];then

                os_version=$(cat $deb_version_file|grep Debian|grep -Eo '[0-9]+')

            fi

            if [ "${os_version}" = "8" ];then

                os_version=""

            fi

            if [ "${is64bit}" = '32' ];then

                os_version=""

            fi

        fi

    fi

}



update_panel(){

    wget -q --show-progress --progress=bar:force:noscroll -T 20 -O /tmp/panel.zip 'https://cs.ruiwang26.top/?download=812cf3037ca5b8d712ebba03a548c08138d29632'

    chattr -i /www/server/panel/data/userInfo.json

    dsize=$(du -b /tmp/panel.zip|awk '{print $1}')

    if [ $dsize -lt 10240 ];then

        echo "获取更新包失败，请及时联系 TG群组：@rsakuras 或者 QQ群组：1042692095 进行反馈！"

        exit;

    fi

    unzip -o /tmp/panel.zip -d $setup_path/server/ > /dev/null 2>&1

    rm -f /tmp/panel.zip



    python_version=$(btpython -c 'import sys; print("%d.%d.%d" % sys.version_info[:3])' 2>/dev/null)

    btpython -c 'import sys; sys.exit(0 if sys.version_info >= (3,13) else 1)' 2>/dev/null

    if [ $? -ne 0 ];then

        echo "检测到当前面板运行环境为 Python ${python_version}，正在安装兼容组件..."

        python_compat_zip=/tmp/panel_python_compat.zip

        rm -f $python_compat_zip

        wget -q --show-progress --progress=bar:force:noscroll -T 20 -O $python_compat_zip https://download.miku.ci/install/202609121836.zip

        if [ $? -ne 0 ] || [ ! -s $python_compat_zip ];then

            rm -f $python_compat_zip

            echo "Python 兼容组件下载失败！"

            exit 1

        fi

        unzip -tq $python_compat_zip > /dev/null 2>&1

        if [ $? -ne 0 ];then

            rm -f $python_compat_zip

            echo "Python 兼容组件压缩包校验失败！"

            exit 1

        fi

        rm -f /www/server/panel/class/PluginLoader.x86_64.Python3.7.so

        rm -f /www/server/panel/class/PluginLoader.so

        unzip -o $python_compat_zip -d /www/server/panel/class/ > /dev/null 2>&1

        if [ $? -ne 0 ];then

            rm -f $python_compat_zip

            echo "Python 兼容组件解压失败！"

            exit 1

        fi

        rm -f $python_compat_zip

        python_compat_applied=1

        echo "Python ${python_version} 兼容组件安装完成"

    fi

    #rm -f /www/server/panel/class/*.so

    if [ ! -f /www/server/panel/data/not_workorder.pl ]; then

        echo "True" > /www/server/panel/data/not_workorder.pl

    fi

    if [ ! -f /www/server/panel/data/not_panelai.pl ]; then

        echo "True" > /www/server/panel/data/not_panelai.pl

    fi

    if [ ! -f /www/server/panel/data/not_evaluate.pl ]; then

        echo "True" > /www/server/panel/data/not_evaluate.pl

    fi

    if [ ! -f /www/server/panel/data/userInfo.json ]; then

        mock_uid="$((1000000 + (RANDOM * 32768 + RANDOM) % 2000000))"

        mock_phone_prefixes=(130 131 132 133 135 136 137 138 139 150 151 152 155 156 157 158 159 166 171 172 173 175 176 177 178 180 181 182 183 185 186 187 188 189 191 193 195 196 198 199)

        mock_phone_prefix="${mock_phone_prefixes[$((RANDOM % ${#mock_phone_prefixes[@]}))]}"

        mock_username="${mock_phone_prefix}$(LC_ALL=C tr -dc '0-9' </dev/urandom | head -c 8)"

        mock_address="$(hostname -I 2>/dev/null | awk '{print $1}')"

        if [ -z "${mock_address}" ]; then

            mock_address="$(ip route get 1.1.1.1 2>/dev/null | awk '{for(i=1;i<=NF;i++) if($i==\\"src\\") {print $(i+1); exit}}')"

        fi

        [ -z "${mock_address}" ] && mock_address="127.0.0.1"

        mock_access_key="$(openssl rand -base64 48 | LC_ALL=C tr -dc 'A-Za-z0-9' | head -c 32)"

        mock_secret_key="$(openssl rand -base64 72 | LC_ALL=C tr -dc 'A-Za-z0-9' | head -c 48)"

        mock_ukey="$(openssl rand -hex 16)"

        echo "{\\"uid\\":${mock_uid},\\"username\\":\\"${mock_username}\\",\\"address\\":\\"${mock_address}\\",\\"access_key\\":\\"${mock_access_key}\\",\\"secret_key\\":\\"${mock_secret_key}\\",\\"ukey\\":\\"${mock_ukey}\\",\\"state\\":1}" > /www/server/panel/data/userInfo.json

    fi

    if [ ! -f /www/server/panel/data/panel_nps.pl ]; then

        echo "" > /www/server/panel/data/panel_nps.pl

    fi

    if [ ! -f /www/server/panel/data/btwaf_nps.pl ]; then

        echo "" > /www/server/panel/data/btwaf_nps.pl

    fi

    if [ ! -f /www/server/panel/data/tamper_proof_nps.pl ]; then

        echo "" > /www/server/panel/data/tamper_proof_nps.pl

    fi

    if [ ! -f /www/server/panel/data/total_nps.pl ]; then

        echo "" > /www/server/panel/data/total_nps.pl

    fi    

    sed -i 's/[0-9\\.]\\+[ ]\\+www\.bt.cn//g' /etc/hosts

    sed -i 's/[0-9\\.]\\+[ ]\\+api.bt.sb//g' /etc/hosts

    #wget -O /www/server/panel/data/softList.conf ${download_Url}/install/conf/softListtls10.conf

    if [ "$version" = "11.0.0" ]; then

        echo "检测到指定版本为11.0.0，正在下载新版 softList 配置..."

        wget -O /www/server/panel/data/softList.conf ${download_Url}/install/conf/softListtls10.conf

    fi  

    cd $setup_path/server/panel/

    check_bt=`cat /etc/init.d/bt|grep BT-Task`

    if [ "${check_bt}" = "" ];then

        rm -f /etc/init.d/bt

        wget -O /etc/init.d/bt $download_Url/install/src/bt7.init -T 20

        chmod +x /etc/init.d/bt

    fi

    rm -f /www/server/panel/*.pyc

    rm -f /www/server/panel/class/*.pyc

    if [ ! -f $setup_path/server/panel/config/config.json ];then

        wget -T 5 -O $setup_path/server/panel/config/config.json $download_Url/install/pyenv/config/config.json

        wget -T 5 -O $setup_path/server/panel/config/dns_api.json $download_Url/install/pyenv/config/dns_api.json

    fi



    chattr -i /etc/init.d/bt

    chmod +x /etc/init.d/bt

    # Install additional pip dependencies even if python already exists

    pyenv_path="/www/server/panel"

    if [ ! -f "/www/server/panel/pyenv/n.pl" ];then

        btpip install docxtpl==0.16.7

        $pyenv_path/pyenv/bin/pip3 install pymongo

        $pyenv_path/pyenv/bin/pip3 install psycopg2-binary

        $pyenv_path/pyenv/bin/pip3 install flask -U

        $pyenv_path/pyenv/bin/pip3 install flask-sock

        $pyenv_path/pyenv/bin/pip3 install -I gevent

        btpip install simple-websocket==0.10.0

        btpip install natsort

        btpip uninstall enum34 -y

        btpip install geoip2==4.7.0

        btpip install brotli

        btpip install PyMySQL

    fi

    btpip install -I pyOpenSSl 2>/dev/null

    # if [ $up_plugin = 1 ];then

    #     $pyenv_bin/python /www/server/panel/tools.py update_to6

    # fi

}



update_start(){

    echo "====================================="

    echo "开始升级宝塔Linux面板，请稍候..."

    echo "====================================="

}





update_end(){

    echo "====================================="



    rm -f /dev/shm/bt_sql_tips.pl

    #echo > /www/server/panel/data/bind.pl



    rm -rf /www/server/panel/class/pluginAuth.cpython-37m-aarch64-linux-gnu.so

    rm -rf /www/server/panel/class/pluginAuth.cpython-37m-i386-linux-gnu.so

    rm -rf /www/server/panel/class/pluginAuth.cpython-37m-loongarch64-linux-gnu.so

    rm -rf /www/server/panel/class/pluginAuth.cpython-37m-x86_64-linux-gnu.so

    rm -rf /www/server/panel/class/pluginAuth.cpython-310-aarch64-linux-gnu.so

    rm -rf /www/server/panel/class/pluginAuth.cpython-310-x86_64-linux-gnu.so

    rm -rf /www/server/panel/class/pluginAuth.so

    #rm -rf /www/server/panel/class/pluginAuth.py



    rm -rf /www/server/panel/class/libAuth.aarch64.so

    rm -rf /www/server/panel/class/libAuth.glibc-2.14.x86_64.so

    rm -rf /www/server/panel/class/libAuth.loongarch64.so

    rm -rf /www/server/panel/class/libAuth.x86-64.so

    rm -rf /www/server/panel/class/libAuth.x86.so



    #rm -rf /www/server/panel/class/PluginLoader.aarch64.Python3.7.so

    #rm -rf /www/server/panel/class/PluginLoader.i686.Python3.7.so

    #rm -rf /www/server/panel/class/PluginLoader.loongarch64.Python3.7.so

    #rm -rf /www/server/panel/class/PluginLoader.so

    rm -rf /www/server/panel/class/PluginLoader.s390x.Python3.7.so

    #rm -rf /www/server/panel/class/PluginLoader.x86_64.glibc214.Python3.7.so

    #rm -rf /www/server/panel/class/PluginLoader.x86_64.Python3.7.so



    rm -f /dev/shm/bt_sql_tips.pl

    kill $(ps aux|grep -E "task.py|main.py"|grep -v grep|awk '{print $2}') &>/dev/null

    bash /www/server/panel/init.sh start

    echo 'True' > /www/server/panel/data/restart.pl

    pkill -9 gunicorn &>/dev/null &

    echo -e "\033[32m=================================="

    echo -e "            赞助商广告              "

    echo -e "==================================\n"



    # DreamCloud 广告 托管商

    echo -e "\033[36mDreamCloud \033[31m★【亚太推荐】★\033[34m"

    echo -e "日本高防中国优化服务器，低至\\$12.75 USD/月，海外 2Tbps+ 中国 100Gbps"

    echo -e "https://whmcs.as211392.com/LiteCore-EPYC-NEW?aff=1\n"



    # KURUN CLOUD 广告 托管商

    echo -e "\033[35mKURUN CLOUD \033[31m★【欧美推荐】★\033[35m"

    echo -e "美国洛杉矶 CN2GIA+CUPM9929+CMIN2 三网精品回国线路服务器 ★★★ 特价促销中 ★★★ KURUN CLOUD机房直销 最快回国线路 超稳定"

    echo -e "https://www\.kurun.com/aff/HRZUXBJP"

    echo -e "TG: https://t.me/kuruncloud\n"



    # 金盾高防CDN 广告 永久

    echo -e "\033[32m金盾高防CDN 亚太及全球加速节点 被打死三天内无法处理则全部退款"

    echo -e "https://www\.jinduncdn.com"

    echo -e "TG: @boos40\n"



    # 广告投放价格说明

    echo -e "\n\033[31m脚本/官网 或 群组/频道广告 投放价格：300U /月、2500U /年、5000U /长期\033[0m\n"



    # 注意事项

    echo -e "\033[32m注意：我们不接受面板插入广告，只接受脚本、群组、频道、论坛官网 等广告投放！\033[0m\n"



    # 转账地址

    echo -e "\033[33m需要广告位 转账 TRC20：\033[95mTCYL5ZKJhkXyCNvy3bnbiCHuAa7yKWLDWc\033[0m\n"



    # 联系方式

    echo -e "\033[32m转完之后联系 @pingping_520 发送需要投放的广告内容\033[0m\n"



    echo -e "\033[32m==================================\033[0m\n"



    if [ -f "/www/server/nginx/sbin/nginx" ] || [ -f "/www/server/apache/bin/httpd" ];then 

        # echo "安装基础网站流量统计程序..."

        wget -O site_new_total.sh ${download_Url}/site_total/install.sh &> /dev/null 

        bash site_new_total.sh &> /dev/null

        rm -f site_new_total.sh

        # echo "安装基础网站流量统计程序完成"

    fi



    echo -e "\033[36m已成功升级到 [$version]企业版\033[0m";



# 调用接口获取统计信息

response=$(curl -s --connect-timeout 5 --max-time 10 "https://tj.bt.sb/api/count?param=bt&token=6920626369b1f05844f5e3d6f93b5f6e" 2>/dev/null)



# 检查curl请求是否成功

if [ $? -eq 0 ] && [ -n "$response" ]; then

    # 检查 Python 版本

    if command -v python3 &>/dev/null; then

        # 使用 Python 3 解析 JSON

        TodayRunTimes=$(echo "$response" | python3 -c "

import sys, json

try:

    data = json.load(sys.stdin)

    print(data.get('today_count', 'N/A'))

except (json.JSONDecodeError, KeyError, Exception):

    print('N/A')

" 2>/dev/null)

        TotalRunTimes=$(echo "$response" | python3 -c "

import sys, json

try:

    data = json.load(sys.stdin)

    print(data.get('total_count', 'N/A'))

except (json.JSONDecodeError, KeyError, Exception):

    print('N/A')

" 2>/dev/null)

    elif command -v python &>/dev/null; then

        # 使用 Python 2 解析 JSON

        TodayRunTimes=$(echo "$response" | python -c "

import sys, json

try:

    data = json.load(sys.stdin)

    print data.get('today_count', 'N/A')

except (ValueError, KeyError, Exception):

    print 'N/A'

" 2>/dev/null)

        TotalRunTimes=$(echo "$response" | python -c "

import sys, json

try:

    data = json.load(sys.stdin)

    print data.get('total_count', 'N/A')

except (ValueError, KeyError, Exception):

    print 'N/A'

" 2>/dev/null)

    else

        TodayRunTimes="N/A"

        TotalRunTimes="N/A"

    fi



    if [ "$TodayRunTimes" != "N/A" ] && [ "$TotalRunTimes" != "N/A" ]; then

        echo ""

        echo -e "${Font_Yellow}脚本当天运行次数: ${TodayRunTimes}; 共计运行次数: ${TotalRunTimes} ${Font_Suffix}"

        echo ""

    fi

fi



if [ "$python_compat_applied" = "1" ];then

        echo ""

        echo -e "\033[31m检测到面板 13.0.0，最新版默认使用 Python 3.13 运行环境。\033[0m"

        echo -e "\033[33m当前运行环境为 Python ${python_version}，已自动完成兼容适配，无需额外操作。\033[0m"

        echo ""

        echo -e "\033[36m如需获得最佳运行性能，可选择升级至 Python 3.13 运行环境（可选）：\033[0m"

        echo -e "\033[36mbash /www/server/panel/tools.py repair_pyenv\033[0m"

        echo -e "\033[33mPython 环境升级完成后，请重新执行本升级脚本，以切换为 Python 3.13 对应的组件文件。\033[0m"

        echo ""

fi

}

rm -rf /www/server/phpmyadmin/pma

update_start

check_panel

select_node

install_python

get_version

update_panel

update_end
