修改默认endpoint,完善安装逻辑
This commit is contained in:
parent
68d4d63a92
commit
61302b0fe0
|
|
@ -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
|
||||
|
|
@ -2,59 +2,64 @@
|
|||
|
||||
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
|
||||
echo "❌ 请以 root 用户执行此脚本"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
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"
|
||||
echo "🔧 安装 BASH_PRODUCT_ID 相关组件..."
|
||||
|
||||
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"
|
||||
|
||||
# 创建 systemd 服务文件
|
||||
if [ ! -f "$SYSTEMD_SERVICE_FILE" ]; then
|
||||
cat > "$SYSTEMD_SERVICE_FILE" <<EOL
|
||||
# 写 systemd 服务
|
||||
cat > "$SYSTEMD_SERVICE_FILE" <<EOL
|
||||
[Unit]
|
||||
Description=Generate BASH_PRODUCT_ID if not exists
|
||||
Description=Generate BASH_PRODUCT_ID if not exists and register
|
||||
After=local-fs.target
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
RemainAfterExit=yes
|
||||
ExecStart=/bin/bash -c 'UUID_FILE=/etc/bash_product/BASH_PRODUCT_ID; \
|
||||
if [ ! -f "\$UUID_FILE" ]; then \
|
||||
UUID=\$(cat /proc/sys/kernel/random/uuid); \
|
||||
echo "\$UUID" > "\$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"
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -52,7 +52,7 @@ func WithBaseURL(baseURL string) ClientOption {
|
|||
}
|
||||
|
||||
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 {
|
||||
|
|
|
|||
Loading…
Reference in New Issue