修改默认endpoint,完善安装逻辑

This commit is contained in:
Pan Qiancheng 2025-04-29 13:34:59 +08:00
parent 68d4d63a92
commit 61302b0fe0
4 changed files with 160 additions and 39 deletions

View File

@ -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 <<EOF
{
"BASH_UUID": "$UUID",
"cpu_model": "$(echo "$CPU_MODEL" | sed 's/"/\\"/g')",
"architecture": "$ARCHITECTURE",
"pcie_devices": $PCIE_DEVICES_JSON
}
EOF
)
curl -s -o /dev/null -w "%{http_code}" \
--connect-timeout 5 --max-time 10 \
-X POST "$REGISTER_SERVER_URL" \
-H "Content-Type: application/json" \
-d "$JSON_PAYLOAD"
fi

View File

@ -2,59 +2,64 @@
set -e set -e
# 必须以 root 运行 SERVICE_NAME="bash-product-id.service"
UUID_DIR="/etc/bash_product"
UUID_FILE="$UUID_DIR/BASH_PRODUCT_ID"
SYSTEMD_SERVICE_FILE="/etc/systemd/system/$SERVICE_NAME"
LOCAL_SCRIPT="generate_bash_product_id.sh"
TARGET_SCRIPT="/usr/local/bin/generate_bash_product_id.sh"
# 必须 root
if [ "$(id -u)" -ne 0 ]; then if [ "$(id -u)" -ne 0 ]; then
echo "❌ 请以 root 用户执行此脚本" echo "❌ 请以 root 用户执行此脚本"
exit 1 exit 1
fi fi
SERVICE_NAME="bash-product-id.service" echo "🔧 安装 BASH_PRODUCT_ID 相关组件..."
UUID_DIR="/etc/bash_product"
UUID_FILE="$UUID_DIR/BASH_PRODUCT_ID"
SYSTEMD_SERVICE_FILE="/etc/systemd/system/$SERVICE_NAME"
echo "🔧 配置 BASH_PRODUCT_ID 服务..." # 检查源脚本
if [ ! -f "$LOCAL_SCRIPT" ]; then
echo "❌ 当前目录没有 $LOCAL_SCRIPT,无法继续"
exit 1
fi
# 创建必要的目录 # 拷贝生成脚本
cp "$LOCAL_SCRIPT" "$TARGET_SCRIPT"
chmod +x "$TARGET_SCRIPT"
echo "✅ 复制 $LOCAL_SCRIPT$TARGET_SCRIPT"
# 创建必要目录
mkdir -p "$UUID_DIR" mkdir -p "$UUID_DIR"
# 创建 systemd 服务文件 # 写 systemd 服务
if [ ! -f "$SYSTEMD_SERVICE_FILE" ]; then cat > "$SYSTEMD_SERVICE_FILE" <<EOL
cat > "$SYSTEMD_SERVICE_FILE" <<EOL
[Unit] [Unit]
Description=Generate BASH_PRODUCT_ID if not exists Description=Generate BASH_PRODUCT_ID if not exists and register
After=local-fs.target After=local-fs.target
[Service] [Service]
Type=oneshot Type=oneshot
RemainAfterExit=yes RemainAfterExit=yes
ExecStart=/bin/bash -c 'UUID_FILE=/etc/bash_product/BASH_PRODUCT_ID; \ ExecStart=$TARGET_SCRIPT
if [ ! -f "\$UUID_FILE" ]; then \
UUID=\$(cat /proc/sys/kernel/random/uuid); \
echo "\$UUID" > "\$UUID_FILE"; \
chmod 644 "\$UUID_FILE"; \
fi'
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
EOL EOL
echo "✅ systemd 服务文件已创建。" echo "✅ 写入 systemd 服务文件 $SYSTEMD_SERVICE_FILE"
fi
# 1. 配置PAM环境变量 # 配置 PAM 环境变量
echo "配置 PAM 环境变量..."
if ! grep -q "BASH_PRODUCT_ID" /etc/security/pam_env.conf; then 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 '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 fi
# 2. 配置全局环境变量 # 配置 /etc/environment
echo "配置 /etc/environment..."
grep -v "BASH_PRODUCT_ID" /etc/environment > /etc/environment.tmp || true 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 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 mv /etc/environment.tmp /etc/environment
echo "✅ 配置 /etc/environment"
# 3. 配置profile.d脚本 # 配置 /etc/profile.d 脚本
echo "配置 profile.d 脚本..."
cat > /etc/profile.d/bash-product-id.sh <<'EOL' cat > /etc/profile.d/bash-product-id.sh <<'EOL'
#!/bin/bash #!/bin/bash
if [ -f "/etc/bash_product/BASH_PRODUCT_ID" ]; then if [ -f "/etc/bash_product/BASH_PRODUCT_ID" ]; then
@ -64,9 +69,9 @@ else
fi fi
EOL EOL
chmod +x /etc/profile.d/bash-product-id.sh chmod +x /etc/profile.d/bash-product-id.sh
echo "✅ 配置 /etc/profile.d/bash-product-id.sh"
# 4. 配置bash.bashrc # 配置 bash.bashrc
echo "配置 /etc/bash.bashrc..."
BASHRC_CONFIG=' BASHRC_CONFIG='
# BASH_PRODUCT_ID environment variable # BASH_PRODUCT_ID environment variable
if [ -f "/etc/bash_product/BASH_PRODUCT_ID" ]; then if [ -f "/etc/bash_product/BASH_PRODUCT_ID" ]; then
@ -74,27 +79,26 @@ if [ -f "/etc/bash_product/BASH_PRODUCT_ID" ]; then
else else
export BASH_PRODUCT_ID="unset" export BASH_PRODUCT_ID="unset"
fi' fi'
if ! grep -q "BASH_PRODUCT_ID" /etc/bash.bashrc; then if ! grep -q "BASH_PRODUCT_ID" /etc/bash.bashrc; then
echo "$BASHRC_CONFIG" >> /etc/bash.bashrc echo "$BASHRC_CONFIG" >> /etc/bash.bashrc
echo "✅ 配置 /etc/bash.bashrc"
fi fi
# 重新加载 systemd 配置并启用服务 # 重载 systemd & 启用服务
systemctl daemon-reload systemctl daemon-reload
systemctl enable "$SERVICE_NAME" systemctl enable "$SERVICE_NAME"
systemctl start "$SERVICE_NAME" systemctl start "$SERVICE_NAME"
echo "✅ systemd 服务已启用并启动"
# 应用环境变量
source /etc/profile.d/bash-product-id.sh
echo "" echo ""
echo "✅ 配置完成!" echo "🎉 安装完成!当前 BASH_PRODUCT_ID 设置:"
echo "当前设置:"
if [ -f "$UUID_FILE" ]; then if [ -f "$UUID_FILE" ]; then
echo "BASH_PRODUCT_ID=$(cat $UUID_FILE)" BASH_PRODUCT_ID=$(cat "$UUID_FILE")
else echo "BASH_PRODUCT_ID=$BASH_PRODUCT_ID"
else
echo "BASH_PRODUCT_ID=unset" echo "BASH_PRODUCT_ID=unset"
fi fi
echo "" echo ""
echo "重新登录终端后环境变量将自动加载。"
echo "立即生效请执行以下任一命令:"
echo "source /etc/bash.bashrc"
echo "source /etc/profile.d/bash-product-id.sh"
echo "source /etc/environment"

65
reg.sh Executable file
View File

@ -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 <<EOF
{
"BASH_UUID": "$BASH_PRODUCT_ID",
"cpu_model": "$(echo "$CPU_MODEL" | sed 's/"/\\"/g')",
"architecture": "$ARCHITECTURE",
"pcie_devices": $PCIE_DEVICES_JSON
}
EOF
)
# 发送POST请求
RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" \
--connect-timeout 5 --max-time 10 \
-X POST http://localhost:3001/endpoint/register \
-H "Content-Type: application/json" \
-d "$JSON_PAYLOAD")
# 检查POST是否成功
if [ "$RESPONSE" -eq 200 ] || [ "$RESPONSE" -eq 201 ]; then
echo "信息成功发送到服务器 (HTTP $RESPONSE)"
else
echo "发送失败服务器返回HTTP状态码 $RESPONSE"
fi

View File

@ -52,7 +52,7 @@ func WithBaseURL(baseURL string) ClientOption {
} }
func init() { func init() {
viper.SetDefault("machine_registry.endpoint", "https://bash-backend.zustmyy.top/endpoint") viper.SetDefault("machine_registry.endpoint", "http://smart-bm.zjuici.com/oak-api/endpoint")
} }
func NewClient(opts ...ClientOption) *Client { func NewClient(opts ...ClientOption) *Client {