修改默认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
|
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"
|
|
||||||
|
|
|
||||||
|
|
@ -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() {
|
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 {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue