diff --git a/install_product_id_generator.sh b/install_product_id_generator.sh index 88c2e62..8dd34f5 100755 --- a/install_product_id_generator.sh +++ b/install_product_id_generator.sh @@ -9,68 +9,92 @@ if [ "$(id -u)" -ne 0 ]; then fi SERVICE_NAME="bash-product-id.service" -UUID_DIR="/etc/bash_product" +UUID_DIR="/etc/bash_product" UUID_FILE="$UUID_DIR/BASH_PRODUCT_ID" SYSTEMD_SERVICE_FILE="/etc/systemd/system/$SERVICE_NAME" -PAM_ENV_LINE='session\s*optional\s*pam_env.so defaults env_file='$UUID_FILE'' echo "🔧 配置 BASH_PRODUCT_ID 服务..." -# 创建 UUID 存储目录 (如果不存在) +# 创建必要的目录 mkdir -p "$UUID_DIR" -# 生成 UUID (如果不存在) -if [ ! -f "$UUID_FILE" ]; then - UUID=$(cat /proc/sys/kernel/random/uuid) - echo "$UUID" > "$UUID_FILE" - chmod 644 "$UUID_FILE" -fi - -# 创建 systemd 服务文件 (如果不存在) +# 创建 systemd 服务文件 if [ ! -f "$SYSTEMD_SERVICE_FILE" ]; then cat > "$SYSTEMD_SERVICE_FILE" < "$UUID_FILE"; chmod 644 "$UUID_FILE"; export BASH_PRODUCT_ID=\$UUID; fi' +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 服务文件已创建。" -else - echo "ℹ️ systemd 服务文件已存在,跳过创建。" fi -# 重新加载 systemd 配置 (如果服务文件被创建或修改) -if ! systemctl is-active --quiet "$SERVICE_NAME" && ! systemctl is-enabled --quiet "$SERVICE_NAME"; then - echo "🔄 重新加载 systemd 配置..." - systemctl daemon-reload +# 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 -# 启用并启动服务 (如果尚未启用或启动) -if ! systemctl is-enabled --quiet "$SERVICE_NAME"; then - echo "🚀 启用 BASH_PRODUCT_ID 服务..." - systemctl enable "$SERVICE_NAME" -elif ! systemctl is-active --quiet "$SERVICE_NAME"; then - echo "🚀 启动 BASH_PRODUCT_ID 服务..." - systemctl start "$SERVICE_NAME" +# 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 - echo "ℹ️ BASH_PRODUCT_ID 服务已启用并运行。" + 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 -# 配置 PAM 环境变量 (如果尚未配置) -if ! grep -Eq "^${PAM_ENV_LINE}$" /etc/pam.d/common-session*; then - echo "⚙️ 配置 PAM 环境变量..." - sed -i '/^session\s*required\s*pam_limits.so/a\'"$PAM_ENV_LINE"'' /etc/pam.d/common-session* -else - echo "ℹ️ PAM 环境变量已配置,跳过修改。" -fi +# 重新加载 systemd 配置并启用服务 +systemctl daemon-reload +systemctl enable "$SERVICE_NAME" +systemctl start "$SERVICE_NAME" echo "" -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 \$BASH_PRODUCT_ID" +echo "重新登录终端后环境变量将自动加载。" +echo "立即生效请执行以下任一命令:" +echo "source /etc/bash.bashrc" +echo "source /etc/profile.d/bash-product-id.sh" +echo "source /etc/environment" diff --git a/uninstall_product_id_generator.sh b/uninstall_product_id_generator.sh index bb23202..a4bf18f 100755 --- a/uninstall_product_id_generator.sh +++ b/uninstall_product_id_generator.sh @@ -12,61 +12,56 @@ 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" -PAM_ENV_LINE='session\s*optional\s*pam_env.so defaults env_file='$UUID_FILE'' -echo "🔧 正在卸载 BASH_PRODUCT_ID 服务..." +echo "🔧 开始卸载 BASH_PRODUCT_ID 服务..." -# 停止并禁用服务 -if systemctl is-active --quiet "$SERVICE_NAME"; then - echo "🚫 停止 BASH_PRODUCT_ID 服务..." - systemctl stop "$SERVICE_NAME" -else - echo "ℹ️ BASH_PRODUCT_ID 服务未运行,跳过停止。" +# 停止并禁用 systemd 服务 +if systemctl is-active "$SERVICE_NAME" &>/dev/null; then + echo "停止 systemd 服务..." + systemctl stop "$SERVICE_NAME" fi -if systemctl is-enabled --quiet "$SERVICE_NAME"; then - echo "🚫 禁用 BASH_PRODUCT_ID 服务..." - systemctl disable "$SERVICE_NAME" -else - echo "ℹ️ BASH_PRODUCT_ID 服务未启用,跳过禁用。" +if systemctl is-enabled "$SERVICE_NAME" &>/dev/null; then + echo "禁用 systemd 服务..." + systemctl disable "$SERVICE_NAME" fi # 删除 systemd 服务文件 if [ -f "$SYSTEMD_SERVICE_FILE" ]; then - echo "🗑️ 删除 systemd 服务文件..." - rm "$SYSTEMD_SERVICE_FILE" -else - echo "ℹ️ systemd 服务文件不存在,跳过删除。" + echo "删除 systemd 服务文件..." + rm -f "$SYSTEMD_SERVICE_FILE" fi +# 删除 UUID 目录及文件 +if [ -d "$UUID_DIR" ]; then + echo "删除 UUID 目录及文件..." + rm -rf "$UUID_DIR" +fi + +# 清理 PAM 环境变量配置 +echo "清理 PAM 环境变量配置..." +sed -i '/BASH_PRODUCT_ID/d' /etc/security/pam_env.conf + +# 清理全局环境变量配置 +echo "清理全局环境变量配置..." +sed -i '/BASH_PRODUCT_ID/d' /etc/environment + +# 删除 profile.d 脚本 +if [ -f "/etc/profile.d/bash-product-id.sh" ]; then + echo "删除 profile.d 脚本..." + rm -f "/etc/profile.d/bash-product-id.sh" +fi + +# 清理 bash.bashrc 配置 +echo "清理 bash.bashrc 配置..." +# 删除包含 BASH_PRODUCT_ID 的行及其前后的空行 +sed -i '/# BASH_PRODUCT_ID/,/^fi$/d' /etc/bash.bashrc +sed -i '/^$/N;/^\n$/D' /etc/bash.bashrc + # 重新加载 systemd 配置 -echo "🔄 重新加载 systemd 配置..." systemctl daemon-reload -# 删除 UUID 文件 -if [ -f "$UUID_FILE" ]; then - echo "🗑️ 删除 UUID 文件..." - rm "$UUID_FILE" -else - echo "ℹ️ UUID 文件不存在,跳过删除。" -fi - -# 删除 UUID 存储目录 -if [ -d "$UUID_DIR" ]; then - echo "🗑️ 删除 UUID 存储目录..." - rmdir "$UUID_DIR" -else - echo "ℹ️ UUID 存储目录不存在,跳过删除。" -fi - -# 配置 PAM 环境变量的清理 -if grep -Eq "^${PAM_ENV_LINE}$" /etc/pam.d/common-session*; then - echo "🧹 清理 PAM 环境变量配置..." - sed -i '/^session\s*required\s*pam_limits.so/a\'"$PAM_ENV_LINE"'' /etc/pam.d/common-session* -else - echo "ℹ️ PAM 环境变量配置未找到,跳过清理。" -fi - echo "" echo "✅ 卸载完成!" -echo " 如果有任何问题,请查看服务状态:systemctl status $SERVICE_NAME" +echo "所有 BASH_PRODUCT_ID 相关配置已移除。" +echo "重新登录终端后环境变量将被清除。"