Files
dao_hades/scripts/init/install_nvidia.sh
2025-11-03 16:07:40 +00:00

150 lines
7.0 KiB
Bash
Executable File

#!/bin/bash
# NVIDIA Driver Installation Script for Fedora Workstation
# Check if the script is run with sudo
if [ "$EUID" -ne 0 ]; then
echo "Please run this script with sudo"
exit 1
fi
# Funtion to echo colored text
color_echo() {
local color="$1"
local text="$2"
case "$color" in
"red") echo -e "\033[0;31m$text\033[0m" ;;
"green") echo -e "\033[0;32m$text\033[0m" ;;
"yellow") echo -e "\033[1;33m$text\033[0m" ;;
"blue") echo -e "\033[0;34m$text\033[0m" ;;
*) echo "$text" ;;
esac
}
# Set variables
ACTUAL_USER=$SUDO_USER
ACTUAL_HOME=$(eval echo ~$SUDO_USER)
LOG_FILE="/var/log/nvidia_driver_installation.log"
# Function to generate timestamps
get_timestamp() {
date +"%Y-%m-%d %H:%M:%S"
}
# Function to handle errors
handle_error() {
local exit_code=$?
local message="$1"
if [ $exit_code -ne 0 ]; then
color_echo \"red\" "ERROR: $message"
exit $exit_code
fi
}
echo "";
echo "╔══════════════════════════════════════════════════════════╗";
echo "║ ║";
echo "║ ███╗ ██╗██╗ ██╗██╗██████╗ ██╗ █████╗ ║";
echo "║ ████╗ ██║██║ ██║██║██╔══██╗██║██╔══██╗ ║";
echo "║ ██╔██╗ ██║██║ ██║██║██║ ██║██║███████║ ║";
echo "║ ██║╚██╗██║╚██╗ ██╔╝██║██║ ██║██║██╔══██║ ║";
echo "║ ██║ ╚████║ ╚████╔╝ ██║██████╔╝██║██║ ██║ ║";
echo "║ ╚═╝ ╚═══╝ ╚═══╝ ╚═╝╚═════╝ ╚═╝╚═╝ ╚═╝ ║";
echo "║ ║";
echo "║ ██████╗ ██████╗ ██╗██╗ ██╗███████╗██████╗ ███████╗ ║";
echo "║ ██╔══██╗██╔══██╗██║██║ ██║██╔════╝██╔══██╗██╔════╝ ║";
echo "║ ██║ ██║██████╔╝██║██║ ██║█████╗ ██████╔╝███████╗ ║";
echo "║ ██║ ██║██╔══██╗██║╚██╗ ██╔╝██╔══╝ ██╔══██╗╚════██║ ║";
echo "║ ██████╔╝██║ ██║██║ ╚████╔╝ ███████╗██║ ██║███████║ ║";
echo "║ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═══╝ ╚══════╝╚═╝ ╚═╝╚══════╝ ║";
echo "║ ║";
echo "╚══════════════════════════════════════════════════════════╝";
echo "";
echo "This script installs NVIDIA drivers on Fedora Workstation"
echo ""
echo "IMPORTANT: This script should be run outside of the graphical user interface (GUI)."
echo "To access a bare terminal window:"
echo "1. Press Ctrl+Alt+F3 to switch to a virtual console."
echo "2. Log in with your username and password."
echo "3. Run this script with sudo."
echo "4. After installation, reboot your system"
echo ""
echo "If you're not comfortable with this process, please seek assistance from an experienced user."
echo ""
echo "Please choose the installation method:"
echo "1) RPM Fusion method (recommended)"
echo "2) NVIDIA official .run file method"
read -p "Enter your choice (1 or 2): " choice
case $choice in
1)
color_echo "blue" "RPM Fusion method selected"
# Add RPM Fusion repositories
color_echo "yellow" "Adding RPM Fusion repositories..."
dnf install -y https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm
dnf install -y https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
handle_error "Failed to add RPM Fusion repositories"
# Update the system
color_echo "yellow" "Updating the system..."
dnf update -y
handle_error "Failed to update the system"
# Install NVIDIA drivers
color_echo "yellow" "Installing NVIDIA drivers..."
dnf install -y akmod-nvidia
handle_error "Failed to install NVIDIA drivers"
# Install CUDA (optional)
read -p "Do you want to install CUDA? (y/n): " install_cuda
if [[ $install_cuda =~ ^[Yy]$ ]]; then
color_echo "yellow" "Installing CUDA..."
dnf install -y xorg-x11-drv-nvidia-cuda
handle_error "Failed to install CUDA"
fi
;;
2)
color_echo "blue" "NVIDIA official .run file method selected"
# Install necessary packages
color_echo "yellow" "Installing necessary packages..."
dnf install -y kernel-devel kernel-headers gcc make dkms acpid libglvnd-glx libglvnd-opengl libglvnd-devel pkgconfig
handle_error "Failed to install necessary packages"
# Download the latest NVIDIA driver
color_echo "yellow" "Downloading the latest NVIDIA driver..."
driver_url=$(curl -s https://www.nvidia.com/Download/processFind.aspx?psid=101&pfid=816&osid=12&lid=1&whql=1&lang=en-us&ctk=0 | grep -o 'https://[^"]*' | grep '.run' | head -n 1)
wget $driver_url -O /tmp/nvidia_driver.run
handle_error "Failed to download NVIDIA driver"
# Stop the display manager
color_echo "blue" "Stopping the display manager..."
systemctl isolate multi-user.target
handle_error "Failed to stop the display manager"
# Install the NVIDIA driver
color_echo "yellow" "Installing the NVIDIA driver..."
bash /tmp/nvidia_driver.run --silent
handle_error "Failed to install NVIDIA driver"
# Start the display manager
color_echo "blue" "Starting the display manager..."
systemctl isolate graphical.target
handle_error "Failed to start the display manager"
;;
*)
color_echo "red" "Invalid choice. Exiting."
exit 1
;;
esac
color_echo "green" "NVIDIA driver installation completed."
echo "Installation complete. Please reboot your system to apply changes."
read -p "Do you want to reboot now? (y/n): " reboot_choice
if [[ $reboot_choice =~ ^[Yy]$ ]]; then
color_echo "green" "Rebooting the system..."
reboot
else
color_echo "blue" "Reboot postponed. Please remember to reboot your system to complete the installation."
fi