install-scripts/proxmox-gpu-passthrough/install.sh

77 lines
2.7 KiB
Bash
Raw Permalink Normal View History

2024-11-28 22:38:29 +00:00
#!/bin/bash
# Function to check if a command exists
command_exists() {
type "$1" &> /dev/null ;
}
# Check if the script is run as root
if [ "$(id -u)" != "0" ]; then
echo "This script must be run as root. Please use sudo." 1>&2
exit 1
fi
# Update and install necessary packages
echo "Updating package list and installing necessary tools..."
apt-get update && apt-get upgrade -y
if command_exists lspci; then
echo "lspci is already installed."
else
echo "Installing lspci..."
apt-get install pciutils -y
fi
if command_exists grep; then
echo "grep is already installed."
else
echo "Installing grep..."
apt-get install grep -y
fi
# Identify the GPU device you want to passthrough
echo "Listing all PCI devices to identify your GPU:"
lspci
read -p "Enter the PCI ID of your GPU (e.g., 00:01.0): " gpu_id
# Verify GPU identification
echo "Verifying GPU with lspci -k..."
lspci -k | grep -i "$gpu_id"
if [ $? -ne 0 ]; then
echo "GPU not found or incorrect ID entered." >&2
exit 1
fi
# Configure Proxmox for GPU passthrough
echo "Configuring Proxmox to enable GPU passthrough..."
# Edit the VM configuration file, e.g., /etc/pve/qemu-server/YOUR_VM_ID.conf
read -p "Enter the ID of the VM you want to configure (e.g., 100 for vm100): " vm_id
echo "Editing VM configuration file for GPU passthrough..."
sed -i "/^[^#]*args=/ s/$/ --device $gpu_id/" /etc/pve/qemu-server/$vm_id.conf
# Optionally, add the GPU to a specific PCI slot (useful if you have multiple GPUs)
echo "Do you want to bind this GPU to a specific PCI slot in Proxmox? This might require creating a new VMDX file."
read -p "Type 'yes' or 'no': " response
if [[ "$response" == "yes" ]]; then
read -p "Enter the desired PCI slot (e.g., 00:02.0): " pci_slot
echo "Adding GPU to specified PCI slot..."
# You might need to create a new VMDX file or modify an existing one, this step depends on your Proxmox setup and version.
fi
# Blacklist the GPU driver modules
echo "Do you want to blacklist the GPU driver modules? This will prevent them from loading at boot."
read -p "Type 'yes' or 'no': " response
if [[ "$response" == "yes" ]]; then
echo "Blacklisting GPU driver modules..."
# Create a blacklist file for the relevant drivers
echo "${gpu_id}*" > /etc/modprobe.d/blacklist-gpu.conf
fi
# Restart the VM for changes to take effect
echo "Changes require restarting the VM. Please power off your VM:"
read -p "Enter the ID of the VM you want to restart (e.g., 100): " vm_id
virsh shutdown $vm_id
read -p "Power on the VM now? Type 'yes': " response
if [[ "$response" == "yes" ]]; then
virsh start $vm_id
fi
echo "GPU passthrough setup is complete. Please check your VM for GPU functionality."