67 lines
2.1 KiB
Bash
67 lines
2.1 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
IFS=$'\n\t'
|
|
|
|
LOGFILE=${LOGFILE:-/var/log/nvidia-driver-install.log}
|
|
exec > >(tee -a "$LOGFILE") 2>&1
|
|
|
|
trap 'echo "[ERROR] Line ${LINENO}: command failed"; exit 1' ERR
|
|
|
|
require_root() {
|
|
if [[ ${EUID:-$(id -u)} -ne 0 ]]; then
|
|
echo "[INFO] Re-running with sudo..."
|
|
exec sudo -E bash "$0" "$@"
|
|
fi
|
|
}
|
|
require_root "$@"
|
|
|
|
# Basic platform sanity
|
|
if ! command -v apt >/dev/null 2>&1; then
|
|
echo "[FATAL] This script targets APT-based distros (Ubuntu/Debian)."
|
|
exit 2
|
|
fi
|
|
|
|
# Secure Boot check (unsigned DKMS modules will not load)
|
|
if command -v mokutil >/dev/null 2>&1; then
|
|
if mokutil --sb-state 2>/dev/null | grep -qi 'enabled'; then
|
|
echo "[WARN] Secure Boot appears ENABLED. NVIDIA kernel modules may fail to load."
|
|
echo " Consider disabling Secure Boot or enrolling MOK keys before proceeding."
|
|
fi
|
|
fi
|
|
|
|
echo "[STEP] Updating APT metadata"
|
|
apt-get update -y
|
|
|
|
echo "[STEP] Fixing broken packages (if any)"
|
|
apt-get -y --fix-broken install || true
|
|
|
|
echo "[STEP] Purging conflicting server-flavor NVIDIA packages (if present)"
|
|
dpkg -l | awk '/nvidia-.*server/ {print $2}' | xargs -r apt-get purge -y
|
|
|
|
echo "[STEP] Installing prerequisites"
|
|
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends dkms build-essential linux-headers-$(uname -r) pciutils curl ca-certificates mokutil || true
|
|
|
|
# Prefer ubuntu-drivers if available (Ubuntu)
|
|
if command -v ubuntu-drivers >/dev/null 2>&1; then
|
|
echo "[STEP] Using ubuntu-drivers to select the recommended driver"
|
|
ubuntu-drivers autoinstall
|
|
else
|
|
# Fallback to meta-driver if ubuntu-drivers is not available
|
|
echo "[STEP] Installing NVIDIA driver meta-package"
|
|
# Try a reasonable meta; the specific version changes often, so use the generic meta when available
|
|
apt-get install -y nvidia-driver || apt-get install -y nvidia-driver-535 || true
|
|
fi
|
|
|
|
echo "[STEP] Cleaning up"
|
|
apt-get -y autoremove
|
|
apt-get -y autoclean
|
|
|
|
echo "[INFO] Verifying installation"
|
|
if command -v nvidia-smi >/dev/null 2>&1; then
|
|
nvidia-smi || true
|
|
else
|
|
echo "[WARN] nvidia-smi not found yet. A reboot may be required."
|
|
fi
|
|
|
|
echo "[DONE] NVIDIA driver install complete. Reboot is recommended." |