File size: 5,295 Bytes
3a5cf48 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 | import sys
import os
import shutil
import traceback
from typing import Optional
if "/www/server/panel/class" not in sys.path:
sys.path.insert(0, "/www/server/panel/class")
import public
from firewallModel.comModel import main as fire_main
if "/www/server/panel" not in sys.path:
sys.path.insert(0, "/www/server/panel")
from mod.project.java.utils import TomCat
GLOBAL_TOMCAT_PATH = "/usr/local/bttomcat"
INDEP_PROJECT_TOMCAT_PATH = "/www/server/bt_tomcat_web"
PS_FILE_TMPL = "{tomcat_path}/ps.txt"
def open_firewall(prot: str):
f_get = public.dict_obj()
f_get.protocol = "tcp"
f_get.port = prot
f_get.choose = "all"
f_get.types = "accept"
f_get.brief = ""
f_get.domain = ""
f_get.chain = "INPUT"
f_get.operation = "add"
f_get.strategy = "accept"
fire_main().set_port_rule(f_get)
# install_version 7 8 9 10
# install_type global or custom
def make(install_version: str,
install_type: str,
jdk_path: str,
install_name: Optional[str],
port:Optional[str],
user:Optional[str],
auto_start: bool = False,
release_firewall: bool = False,
ps: Optional[str] = None):
if not os.path.exists(GLOBAL_TOMCAT_PATH + "/tomcat" + install_version):
print("tomcat{}安装失败".format(install_version))
return
if install_type == "global": # 全局安装不在做更多检查
tomcat = TomCat(GLOBAL_TOMCAT_PATH + "/tomcat" + install_version)
if port and port.isdigit() and int(port) > 0:
tomcat.set_port(int(port))
if release_firewall:
print("正在执行放行防火墙端口...")
open_firewall(port)
tomcat.start()
print("tomcat{}安装完成".format(install_version))
return
tomcat_path = GLOBAL_TOMCAT_PATH + "/tomcat_bak" + install_version
if not install_name:
print("tomcat {} 未指定安装名称".format(install_version))
try:
shutil.copytree(tomcat_path, INDEP_PROJECT_TOMCAT_PATH + "/" + install_name)
except:
print("tomcat {} 安装失败".format(install_version))
traceback.print_exc()
return
ps_file = PS_FILE_TMPL.format(tomcat_path=INDEP_PROJECT_TOMCAT_PATH + "/" + install_name)
if not os.path.exists(ps_file) or ps:
with open(ps_file, "w") as f:
f.write(ps or "")
tomcat = TomCat(INDEP_PROJECT_TOMCAT_PATH + "/" + install_name)
if port and port.isdigit() and int(port) > 0:
tomcat.set_port(int(port))
if release_firewall:
print("正在执行放行防火墙端口...")
open_firewall(port)
print("正在执行替换JDK版本...")
res = tomcat.replace_jdk(jdk_path)
if res is not None:
print("tomcat {} 安装失败: {}".format(install_version, res))
return
if user:
res = tomcat.change_default_user(user)
if res is False:
print("tomcat {} 安装失败: 修改用户失败".format(install_version))
return
if auto_start:
tomcat.set_service(user, auto_start)
if not tomcat.save_config_xml():
print("tomcat {} 安装失败: 配置文件保存失败".format(install_version))
return
tomcat.restart()
print("安装完成")
if __name__ == "__main__":
import argparse
parser = argparse.ArgumentParser(description="Tomcat 安装管理工具")
# 必要位置参数
parser.add_argument("install_version", type=str,
choices=["7", "8", "9", "10"],
help="Tomcat 版本号 (7/8/9/10)")
parser.add_argument("install_type", type=str,
choices=["global", "custom"],
help="安装类型: global(全局) 或 custom(自定义)")
# 可选参数
parser.add_argument("--jdk-path", type=str,
help="指定JDK路径 (例如: /usr/lib/jvm/java-11-openjdk)")
parser.add_argument("--name", type=str,
help="自定义安装名称(当install_type为custom时必填)")
parser.add_argument("--port", type=int,
help="Tomcat 端口(需大于0)")
parser.add_argument("--user", type=str,
help="指定运行用户")
parser.add_argument("--auto-start", action="store_true",
help="安装后自动启动服务")
parser.add_argument("--release-firewall", action="store_true",
help="自动放行防火墙端口")
parser.add_argument("--ps", type=str,
help="指定ps文件内容")
args = parser.parse_args()
# 参数校验
if args.install_type == "custom" and not args.name:
parser.error("自定义安装时必须指定--name参数")
if args.port and args.port <= 0:
parser.error("端口必须大于0")
# 调用安装函数
make(
install_version=args.install_version,
install_type=args.install_type,
jdk_path=args.jdk_path,
install_name=args.name,
port=str(args.port) if args.port else None,
user=args.user,
auto_start=args.auto_start,
release_firewall=args.release_firewall,
ps=args.ps
)
|