mirror of
https://github.com/stornic56/debianito-post-install.git
synced 2026-07-16 05:49:49 +00:00
Add files via upload
This commit is contained in:
@@ -0,0 +1,144 @@
|
||||
#!/usr/bin/env bash
|
||||
# Shared helpers for GPU submodules
|
||||
|
||||
is_nvidia_kepler() {
|
||||
local dev_id
|
||||
dev_id=$(lspci -nn | grep -iE "VGA|3D" | grep -i nvidia | grep -oP '10de:\K[0-9a-fA-F]+' | head -n1)
|
||||
[ -z "$dev_id" ] && { echo false; return; }
|
||||
|
||||
local dev_int
|
||||
dev_int=$((16#${dev_id,,}))
|
||||
|
||||
# Known Kepler device ID ranges (GKxxx)
|
||||
if [ "$dev_int" -ge $((16#0FC0)) ] && [ "$dev_int" -le $((16#0FCF)) ]; then echo true; return; fi
|
||||
if [ "$dev_int" -ge $((16#1180)) ] && [ "$dev_int" -le $((16#118F)) ]; then echo true; return; fi
|
||||
if [ "$dev_int" -ge $((16#11C0)) ] && [ "$dev_int" -le $((16#11CF)) ]; then echo true; return; fi
|
||||
if [ "$dev_int" -ge $((16#0FE0)) ] && [ "$dev_int" -le $((16#0FEF)) ]; then echo true; return; fi
|
||||
if [ "$dev_int" -ge $((16#1280)) ] && [ "$dev_int" -le $((16#129F)) ]; then echo true; return; fi
|
||||
if [ "$dev_int" -ge $((16#0EB0)) ] && [ "$dev_int" -le $((16#0EBF)) ]; then echo true; return; fi
|
||||
|
||||
echo false
|
||||
}
|
||||
|
||||
is_nvidia_maxwell() {
|
||||
local dev_id
|
||||
dev_id=$(lspci -nn | grep -iE "VGA|3D" | grep -i nvidia | grep -oP '10de:\K[0-9a-fA-F]+' | head -n1)
|
||||
[ -z "$dev_id" ] && { echo false; return; }
|
||||
|
||||
local dev_int
|
||||
dev_int=$((16#${dev_id,,}))
|
||||
|
||||
# GM108 (GT 830M, GT 840M, GT 940M)
|
||||
if [ "$dev_int" -ge $((16#1340)) ] && [ "$dev_int" -le $((16#134F)) ]; then echo true; return; fi
|
||||
# GM107 (GTX 750 Ti, GTX 860M)
|
||||
if [ "$dev_int" -ge $((16#1380)) ] && [ "$dev_int" -le $((16#138F)) ]; then echo true; return; fi
|
||||
# GM200 (TITAN X, GTX 980 Ti)
|
||||
if [ "$dev_int" -ge $((16#13C0)) ] && [ "$dev_int" -le $((16#13CF)) ]; then echo true; return; fi
|
||||
# GM204 (GTX 980, GTX 970)
|
||||
if [ "$dev_int" -ge $((16#13D0)) ] && [ "$dev_int" -le $((16#13DF)) ]; then echo true; return; fi
|
||||
# GM206 (GTX 960, GTX 950)
|
||||
if [ "$dev_int" -ge $((16#1480)) ] && [ "$dev_int" -le $((16#148F)) ]; then echo true; return; fi
|
||||
|
||||
echo false
|
||||
}
|
||||
|
||||
is_nvidia_pascal() {
|
||||
local dev_id
|
||||
dev_id=$(lspci -nn | grep -iE "VGA|3D" | grep -i nvidia | grep -oP '10de:\K[0-9a-fA-F]+' | head -n1)
|
||||
[ -z "$dev_id" ] && { echo false; return; }
|
||||
|
||||
local dev_int
|
||||
dev_int=$((16#${dev_id,,}))
|
||||
|
||||
# GP100 (Tesla P100, Quadro GP100)
|
||||
if [ "$dev_int" -ge $((16#15F0)) ] && [ "$dev_int" -le $((16#15FF)) ]; then echo true; return; fi
|
||||
# GP104 (GTX 1080, GTX 1070)
|
||||
if [ "$dev_int" -ge $((16#1B00)) ] && [ "$dev_int" -le $((16#1B1F)) ]; then echo true; return; fi
|
||||
# GP102 (TITAN Xp, GTX 1080 Ti)
|
||||
if [ "$dev_int" -ge $((16#1B80)) ] && [ "$dev_int" -le $((16#1B8F)) ]; then echo true; return; fi
|
||||
# GP106 (GTX 1060)
|
||||
if [ "$dev_int" -ge $((16#1C00)) ] && [ "$dev_int" -le $((16#1C2F)) ]; then echo true; return; fi
|
||||
# GP107 (GTX 1050 Ti, GTX 1050)
|
||||
if [ "$dev_int" -ge $((16#1C80)) ] && [ "$dev_int" -le $((16#1C8F)) ]; then echo true; return; fi
|
||||
# GP108 (GT 1030, GT 1010)
|
||||
if [ "$dev_int" -ge $((16#1D00)) ] && [ "$dev_int" -le $((16#1DFF)) ]; then echo true; return; fi
|
||||
|
||||
echo false
|
||||
}
|
||||
|
||||
_install_mesa_backports() {
|
||||
if [ "$(is_backports_enabled)" != "true" ]; then
|
||||
install_mesa_stable
|
||||
return
|
||||
fi
|
||||
|
||||
local mesa_pkgs=("mesa-vulkan-drivers" "libgl1-mesa-dri" "libglx-mesa0" "libegl-mesa0" "mesa-va-drivers")
|
||||
local bpo_pkgs=()
|
||||
local stable_pkgs=()
|
||||
|
||||
for mpkg in "${mesa_pkgs[@]}"; do
|
||||
local bpo_ver
|
||||
bpo_ver=$(apt-cache madison "$mpkg" 2>/dev/null | \
|
||||
grep "${DEBIAN_CODENAME}-backports" | awk '{print $3}' | head -1)
|
||||
if [ -n "$bpo_ver" ]; then
|
||||
bpo_pkgs+=("$mpkg")
|
||||
else
|
||||
stable_pkgs+=("$mpkg")
|
||||
fi
|
||||
done
|
||||
|
||||
local ref_ver
|
||||
ref_ver=$(apt-cache policy mesa-vulkan-drivers 2>/dev/null | awk 'NR==3 {print $2; exit}')
|
||||
local ref_bpo_ver
|
||||
ref_bpo_ver=$(apt-cache madison mesa-vulkan-drivers 2>/dev/null | \
|
||||
grep "${DEBIAN_CODENAME}-backports" | awk '{print $3}' | head -1)
|
||||
local comp_line="Components: Vulkan, OpenGL, GLX, EGL, VA-API (64-bit)"
|
||||
|
||||
if [ ${#bpo_pkgs[@]} -gt 0 ]; then
|
||||
local src_label="Debian ${DEBIAN_CODENAME^}-Backports"
|
||||
[ ${#stable_pkgs[@]} -gt 0 ] && src_label+=" + Stable"
|
||||
local msg="Mesa provides OpenGL/Vulkan/VA-API acceleration.\n\n"
|
||||
msg+="Source: ${src_label}\n"
|
||||
msg+="Mesa ${ref_bpo_ver:-$ref_ver}\n"
|
||||
msg+="${comp_line}\n\n"
|
||||
[ ${#stable_pkgs[@]} -gt 0 ] && msg+="Some packages only available in stable.\n"
|
||||
msg+="Choose version for backports-capable packages:"
|
||||
if _confirm_custom "Mesa (Graphics)" "$msg" "Backports" "Stable" 14 70; then
|
||||
_run_cmd "Mesa (backports)" "sudo apt install -y -t ${DEBIAN_CODENAME}-backports ${bpo_pkgs[*]}" \
|
||||
"Installing Mesa from backports..."
|
||||
if [ ${#stable_pkgs[@]} -gt 0 ]; then
|
||||
_run_cmd "Mesa (stable)" "sudo apt install -y ${stable_pkgs[*]}" \
|
||||
"Installing remaining Mesa packages from stable..."
|
||||
fi
|
||||
else
|
||||
_run_cmd "Mesa" "sudo apt install -y ${mesa_pkgs[*]}" \
|
||||
"Installing Mesa from stable..."
|
||||
fi
|
||||
else
|
||||
local msg="Mesa provides OpenGL/Vulkan/VA-API acceleration.\n\n"
|
||||
msg+="Source: Debian Stable\n"
|
||||
msg+="Mesa ${ref_ver}\n"
|
||||
msg+="${comp_line}\n\n"
|
||||
msg+="Install Mesa from available repositories?"
|
||||
if _confirm "Mesa (Graphics)" "$msg" 14 70; then
|
||||
_run_cmd "Mesa" "sudo apt install -y ${mesa_pkgs[*]}" \
|
||||
"Installing Mesa..."
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
install_mesa_stable() {
|
||||
local mesa_pkgs=("mesa-vulkan-drivers" "libgl1-mesa-dri" "libglx-mesa0" "libegl-mesa0" "mesa-va-drivers")
|
||||
_run_cmd "Mesa" "sudo apt install -y ${mesa_pkgs[*]}" "Installing Mesa from stable..."
|
||||
}
|
||||
|
||||
offer_generic_tools() {
|
||||
local tool_pkgs
|
||||
tool_pkgs=$(pkg_versions nvtop vainfo)
|
||||
if _confirm "GPU Tools" "Install monitoring and info tools?\n\n${tool_pkgs}"; then
|
||||
_run_cmd "GPU Tools" "sudo apt install -y nvtop vainfo" "Installing GPU tools..."
|
||||
vainfo
|
||||
else
|
||||
echo "Skipping GPU monitoring tools."
|
||||
fi
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
#!/usr/bin/env bash
|
||||
# AMD and Intel GPU firmware + tools
|
||||
|
||||
install_amd_firmware() {
|
||||
local fw_info
|
||||
fw_info=$(pkg_versions firmware-amd-graphics)
|
||||
if _confirm "AMD Firmware" "Install AMD GPU firmware?\n\n${fw_info}"; then
|
||||
_run_cmd "AMD" "sudo apt install -y firmware-amd-graphics" "Installing AMD GPU firmware..."
|
||||
fi
|
||||
}
|
||||
|
||||
offer_amd_tools() {
|
||||
local amd_tools=("radeontop")
|
||||
local corectrl_available=false
|
||||
|
||||
if [ "$DEBIAN_CODENAME" = "trixie" ]; then
|
||||
corectrl_available=true
|
||||
elif [ "$(is_backports_enabled)" = "true" ] && apt-cache madison corectrl 2>/dev/null | grep -q "bookworm-backports"; then
|
||||
corectrl_available=true
|
||||
fi
|
||||
|
||||
local pkgs
|
||||
pkgs=$(pkg_versions "${amd_tools[@]}" nvtop vainfo)
|
||||
if $corectrl_available; then
|
||||
local ctrl_ver
|
||||
ctrl_ver=$(apt-cache policy corectrl 2>/dev/null | awk 'NR==3 {print $2; exit}')
|
||||
pkgs+=" - corectrl ${ctrl_ver}\n"
|
||||
fi
|
||||
|
||||
if ! _confirm "AMD Tools" "Install AMD monitoring and control tools?\n\n${pkgs}"; then
|
||||
echo "Skipping AMD tools."
|
||||
return
|
||||
fi
|
||||
|
||||
_run_cmd "AMD Tools" "sudo apt install -y ${amd_tools[*]} nvtop vainfo" "Installing AMD tools..."
|
||||
vainfo
|
||||
|
||||
if $corectrl_available; then
|
||||
if [ "$DEBIAN_CODENAME" = "trixie" ]; then
|
||||
_run_cmd "corectrl" "sudo apt install -y corectrl" "Installing corectrl..."
|
||||
else
|
||||
_run_cmd "corectrl" "sudo apt install -y -t ${DEBIAN_CODENAME}-backports corectrl" "Installing corectrl from backports..."
|
||||
fi
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}AMD tools installed.${NC}"
|
||||
}
|
||||
|
||||
install_intel_firmware() {
|
||||
local gen
|
||||
gen=$(get_intel_generation)
|
||||
local va_driver
|
||||
if [ "$gen" = "gen7-" ]; then
|
||||
va_driver="i965-va-driver-shaders"
|
||||
else
|
||||
va_driver="intel-media-va-driver-non-free"
|
||||
fi
|
||||
|
||||
local fw_info
|
||||
fw_info=$(pkg_versions firmware-intel-graphics "$va_driver")
|
||||
if _confirm "Intel Firmware" "Install Intel GPU firmware?\n\n${fw_info}"; then
|
||||
_run_cmd "Intel" "sudo apt install -y firmware-intel-graphics $va_driver" "Installing Intel GPU firmware..."
|
||||
fi
|
||||
}
|
||||
|
||||
offer_intel_tools() {
|
||||
local driver_info=""
|
||||
local has_xe=false
|
||||
local has_i915=false
|
||||
local pkg_list=()
|
||||
local pkg_info=""
|
||||
|
||||
[ -d "/sys/bus/pci/drivers/xe" ] && has_xe=true
|
||||
[ -d "/sys/bus/pci/drivers/i915" ] && has_i915=true
|
||||
|
||||
if $has_xe; then
|
||||
driver_info="Modern Intel GPU detected (Xe driver).\nintel-gpu-tools is NOT compatible with Xe.\nOnly nvtop will be offered."
|
||||
pkg_list=("nvtop")
|
||||
elif $has_i915; then
|
||||
driver_info="Classic Intel GPU detected (i915 driver).\nintel-gpu-tools is compatible and will be offered."
|
||||
pkg_list=("intel-gpu-tools" "nvtop")
|
||||
else
|
||||
driver_info="Intel GPU driver not identified.\nOffering nvtop as a safe default."
|
||||
pkg_list=("nvtop")
|
||||
fi
|
||||
|
||||
pkg_info=$(pkg_versions "${pkg_list[@]}" vainfo)
|
||||
|
||||
if _confirm "Intel Tools" "Intel GPU monitoring tools\n\n${driver_info}\n\nPackages:\n${pkg_info}"; then
|
||||
_run_cmd "Intel Tools" "sudo apt install -y ${pkg_list[*]} vainfo" "Installing Intel monitoring tools..."
|
||||
vainfo
|
||||
else
|
||||
echo "Skipping Intel monitoring tools."
|
||||
fi
|
||||
}
|
||||
@@ -0,0 +1,276 @@
|
||||
#!/usr/bin/env bash
|
||||
# NVIDIA GPU driver installation — 3-CASE dispatch
|
||||
#
|
||||
# CASE A : Trixie + backports kernel → Official NVIDIA CUDA Repo (Pinned v590)
|
||||
# CASE B : Bookworm + backports kernel → Debian backports (-t bookworm-backports)
|
||||
# CASE C : Kernel stable (any distro) → Debian stable (optional backports)
|
||||
|
||||
install_nvidia_driver() {
|
||||
echo -e "${YELLOW}NVIDIA GPU detected.${NC}"
|
||||
NVIDIA_DRIVER_MODE=""
|
||||
|
||||
local is_bpo_kernel; is_bpo_kernel=$(is_backports_kernel)
|
||||
local is_kepler; is_kepler=$(is_nvidia_kepler)
|
||||
local is_maxwell; is_maxwell=$(is_nvidia_maxwell)
|
||||
local is_pascal; is_pascal=$(is_nvidia_pascal)
|
||||
|
||||
# ── Veto: Kepler en Trixie no tiene driver disponible ──
|
||||
if [ "$is_kepler" = "true" ] && [ "$DEBIAN_CODENAME" = "trixie" ]; then
|
||||
_msg "NVIDIA Kepler" \
|
||||
"Your GPU is NVIDIA Kepler architecture.\n\nThe nvidia-tesla-470 driver is not available\nin Debian 13 (Trixie).\n\nNo NVIDIA driver will be installed." 14 65
|
||||
return 1
|
||||
fi
|
||||
|
||||
# ── Bloqueo: Maxwell/Pascal no son compatibles con v590 ──
|
||||
if [ "$DEBIAN_CODENAME" = "trixie" ] && [ "$is_bpo_kernel" = "true" ]; then
|
||||
if [ "$is_maxwell" = "true" ] || [ "$is_pascal" = "true" ]; then
|
||||
local gpu_gen="Maxwell"
|
||||
[ "$is_pascal" = "true" ] && gpu_gen="Pascal"
|
||||
local block_msg="INCOMPATIBILITY DETECTED: Your NVIDIA ${gpu_gen} GPU\n"
|
||||
block_msg+="is NOT supported by the modern v590 driver.\n\n"
|
||||
block_msg+="To run NVIDIA safely on Debian 13 (Trixie), you MUST use\n"
|
||||
block_msg+="the official Debian v550 driver, which requires the\n"
|
||||
block_msg+="standard STABLE Kernel.\n\n"
|
||||
block_msg+="The script will automatically downgrade your path to\n"
|
||||
block_msg+="Stable Kernel mode for NVIDIA."
|
||||
_msg "NVIDIA — Trixie + Backports" "$block_msg" 14 70
|
||||
is_bpo_kernel=false
|
||||
fi
|
||||
fi
|
||||
|
||||
# ── Dispatch por casos ──
|
||||
if [ "$DEBIAN_CODENAME" = "trixie" ] && [ "$is_bpo_kernel" = "true" ]; then
|
||||
_install_nvidia_cuda_repo
|
||||
elif [ "$DEBIAN_CODENAME" = "bookworm" ] && [ "$is_bpo_kernel" = "true" ]; then
|
||||
_install_nvidia_bookworm_bpo
|
||||
else
|
||||
_install_nvidia_standard
|
||||
fi
|
||||
}
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# CASE A: Trixie + Backports Kernel → Official CUDA Repo (Pinned v590)
|
||||
# -------------------------------------------------------------------
|
||||
_install_nvidia_cuda_repo() {
|
||||
local i386_active=false
|
||||
dpkg --print-foreign-architectures | grep -q i386 && i386_active=true
|
||||
|
||||
local warn="WARNING: Official Debian NVIDIA driver (v550)\n"
|
||||
warn+="fails to compile on Trixie Backports Kernels.\n\n"
|
||||
warn+="The script will configure the official NVIDIA CUDA\n"
|
||||
warn+="repository and force-install the stable production\n"
|
||||
warn+="branch v590.48.01 on your system.\n\n"
|
||||
warn+="Source: Official NVIDIA CUDA Repo (Pinned v590.*)\n"
|
||||
warn+="Driver: Production Branch 590.48.01 (Kernel 7.0+ Compliant)\n"
|
||||
warn+="[+] Full 64-bit Core & Compute Stack (DKMS)\n"
|
||||
if $i386_active; then
|
||||
warn+="[+] 32-bit Gaming Multiarch Libraries\n"
|
||||
fi
|
||||
warn+="[+] APT Pinning + Package Hold will be applied\n\n"
|
||||
warn+="Do you want to proceed at your own risk?"
|
||||
|
||||
if ! _confirm_custom "NVIDIA Driver — Trixie + Backports" "$warn" "Proceed" "Abort" 18 70; then
|
||||
echo -e "${YELLOW}NVIDIA installation aborted by user.${NC}"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Step 1: Download & install CUDA keyring
|
||||
_run_cmd "CUDA Keyring" \
|
||||
"wget -q https://developer.download.nvidia.com/compute/cuda/repos/debian13/x86_64/cuda-keyring_1.1-1_all.deb -O /tmp/cuda-keyring.deb && sudo dpkg -i /tmp/cuda-keyring.deb && rm -f /tmp/cuda-keyring.deb" \
|
||||
"Downloading and installing official CUDA keyring..."
|
||||
|
||||
# Step 2: Create APT pinning to lock v590
|
||||
_run_cmd "APT Pinning" \
|
||||
'printf "%s\n" "Package: *nvidia*" "Package: *cuda*" "Package: libcuda1" "Package: firmware-nvidia-gsp" "Pin: version 590.*" "Pin-Priority: 1001" | sudo tee /etc/apt/preferences.d/block-nvidia > /dev/null' \
|
||||
"Creating APT pinning to lock NVIDIA to v590 branch..."
|
||||
|
||||
# Step 3: Update package lists
|
||||
_run_cmd "APT Update" "sudo apt update" "Updating package lists..."
|
||||
|
||||
# Step 4: Build version-locked package list
|
||||
local pkgs=(
|
||||
"cuda-drivers=590.48.01-1"
|
||||
"libcuda1=590.48.01-1"
|
||||
"nvidia-driver=590.48.01-1"
|
||||
"nvidia-driver-libs=590.48.01-1"
|
||||
"firmware-nvidia-gsp=590.48.01-1"
|
||||
"libegl-nvidia0=590.48.01-1"
|
||||
"libglx-nvidia0=590.48.01-1"
|
||||
"libnvidia-eglcore=590.48.01-1"
|
||||
"libnvidia-glcore=590.48.01-1"
|
||||
"libnvidia-glvkspirv=590.48.01-1"
|
||||
"libnvidia-ml1=590.48.01-1"
|
||||
"nvidia-egl-icd=590.48.01-1"
|
||||
"nvidia-vulkan-icd=590.48.01-1"
|
||||
"libnvcuvid1=590.48.01-1"
|
||||
"libnvidia-encode1=590.48.01-1"
|
||||
"nvidia-kernel-dkms=590.48.01-1"
|
||||
"nvidia-settings=590.48.01-1"
|
||||
"nvidia-smi=590.48.01-1"
|
||||
)
|
||||
|
||||
if $i386_active; then
|
||||
pkgs+=(
|
||||
"libcuda1:i386=590.48.01-1"
|
||||
"nvidia-driver-libs:i386=590.48.01-1"
|
||||
"libegl-nvidia0:i386=590.48.01-1"
|
||||
"libglx-nvidia0:i386=590.48.01-1"
|
||||
"libnvidia-eglcore:i386=590.48.01-1"
|
||||
"libnvidia-glcore:i386=590.48.01-1"
|
||||
"libnvidia-glvkspirv:i386=590.48.01-1"
|
||||
"libnvidia-ml1:i386=590.48.01-1"
|
||||
"nvidia-egl-icd:i386=590.48.01-1"
|
||||
"nvidia-vulkan-icd:i386=590.48.01-1"
|
||||
)
|
||||
fi
|
||||
|
||||
_run_cmd "NVIDIA CUDA" "sudo apt install -y ${pkgs[*]}" \
|
||||
"Installing NVIDIA Production Driver v590.48.01..."
|
||||
|
||||
# Step 5: Hold critical packages
|
||||
_run_cmd "Package Hold" \
|
||||
"sudo apt-mark hold cuda-drivers libcuda1 firmware-nvidia-gsp" \
|
||||
"Locking v590 packages to prevent accidental upgrades..."
|
||||
|
||||
NVIDIA_DRIVER_MODE="cuda-repo"
|
||||
echo -e "${GREEN}NVIDIA Production Driver v590 installed from CUDA repo. Reboot required.${NC}"
|
||||
}
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# CASE B: Bookworm + Backports Kernel → Debian backports
|
||||
# -------------------------------------------------------------------
|
||||
_install_nvidia_bookworm_bpo() {
|
||||
local nv_pkg=""
|
||||
local is_kepler
|
||||
is_kepler=$(is_nvidia_kepler)
|
||||
|
||||
if [ "$is_kepler" = "true" ]; then
|
||||
nv_pkg="nvidia-tesla-470-driver"
|
||||
else
|
||||
local nd_ver
|
||||
nd_ver=$(apt-cache policy nvidia-detect 2>/dev/null | awk 'NR==3 {print $2; exit}')
|
||||
if _confirm "NVIDIA Detect" "Install nvidia-detect to determine the correct driver?\n\n nvidia-detect ${nd_ver:-unknown}" 12 70; then
|
||||
_run_cmd "NVIDIA" "sudo apt install -y nvidia-detect" "Installing nvidia-detect..."
|
||||
else
|
||||
echo "Skipping NVIDIA driver detection."
|
||||
NVIDIA_DRIVER_MODE=""
|
||||
return 0
|
||||
fi
|
||||
local recommended
|
||||
recommended=$(nvidia-detect 2>/dev/null | grep -oP 'nvidia[\w-]+(?= package)')
|
||||
if [ -z "$recommended" ]; then
|
||||
echo -e "${RED}nvidia-detect could not determine a suitable driver.${NC}"
|
||||
return 1
|
||||
fi
|
||||
if [[ "$recommended" =~ legacy-390|legacy-340 ]]; then
|
||||
echo -e "${RED}Your GPU requires $recommended, which is not available.${NC}"
|
||||
return 1
|
||||
fi
|
||||
nv_pkg="$recommended"
|
||||
fi
|
||||
|
||||
local nv_ver
|
||||
nv_ver=$(apt-cache policy "$nv_pkg" 2>/dev/null | awk 'NR==3 {print $2; exit}')
|
||||
local msg="Source: Debian Bookworm-Backports\n"
|
||||
msg+="NVIDIA Driver: ${nv_pkg} ${nv_ver:-unknown}\n"
|
||||
msg+=" (Compatible with Kernel v6.12+)\n"
|
||||
msg+="[+] firmware-misc-nonfree\n"
|
||||
msg+="[+] nvidia-vaapi-driver"
|
||||
|
||||
if ! _confirm "NVIDIA Driver — Backports" "$msg" 14 70; then
|
||||
echo "Skipping NVIDIA driver installation."
|
||||
return 0
|
||||
fi
|
||||
|
||||
_run_cmd "NVIDIA" "sudo apt install -y -t bookworm-backports $nv_pkg firmware-misc-nonfree nvidia-vaapi-driver" \
|
||||
"Installing NVIDIA driver from backports..."
|
||||
|
||||
NVIDIA_DRIVER_MODE="backports"
|
||||
echo -e "${GREEN}NVIDIA driver installed from backports. Reboot required.${NC}"
|
||||
}
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# CASE C: Kernel stable (any distro) → Debian stable, optional backports
|
||||
# -------------------------------------------------------------------
|
||||
_install_nvidia_standard() {
|
||||
local nv_pkg=""
|
||||
local use_bpo=false
|
||||
local is_kepler
|
||||
is_kepler=$(is_nvidia_kepler)
|
||||
|
||||
if [ "$is_kepler" = "true" ]; then
|
||||
if [ "$DEBIAN_CODENAME" = "trixie" ]; then
|
||||
_msg "NVIDIA Kepler" \
|
||||
"Your GPU is NVIDIA Kepler architecture.\n\nThe nvidia-tesla-470 driver is not available\nin Debian 13 (Trixie).\n\nOptions:\n 1. Use Debian 12 (Bookworm) with nvidia-tesla-470\n 2. Use open-source Nouveau driver (limited)\n\nNo NVIDIA driver will be installed." 14 65
|
||||
return 1
|
||||
fi
|
||||
nv_pkg="nvidia-tesla-470-driver"
|
||||
echo -e "${YELLOW}Kepler GPU detected. Will use ${nv_pkg}.${NC}"
|
||||
else
|
||||
local nd_ver
|
||||
nd_ver=$(apt-cache policy nvidia-detect 2>/dev/null | awk 'NR==3 {print $2; exit}')
|
||||
if _confirm "NVIDIA Detect" "Install nvidia-detect to determine the correct driver?\n\n nvidia-detect ${nd_ver:-unknown}" 12 70; then
|
||||
_run_cmd "NVIDIA" "sudo apt install -y nvidia-detect" "Installing nvidia-detect..."
|
||||
else
|
||||
echo "Skipping NVIDIA driver detection."
|
||||
return 0
|
||||
fi
|
||||
local recommended
|
||||
recommended=$(nvidia-detect 2>/dev/null | grep -oP 'nvidia[\w-]+(?= package)')
|
||||
if [ -z "$recommended" ]; then
|
||||
echo -e "${RED}nvidia-detect could not determine a suitable driver.${NC}"
|
||||
return 1
|
||||
fi
|
||||
if [[ "$recommended" =~ legacy-390|legacy-340 ]]; then
|
||||
echo -e "${RED}Your GPU requires $recommended, which is not available.${NC}"
|
||||
return 1
|
||||
fi
|
||||
nv_pkg="$recommended"
|
||||
fi
|
||||
|
||||
# Check for backports (optional, if repo enabled)
|
||||
local stable_nv_ver
|
||||
stable_nv_ver=$(apt-cache policy "$nv_pkg" 2>/dev/null | awk 'NR==3 {print $2; exit}')
|
||||
if [ "$(is_backports_enabled)" == "true" ]; then
|
||||
local bpo_nv_ver
|
||||
bpo_nv_ver=$(apt-cache madison "$nv_pkg" 2>/dev/null | \
|
||||
grep "${DEBIAN_CODENAME}-backports" | awk '{print $3}' | head -1)
|
||||
if [ -n "$bpo_nv_ver" ]; then
|
||||
local msg="Source: Debian ${DEBIAN_CODENAME^} (Backports available)\n"
|
||||
msg+="NVIDIA Driver: ${nv_pkg}\n\n"
|
||||
msg+=" Backports: ${bpo_nv_ver}\n"
|
||||
msg+=" Stable: ${stable_nv_ver:-unknown}\n\n"
|
||||
msg+="Choose version:"
|
||||
if _confirm_custom "NVIDIA Driver" "$msg" "Backports" "Stable" 14 70; then
|
||||
use_bpo=true
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
local src_label="Debian ${DEBIAN_CODENAME^} Stable"
|
||||
$use_bpo && src_label="Debian ${DEBIAN_CODENAME^}-Backports"
|
||||
|
||||
local msg="Source: ${src_label}\n"
|
||||
msg+="NVIDIA Driver: ${nv_pkg} ${stable_nv_ver:-unknown}\n"
|
||||
msg+="[+] firmware-misc-nonfree\n"
|
||||
msg+="[+] nvidia-vaapi-driver\n"
|
||||
msg+="[+] mesa-vdpau-drivers"
|
||||
|
||||
if ! _confirm "NVIDIA Driver" "$msg" 14 70; then
|
||||
echo "Skipping NVIDIA driver installation."
|
||||
return 0
|
||||
fi
|
||||
|
||||
local extra_pkgs="firmware-misc-nonfree nvidia-vaapi-driver mesa-vdpau-drivers"
|
||||
if $use_bpo; then
|
||||
_run_cmd "NVIDIA" "sudo apt install -y -t ${DEBIAN_CODENAME}-backports $nv_pkg $extra_pkgs" \
|
||||
"Installing NVIDIA driver from backports..."
|
||||
NVIDIA_DRIVER_MODE="backports"
|
||||
else
|
||||
_run_cmd "NVIDIA" "sudo apt install -y $nv_pkg $extra_pkgs" \
|
||||
"Installing NVIDIA driver from stable..."
|
||||
NVIDIA_DRIVER_MODE="stable"
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}NVIDIA driver installed. Reboot required.${NC}"
|
||||
}
|
||||
Reference in New Issue
Block a user