#!/bin/bash set -e 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 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 服务 cat > "$SYSTEMD_SERVICE_FILE" </dev/null || echo "unset"`' >> /etc/security/pam_env.conf echo "✅ 配置 PAM 环境变量 (/etc/security/pam_env.conf)" fi # 配置 /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" # 配置 /etc/profile.d 脚本 cat > /etc/profile.d/bash-product-id.sh <<'EOL' #!/bin/bash if [ -f "/etc/bash_product/BASH_PRODUCT_ID" ]; then export BASH_PRODUCT_ID=$(cat /etc/bash_product/BASH_PRODUCT_ID) else export BASH_PRODUCT_ID="unset" fi EOL chmod +x /etc/profile.d/bash-product-id.sh echo "✅ 配置 /etc/profile.d/bash-product-id.sh" # 配置 bash.bashrc BASHRC_CONFIG=' # BASH_PRODUCT_ID environment variable if [ -f "/etc/bash_product/BASH_PRODUCT_ID" ]; then export BASH_PRODUCT_ID=$(cat /etc/bash_product/BASH_PRODUCT_ID) 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 & 启用服务 systemctl daemon-reload systemctl enable "$SERVICE_NAME" systemctl start "$SERVICE_NAME" echo "✅ systemd 服务已启用并启动" # 应用环境变量 source /etc/profile.d/bash-product-id.sh echo "" echo "🎉 安装完成!当前 BASH_PRODUCT_ID 设置:" if [ -f "$UUID_FILE" ]; then BASH_PRODUCT_ID=$(cat "$UUID_FILE") echo "BASH_PRODUCT_ID=$BASH_PRODUCT_ID" else echo "BASH_PRODUCT_ID=unset" fi echo ""