This commit is contained in:
Faker 2022-08-31 17:25:48 +08:00
parent 6f248d68c8
commit bab46e5488
8 changed files with 226 additions and 0 deletions

226
jd_check_dependent.py Normal file
View File

@ -0,0 +1,226 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
File: jd_check_dependent.py(Harbour库依赖一键检测安装(不可禁用)每小时检测一次)
Author: HarbourJ
Date: 2022/8/12 20:37
TG: https://t.me/HarbourToulu
TgChat: https://t.me/HarbourSailing
cron: 7 7 7 7 7
new Env('Faker库本地Sign依赖检测');
Description:1.Faker库jd_sign本地算法依赖一键检测安装脚本;
2.自动识别机器系统/架构,拉取最新依赖文件;
3.本地sign算法已编译支持Windows(amd64)Linux(amd64/arm64/arm)Macos(x86_64)系统/架构;
4.默认支持python3版本为3.8-3.9,过高或过低可能会报错;
5.若本一键配置脚本无法安装所需jd_sign依赖文件,请前往https://github.com/HarbourJ/HarbourToulu/releases自行下载系统对应的jd_sign依赖压缩文件,解压并放置/scripts/HarbourJ_HarbourToulu_main文件夹内即可
"""
import sys
import requests, os, platform
from functools import partial
print = partial(print, flush=True)
def updateDependent():
"""
更新依赖的主函数
"""
system = platform.system().lower()
if system == "windows":
print("识别本机设备为Windows amd64")
rtu = repoTreeUpdate()
if rtu == 9:
sys.exit()
if rtu:
removeOldSign()
if download("jd_sign-win-amd64.zip"):
import zipfile
f = zipfile.ZipFile("jd_sign-win-amd64.zip", 'r')
for file in f.namelist():
f.extract(file, os.getcwd())
f.close()
return True
elif system == "darwin":
print("识别本机设备为MacOS x86_64")
rtu = repoTreeUpdate()
if rtu == 9:
sys.exit()
if rtu:
removeOldSign()
if download("jd_sign-darwin-x86_64.tar.gz"):
os.system('tar xvf jd_sign-darwin-x86_64.tar.gz')
os.system('rm -rf jd_sign-darwin-x86_64.tar.gz')
return True
else:
print("识别本机设备为Linux")
rtu = repoTreeUpdate()
if rtu == 9:
sys.exit()
if rtu:
removeOldSign()
framework = os.uname().machine
if framework == "x86_64":
if download("jd_sign-linux-amd64.tar.gz"):
os.system('tar xvf jd_sign-linux-amd64.tar.gz')
os.system('rm -rf jd_sign-linux-amd64.tar.gz')
return True
elif framework == "aarch64" or framework == "arm64":
check_ld_libc()
if download("jd_sign-linux-arm64.tar.gz"):
os.system('tar xvf jd_sign-linux-arm64.tar.gz')
os.system('rm -rf jd_sign-linux-arm64.tar.gz')
return True
elif framework == "armv7l":
check_ld_libc()
if download("jd_sign-linux-arm.tar.gz"):
os.system('tar xvf jd_sign-linux-arm.tar.gz')
os.system('rm -rf jd_sign-linux-arm.tar.gz')
return True
else:
if download("jd_sign-linux-amd64.tar.gz"):
os.system('tar xvf jd_sign-linux-amd64.tar.gz')
os.system('rm -rf jd_sign-linux-amd64.tar.gz')
return True
def check_ld_libc():
"""
检测是否存在ld-linux-aarch64.so.1libc.musl-aarch64.so.1动态依赖文件
"""
if "ld-linux-aarch64.so.1" in (os.listdir('/lib')):
print("已存在arm64-ld依赖")
pass
else:
if download("ld-linux-aarch64.tar.gz"):
os.system('tar xvf ld-linux-aarch64.tar.gz')
os.system('cp ld-linux-aarch64.so.1 /lib')
if "ld-linux-aarch64.so.1" in (os.listdir('/lib')):
print("arm64-ld依赖安装完成~")
os.system('rm -rf ld-linux-aarch64.tar.gz')
os.system('rm -rf ld-linux-aarch64.so.1')
else:
print("arm64-ld依赖安装失败,请前往https://github.com/HarbourJ/HarbourToulu/blob/main/README.md,查看依赖安装教程")
if "libc.musl-aarch64.so.1" in (os.listdir('/lib')):
print("已存在arm64-libc依赖")
pass
else:
if download("libc.musl-aarch64.tar.gz"):
os.system('tar xvf libc.musl-aarch64.tar.gz')
os.system('cp libc.musl-aarch64.so.1 /lib')
if "libc.musl-aarch64.so.1" in (os.listdir('/lib')):
print("arm64-libc依赖安装完成~")
os.system('rm -rf libc.musl-aarch64.tar.gz')
os.system('rm -rf libc.musl-aarch64.so.1')
else:
print("arm64-libc依赖安装失败,请前往https://github.com/HarbourJ/HarbourToulu/blob/main/README.md,查看依赖安装教程")
def download(systemFile):
raw_url = f"https://ghproxy.com/https://raw.githubusercontent.com/HarbourJ/HarbourToulu/main/utils/{systemFile}"
try:
fileList = os.listdir()
if systemFile in fileList:
os.remove(systemFile)
except:
print(f"删除{fileList}失败")
try:
try:
import wget
except ImportError as e:
print(e)
if "No module" in str(e):
os.system("pip install wget")
import wget
wget.download(raw_url)
print(f"{systemFile}下载成功")
return True
except Exception as e:
print(e)
print(f"{systemFile}下载失败")
return False
def removeOldSign():
fileList = os.listdir()
if "jd_sign.so" in fileList:
try:
os.remove("jd_sign.so")
print("成功删除历史jd_sign依赖文件")
except:
pass
elif "jd_sign_x86.so" in fileList:
try:
os.remove("jd_sign_x86.so")
print("成功删除历史jd_sign依赖文件")
except:
pass
elif "jd_sign_arm64.so" in fileList:
try:
os.remove("jd_sign_arm64.so")
print("成功删除历史jd_sign依赖文件")
except:
pass
def repoTreeUpdate():
"""
判断utils内的主要文件是否更新(sha值是否变化)
"""
GitAPI = 'https://api.github.com/repos/shufflewzc/faker2/git/trees/main'
try:
session = requests.session()
headers = {"Content-Type": "application/json"}
res = session.get(url=GitAPI, headers=headers, timeout=20)
if res.status_code == 200:
for x in res.json()["tree"]:
if "utils" == x["path"]:
new_sha = x["sha"]
print(new_sha)
# 获取上一次检查所记录的sha值
try:
with open('repoUpdate.log', "r") as f0:
last_sha = f0.read()
except Exception as e:
# print(e)
# 以log格式写入文件
with open("repoUpdate.log", "w") as f1:
f1.write('')
with open("repoUpdate.log", "w") as f2:
f2.write(new_sha)
if new_sha != last_sha:
print("检测到依赖版本有更新,自动更新...")
print("*" * 30)
return True
else:
print("检测到依赖版本无更新")
try:
from jd_sign import remote_redis
result = remote_redis(export_name="Test01", db_index=15)
print(result)
print("依赖正常,退出程序")
return 9
except:
print("依赖不正常,自动修复中...")
print("*" * 30)
return True
else:
print(f'请求失败:{GitAPI}')
if "message" in res.json():
print(f'错误信息:{res.json()["message"]}')
return False
except:
print(f'请求URL失败{GitAPI}')
return False
def main():
updateDependent()
try:
from jd_sign import remote_redis
result = remote_redis(export_name="Test01", db_index=15)
print(result)
if result:
print("依赖安装/更新完成")
except:
print("依赖安装/更新失败,请前往https://t.me/scriptalking,查看依赖安装教程")
if __name__ == '__main__':
main()

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
utils/jd_sign-win-amd64.zip Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.