安装和卸载product_id脚本
This commit is contained in:
parent
871f0e0854
commit
6f4d653835
|
|
@ -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" <<EOL
|
||||
[Unit]
|
||||
Description=Generate and set BASH_PRODUCT_ID environment variable
|
||||
Description=Generate BASH_PRODUCT_ID if not exists
|
||||
After=local-fs.target
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
RemainAfterExit=yes
|
||||
ExecStart=/bin/bash -c 'if [ -f "$UUID_FILE" ]; then export BASH_PRODUCT_ID=\$(cat "$UUID_FILE"); else UUID=\$(cat /proc/sys/kernel/random/uuid); echo \$UUID > "$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"
|
||||
|
|
|
|||
|
|
@ -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 "重新登录终端后环境变量将被清除。"
|
||||
|
|
|
|||
Loading…
Reference in New Issue