154 lines
4.9 KiB
Python
154 lines
4.9 KiB
Python
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
|
||
"""
|
||
Author: johlanse
|
||
Date: 2022/10/3 15:30
|
||
Description:: 用于一键安装study_xxqg️
|
||
"""
|
||
import io
|
||
import os
|
||
import platform
|
||
from functools import partial
|
||
|
||
try:
|
||
import requests
|
||
except ImportError as e:
|
||
print("requests依赖不存在,尝试安装依赖")
|
||
os.system("pip3 install requests")
|
||
import requests
|
||
|
||
if platform.system().lower() == "windows":
|
||
import zipfile
|
||
|
||
print = partial(print, flush=True)
|
||
|
||
|
||
def updateDependent() -> str:
|
||
"""
|
||
更新依赖的主函数
|
||
"""
|
||
system = platform.system().lower()
|
||
PyVersion_ = platform.python_version()
|
||
if system == "windows":
|
||
if platform.architecture()[0] == "64bit":
|
||
fileName = f"study_xxqg_windows_amd64.zip"
|
||
print(f"✅识别本机设备为Windows amd64,Py版本为{PyVersion_}\n")
|
||
else:
|
||
fileName = f"study_xxqg_windows_386.zip"
|
||
elif system == "darwin":
|
||
fileName = f"tlib_darwin_amd64.tar.gz"
|
||
print(f"✅识别本机设备为MacOS x86_64,Py版本为{PyVersion_}\n")
|
||
|
||
else:
|
||
|
||
framework = os.uname().machine
|
||
if framework == "x86_64":
|
||
fileName = f"study_xxqg_linux_amd64.tar.gz"
|
||
print(f"✅识别本机设备为Linux {framework},Py版本为{PyVersion_}\n")
|
||
elif framework == "aarch64" or framework == "arm64":
|
||
fileName = f"study_xxqg_linux_arm64.tar.gz"
|
||
print(f"✅识别本机设备为Linux {framework},Py版本为{PyVersion_}\n")
|
||
elif framework == "armv7l":
|
||
fileName = f"study_xxqg_linux_386.tar.gz"
|
||
print(f"✅识别本机设备为Linux {framework},Py版本为{PyVersion_}\n")
|
||
else:
|
||
fileName = f"study_xxqg_linux_amd64.tar.gz"
|
||
print(f"⚠️无法识别本机设备操作系统,默认本机设备为Linux x86_64,Py版本为{PyVersion_}\n")
|
||
return fileName
|
||
|
||
|
||
def last_version() -> str:
|
||
return requests.get("https://api.github.com/repos/johlanse/study_xxqg/releases/latest").json().get("tag_name")
|
||
|
||
|
||
def download(github: str, version: str, binaryName: str):
|
||
print("正在下载文件中,请耐心等待!!!")
|
||
content = requests.get(f"{github}/johlanse/study_xxqg/releases/download/{version}/{binaryName}").content
|
||
if platform.system().lower() == "windows":
|
||
with zipfile.ZipFile(io.BytesIO(content)) as zf:
|
||
data = zf.open("study_xxqg.exe")
|
||
with open("study_xxqg.exe", "wb") as f:
|
||
f.write(data.read())
|
||
else:
|
||
with open(binaryName, "wb") as f:
|
||
f.write(content)
|
||
os.system(f"tar xvf {binaryName}")
|
||
os.remove(binaryName)
|
||
|
||
|
||
def checkYesOrNo() -> bool:
|
||
data = input("请输入:").lower()
|
||
if data == "y" or data == "yes":
|
||
return True
|
||
else:
|
||
return False
|
||
|
||
|
||
def addSystemctl():
|
||
with open("/etc/systemd/system/study_xxqg.service", "w", encoding="utf-8") as f:
|
||
f.write(f'''[Unit]
|
||
Description=study_xxqg
|
||
Documentation=study_xxqg
|
||
After=network-online.target
|
||
Wants=network-online.target systemd-networkd-wait-online.service
|
||
|
||
[Service]
|
||
Restart=always
|
||
|
||
; User and group the process will run as.
|
||
User=root
|
||
Group=root
|
||
|
||
WorkingDirectory={os.getcwd()}
|
||
ExecStart={os.getcwd()}/study_xxqg
|
||
|
||
; Limit the number of file descriptors; see `man systemd.exec` for more limit settings.
|
||
LimitNOFILE=1048576
|
||
; Unmodified caddy is not expected to use more than that.
|
||
LimitNPROC=512
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target''')
|
||
|
||
|
||
def main():
|
||
github = "https://github.com"
|
||
version = last_version()
|
||
binaryName = updateDependent()
|
||
if os.path.exists("study_xxqg.exe") or os.path.exists("study_xxqg"):
|
||
print("检测到study_xxqg文件已经存在,是否跳过下载(y/n)")
|
||
if not checkYesOrNo():
|
||
download(github, version, binaryName)
|
||
print("已跳过下载")
|
||
else:
|
||
download(github, version, binaryName)
|
||
|
||
if not platform.system().lower() == "windows":
|
||
print("是否将study_xxqg加入系统启动system命令(y/n)")
|
||
if checkYesOrNo():
|
||
addSystemctl()
|
||
os.system("systemctl enable study_xxqg")
|
||
print("已加入开机自启动,输入 systemctl start study_xxqg即可后台启动")
|
||
print("开始安装浏览器依赖")
|
||
try:
|
||
os.mkdir("config")
|
||
except FileExistsError as e:
|
||
pass
|
||
if platform.system().lower() == "windows":
|
||
os.system("study_xxqg --init")
|
||
else:
|
||
os.system("./study_xxqg --init")
|
||
os.system("./tools/driver/ms-playwright-go/1.20.0-beta-1647057403000/playwright install-deps")
|
||
print("是否启动study_xxqg? (y/n)")
|
||
if checkYesOrNo():
|
||
if platform.system().lower() == "windows":
|
||
os.system("study_xxqg.exe")
|
||
else:
|
||
os.system("chmod -R 777 ./study_xxqg")
|
||
os.system("./study_xxqg")
|
||
|
||
|
||
if __name__ == '__main__':
|
||
main()
|