From a8502e30b3477a94d6c3e7ccc6d1ad595886fc1f Mon Sep 17 00:00:00 2001 From: Mr Chen Date: Wed, 9 Oct 2024 22:37:43 +0800 Subject: [PATCH] alist init --- plugins/alist/ico.png | Bin 0 -> 42933 bytes plugins/alist/index.html | 30 +++ plugins/alist/index.py | 263 +++++++++++++++++++++++++ plugins/alist/info.json | 17 ++ plugins/alist/init.d/alist.service.tpl | 12 ++ plugins/alist/init.d/alist.tpl | 46 +++++ plugins/alist/install.sh | 90 +++++++++ plugins/alist/js/alist.js | 71 +++++++ 8 files changed, 529 insertions(+) create mode 100644 plugins/alist/ico.png create mode 100755 plugins/alist/index.html create mode 100755 plugins/alist/index.py create mode 100755 plugins/alist/info.json create mode 100644 plugins/alist/init.d/alist.service.tpl create mode 100644 plugins/alist/init.d/alist.tpl create mode 100755 plugins/alist/install.sh create mode 100755 plugins/alist/js/alist.js diff --git a/plugins/alist/ico.png b/plugins/alist/ico.png new file mode 100644 index 0000000000000000000000000000000000000000..b1d76cb4f8670f1b132894418e9409f1c740542c GIT binary patch literal 42933 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%0DDDGexP%#LXI>xxf!P6tAo;AJ01K?~U-tF^ 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 +.overflow_hide { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + vertical-align: middle; +} + + +
+
+
+
+

服务

+

自启动

+

配置修改

+

运行日志

+

相关说明

+ +
+
+
+
+
+
+ \ No newline at end of file diff --git a/plugins/alist/index.py b/plugins/alist/index.py new file mode 100755 index 0000000000..beb263bd6d --- /dev/null +++ b/plugins/alist/index.py @@ -0,0 +1,263 @@ +# coding:utf-8 + +import sys +import io +import os +import time +import re + +sys.path.append(os.getcwd() + "/class/core") +import mw + +app_debug = False +if mw.isAppleSystem(): + app_debug = True + + +def getPluginName(): + return 'alist' + + +def getPluginDir(): + return mw.getPluginDir() + '/' + getPluginName() + + +def getServerDir(): + return mw.getServerDir() + '/' + getPluginName() + + +def getInitDFile(): + current_os = mw.getOs() + if current_os == 'darwin': + return '/tmp/' + getPluginName() + + if current_os.startswith('freebsd'): + return '/etc/rc.d/' + getPluginName() + + return '/etc/init.d/' + getPluginName() + + +def getInitDTpl(): + path = getPluginDir() + "/init.d/" + getPluginName() + ".tpl" + return path + + +def getArgs(): + args = sys.argv[3:] + tmp = {} + args_len = len(args) + + if args_len == 1: + t = args[0].strip('{').strip('}') + if t.strip() == '': + tmp = [] + else: + t = t.split(':') + tmp[t[0]] = t[1] + tmp[t[0]] = t[1] + elif args_len > 1: + for i in range(len(args)): + t = args[i].split(':') + tmp[t[0]] = t[1] + return tmp + +def checkArgs(data, ck=[]): + for i in range(len(ck)): + if not ck[i] in data: + return (False, mw.returnJson(False, '参数:(' + ck[i] + ')没有!')) + return (True, mw.returnJson(True, 'ok')) + + +def getConf(): + path = getServerDir() + "/data/config.json" + return path + +def configTpl(): + path = getPluginDir() + '/tpl' + pathFile = os.listdir(path) + tmp = [] + for one in pathFile: + file = path + '/' + one + tmp.append(file) + return mw.getJson(tmp) + + +def readConfigTpl(): + args = getArgs() + data = checkArgs(args, ['file']) + if not data[0]: + return data[1] + + content = mw.readFile(args['file']) + content = contentReplace(content) + return mw.returnJson(True, 'ok', content) + + +def status(): + data = mw.execShell( + "ps aux|grep alist |grep -v grep | grep -v python | grep -v mdserver-web | awk '{print $2}'") + + if data[0] == '': + return 'stop' + return 'start' + +def contentReplace(content): + service_path = mw.getServerDir() + content = content.replace('{$ROOT_PATH}', mw.getRootDir()) + content = content.replace('{$SERVER_PATH}', service_path) + content = content.replace('{$SERVER_APP}', service_path + '/'+getPluginName()) + return content + +def initDreplace(): + + file_tpl = getInitDTpl() + service_path = os.path.dirname(os.getcwd()) + + initD_path = getServerDir() + '/init.d' + if not os.path.exists(initD_path): + os.mkdir(initD_path) + file_bin = initD_path + '/' + getPluginName() + + # initd replace + if not os.path.exists(file_bin): + content = mw.readFile(file_tpl) + content = content.replace('{$SERVER_PATH}', service_path) + mw.writeFile(file_bin, content) + mw.execShell('chmod +x ' + file_bin) + + # systemd + systemDir = mw.systemdCfgDir() + systemService = systemDir + '/' + getPluginName() + '.service' + if os.path.exists(systemDir) and not os.path.exists(systemService): + systemServiceTpl = getPluginDir() + '/init.d/' + getPluginName() + '.service.tpl' + service_path = mw.getServerDir() + se_content = mw.readFile(systemServiceTpl) + se_content = se_content.replace('{$SERVER_PATH}', service_path) + mw.writeFile(systemService, se_content) + mw.execShell('systemctl daemon-reload') + + return file_bin + + +def alistOp(method): + file = initDreplace() + + current_os = mw.getOs() + if current_os == "darwin": + data = mw.execShell(file + ' ' + method) + if data[1] == '': + return 'ok' + return data[1] + + if current_os.startswith("freebsd"): + data = mw.execShell('service ' + getPluginName() + ' ' + method) + if data[1] == '': + return 'ok' + return data[1] + + data = mw.execShell('systemctl ' + method + ' ' + getPluginName()) + if data[1] == '': + return 'ok' + return data[1] + + +def start(): + return alistOp('start') + + +def stop(): + return alistOp('stop') + + +def restart(): + status = alistOp('restart') + return status + + +def reload(): + return alistOp('reload') + + +def initdStatus(): + current_os = mw.getOs() + if current_os == 'darwin': + return "Apple Computer does not support" + + if current_os.startswith('freebsd'): + initd_bin = getInitDFile() + if os.path.exists(initd_bin): + return 'ok' + + shell_cmd = 'systemctl status ' + \ + getPluginName() + ' | grep loaded | grep "enabled;"' + data = mw.execShell(shell_cmd) + if data[0] == '': + return 'fail' + return 'ok' + + +def initdInstall(): + current_os = mw.getOs() + if current_os == 'darwin': + return "Apple Computer does not support" + + # freebsd initd install + if current_os.startswith('freebsd'): + import shutil + source_bin = initDreplace() + initd_bin = getInitDFile() + shutil.copyfile(source_bin, initd_bin) + mw.execShell('chmod +x ' + initd_bin) + mw.execShell('sysrc ' + getPluginName() + '_enable="YES"') + return 'ok' + + mw.execShell('systemctl enable ' + getPluginName()) + return 'ok' + + +def initdUinstall(): + current_os = mw.getOs() + if current_os == 'darwin': + return "Apple Computer does not support" + + if current_os.startswith('freebsd'): + initd_bin = getInitDFile() + os.remove(initd_bin) + mw.execShell('sysrc ' + getPluginName() + '_enable="NO"') + return 'ok' + + mw.execShell('systemctl disable ' + getPluginName()) + return 'ok' + + +def runLog(): + return getServerDir() + '/data/log/log.log' + +if __name__ == "__main__": + func = sys.argv[1] + if func == 'status': + print(status()) + elif func == 'start': + print(start()) + elif func == 'stop': + print(stop()) + elif func == 'restart': + print(restart()) + elif func == 'reload': + print(reload()) + elif func == 'initd_status': + print(initdStatus()) + elif func == 'initd_install': + print(initdInstall()) + elif func == 'initd_uninstall': + print(initdUinstall()) + elif func == 'conf': + print(getConf()) + elif func == 'run_log': + print(runLog()) + elif func == 'config_tpl': + print(configTpl()) + elif func == 'read_config_tpl': + print(readConfigTpl()) + else: + print('error') diff --git a/plugins/alist/info.json b/plugins/alist/info.json new file mode 100755 index 0000000000..9a06ad35d4 --- /dev/null +++ b/plugins/alist/info.json @@ -0,0 +1,17 @@ +{ + "sort": 7, + "ps": "一个支持多种存储的文件列表程序", + "name": "alist", + "title": "Alist", + "shell": "install.sh", + "versions":["3.37.4"], + "tip": "soft", + "checks": "server/alist", + "path": "server/alist", + "display": 1, + "author": "alist", + "date": "2022-10-09", + "home": "https://alist.nn.ci", + "type": 0, + "pid": "5" +} diff --git a/plugins/alist/init.d/alist.service.tpl b/plugins/alist/init.d/alist.service.tpl new file mode 100644 index 0000000000..95ef9d1cd6 --- /dev/null +++ b/plugins/alist/init.d/alist.service.tpl @@ -0,0 +1,12 @@ +[Unit] +Description=A file list program that supports multiple storage +After=network.target + +[Service] +Type=forking +ExecStart={$SERVER_PATH}/alist/alist server +ExecReload=/bin/kill -USR2 $MAINPID +Restart=on-failure + +[Install] +WantedBy=multi-user.target \ No newline at end of file diff --git a/plugins/alist/init.d/alist.tpl b/plugins/alist/init.d/alist.tpl new file mode 100644 index 0000000000..ae3c862733 --- /dev/null +++ b/plugins/alist/init.d/alist.tpl @@ -0,0 +1,46 @@ +#!/bin/sh +# chkconfig: 2345 55 25 +# description: alist Service + +### BEGIN INIT INFO +# Provides: alist +# Required-Start: $all +# Required-Stop: $all +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: starts alist +# Description: starts the MDW-Web +### END INIT INFO + +# Simple alist init.d script conceived to work on Linux systems +# as it does use of the /proc filesystem. + +app_start(){ + echo "Starting alist server..." + cd {$SERVER_PATH}/alist + ./alist server >> {$SERVER_PATH}/alist/logs.pl 2>&1 & +} + +app_stop(){ + echo "dztasks stopped" + ps -ef| grep alist | grep -v grep | grep -v python | grep -v sh | awk '{print $2}'| xargs kill +} + + +case "$1" in + start) + app_start + ;; + stop) + app_stop + ;; + restart|reload) + app_stop + sleep 0.3 + app_start + ;; + *) + echo "Please use start or stop as first argument" + ;; +esac + diff --git a/plugins/alist/install.sh b/plugins/alist/install.sh new file mode 100755 index 0000000000..be75f6ac83 --- /dev/null +++ b/plugins/alist/install.sh @@ -0,0 +1,90 @@ +#!/bin/bash +PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin:/opt/homebrew/bin +export PATH + +curPath=`pwd` +rootPath=$(dirname "$curPath") +rootPath=$(dirname "$rootPath") +serverPath=$(dirname "$rootPath") + +# cd /Users/midoks/Desktop/mwdev/server/mdserver-web/plugins/alist && bash install.sh install 3.37.4 + +install_tmp=${rootPath}/tmp/mw_install.pl +VERSION=$2 + +sysArch=`arch` +sysName=`uname` + +ALIST_ARCH_NAME=amd64 +if [ "$sysArch" == "arm64" ];then + ALIST_ARCH_NAME=arm64 +elif [ "$sysArch" == "x86_64" ]; then + ALIST_ARCH_NAME=amd64 +elif [ "$sysArch" == "aarch64" ]; then + ALIST_ARCH_NAME=aarch64 +fi + +ALIST_NAME=linux +if [ "$sysName" == "Darwin" ];then + ALIST_NAME=darwin +fi + +Install_App() +{ + echo '正在安装脚本文件...' + + mkdir -p $serverPath/source + mkdir -p $serverPath/source/alist + + FILE_TGZ=alist-${ALIST_NAME}-${ALIST_ARCH_NAME}.tar.gz + + ALIST_DIR=$serverPath/source/alist + + if [ ! -f $ALIST_DIR/${FILE_TGZ} ];then + wget -O $ALIST_DIR/${FILE_TGZ} https://github.com/alist-org/alist/releases/download/v${VERSION}/${FILE_TGZ} + fi + + mkdir -p $serverPath/alist + + cd $ALIST_DIR && tar -zxvf ${FILE_TGZ} -C $serverPath/alist + echo "${VERSION}" > $serverPath/alist/version.pl + + cd ${rootPath} && python3 ${rootPath}/plugins/alist/index.py start + cd ${rootPath} && python3 ${rootPath}/plugins/alist/index.py initd_install + + echo '安装完成' +} + +Uninstall_App() +{ + if [ -f /usr/lib/systemd/system/alist.service ];then + systemctl stop alist + systemctl disable alist + rm -rf /usr/lib/systemd/system/alist.service + systemctl daemon-reload + fi + + if [ -f /lib/systemd/system/alist.service ];then + systemctl stop alist + systemctl disable alist + rm -rf /lib/systemd/system/alist.service + systemctl daemon-reload + fi + + if [ -f $serverPath/alist/initd/alist ];then + $serverPath/alist/initd/alist stop + fi + + if [ -d $serverPath/alist ];then + rm -rf $serverPath/alist + fi + + echo "卸载alist成功" +} + +action=$1 +if [ "${1}" == 'install' ];then + Install_App +else + Uninstall_App +fi diff --git a/plugins/alist/js/alist.js b/plugins/alist/js/alist.js new file mode 100755 index 0000000000..e662a133d0 --- /dev/null +++ b/plugins/alist/js/alist.js @@ -0,0 +1,71 @@ +function alistPost(method, version, args,callback){ + var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 }); + + var req_data = {}; + req_data['name'] = 'alist'; + req_data['func'] = method; + req_data['version'] = version; + + if (typeof(args) == 'string'){ + req_data['args'] = JSON.stringify(toArrayObject(args)); + } else { + req_data['args'] = JSON.stringify(args); + } + + $.post('/plugins/run', req_data, function(data) { + layer.close(loadT); + if (!data.status){ + //错误展示10S + layer.msg(data.msg,{icon:0,time:2000,shade: [10, '#000']}); + return; + } + + if(typeof(callback) == 'function'){ + callback(data); + } + },'json'); +} + +function alistPostCallbak(method, version, args,callback){ + var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 }); + + var req_data = {}; + req_data['name'] = 'alist'; + req_data['func'] = method; + args['version'] = version; + + if (typeof(args) == 'string'){ + req_data['args'] = JSON.stringify(toArrayObject(args)); + } else { + req_data['args'] = JSON.stringify(args); + } + + $.post('/plugins/callback', req_data, function(data) { + layer.close(loadT); + if (!data.status){ + layer.msg(data.msg,{icon:0,time:2000,shade: [0.3, '#000']}); + return; + } + + if(typeof(callback) == 'function'){ + callback(data); + } + },'json'); +} + + +function alistReadme(){ + var cmd_01 = '/www/server/redis/bin/redis-cli --cluster create 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 --cluster-replicas 0'; + var cmd_02 = '/www/server/redis/bin/redis-cli --cluster create 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 --cluster-replicas 1'; + + + var readme = '
    '; + readme += '
  • 集群创建1
  • '; + readme += '
  • '+cmd_01+'
  • '; + readme += '
  • 集群创建2
  • '; + readme += '
  • '+cmd_02+'
  • '; + readme += '
'; + + $('.soft-man-con').html(readme); +} +