From 61302b0fe028a3f5a00ed50cf014816be05d359f Mon Sep 17 00:00:00 2001 From: "qcqcqc@wsl" <1220204124@zust.edu.cn> Date: Tue, 29 Apr 2025 13:34:59 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=BB=98=E8=AE=A4endpoint?= =?UTF-8?q?=EF=BC=8C=E5=AE=8C=E5=96=84=E5=AE=89=E8=A3=85=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- generate_bash_product_id.sh | 52 +++++++++++++++++++++ install_product_id_generator.sh | 80 +++++++++++++++++---------------- reg.sh | 65 +++++++++++++++++++++++++++ shared/pkg/client/client.go | 2 +- 4 files changed, 160 insertions(+), 39 deletions(-) create mode 100644 generate_bash_product_id.sh create mode 100755 reg.sh diff --git a/generate_bash_product_id.sh b/generate_bash_product_id.sh new file mode 100644 index 0000000..b026c41 --- /dev/null +++ b/generate_bash_product_id.sh @@ -0,0 +1,52 @@ +#!/bin/bash + +set -e + +UUID_FILE="/etc/bash_product/BASH_PRODUCT_ID" +REGISTER_SERVER_URL="https://bash-backend.zustmyy.top/endpoint/register" + +# 如果 UUID 文件不存在,就生成 +if [ ! -f "$UUID_FILE" ]; then + UUID=$(cat /proc/sys/kernel/random/uuid) + echo "$UUID" > "$UUID_FILE" + chmod 644 "$UUID_FILE" + + # 收集硬件信息 + CPU_MODEL=$(lscpu | grep "Model name" | awk -F: '{print $2}' | sed 's/^ *//') + ARCHITECTURE=$(uname -m) + PCIE_DEVICES_RAW=$(timeout 3s lspci || true) + + if [ -z "$CPU_MODEL" ] || [ -z "$ARCHITECTURE" ]; then + echo "❌ 无法收集到CPU或系统架构信息,注册终止" + exit 1 + fi + + if [ -z "$PCIE_DEVICES_RAW" ]; then + PCIE_DEVICES_JSON="[]" + else + PCIE_DEVICES_JSON="[" + while IFS= read -r line; do + ESCAPED_LINE=$(echo "$line" | sed 's/"/\\"/g') + PCIE_DEVICES_JSON+="\"$ESCAPED_LINE\"," + done <<< "$PCIE_DEVICES_RAW" + PCIE_DEVICES_JSON="${PCIE_DEVICES_JSON%,}]" + fi + + # 发送注册 + JSON_PAYLOAD=$(cat < "$SYSTEMD_SERVICE_FILE" < "$SYSTEMD_SERVICE_FILE" < "\$UUID_FILE"; \ - chmod 644 "\$UUID_FILE"; \ - fi' +ExecStart=$TARGET_SCRIPT [Install] WantedBy=multi-user.target EOL - echo "✅ systemd 服务文件已创建。" -fi +echo "✅ 写入 systemd 服务文件 $SYSTEMD_SERVICE_FILE" -# 1. 配置PAM环境变量 -echo "配置 PAM 环境变量..." +# 配置 PAM 环境变量 if ! grep -q "BASH_PRODUCT_ID" /etc/security/pam_env.conf; then echo 'BASH_PRODUCT_ID DEFAULT="unset" OVERRIDE=`cat /etc/bash_product/BASH_PRODUCT_ID 2>/dev/null || echo "unset"`' >> /etc/security/pam_env.conf + echo "✅ 配置 PAM 环境变量 (/etc/security/pam_env.conf)" fi -# 2. 配置全局环境变量 -echo "配置 /etc/environment..." +# 配置 /etc/environment grep -v "BASH_PRODUCT_ID" /etc/environment > /etc/environment.tmp || true echo 'BASH_PRODUCT_ID=$(cat /etc/bash_product/BASH_PRODUCT_ID 2>/dev/null || echo "unset")' >> /etc/environment.tmp mv /etc/environment.tmp /etc/environment +echo "✅ 配置 /etc/environment" -# 3. 配置profile.d脚本 -echo "配置 profile.d 脚本..." +# 配置 /etc/profile.d 脚本 cat > /etc/profile.d/bash-product-id.sh <<'EOL' #!/bin/bash if [ -f "/etc/bash_product/BASH_PRODUCT_ID" ]; then @@ -64,9 +69,9 @@ else fi EOL chmod +x /etc/profile.d/bash-product-id.sh +echo "✅ 配置 /etc/profile.d/bash-product-id.sh" -# 4. 配置bash.bashrc -echo "配置 /etc/bash.bashrc..." +# 配置 bash.bashrc BASHRC_CONFIG=' # BASH_PRODUCT_ID environment variable if [ -f "/etc/bash_product/BASH_PRODUCT_ID" ]; then @@ -74,27 +79,26 @@ if [ -f "/etc/bash_product/BASH_PRODUCT_ID" ]; then else export BASH_PRODUCT_ID="unset" fi' - if ! grep -q "BASH_PRODUCT_ID" /etc/bash.bashrc; then echo "$BASHRC_CONFIG" >> /etc/bash.bashrc + echo "✅ 配置 /etc/bash.bashrc" fi -# 重新加载 systemd 配置并启用服务 +# 重载 systemd & 启用服务 systemctl daemon-reload systemctl enable "$SERVICE_NAME" systemctl start "$SERVICE_NAME" +echo "✅ systemd 服务已启用并启动" + +# 应用环境变量 +source /etc/profile.d/bash-product-id.sh echo "" -echo "✅ 配置完成!" -echo "当前设置:" +echo "🎉 安装完成!当前 BASH_PRODUCT_ID 设置:" if [ -f "$UUID_FILE" ]; then - echo "BASH_PRODUCT_ID=$(cat $UUID_FILE)" -else + BASH_PRODUCT_ID=$(cat "$UUID_FILE") + echo "BASH_PRODUCT_ID=$BASH_PRODUCT_ID" +else echo "BASH_PRODUCT_ID=unset" fi echo "" -echo "重新登录终端后环境变量将自动加载。" -echo "立即生效请执行以下任一命令:" -echo "source /etc/bash.bashrc" -echo "source /etc/profile.d/bash-product-id.sh" -echo "source /etc/environment" diff --git a/reg.sh b/reg.sh new file mode 100755 index 0000000..123c7d4 --- /dev/null +++ b/reg.sh @@ -0,0 +1,65 @@ +#!/bin/bash + +# 检查是否以管理员(root)权限运行(如需要可以取消注释) +if [ "$EUID" -ne 0 ]; then + echo "请以管理员权限运行此脚本(sudo)" + exit 1 +fi + +# 收集CPU和系统架构信息 +CPU_MODEL=$(lscpu | grep "Model name" | awk -F: '{print $2}' | sed 's/^ *//') +ARCHITECTURE=$(uname -m) + +# 收集PCIe设备信息,加超时保护(3秒) +PCIE_DEVICES_RAW=$(timeout 3s lspci) + +# 检查是否成功获取 +if [ -z "$CPU_MODEL" ] || [ -z "$ARCHITECTURE" ]; then + echo "无法收集到CPU或系统架构信息" + exit 1 +fi + +# 处理PCIe设备列表成JSON数组格式 +if [ -z "$PCIE_DEVICES_RAW" ]; then + PCIE_DEVICES_JSON="[]" +else + PCIE_DEVICES_JSON="[" + while IFS= read -r line; do + # 对每一行进行JSON转义 + ESCAPED_LINE=$(echo "$line" | sed 's/"/\\"/g') + PCIE_DEVICES_JSON+="\"$ESCAPED_LINE\"," + done <<< "$PCIE_DEVICES_RAW" + # 去掉最后一个逗号 + PCIE_DEVICES_JSON="${PCIE_DEVICES_JSON%,}]" +fi + +# 检查 BASH_PRODUCT_ID 是否为空 +if [ -z "$BASH_PRODUCT_ID" ]; then + echo "错误:环境变量 BASH_PRODUCT_ID 未设置或为空" + exit 1 +fi + +# 将整个payload组装成JSON +JSON_PAYLOAD=$(cat <