bash_go_service/install_product_id_generato...

106 lines
2.9 KiB
Bash
Executable File

#!/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"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
LOCAL_SCRIPT="${SCRIPT_DIR}/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" <<EOL
[Unit]
Description=Generate BASH_PRODUCT_ID if not exists and register
After=local-fs.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=$TARGET_SCRIPT
[Install]
WantedBy=multi-user.target
EOL
echo "✅ 写入 systemd 服务文件 $SYSTEMD_SERVICE_FILE"
# 配置 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
# 配置 /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 ""