101 lines
2.7 KiB
Bash
Executable File
101 lines
2.7 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
# 必须以 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 服务..."
|
|
|
|
# 创建必要的目录
|
|
mkdir -p "$UUID_DIR"
|
|
|
|
# 创建 systemd 服务文件
|
|
if [ ! -f "$SYSTEMD_SERVICE_FILE" ]; then
|
|
cat > "$SYSTEMD_SERVICE_FILE" <<EOL
|
|
[Unit]
|
|
Description=Generate BASH_PRODUCT_ID if not exists
|
|
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'
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
EOL
|
|
echo "✅ systemd 服务文件已创建。"
|
|
fi
|
|
|
|
# 1. 配置PAM环境变量
|
|
echo "配置 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
|
|
fi
|
|
|
|
# 2. 配置全局环境变量
|
|
echo "配置 /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
|
|
|
|
# 3. 配置profile.d脚本
|
|
echo "配置 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
|
|
|
|
# 4. 配置bash.bashrc
|
|
echo "配置 /etc/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
|
|
fi
|
|
|
|
# 重新加载 systemd 配置并启用服务
|
|
systemctl daemon-reload
|
|
systemctl enable "$SERVICE_NAME"
|
|
systemctl start "$SERVICE_NAME"
|
|
|
|
echo ""
|
|
echo "✅ 配置完成!"
|
|
echo "当前设置:"
|
|
if [ -f "$UUID_FILE" ]; then
|
|
echo "BASH_PRODUCT_ID=$(cat $UUID_FILE)"
|
|
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"
|