From de8798b5844ff6f5e5bbfbd769a3971f9198f6d3 Mon Sep 17 00:00:00 2001 From: caiyuchao Date: Fri, 18 Apr 2025 03:57:20 +0000 Subject: [PATCH] init project --- .gitignore | 3 + DEBIAN/control | 10 +++ opt/lic/bin/generatelic.sh | 115 ++++++++++++++++++++++++++++ opt/lic/bin/licensecontrol.sh | 58 ++++++++++++++ opt/lic/docker/docker-compose.yml | 12 +++ opt/lic/docker/dockerfile | 15 ++++ opt/lic/docs/License软件操作手册.md | 36 +++++++++ 7 files changed, 249 insertions(+) create mode 100644 .gitignore create mode 100755 DEBIAN/control create mode 100755 opt/lic/bin/generatelic.sh create mode 100755 opt/lic/bin/licensecontrol.sh create mode 100644 opt/lic/docker/docker-compose.yml create mode 100644 opt/lic/docker/dockerfile create mode 100644 opt/lic/docs/License软件操作手册.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e319458 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +etc +opt/lic/docker/jar + diff --git a/DEBIAN/control b/DEBIAN/control new file mode 100755 index 0000000..62960cd --- /dev/null +++ b/DEBIAN/control @@ -0,0 +1,10 @@ +Package: license-server +Version: 1.0.0 +Section: license-server +Prioritt: optional +Architecture: amd64 +Maintainer: wfc +Depends: +Description: License Server + + diff --git a/opt/lic/bin/generatelic.sh b/opt/lic/bin/generatelic.sh new file mode 100755 index 0000000..f2a51f9 --- /dev/null +++ b/opt/lic/bin/generatelic.sh @@ -0,0 +1,115 @@ +#!/bin/bash + +# 默认值(可选) +TIME="" +declare -a IPS=() # 声明为数组 +declare -a MACS=() # 声明为数组 +CPU="" +MB="" +IP="" +MAC="" +CODE="" + +# 解析命令行参数 +while [[ $# -gt 0 ]]; do + case "$1" in + -t|--t) + TIME="$2" + shift 2 # 移除选项和参数值 + ;; + -ip|--ip) + shift # 先移除 "-ip" 自身 + # 收集所有后续非选项参数(直到遇到下一个以 "-" 开头的参数) + while [[ $# -gt 0 ]] && [[ ! "$1" =~ ^- ]]; do + IPS+=("$1") + shift + done + # 检查是否至少有一个名字 + if [[ ${#IPS[@]} -eq 0 ]]; then + echo "错误:-ip 参数需要至少一个名字" + exit 1 + fi + ;; + -mac|--mac) + shift # 先移除 "-mac" 自身 + # 收集所有后续非选项参数(直到遇到下一个以 "-" 开头的参数) + while [[ $# -gt 0 ]] && [[ ! "$1" =~ ^- ]]; do + MACS+=("$1") + shift + done + # 检查是否至少有一个名字 + if [[ ${#MACS[@]} -eq 0 ]]; then + echo "错误:-mac 参数需要至少一个名字" + exit 1 + fi + ;; + -cpu|--cpu) + CPU="$2" + shift 2 + ;; + -code|--code) + CODE="$2" + shift 2 + ;; + -mb|--mb) + MB="$2" + shift 2 + ;; + *) # 未知选项 + echo "错误:未知选项 $1" + exit 1 + ;; + esac +done + +# 检查必需参数 +if [[ -z "$TIME" ]]; then + echo "错误:缺少 -t 参数" + exit 1 +fi + +# 输出结果(或执行其他操作) +echo "失效时间: $TIME" +echo "ip地址: ${IPS[*]}" +echo "mac地址: ${MACS[*]}" +echo "cpu序列号: $CPU" +echo "ip序列号: $MB" + +IP=$(printf "%s\",\"" "${IPS[@]}") +IP=${IP%\",\"} +if [ ! -z "$IP" ]; then + IP=\"$IP\" +fi +MAC=$(printf "%s\",\"" "${MACS[@]}") +MAC=${MAC%\",\"} +if [ ! -z "$MAC" ]; then + MAC=\"$MAC\" +fi + +RAW='{ + "expiryTime": "'$TIME'", + "ipAddress": ['$IP'], + "macAddress": ['$MAC'], + "cpuSerial": "'$CPU'", + "activationCode": "'$CODE'", + "mainBoardSerial": "'$MB'" +}' + +res=$(curl --location --request GET 'http://localhost:8070/license/generateLicense' \ +--header 'Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJ1c2VyX2lkIjoyLCJ1c2VyX2tleSI6IjE3NTE3MTBkLWI5YzItNGRjYy1iZGUwLTNlMTEyYjY2OGYzZCIsInBsYXRmb3JtIjoic3lzdGVtIiwidXNlcm5hbWUiOiJhZG1pbiJ9.NG7WLME_mH6nPhfAwwqHD3kzdlZi6Zn1B4t5BG_IMWRh9ClsoM0dqRH9agq7FKL4fn68cahbJS7EpFwCXNgOWA' \ +--header 'User-Agent: Apifox/1.0.0 (https://apifox.com)' \ +--header 'Content-Type: application/json' \ +--header 'Accept: */*' \ +--header 'Host: 192.168.2.249:8070' \ +--header 'Connection: keep-alive' \ +--data-raw "$RAW") + +echo $res +isok=$(echo $res | grep "result\":\"ok") +#echo "$RAW" +echo "------------------------" +if [ -z "$isok" ]; then + echo "生成license证书失败" +else + echo "生成license证书成功,license.lic文件在/opt/lic/docker/license目录下" +fi diff --git a/opt/lic/bin/licensecontrol.sh b/opt/lic/bin/licensecontrol.sh new file mode 100755 index 0000000..83f69d3 --- /dev/null +++ b/opt/lic/bin/licensecontrol.sh @@ -0,0 +1,58 @@ +#!/bin/bash + +WFCWorkDir=/opt/lic +DockerDir=${WFCWorkDir}/docker +DockerCompose=docker-compose +PIDFile=/run/licensecontrol.pid + +case "$1" in + start) + cd ${DockerDir} + if [ -z "$2" ]; then + ${DockerCompose} up -d + echo $! > ${PIDFile} + else + ${DockerCompose} up -d $2 + fi + ;; + stop) + cd ${DockerDir} + if [ -z "$2" ]; then + ${DockerCompose} stop + if [ -f ${PIDFile} ]; then + rm ${PIDFile} + fi + else + ${DockerCompose} stop $2 + fi + ;; + restart) + $0 stop $2 + sleep 1 + $0 start $2 + ;; + down) + cd ${DockerDir} + if [ -z "$2" ]; then + ${DockerCompose} down --rmi all + if [ -f ${PIDFile} ]; then + rm ${PIDFile} + fi + else + ${DockerCompose} down --rmi $2 + fi + ;; + status) + cd ${DockerDir} + if [ -z "$2" ]; then + ${DockerCompose} ps + else + ${DockerCompose} ps $2 + fi + ;; + *) + echo "License Server Service ... " + echo "Usage: $0 start|stop|restart|down|status" + exit 1 + ;; +esac diff --git a/opt/lic/docker/docker-compose.yml b/opt/lic/docker/docker-compose.yml new file mode 100644 index 0000000..bba95fa --- /dev/null +++ b/opt/lic/docker/docker-compose.yml @@ -0,0 +1,12 @@ +version: '3.8' +services: + wfc-license-serve: + # 使用前面创建的Dockerfile构建的镜像 + build: . + # 指定容器名(可选) + container_name: wfc-license-server + # 指定端口映射(例如,将容器的8080端口映射到主机的8080端口) + ports: + - "8070:8070" + volumes: + - ./license:/opt/license diff --git a/opt/lic/docker/dockerfile b/opt/lic/docker/dockerfile new file mode 100644 index 0000000..95cebca --- /dev/null +++ b/opt/lic/docker/dockerfile @@ -0,0 +1,15 @@ +# 基础镜像 +FROM openjdk:8-jre +# author +LABEL org.wfc.image.authors="wfc@wfc.org" + +# 挂载目录 +VOLUME /opt/wfc +# 创建目录 +RUN mkdir -p /opt/wfc +# 指定路径 +WORKDIR /opt/wfc +# 复制jar文件到路径 +COPY jar/wfc-license-server-1.0.0.jar /opt/wfc/wfc-license-server.jar +# 启动licese-serve服务 +ENTRYPOINT ["java","-jar","wfc-license-server.jar"] diff --git a/opt/lic/docs/License软件操作手册.md b/opt/lic/docs/License软件操作手册.md new file mode 100644 index 0000000..21149e9 --- /dev/null +++ b/opt/lic/docs/License软件操作手册.md @@ -0,0 +1,36 @@ +# Licence软件操作手册 + +## 项目介绍 + +License也就是版权许可证书,一般用于收费软件给付费用户提供的访问许可证明,License认证是一种基于授权许可的验证方式。应用程序在启动或运行过程中会检查License文件的有效性,如果检测到无效或过期的 License,应用程序将拒绝提供服务。 + +本项目用于生成license.lic证书,将证书供给用户使用。本项目不对外提供。 + +* 安装后目录树 + +```text +/opt/lic # work root directory +├── bin # shell script and binary file +├── docker # docker compose work directory +│   └── jar # jar package +└── docs # related document directory +``` + +* 启动项目 +```sh + cd /opt/lic/bin + sudo ./licensecontrol.sh start +``` + +* 生成证书 +```sh + cd /opt/lic/bin + sudo ./generatelic.sh -t "2026-05-31 23:59:59" -code "ud9BGY9yZzo/ekXvf5vXzS4RmyCXm9a7rBqiUy1q7x+0kIBSz6AJ98MtGQiojJLpFbYRD1RkP2UsbtGCxyyozTK69+OWukfq9zTMu2qCkXcajL+HhuF/0VJQDSWPjp+J" +``` +generatelic脚本参数说明: + -t 证书到期时间,必填,格式如"2026-05-31 23:59:59" + -code 激活码,可选,格式如"ud9BGY9yZzo/ekXvf5vXzS4RmyCXm9a7rBqiUy1q7x+0kIBSz6AJ98MtGQiojJLpFbYRD1RkP2UsbtGCxyyozTK69+OWukfq9zTMu2qCkXcajL+HhuF/0VaJQDSWPjp+J" +激活码用于指定机器使用证书,激活码在wanfi项目运行后自动生成在/opt/wfc/docker/conf/license/activation_code.txt + +证书生成在/opt/lic/docker/license/license.lic +将license.lic文件放入wanfi项目目录/opt/wfc/docker/conf/license/,wanfi项目才可使用 \ No newline at end of file