kvm

qemu/kvm installation script
git clone https://git.awy.one/kvm.git
Log | Files | Refs | README | LICENSE

gpu_pass.sh (3948B)


      1 #!/bin/sh
      2 set -e
      3 
      4 WRKDIR=$PWD
      5 
      6 if [ "$(id -u)" -ne 0 ]
      7   then printf "The script has to be run as root.\n"
      8   exit
      9 fi
     10 
     11 PERMUSER="$(id -nu "1000")"
     12 
     13 id "$PERMUSER" > /dev/null 2>&1 || { echo "User $PERMUSER does not exist. Exiting."; exit 1; }
     14 
     15 sudo -u "$PERMUSER" mkdir -p /home/"$PERMUSER"/.local/share/vgabios
     16 sudo -u "$PERMUSER" cp "$WRKDIR"/Hooks/patch.rom /home/"$PERMUSER"/.local/share/vgabios
     17 
     18 pacman -Sy --noconfirm
     19 pacman -S qemu-desktop libvirt edk2-ovmf virt-manager dnsmasq wget --noconfirm
     20 
     21 
     22 mkdir /etc/libvirt/hooks
     23 
     24 # Online version
     25 #wget 'https://raw.githubusercontent.com/PassthroughPOST/VFIO-Tools/master/libvirt_hooks/qemu' \
     26 #     -O /etc/libvirt/hooks/qemu
     27 
     28 cp "$WRKDIR"/Hooks/qemu /etc/libvirt/hooks/
     29 
     30 chmod +x /etc/libvirt/hooks/qemu
     31 
     32 mkdir -p /etc/libvirt/hooks/qemu.d/win10-hidden-pt/prepare/begin
     33 mkdir -p /etc/libvirt/hooks/qemu.d/win10-hidden-pt/release/end
     34 
     35 cat <<EOL >> /etc/libvirt/hooks/qemu.d/win10-hidden-pt/prepare/begin/start.sh
     36 #!/bin/bash
     37 set -x
     38 
     39 source "/etc/libvirt/hooks/kvm.conf"
     40 
     41 #systemctl stop sddm.service
     42 killall Hyprland
     43 
     44 echo 0 > /sys/class/vtconsole/vtcon0/bind
     45 echo 0 > /sys/class/vtconsole/vtcon1/bind
     46 echo efi-framebuffer.0 > /sys/bus/platform/drivers/efi-framebuffer/unbind
     47 sleep 10
     48 modprobe -r nvidia_drm
     49 modprobe -r nvidia_modeset
     50 modprobe -r drm_kms_helper
     51 modprobe -r nvidia
     52 modprobe -r i2c_nvidia_gpu
     53 modprobe -r drm
     54 modprobe -r nvidia_uvm
     55 
     56 virsh nodedev-detach $VIRSH_GPU_VIDEO
     57 virsh nodedev-detach $VIRSH_GPU_AUDIO
     58 
     59 modprobe vfio
     60 modprobe vfio_pci
     61 modprobe vfio_iommu_type1
     62 
     63 #./usr/share/UnbindUSB/vfio-usb.sh 0000:00:14.0
     64 EOL
     65 
     66 cat <<EOL >> /etc/libvirt/hooks/qemu.d/win10-hidden-pt/release/end/revert.sh
     67 #!/bin/bash
     68 set -x
     69 source "/etc/libvirt/hooks/kvm.conf"
     70 
     71 modprobe -r vfio_pci
     72 modprobe -r vfio_iommu_type1
     73 modprobe -r vfio
     74 
     75 virsh nodedev-reattach $VIRSH_GPU_VIDEO
     76 virsh nodedev-reattach $VIRSH_GPU_AUDIO
     77 
     78 echo 1 > /sys/class/vtconsole/vtcon0/bind
     79 echo 0 > /sys/class/vtconsole/vtcon1/bind
     80 
     81 nvidia-xconfig --query-gpu-info > /dev/null 2>&1
     82 
     83 echo "efi-framebuffer.0" > /sys/bus/platform/drivers/efi-framebuffer/bind
     84 
     85 modprobe nvidia_drm
     86 modprobe nvidia_modeset
     87 modprobe drm_kms_helper
     88 modprobe nvidia
     89 modprobe drm
     90 modprobe nvidia_uvm
     91 
     92 #systemctl start sddm.service
     93 
     94 #echo 0000:00:14.0 > /sys/bus/pci/drivers/vfio-pci/unbind
     95 #echo 0000:00:14.0 > /sys/bus/pci/drivers/xhci_hcd/bind
     96 EOL
     97 
     98 chmod +x /etc/libvirt/hooks/qemu.d/win10-hidden-pt/prepare/begin/start.sh
     99 chmod +x /etc/libvirt/hooks/qemu.d/win10-hidden-pt/release/end/revert.sh
    100 
    101 case "$(readlink -f /sbin/init)" in
    102   *systemd*)
    103 cat <<EOL >> /etc/libvirt/hooks/qemu.d/win10-hidden-pt/prepare/begin/cpuisolation.sh
    104 #!/bin/sh
    105 systemctl set-property --runtime -- user.slice AllowedCPUs=0,6
    106 systemctl set-property --runtime -- system.slice AllowedCPUs=0,6
    107 systemctl set-property --runtime -- init.scope AllowedCPUs=0,6
    108 EOL
    109 cat <<EOL >> /etc/libvirt/hooks/qemu.d/win10-hidden-pt/release/end/cpurevert.sh
    110 #!/bin/sh
    111 systemctl set-property --runtime -- user.slice AllowedCPUs=0-11
    112 systemctl set-property --runtime -- system.slice AllowedCPUs=0-11
    113 systemctl set-property --runtime -- init.scope AllowedCPUs=0-11
    114 EOL
    115     ;;
    116   *dinit*)
    117     pacman --noconfirm -S libvirt-dinit
    118 cat <<EOL >> /etc/libvirt/hooks/qemu.d/win10-hidden-pt/prepare/begin/cpuisolation.sh
    119 #!/bin/sh
    120 echo "+cpuset" > /sys/fs/cgroup/cgroup.subtree_control
    121 echo "0,6" > /sys/fs/cgroup/1/cpuset.cpus
    122 EOL
    123 cat <<EOL >> /etc/libvirt/hooks/qemu.d/win10-hidden-pt/release/end/cpurevert.sh
    124 #!/bin/sh
    125 echo "0-11" > /sys/fs/cgroup/1/cpuset.cpus
    126 echo "+cpuset" > /sys/fs/cgroup/cgroup.subtree_control
    127 EOL
    128     ;;
    129 esac
    130 
    131 chmod +x /etc/libvirt/hooks/qemu.d/win10-hidden-pt/prepare/begin/cpuisolation.sh
    132 chmod +x /etc/libvirt/hooks/qemu.d/win10-hidden-pt/release/end/cpurevert.sh
    133 
    134 
    135 cat <<EOL >> /etc/libvirt/hooks/kvm.conf
    136 VIRSH_GPU_VIDEO=pci_0000_01_00_0
    137 VIRSH_GPU_AUDIO=pci_0000_01_00_1
    138 EOL
    139 
    140 # usermod -aG libvirt,kvm,input,audio,video "$PERMUSER"
    141 usermod -aG libvirt,input "$PERMUSER"