150 lines
7.0 KiB
Bash
Executable File
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
|