study_xxqg/docs/study_xxqg_install.py

154 lines
4.9 KiB
Python
Raw Normal View History

2022-10-03 13:34:56 +00:00
#!/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()