mirror of https://github.com/midoks/mdserver-web
parent
34551409d9
commit
a3d231f619
@ -0,0 +1,152 @@ |
||||
# coding:utf-8 |
||||
|
||||
# --------------------------------------------------------------------------------- |
||||
# MW-Linux面板 |
||||
# --------------------------------------------------------------------------------- |
||||
# copyright (c) 2018-∞(https://github.com/midoks/mdserver-web) All rights reserved. |
||||
# --------------------------------------------------------------------------------- |
||||
# Author: midoks <midoks@163.com> |
||||
# --------------------------------------------------------------------------------- |
||||
|
||||
import os |
||||
import sys |
||||
import re |
||||
import time |
||||
import math |
||||
import psutil |
||||
|
||||
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(self, 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", "<br/>") |
||||
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)) |
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in new issue