105 lines
2.8 KiB
Bash
Executable File
105 lines
2.8 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"
|
|
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" <<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 ""
|