Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- vmname="windows10vm"
- #SET EXTRA DEVICE NAMES
- keyboardName="Vengeance K70R"
- mouseName="Mouse G300"
- storage="/dev/sdc"
- getbusaddr() {
- local OPTIND
- local bus=`lsusb | grep "$*" | awk '{ print $2 }' | sed 's/0//g'`
- local addr=`lsusb | grep "$*" | awk '{ print $4 }' | sed -r 's/[0|\:| ]//g'`
- echo -n "-device usb-host,hostbus=$bus,hostaddr=$addr"
- }
- echo USB DEVICES:
- echo $keyboardName, $mouseName
- usbdev="`getbusaddr $keyboardName` `getbusaddr $mouseName`"
- echo -e "\"$usbdev\""
- echo ""
- #CHECK IF TAP DEVICE EXISTS, CREATE IT IF NOT
- checkiface=`ip link show tap0 | wc -l`
- if [ $checkiface -lt 1 ]; then
- echo "creating TAP device and bridge"
- ip link add br0 type bridge
- ip addr flush dev enp3s0f1
- ip link set enp3s0f1 master br0
- ip tuntap add dev tap0 mode tap user nat
- ip link set tap0 master br0
- ip link set dev br0 up
- ip link set dev tap0 up
- else
- echo "TAP device already exists, skipped creation"
- fi
- echo ""
- #VFIO BIND CONFIG FILE
- echo "Binding VFIO devices"
- configfile=/etc/vfio-pci.cfg
- # VFIO BIND
- vfiobind() {
- if [ -z $1 ]
- then
- exit 1
- else
- dev="$1"
- vendor=$(cat /sys/bus/pci/devices/$dev/vendor)
- device=$(cat /sys/bus/pci/devices/$dev/device)
- if [ -e /sys/bus/pci/devices/$dev/driver ]; then
- echo $dev > /sys/bus/pci/devices/$dev/driver/unbind
- fi
- echo $vendor $device > /sys/bus/pci/drivers/vfio-pci/new_id
- fi
- }
- #CHECK IF VM IS RUNNING THEN BIND VFIO DEVICES
- if ps -A | grep -q $vmname; then
- echo "$vmname is already running." &
- exit 1
- else
- cat $configfile | while read line;do
- echo $line | grep ^# > /dev/null 2>&1 && continue
- echo $configfile
- echo $line
- vfiobind $line
- done
- cp /usr/share/edk2.git/ovmf-x64/OVMF_VARS-pure-efi.fd /tmp/my_vars.fd
- echo ""
- #UNCOMMENT FOR DUMMY RUN
- #exit 1
- #START VM
- echo "Starting Michaelsoft Binbows..."
- qemu-system-x86_64 \
- -name $vmname,process=$vmname -pidfile /run/qemu_ex.pid \
- -machine type=q35,accel=kvm -enable-kvm \
- -cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time \
- -smp 3,sockets=1,cores=3 -m 6G -mem-path /dev/hugepages -mem-prealloc -balloon none -rtc clock=host,base=localtime \
- -nographic -vga none -serial null -parallel none -usb \
- -device vfio-pci,host=06:00.0,multifunction=on \
- -device vfio-pci,host=06:00.1 -device vfio-pci,host=05:06.0 -device vfio-pci,host=02:00.0 \
- -drive if=pflash,format=raw,readonly,file=/usr/share/edk2.git/ovmf-x64/OVMF_CODE-pure-efi.fd \
- -drive if=pflash,format=raw,file=/tmp/my_vars.fd \
- -boot order=c \
- -device virtio-scsi-pci,id=scsi \
- -drive id=disk0,if=virtio,format=raw,file=/dev/sda \
- -drive id=disk1,if=virtio,format=raw,file=$storage \
- -device e1000,netdev=network0,mac=52:55:00:d1:55:01 \
- -netdev tap,id=network0,ifname=tap0,script=no,downscript=no \
- $usbdev
- exit 0
- fi
Add Comment
Please, Sign In to add comment