51 lines
1.7 KiB
Bash
51 lines
1.7 KiB
Bash
|
|
#!/bin/bash
|
|||
|
|
set -eo pipefail
|
|||
|
|
LOG_DIR="{{ log_base_dir }}/{{ driver.name }}" # 从角色变量注入路径
|
|||
|
|
LOG_FILE="${LOG_DIR}/install-$(date +%Y%m%d).log"
|
|||
|
|
mkdir -p "$LOG_DIR"
|
|||
|
|
exec > >(tee -a "$LOG_FILE") 2>&1
|
|||
|
|
|
|||
|
|
# 参数解析(严格匹配角色定义的操作)
|
|||
|
|
OPERATION=""
|
|||
|
|
VERSION=""
|
|||
|
|
while [[ $# -gt 0 ]]; do
|
|||
|
|
case "$1" in
|
|||
|
|
--install) OPERATION="install" ;;
|
|||
|
|
--uninstall) OPERATION="uninstall" ;;
|
|||
|
|
--version) VERSION="$2"; shift ;;
|
|||
|
|
*) echo "错误:未知参数 $1" >&2; exit 1 ;;
|
|||
|
|
esac
|
|||
|
|
shift
|
|||
|
|
done
|
|||
|
|
|
|||
|
|
# 安装逻辑(使用角色专属变量)
|
|||
|
|
install() {
|
|||
|
|
local DRIVER_VERSION="${VERSION:-$DEFAULT_VERSION}"
|
|||
|
|
echo "[$(date)] 开始安装NVIDIA驱动(版本:$DRIVER_VERSION,型号:$GPU_MODEL)..."
|
|||
|
|
|
|||
|
|
# 企业内部镜像下载(安全加速)
|
|||
|
|
wget -q "${DOWNLOAD_URL}/${DRIVER_VERSION}/NVIDIA-Linux-x86_64-${DRIVER_VERSION}.run" \
|
|||
|
|
-O "/tmp/nvidia-driver.run"
|
|||
|
|
|
|||
|
|
# 静默安装(企业级无交互模式)
|
|||
|
|
sh "/tmp/nvidia-driver.run" --silent --no-x-check --no-nouveau-check
|
|||
|
|
|
|||
|
|
# 严格功能验证(硬件型号匹配)
|
|||
|
|
if ! nvidia-smi --query-gpu=name --format=csv,noheader | grep -q "$GPU_MODEL"; then
|
|||
|
|
echo "错误:驱动安装后未识别到目标GPU型号" >&2; exit 1
|
|||
|
|
fi
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 卸载逻辑(幂等性设计)
|
|||
|
|
uninstall() {
|
|||
|
|
echo "[$(date)] 开始卸载NVIDIA驱动..."
|
|||
|
|
/usr/bin/nvidia-uninstall --silent # 官方静默卸载工具
|
|||
|
|
rm -f "/tmp/nvidia-driver.run" # 清理残留文件
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 主流程(依赖角色变量注入的默认值)
|
|||
|
|
DEFAULT_VERSION="{{ driver.default_version }}"
|
|||
|
|
DOWNLOAD_URL="{{ driver.download_url }}"
|
|||
|
|
install || uninstall # 根据OPERATION执行对应函数(由剧本参数控制)
|
|||
|
|
exit 0
|