kvm

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

gpu_pass.sh (4003B)


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