diff --git a/jd_check_dependent.py b/jd_check_dependent.py new file mode 100644 index 0000000..c56b6a8 --- /dev/null +++ b/jd_check_dependent.py @@ -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.1、libc.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() + + diff --git a/utils/jd_sign-darwin-x86_64.tar.gz b/utils/jd_sign-darwin-x86_64.tar.gz new file mode 100644 index 0000000..0d5fa49 Binary files /dev/null and b/utils/jd_sign-darwin-x86_64.tar.gz differ diff --git a/utils/jd_sign-linux-amd64.tar.gz b/utils/jd_sign-linux-amd64.tar.gz new file mode 100644 index 0000000..d82d36c Binary files /dev/null and b/utils/jd_sign-linux-amd64.tar.gz differ diff --git a/utils/jd_sign-linux-arm.tar.gz b/utils/jd_sign-linux-arm.tar.gz new file mode 100644 index 0000000..f73994e Binary files /dev/null and b/utils/jd_sign-linux-arm.tar.gz differ diff --git a/utils/jd_sign-linux-arm64.tar.gz b/utils/jd_sign-linux-arm64.tar.gz new file mode 100644 index 0000000..a81d0f2 Binary files /dev/null and b/utils/jd_sign-linux-arm64.tar.gz differ diff --git a/utils/jd_sign-win-amd64.zip b/utils/jd_sign-win-amd64.zip new file mode 100644 index 0000000..9be8ce3 Binary files /dev/null and b/utils/jd_sign-win-amd64.zip differ diff --git a/utils/ld-linux-aarch64.tar.gz b/utils/ld-linux-aarch64.tar.gz new file mode 100644 index 0000000..d220257 Binary files /dev/null and b/utils/ld-linux-aarch64.tar.gz differ diff --git a/utils/libc.musl-aarch64.tar.gz b/utils/libc.musl-aarch64.tar.gz new file mode 100644 index 0000000..a2b8564 Binary files /dev/null and b/utils/libc.musl-aarch64.tar.gz differ