# coding:utf-8 # --------------------------------------------------------------------------------- # MW-Linux面板 # --------------------------------------------------------------------------------- # copyright (c) 2018-∞(https://github.com/midoks/mdserver-web) All rights reserved. # --------------------------------------------------------------------------------- # Author: midoks # --------------------------------------------------------------------------------- import os import sys import re import time import math import psutil import json import core.mw as mw def versionDiff(old, new): ''' test 测试 new 有新版本 none 没有新版本 ''' new_list = new.split('.') if len(new_list) > 3: return 'test' old_list = old.split('.') ret = 'none' isHasNew = True if int(new_list[0]) == int(old_list[0]) and int(new_list[1]) == int(old_list[1]) and int(new_list[2]) == int(old_list[2]): isHasNew = False if isHasNew: return 'new' return ret def getServerInfo(): import urllib.request import ssl upAddr = 'https://api.github.com/repos/midoks/mdserver-web/releases/latest' try: context = ssl._create_unverified_context() req = urllib.request.urlopen(upAddr, context=context, timeout=3) result = req.read().decode('utf-8') version = json.loads(result) return version except Exception as e: print(str(e)) return None return None def updateServer(stype, version=''): import config # 更新服务 try: if not mw.isRestart(): return mw.returnData(False, '请等待所有安装任务完成再执行!') version_new_info = getServerInfo() if version_new_info is None: return mw.returnData(False, '服务器数据或网络有问题!') version_now = config.APP_VERSION new_ver = version_new_info['name'] if stype == 'check': diff = versionDiff(version_now, new_ver) if diff == 'new': return mw.returnData(True, '有新版本!', new_ver) elif diff == 'test': return mw.returnData(True, '有测试版本!', new_ver) else: return mw.returnData(False, '已经是最新,无需更新!') if stype == 'info': diff = versionDiff(version_now, new_ver) data = {} data['version'] = new_ver data['content'] = version_new_info['body'].replace("\n", "
") return mw.returnData(True, '更新信息!', data) if stype == 'update': if version == '': return mw.returnData(False, '缺少版本信息!') if new_ver != version: return mw.returnData(False, '更新失败,请重试!') toPath = mw.getPanelDir() + '/temp' if not os.path.exists(toPath): mw.execShell('mkdir -p ' + toPath) newUrl = "https://github.com/midoks/mdserver-web/archive/refs/tags/" + version + ".zip" dist_mw = toPath + '/mw.zip' if not os.path.exists(dist_mw): mw.execShell('wget --no-check-certificate -O ' + dist_mw + ' ' + newUrl) dist_to = toPath + "/mdserver-web-" + version if not os.path.exists(dist_to): os.system('unzip -o ' + toPath + '/mw.zip' + ' -d ' + toPath) cmd_cp = 'cp -rf ' + toPath + '/mdserver-web-' + version + '/* ' + mw.getServerDir() + '/mdserver-web' mw.execShell(cmd_cp) mw.execShell('rm -rf ' + toPath + '/mdserver-web-' + version) mw.execShell('rm -rf ' + toPath + '/mw.zip') update_env = ''' #!/bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin P_VER=`python3 -V | awk '{print $2}'` if [ ! -f /www/server/mdserver-web/bin/activate ];then cd /www/server/mdserver-web && python3 -m venv . cd /www/server/mdserver-web && source /www/server/mdserver-web/bin/activate else cd /www/server/mdserver-web && source /www/server/mdserver-web/bin/activate fi cn=$(curl -fsSL -m 10 http://ipinfo.io/json | grep "\"country\": \"CN\"") PIPSRC="https://pypi.python.org/simple" if [ ! -z "$cn" ];then PIPSRC="https://pypi.tuna.tsinghua.edu.cn/simple" fi cd /www/server/mdserver-web && pip3 install -r /www/server/mdserver-web/requirements.txt -i $PIPSRC P_VER_D=`echo "$P_VER"|awk -F '.' '{print $1}'` P_VER_M=`echo "$P_VER"|awk -F '.' '{print $2}'` NEW_P_VER=${P_VER_D}.${P_VER_M} if [ -f /www/server/mdserver-web/version/r${NEW_P_VER}.txt ];then cd /www/server/mdserver-web && pip3 install -r /www/server/mdserver-web/version/r${NEW_P_VER}.txt -i $PIPSRC fi ''' os.system(update_env) mw.restartMw() return mw.returnData(True, '安装更新成功!') return mw.returnData(False, '已经是最新,无需更新!') except Exception as ex: # print('updateServer', ex) return mw.returnData(False, "连接服务器失败!" + str(ex))