Update jd_check_dependent.py

This commit is contained in:
Faker 2023-01-22 01:44:44 +08:00
parent 893c0ec348
commit d35ce10dd1

View File

@ -1,242 +1,249 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
""" """
File: jd_check_dependent.py(Harbour库依赖一键检测安装(不可禁用)每2小时检测一次) File: jd_check_dependent.py(Harbour库依赖一键检测安装(不可禁用)每2小时检测一次)
Author: HarbourJ Author: HarbourJ
Date: 2022/8/12 20:37 Date: 2022/8/12 20:37
TG: https://t.me/HarbourToulu TG: https://t.me/HarbourToulu
TgChat: https://t.me/HarbourSailing TgChat: https://t.me/HarbourSailing
cron: 7 7 7 7 7 cron: 7 7 7 7 7
new Env('Faker库依赖一键安装'); new Env('Faker库依赖一键安装');
Description:1.Faker库jd_sign本地算法依赖一键检测安装脚本; Description:1.Faker库jd_sign本地算法依赖一键检测安装脚本;
2.自动识别机器系统/架构,拉取最新依赖文件; 2.自动识别机器系统/架构,拉取最新依赖文件;
3.本地sign算法已编译支持Windows(amd64)Linux(amd64/arm64/arm)Macos(x86_64)系统/架构; 3.本地sign算法已编译支持Windows(amd64)Linux(amd64/arm64/arm)Macos(x86_64)系统/架构;
4.默认支持python3版本为3.8-3.10,过低可能会报错; 4.默认支持python3版本为3.8-3.10,过低可能会报错;
5.若本一键配置脚本无法安装所需jd_sign依赖文件,请前往https://github.com/HarbourJ/HarbourToulu/releases自行下载系统对应的jd_sign依赖压缩文件,解压并放置/scripts/HarbourJ_HarbourToulu_main文件夹内即可 5.若本一键配置脚本无法安装所需jd_sign依赖文件,请前往https://github.com/HarbourJ/HarbourToulu/releases自行下载系统对应的jd_sign依赖压缩文件,解压并放置/scripts/HarbourJ_HarbourToulu_main文件夹内即可
6.初次拉库必须先运行本脚本 6.初次拉库必须先运行本脚本
""" """
import sys import sys
import requests, os, platform import requests, os, platform
from functools import partial import urllib.request
print = partial(print, flush=True) from functools import partial
print = partial(print, flush=True)
def updateDependent():
""" def updateDependent():
更新依赖的主函数 """
""" 更新依赖的主函数
system = platform.system().lower() """
PyVersion_ = platform.python_version() system = platform.system().lower()
PyVersion = ''.join(PyVersion_.split('.')[:2]) PyVersion_ = platform.python_version()
if int(PyVersion) > 310: PyVersion = ''.join(PyVersion_.split('.')[:2])
print(f"✅识别本机设备Py版本为{PyVersion_},版本太高暂不支持,可退回青龙2.11.3版本!\n") if int(PyVersion) > 310:
sys.exit() print(f"✅识别本机设备Py版本为{PyVersion_},版本太高暂不支持,可退回青龙2.11.3版本!\n")
if system == "windows": sys.exit()
fileName = f"jd_sign-win-amd64-py{PyVersion}.zip" if system == "windows":
print(f"✅识别本机设备为Windows amd64,Py版本为{PyVersion_}\n") fileName = f"jd_sign-win-amd64-py{PyVersion}.zip"
rtu = signReleaseUpdate() print(f"✅识别本机设备为Windows amd64,Py版本为{PyVersion_}\n")
if rtu == 9: rtu = signReleaseUpdate()
sys.exit() if rtu == 9:
if rtu: sys.exit()
removeOldSign() if rtu:
if download(rtu, fileName): removeOldSign()
import zipfile if download(rtu, fileName):
f = zipfile.ZipFile(fileName, 'r') import zipfile
for file in f.namelist(): f = zipfile.ZipFile(fileName, 'r')
f.extract(file, os.getcwd()) for file in f.namelist():
f.close() f.extract(file, os.getcwd())
return True f.close()
elif system == "darwin": return True
fileName = f"jd_sign-darwin-x86_64-py{PyVersion}.tar.gz" elif system == "darwin":
print(f"✅识别本机设备为MacOS x86_64,Py版本为{PyVersion_}\n") fileName = f"jd_sign-darwin-x86_64-py{PyVersion}.tar.gz"
rtu = signReleaseUpdate() print(f"✅识别本机设备为MacOS x86_64,Py版本为{PyVersion_}\n")
if rtu == 9: rtu = signReleaseUpdate()
sys.exit() if rtu == 9:
if rtu: sys.exit()
removeOldSign() if rtu:
if download(rtu, fileName): removeOldSign()
os.system(f'tar xvf {fileName}') if download(rtu, fileName):
os.system(f'rm -rf {fileName}') os.system(f'tar xvf {fileName}')
return True os.system(f'rm -rf {fileName}')
else: return True
rtu = signReleaseUpdate() else:
if rtu == 9: rtu = signReleaseUpdate()
sys.exit() if rtu == 9:
if rtu: sys.exit()
removeOldSign() if rtu:
framework = os.uname().machine removeOldSign()
if framework == "x86_64": framework = os.uname().machine
fileName = f"jd_sign-linux-amd64-py{PyVersion}.tar.gz" if framework == "x86_64":
print(f"✅识别本机设备为Linux {framework},Py版本为{PyVersion_}\n") fileName = f"jd_sign-linux-amd64-py{PyVersion}.tar.gz"
if download(rtu, fileName): print(f"✅识别本机设备为Linux {framework},Py版本为{PyVersion_}\n")
os.system(f'tar xvf {fileName}') if download(rtu, fileName):
os.system(f'rm -rf {fileName}') os.system(f'tar xvf {fileName}')
return True os.system(f'rm -rf {fileName}')
elif framework == "aarch64" or framework == "arm64": return True
fileName = f"jd_sign-linux-arm64-py{PyVersion}.tar.gz" elif framework == "aarch64" or framework == "arm64":
print(f"✅识别本机设备为Linux {framework},Py版本为{PyVersion_}\n") fileName = f"jd_sign-linux-arm64-py{PyVersion}.tar.gz"
check_ld_libc(rtu) print(f"✅识别本机设备为Linux {framework},Py版本为{PyVersion_}\n")
if download(rtu, fileName): check_ld_libc(rtu)
os.system(f'tar xvf {fileName}') if download(rtu, fileName):
os.system(f'rm -rf {fileName}') os.system(f'tar xvf {fileName}')
return True os.system(f'rm -rf {fileName}')
elif framework == "armv7l": return True
fileName = f"jd_sign-linux-arm-py{PyVersion}.tar.gz" elif framework == "armv7l":
print(f"✅识别本机设备为Linux {framework},Py版本为{PyVersion_}\n") fileName = f"jd_sign-linux-arm-py{PyVersion}.tar.gz"
check_ld_libc(rtu) print(f"✅识别本机设备为Linux {framework},Py版本为{PyVersion_}\n")
if download(rtu, fileName): check_ld_libc(rtu)
os.system(f'tar xvf {fileName}') if download(rtu, fileName):
os.system(f'rm -rf {fileName}') os.system(f'tar xvf {fileName}')
return True os.system(f'rm -rf {fileName}')
else: return True
fileName = f"jd_sign-linux-amd64-py{PyVersion}.tar.gz" else:
print(f"⚠️无法识别本机设备操作系统,默认本机设备为Linux x86_64,Py版本为{PyVersion_}\n") fileName = f"jd_sign-linux-amd64-py{PyVersion}.tar.gz"
if download(rtu, fileName): print(f"⚠️无法识别本机设备操作系统,默认本机设备为Linux x86_64,Py版本为{PyVersion_}\n")
os.system(f'tar xvf {fileName}') if download(rtu, fileName):
os.system(f'rm -rf {fileName}') os.system(f'tar xvf {fileName}')
return True os.system(f'rm -rf {fileName}')
return True
def check_ld_libc(version):
""" def check_ld_libc(version):
检测是否存在ld-linux-aarch64.so.1libc.musl-aarch64.so.1动态依赖文件 """
""" 检测是否存在ld-linux-aarch64.so.1libc.musl-aarch64.so.1动态依赖文件
if "ld-linux-aarch64.so.1" in (os.listdir('/lib')): """
print("🗣已存在arm64-ld依赖\n") if "ld-linux-aarch64.so.1" in (os.listdir('/lib')):
pass print("🗣已存在arm64-ld依赖\n")
else: pass
if download(version, "ld-linux-aarch64.tar.gz"): else:
os.system('tar xvf ld-linux-aarch64.tar.gz') if download(version, "ld-linux-aarch64.tar.gz"):
os.system('cp ld-linux-aarch64.so.1 /lib') os.system('tar xvf ld-linux-aarch64.tar.gz')
if "ld-linux-aarch64.so.1" in (os.listdir('/lib')): os.system('cp ld-linux-aarch64.so.1 /lib')
print("✅arm64-ld依赖安装完成~\n") if "ld-linux-aarch64.so.1" in (os.listdir('/lib')):
os.system('rm -rf ld-linux-aarch64.tar.gz') print("✅arm64-ld依赖安装完成~\n")
os.system('rm -rf ld-linux-aarch64.so.1') os.system('rm -rf ld-linux-aarch64.tar.gz')
else: os.system('rm -rf ld-linux-aarch64.so.1')
print("❌arm64-ld依赖安装失败,请前往Faker TG群查看安装教程\n") else:
if "libc.musl-aarch64.so.1" in (os.listdir('/lib')): print("❌arm64-ld依赖安装失败,请前往Faker TG群查看安装教程\n")
print("🗣已存在arm64-libc依赖\n") if "libc.musl-aarch64.so.1" in (os.listdir('/lib')):
pass print("🗣已存在arm64-libc依赖\n")
else: pass
if download(version, "libc.musl-aarch64.tar.gz"): else:
os.system('tar xvf libc.musl-aarch64.tar.gz') if download(version, "libc.musl-aarch64.tar.gz"):
os.system('cp libc.musl-aarch64.so.1 /lib') os.system('tar xvf libc.musl-aarch64.tar.gz')
if "libc.musl-aarch64.so.1" in (os.listdir('/lib')): os.system('cp libc.musl-aarch64.so.1 /lib')
print("✅arm64-libc依赖安装完成~\n") if "libc.musl-aarch64.so.1" in (os.listdir('/lib')):
os.system('rm -rf libc.musl-aarch64.tar.gz') print("✅arm64-libc依赖安装完成~\n")
os.system('rm -rf libc.musl-aarch64.so.1') os.system('rm -rf libc.musl-aarch64.tar.gz')
else: os.system('rm -rf libc.musl-aarch64.so.1')
print("❌arm64-libc依赖安装失败,请前往Faker TG群查看安装教程\n") else:
print("❌arm64-libc依赖安装失败,请前往Faker TG群查看安装教程\n")
def download(version, systemFile):
raw_url = f"https://ghproxy.com/https://github.com/HarbourJ/HarbourToulu/releases/download/{version}/{systemFile}" def download(version, systemFile):
try: raw_url = f"https://proxy.zyun.vip/https://github.com/HarbourJ/HarbourToulu/releases/download/{version}/{systemFile}"
fileList = os.listdir() try:
if systemFile in fileList: fileList = os.listdir()
os.remove(systemFile) if systemFile in fileList:
except: os.remove(systemFile)
print(f"❌删除{fileList}失败\n") except:
try: print(f"❌删除{fileList}失败\n")
try: try:
import wget try:
except ImportError as e: import wget
print(e) except ImportError as e:
if "No module" in str(e): print(e)
os.system("pip install wget") if "No module" in str(e):
import wget os.system("pip install wget")
wget.download(raw_url) import wget
print(f"{systemFile}下载成功\n") # wget.download(raw_url,user-agent="Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36")
return True print("------开始下载%s------\n" % systemFile)
except Exception as e: print(raw_url)
print(e) file_name = raw_url.split('/')[-1]
print(f"{systemFile}下载失败\n") opener = urllib.request.build_opener()
return False opener.addheaders = [('User-agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/109.0')]
urllib.request.install_opener(opener)
def removeOldSign(): urllib.request.urlretrieve(raw_url, file_name)
fileList = os.listdir() print(f"{systemFile}下载成功\n")
if "jd_sign.so" in fileList: return True
try: except Exception as e:
os.remove("jd_sign.so") print(e)
print("✅成功删除历史jd_sign依赖文件\n") print(f"{systemFile}下载失败\n")
except: return False
pass
elif "jd_sign_x86.so" in fileList: def removeOldSign():
try: fileList = os.listdir()
os.remove("jd_sign_x86.so") if "jd_sign.so" in fileList:
print("✅成功删除历史jd_sign依赖文件\n") try:
except: os.remove("jd_sign.so")
pass print("✅成功删除历史jd_sign依赖文件\n")
elif "jd_sign_arm64.so" in fileList: except:
try: pass
os.remove("jd_sign_arm64.so") elif "jd_sign_x86.so" in fileList:
print("✅成功删除历史jd_sign依赖文件\n") try:
except: os.remove("jd_sign_x86.so")
pass print("✅成功删除历史jd_sign依赖文件\n")
except:
def signReleaseUpdate(): pass
""" elif "jd_sign_arm64.so" in fileList:
判断Release内的主要文件是否更新(判断utils内版本更新log文件-signUpdateLog.log) try:
""" os.remove("jd_sign_arm64.so")
GitAPI = "https://ghproxy.com/https://raw.githubusercontent.com/HarbourJ/HarbourToulu/main/utils/signUpdateLog.log" print("✅成功删除历史jd_sign依赖文件\n")
# try: except:
headers = { pass
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'accept-encoding': 'gzip, deflate, br', def signReleaseUpdate():
'accept-language': 'zh-CN,zh;q=0.9', """
'referer': 'https://github.com/HarbourJ/HarbourToulu/blob/main/jdCookie.py', 判断Release内的主要文件是否更新(判断utils内版本更新log文件-signUpdateLog.log)
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36' """
} GitAPI = "https://proxy.zyun.vip/https://raw.githubusercontent.com/HarbourJ/HarbourToulu/main/utils/signUpdateLog.log"
response = requests.request("GET", url=GitAPI, headers=headers, timeout=20) # try:
if response.status_code == 200: headers = {
res = response.text.split('\n') 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
print(f'📝最新sign为 {res[-1]}版本\n') 'accept-encoding': 'gzip, deflate',
new_version = res[-1].split(' v')[-1] 'accept-language': 'zh-CN,zh;q=0.9',
# 获取上一次检查所记录的version值 'referer': 'https://github.com/HarbourJ/HarbourToulu/blob/main/jdCookie.py',
try: 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36'
with open('signUpdate.log', "r") as f0: }
last_version = f0.read() response = requests.request("GET", url=GitAPI, headers=headers, timeout=20)
except Exception as e: if response.status_code == 200:
# print(e) res = response.text.split('\n')
# 以log格式写入文件 print(f'📝最新sign为 {res[-1]}版本\n')
with open("signUpdate.log", "w") as f1: new_version = res[-1].split(' v')[-1]
f1.write('') # 获取上一次检查所记录的version值
last_version = '' try:
with open("signUpdate.log", "w") as f2: with open('signUpdate.log', "r") as f0:
f2.write(new_version) last_version = f0.read()
if new_version != last_version: except Exception as e:
print("⏰检测到依赖版本有更新,自动更新...\n") # print(e)
return new_version # 以log格式写入文件
else: with open("signUpdate.log", "w") as f1:
print("📝检测到依赖版本无更新\n") f1.write('')
try: last_version = ''
from jd_sign import remote_redis with open("signUpdate.log", "w") as f2:
result = remote_redis(export_name="Test01", db_index=15) f2.write(new_version)
print(f'🎉{result}\n') if new_version != last_version:
print("✅依赖正常,退出程序") print("⏰检测到依赖版本有更新,自动更新...\n")
return 9 return new_version
except: else:
print("⏰依赖不正常,自动修复中...\n") print("📝检测到依赖版本无更新\n")
return new_version try:
else: from jd_sign import remote_redis
print(f'❌请求失败:{GitAPI}\n') result = remote_redis(export_name="Test01", db_index=15)
print(f'❌错误信息:{response.txt}\n') print(f'🎉{result}\n')
return False print("✅依赖正常,退出程序")
# except: return 9
# print(f'❌请求URL失败{GitAPI}\n') except:
# return False print("⏰依赖不正常,自动修复中...\n")
return new_version
def main(): else:
updateDependent() print(f'❌请求失败:{GitAPI}\n')
try: print(f'❌错误信息:{response.txt}\n')
from jd_sign import remote_redis return False
result = remote_redis(export_name="Test01", db_index=15) # except:
print(f'🎉{result}\n') # print(f'❌请求URL失败{GitAPI}\n')
if result: # return False
print("✅依赖安装/更新完成")
except: def main():
print("‼️依赖安装/更新失败,请前往Faker TG群查看安装教程") updateDependent()
try:
if __name__ == '__main__': from jd_sign import remote_redis
main() result = remote_redis(export_name="Test01", db_index=15)
print(f'🎉{result}\n')
if result:
print("✅依赖安装/更新完成")
except:
print("‼️依赖安装/更新失败,请前往Faker TG群查看安装教程")
if __name__ == '__main__':
main()