89 lines
2.2 KiB
Bash
89 lines
2.2 KiB
Bash
|
|
#!/usr/bin/env bash
|
||
|
|
set -o errexit
|
||
|
|
set -o nounset
|
||
|
|
set -o pipefail
|
||
|
|
|
||
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
|
|
# shellcheck source=00-platform-guard.inc
|
||
|
|
source "$SCRIPT_DIR/00-platform-guard.inc"
|
||
|
|
|
||
|
|
driver_version=""
|
||
|
|
|
||
|
|
usage() {
|
||
|
|
cat <<'EOF'
|
||
|
|
Usage: sudo ./06-nvidia-tools.sh [--install-driver VERSION]
|
||
|
|
|
||
|
|
Without --install-driver, only non-driver diagnostic tools are installed.
|
||
|
|
EOF
|
||
|
|
}
|
||
|
|
|
||
|
|
while (($# > 0)); do
|
||
|
|
case "$1" in
|
||
|
|
--install-driver)
|
||
|
|
if (($# < 2)); then
|
||
|
|
printf 'CRITICAL: --install-driver requires a VERSION\n' >&2
|
||
|
|
exit 2
|
||
|
|
fi
|
||
|
|
driver_version="$2"
|
||
|
|
if [[ ! "$driver_version" =~ ^[0-9]+$ ]]; then
|
||
|
|
printf 'CRITICAL: NVIDIA driver VERSION must contain digits only\n' >&2
|
||
|
|
exit 2
|
||
|
|
fi
|
||
|
|
shift
|
||
|
|
;;
|
||
|
|
-h|--help)
|
||
|
|
usage
|
||
|
|
exit 0
|
||
|
|
;;
|
||
|
|
*)
|
||
|
|
printf 'CRITICAL: unknown option: %s\n' "$1" >&2
|
||
|
|
exit 2
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
shift
|
||
|
|
done
|
||
|
|
|
||
|
|
if ((EUID != 0)); then
|
||
|
|
printf 'CRITICAL: NVIDIA tooling setup must run as root\n' >&2
|
||
|
|
exit 2
|
||
|
|
fi
|
||
|
|
require_supported_ubuntu
|
||
|
|
if ! command -v apt-get >/dev/null 2>&1; then
|
||
|
|
printf 'CRITICAL: apt-get is required\n' >&2
|
||
|
|
exit 2
|
||
|
|
fi
|
||
|
|
|
||
|
|
apt-get update
|
||
|
|
DEBIAN_FRONTEND=noninteractive apt-get install -y nvtop clinfo pciutils
|
||
|
|
|
||
|
|
printf '\n== NVIDIA PCI devices ==\n'
|
||
|
|
lspci -nn | grep -i nvidia || printf 'INFO: no NVIDIA PCI devices detected\n'
|
||
|
|
|
||
|
|
printf '\n== NVIDIA runtime ==\n'
|
||
|
|
if command -v nvidia-smi >/dev/null 2>&1; then
|
||
|
|
nvidia-smi || printf 'WARNING: nvidia-smi returned an error\n'
|
||
|
|
else
|
||
|
|
printf 'INFO: nvidia-smi is not installed\n'
|
||
|
|
fi
|
||
|
|
|
||
|
|
printf '\n== DKMS ==\n'
|
||
|
|
if command -v dkms >/dev/null 2>&1; then
|
||
|
|
dkms status || printf 'WARNING: dkms status returned an error\n'
|
||
|
|
else
|
||
|
|
printf 'INFO: dkms is not installed\n'
|
||
|
|
fi
|
||
|
|
|
||
|
|
if [[ -n "$driver_version" ]]; then
|
||
|
|
driver_package="nvidia-driver-$driver_version"
|
||
|
|
if ! apt-cache show "$driver_package" >/dev/null 2>&1; then
|
||
|
|
printf 'CRITICAL: requested NVIDIA driver package is unavailable: %s\n' \
|
||
|
|
"$driver_package" >&2
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
DEBIAN_FRONTEND=noninteractive apt-get install -y "$driver_package"
|
||
|
|
printf 'WARNING: NVIDIA driver %s was installed; reboot before validation\n' \
|
||
|
|
"$driver_version"
|
||
|
|
else
|
||
|
|
printf 'OK: NVIDIA diagnostic tools installed; no driver was installed\n'
|
||
|
|
fi
|