bash_go_service/install_product_id_generato...

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"