Skip to content

Instantly share code, notes, and snippets.

@timss
Last active August 20, 2017 10:42
Show Gist options
  • Select an option

  • Save timss/9f4930afe15133d17fa9d35c77a4b800 to your computer and use it in GitHub Desktop.

Select an option

Save timss/9f4930afe15133d17fa9d35c77a4b800 to your computer and use it in GitHub Desktop.
ion notes (i3 / kde / iommu)
# /etc/fstab
defaults,ssd,noatime,compress=lzo
# defrag/recompress post-install
btrfs filesystem defragment -r -v -c lzo / /home
# fstrim (weekly trim)
cp /usr/share/doc/util-linux/examples/fstrim.{service,timer} /etc/systemd/system
systemctl enable fstrim.timer
# check actual disk usage
btrfs filesystem df -h /
# /tmp tmpfs
cp /usr/share/systemd/tmp.mount /etc/systemd/system
systemctl daemon-reload
systemctl enable tmp.mount
# take snapshot
# https://btrfs.wiki.kernel.org/index.php/Incremental_Backup
btrfs subvolume snapshot -r /home /home/BACKUP
sync
...
# https://awesome.naquadah.org/wiki/KDE_and_awesome
# i3 with friends
sudo apt install i3 j4-dmenu-desktop i3blocks suckless-tools feh compton
# i3-gaps
sudo apt install libxcb1-dev libxcb-keysyms1-dev libpango1.0-dev\
libxcb-util0-dev libxcb-icccm4-dev libyajl-dev libstartup-notification0-dev\
libxcb-randr0-dev libev-dev libxcb-cursor-dev libxcb-xinerama0-dev\
libxcb-xkb-dev libxkbcommon-dev libxkbcommon-x11-dev\
mkdir -p ~/code/i3-gaps
git clone https://github.com/Airblader/i3 $_
cd $_
make
sudo make install
# /usr/share/ksmserver/windowmanagers/i3.desktop
[Desktop Entry]
Encoding=UTF-8
Name=i3
Comment=i3wm
Type=XSession
Exec=i3
TryExec=i3
# systemsettings5
Default applications -> Window Manager -> i3
# disable plasma and krunner
mkdir -p ~/.config/autostart && cd $_
cp /etc/xdg/autostart/{plasma-desktop,krunner}.desktop .
echo "Hidden=true" >> *.desktop
# or to just disable kwin's decoration and titlebar
kcmshell5 kwinrules -> new -> 'appearances and fixes': 'no titlebar and frame' => (apply initially, yes)
# https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF#Using_vfio-pci
# https://wiki.archlinux.org/index.php/Libvirt
# https://wiki.debian.org/libvirt#
# https://www.kernel.org/doc/Documentation/vfio.txt
# http://www.linux-kvm.org/downloads/lersek/ovmf-whitepaper-c770f8c.txt
# http://vfio.blogspot.no/
# http://vfio.blogspot.no/2014/08/vfiovga-faq.html
# http://vfio.blogspot.no/2015/05/vfio-gpu-how-to-series-part-4-our-first.html
# https://www.youtube.com/watch?v=16dbAUrtMX4
# https://www.reddit.com/r/linux/comments/4v41si/what_is_the_current_state_of_gpu_passthrough_on/
# https://www.reddit.com/r/VFIO/wiki/index
# https://www.reddit.com/r/VFIO/comments/4kuvxs/setting_up_a_kvmqemu_vga_passthrough_gaming_vm/
# https://virtualkvm.com/viewtopic.php?id=20
# http://blog.vmsplice.net/2011/04/how-to-pass-qemu-command-line-options.html
I/O MMU
=======
# Asus UEFI BIOS
Advanced -> System Agent (SA) Configuration -> Primary Display: IGFX
DVMT: max (512M)
# /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
$ update-grub
$ dmesg | grep -e DMAR -e IOMMU
[ 0.000000] Kernel command line: BOOT_IMAGE=/vmlinuz-4.5.0-1-amd64 root=UUID=d00f8cfc-af66-4786-8137-c15d9263b67c ro quiet intel_iommu=on
[ 0.000000] DMAR: IOMMU enabled
...
# https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF
$ for group in (find /sys/kernel/iommu_groups/ -maxdepth 1 -mindepth 1 -type d);
echo "IOMMU group" (basename $group):
for device in (ls -1 $group/devices/);
echo -ne '\t'
lspci -nns $device
end
echo
end
IOMMU group 0:
00:00.0 Host bridge [0600]: Intel Corporation Sky Lake Host Bridge/DRAM Registers [8086:191f] (rev 07)
IOMMU group 1:
00:01.0 PCI bridge [0604]: Intel Corporation Sky Lake PCIe Controller (x16) [8086:1901] (rev 07)
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GM204 [GeForce GTX 970] [10de:13c2] (rev a1)
01:00.1 Audio device [0403]: NVIDIA Corporation GM204 High Definition Audio Controller [10de:0fbb] (rev a1)
...
# /etc/modprobe.d/vfio.conf
options vfio-pci ids=10de:13c2,10de:0fbb
# /etc/initramfs-tools/modules
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
# update initrd
$ update-initramfs -u
# verify vfio modules loaded
$ dmesg | grep -i vfio
[ 0.979715] VFIO - User Level meta-driver version: 0.3
[ 1.006046] vfio_pci: add [10de:13c2[ffff:ffff]] class 0x000000/00000000
[ 1.021938] vfio_pci: add [10de:0fbb[ffff:ffff]] class 0x000000/00000000
$ lspci -knn -d 10de:13c2
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GM204 [GeForce GTX 970] [10de:13c2] (rev a1)
Subsystem: eVga.com. Corp. GM204 [GeForce GTX 970] [3842:3975]
Kernel driver in use: vfio-pci
Kernel modules: nouveau
Guest OS
========
# install libvirt with friends
$ apt install qemu virt-manager hwloc
# reload kvm kernel drivers, or reboot
$ modprobe kvm kvm_intel
# add user to libvirt groups
# /usr/share/polkit-1/rules.d/60-libvirt.rules
$ gpasswd -a <user> kvm
$ gpasswd -a <user> libvirt
$ gpasswd -a <user> libvirt-qemu
# download latest OVMF packages
# https://www.kraxel.org/repos/jenkins/edk2/
$ wget https://www.kraxel.org/repos/jenkins/edk2/edk2.git-ovmf-x64-0-20160728.b2020.g2c855d3.noarch.rpm
$ rpm2cpio edk2.git-ovmf-x64-0-20160728.b2020.g2c855d3.noarch.rpm | cpio -idmv
$ cp -R ./usr/share/* /usr/share/
# configure OVMF UEFI firmware for QEMU
# /etc/libvirt/qemu.conf
nvram = [
"/usr/share/edk2.git/ovmf-x64/OVMF_CODE-pure-efi.fd:/usr/share/edk2.git/ovmf-x64/OVMF_VARS-pure-efi.fd"
]
# TODO:
# run libvirt/qemu with your own user instead of root
# still configured as --system ?
# /etc/libvirt/qemu.conf
user = "<user>"
# start libvirt shell on a system level
# remember to run as root
$ virsh -c qemu:///system
# change or create default pool
$ virsh pool-edit default
$ virsh pool-define-as default dir - - - - /var/lib/libvirt/images
# dedicated disk with seperate LVM storage pool for better performance
$ fdisk /dev/sdX => delete partitions
$ virsh pool-define-as lvm_guest_images logical\
--source-dev /dev/sdX\
--source-name vg_libvirt\
--target /dev/vg_libvirt
$ virsh pool-build lvm_guest_images
$ virsh pool-start lvm_guest_images
$ virsh pool-autostart lvm_guest_images
# autostart default NAT network
$ virsh net-autostart default
# create virtual machine
# see XML dump storages
1. Local install
2. ISO image: win8/win10 with bootx64.efi
3. OS type: windows, 8/10
4. 4G ram, 4 CPUs
5. Custom storage:
a. Default storage pool (fs): new volume => raw (.img), max: x GB, alloc: 0 GB
b. LVM storage pool: new volume => name: <same as guest>
6. Customize configuration before install
7. Overview -> Firmware: UEFI
8. CPUs -> Model: host-passthrough, manual topology: 1/2/2
9: Add hardwware -> Storage -> Custom storage -> VirtIO driver ISO -> CDROM
10. Load Windows ISO image on original CDROM
# start the machine from uefi shell
# http://wiki.osdev.org/UEFI#Launching_UEFI_applications
- FS0:\EFI\BOOT\BOOTX64.EFI
# load virtio drivers in setup
load drivers => viostor => w10 => amd64
# add latest VirtIO windows drivers
# https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/
1. Install using normal IDE drive
1. Add hardware -> Controller -> SCSI -> VirtIO SCSI
3. Add new VirtIO disk (storage format: raw, I/O mode: native, cache mode: none)
4. Install VirtIO drivers if not during setup
5. Configure new VirtIO disk, check if working
6. Shutdown
7. Remove new VirtIO disk
8. Change original IDE to VirtIO
9. Change NIC to VirtIO
10. Boot
# bridged networking
# doesn't work with wireless NIC..
# https://www.happyassassin.net/2014/07/23/bridged-networking-for-libvirt-with-networkmanager-2014-fedora-21/
# https://www.reddit.com/r/VFIO/comments/4kuvxs/setting_up_a_kvmqemu_vga_passthrough_gaming_vm/d3id42x
# install VirtIO ethernet
1. device manager
2. update drivers (ethernet controller)
3. NetKVM
# TODO: what about io='native' ?
# enable IOthreads for seperate threading, one per device
$ virsh edit win10x64
<domain>
...
<iothreads>1</iothreads>
...
<disk type='...' device='disk'>
<driver name='qemu' type='raw' cache='none' iothread='1'/>
...
</disk>
...
</domain>
# cpu pinning, quad core with hyperthreading
# avoids unnecessary context switches between cores for VM threads
# editing using virsh might not work because of xml fuckery, use cpupin command
# https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF#CPU_pinning
$ lstopo # find thread pairs
$ cat /proc/cpuinfo | grep -e "processor" -e "core id" -e "^$"
$ virsh vcpupin win10x64 --config --vcpu 0 --cpulist 4
$ virsh vcpupin win10x64 --config --vcpu 1 --cpulist 5
$ virsh vcpupin win10x64 --config --vcpu 2 --cpulist 6
$ virsh vcpupin win10x64 --config --vcpu 3 --cpulist 7
# static huge pages (i.e. vs default 4K)
# reserves hugepagesize * pages, e.g. 2M * 2048 =~ 4GB ram
# https://wiki.debian.org/Hugepages
# https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF#Static_huge_pages
# TODO:
# - manually setup hugepages? looks like libvirt does it (`mount | grep huge`)
# - limits.conf and memory locking
# - not working, "cannot allocate memory [..]"
$ virsh edit win10x64
...
<memoryBacking>
<hugepages/>
</memoryBacking>
$ groupadd hugetlbfs
$ adduser <user> <hugetlbfs-gid>
$ vim /etc/sysctl.d/10-hugepages.conf
vm.nr_hugepages = 4
vm.hugetlb_shm_group = <hugetlbfs-gid>
$ mkdir /hugepages
$ vim /etc/fstab
hugetlbfs /hugepages hugetlbfs mode=1770,gid=<hugetlbfs-gid> 0 0
$ vim /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="hugepages=2048 .." # 2M * 2048 = 4G
GRUB_CMDLINE_LINUX_DEFAULT="hugepagesz=1GB hugepages=4 .." # if pdpe1gb in cpu
$ sudo update-initramfs -u # reboot to apply changes
# install tightvnc-server, ensure start on boot, no auth
# http://www.tightvnc.com/download.php
# connect using remmina, no security, best quality, 16bit
# or vncviewer
$ vncviewer -compressionlevel 1 -quality 9 192.168.122.21
# disable win10 tracking
# https://www.microsoft.com/en-us/download/details.aspx?id=8328
# https://www.microsoft.com/en-us/download/details.aspx?id=14632
# https://github.com/10se1ucgo/DisableWinTracking
# stop 'code 43' in device manager, i.e. nvidia blocking virtualized usage
# happens when nvidia driver detects vendor id to be hyperv (qemu default)
# http://vfio.blogspot.no/2014/08/upstream-updates-for-august-26th-2014.html
# https://www.redhat.com/archives/vfio-users/2016-March/msg00094.html
# https://bbs.archlinux.org/viewtopic.php?pid=1546354#p1546354
# https://www.reddit.com/r/linux_gaming/comments/473guu/nvidias_hyperv_detection_can_now_be_fooled_when/
# https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF#.22Error_43_:_Driver_failed_to_load.22_on_Nvidia_GPUs_passed_to_Windows_VMs
$ virsh edit win10x64
<features>
<hyperv>
<vendor_id state='on' value='novidya'/>
...
</hyperv>
<kvm>
<hidden state='on'/>
...
</kvm>
</features>
# TODO: remove config that disable hypervisor extensions?
# https://www.reddit.com/r/VFIO/comments/479xnx/guests_with_nvidia_gpus_can_enable_hyperv/d628o5x
# alternatively, use a wrapper script around qemu:
$ virsh edit win10x64
<devices>
<emulator>/usr/local/lib/libvirt/qemu-system-x86_64-vendor</emulator>
</devices>
$ vim /usr/local/lib/libvirt/qemu-system-x86_64-vendor
#!/bin/sh
exec /usr/bin/qemu-system-x86_64 \
`echo "\$@" | sed 's|hv_time|hv_time,hv_vendor_id=novidya|g'`
# add PCI graphics card
1. Turn off VM
2. Add hardware -> PCI host device -> GPU + GPU audio
3. Turn on VM and install drivers as usual
4. Configure graphics drivers to maximum performance etc
# attach/detach keyboard and mouse
# use vendor and product id from lsusb
# seperate xml files to be easier to configure
# http://www.linux-usb.org/usb.ids
$ lsusb
$ vim /usr/local/etc/libvirt/qemu/{keyboard,mouse}.xml
<hostdev mode='subsystem' type='usb' managed='no'>
<source>
<vendor id='0x<vendor>'/>
<product id='0x<product>'/>
</source>
</hostdev>
$ vim /usr/local/lib/libvirt/qemu-{attach,detach}-peripherals
#!/usr/bin/env bash
if [ $# -lt 1 ]; then
echo "Usage: $0 domain"
exit 1
fi
vm="$1"
keyboard="/usr/local/etc/libvirt/qemu/keyboard.xml"
mouse="/usr/local/etc/libvirt/qemu/mouse.xml"
if [[ $(virsh domstate $vm) == 'running' ]]; then
cmd="{attach,detach}"
else
cmd="{attach,detach"
fi
virsh $cmd-device $vm $keyboard
virsh $cmd-device $vm $mouse
$ visudo -f /etc/sudoers.d/qemu
<user> <host> = (root) NOPASSWD: /usr/local/lib/libvirt/qemu-attach-peripherals
<user> <host> = (root) NOPASSWD: /usr/local/lib/libvirt/qemu-detach-peripherals
<user> <host> = (root) NOPASSWD: /usr/local/lib/libvirt/qemu-toggle-peripherals
# TODO:
# - disable one of the monitors using xrandr
# - synergy? what about latency?
# https://www.reddit.com/r/VFIO/comments/4ol6u7/automatically_switching_monitor_to_guest_on_boot/
# TODO: don't remove 'sound' hardware (ich6?) earlier in guide
# connect QEMU sound output to Pulseaudio on host machine
# https://askubuntu.com/questions/719819/libvirt-configure-guest-to-share-host-audio
$ gpasswd -a <user> pulse
$ gpasswd -a <user> pulse-access
$ apt install paprefs
- Make discoverable PulseAudio network sound devices available locally
- Enable network access to local sound devices
- Dont require authnetication
- Enable Multicast/RTP reciever
- Add virtual output device for simultaneous output on all local sound cards
$ vim ~/.config/pulse/client.conf
enable-shm = yes
auto-connect-localhost = yes
auto-connect-display = yes
$ vim ~/.config/pulse/daemon.conf
daemonize = yes
allow-module-loading = yes
use-pid-file = Yes
enable-shm = yes
$ virsh edit win10x64
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'\>
...
<qemu:commandline>
<qemu:env name='QEMU_AUDIO_DRV' value='pa'/>
<qemu:env name='QEMU_PA_SERVER' value='/run/user/<uid>/pulse/native'/>
</qemu:commandline>
</domain>
# TODO: 44.1khz sample rate for both host and guest?
# if crackling or poor sound quality is experienced, switch ich6 with ac97
# http://stackoverflow.com/a/35998501/1076493
# misc
sudo apt install apt-listbugs aptitude command-not-found cpufrequtils dfc fish\
git htop lm-sensors mlocate powertop screenfetch speedtest-cli terminator\
tmux tree unp vim-gtk xclip colordiff saidar mpv python-pip\
python-virtualenv nfs-common bpython
sudo pip install youtube-dl livestreamer
sudo update-command-not-found
sudo updatedb
# kde
sudo apt install ark filelight gimp gwenview kate kcolorchooser\
kde-plasma-desktop kshutdown ksnapshot kwin-x11 mplayerthumbs okular\
plasma-nm plasma-pa
# gnome/gtk breeze
sudo apt install gtk2-engines-pixbuf
git clone https://github.com/dirruk1/gnome-breeze
sudo find gnome-breeze/Breeze* -type f -exec install -Dm644 '{}' '~/.themes/{}' \;
# old iceweasel release for addon compability
cd ~/downloads
wget http://snapshot.debian.org/archive/debian/20160214T162122Z/pool/main/i/iceweasel/iceweasel_44.0.2-1_amd64.deb
sudo dpkg -i $_
# vimpager
mkdir -p ~/code/vimpager
git clone https://github.com/rkitover/vimpager $_
cd $_
sudo make install-deb
# -----------
# /etc/default/cpufrequtils
#
# /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
# performance powersave
GOVERNOR=performance
# -----------
# dotfiles
mkdir ~/config/ && cd $_
for i in timss/dotfiles.git timss/vimconf.git GaveKort/DesktopRice.git; do
git clone [email protected]:$i
done
cd $HOME
mv ~/.bashrc{,_original}
for i in .alias .bashrc .gitconfig .gitignore-global .tmux.conf .vimpagerrc .vimperatorrc .vimrc.last .vimrc.plugins; do
ln -s ~/config/dotfiles/$i .
done
mv ~/.config/user-dirs.dirs{,_original}
ln -s ~/config/dotfiles/.config/user-dirs.dirs ~/.config/
for i in Documents Downloads Music Pictures Videos; do
mv $i $(echo $i | tr '[:upper:]' '[:lower:]');
done
mv Desktop .desktop
rmdir Public Templates
rm -r ~/.thumbnails
ln -s /dev/null ~/.thumbnails
mkdir -p ~/.config/terminator
ln -s ~/config/dotfiles/.config/terminator/config ~/.config/terminator/config
ln -s ~/config/vimconf/.vimrc .
vim .vimrc
$ pacmd list-source-outputs
1 source output(s) available.
index: 2
driver: <protocol-native.c>
flags:
state: RUNNING
source: 2 <alsa_input.0.analog-stereo>
volume: front-left: 60138 / 92% / -2.24 dB, front-right: 60138 / 92% / -2.24 dB
balance 0.00
muted: no
current latency: 0.00 ms
requested latency: 371.52 ms
sample spec: s16le 2ch 44100Hz
channel map: front-left,front-right
Stereo
resample method: (null)
owner module: 9
client: 12 </run/user/1000/pulse/native>
properties:
media.name = "qemu"
application.name = "/run/user/1000/pulse/native"
native-protocol.peer = "UNIX socket client"
native-protocol.version = "31"
application.process.id = "6656"
application.process.user = "tim"
application.process.host = "ion"
application.process.binary = "qemu-system-x86_64"
application.language = "C"
application.process.machine_id = "7767ee77256f4c3c9de849899406413e"
module-stream-restore.id = "source-output-by-application-name:/run/user/1000/pulse/native"
<domain type='kvm' id='10'>
<name>win10x64</name>
<uuid>80cf37f1-1cdc-4d72-bdbe-3ec354cdb548</uuid>
<memory unit='KiB'>4194304</memory>
<currentMemory unit='KiB'>4194304</currentMemory>
<vcpu placement='static'>4</vcpu>
<cputune>
<vcpupin vcpu='0' cpuset='4'/>
<vcpupin vcpu='1' cpuset='5'/>
<vcpupin vcpu='2' cpuset='6'/>
<vcpupin vcpu='3' cpuset='7'/>
</cputune>
<resource>
<partition>/machine</partition>
</resource>
<os>
<type arch='x86_64' machine='pc-i440fx-2.6'>hvm</type>
<loader readonly='yes' type='pflash'>/usr/share/edk2.git/ovmf-x64/OVMF_CODE-pure-efi.fd</loader>
<nvram>/var/lib/libvirt/qemu/nvram/win10x64_VARS.fd</nvram>
<boot dev='hd'/>
</os>
<features>
<acpi/>
<apic/>
<hyperv>
<relaxed state='on'/>
<vapic state='on'/>
<spinlocks state='on' retries='8191'/>
<vendor_id state='on' value='novidya'/>
</hyperv>
<kvm>
<hidden state='on'/>
</kvm>
<vmport state='off'/>
</features>
<cpu mode='host-passthrough'>
<topology sockets='1' cores='2' threads='2'/>
</cpu>
<clock offset='localtime'>
<timer name='rtc' tickpolicy='catchup'/>
<timer name='pit' tickpolicy='delay'/>
<timer name='hpet' present='no'/>
<timer name='hypervclock' present='yes'/>
</clock>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<pm>
<suspend-to-mem enabled='no'/>
<suspend-to-disk enabled='no'/>
</pm>
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='raw' cache='none' io='native'/>
<source file='/home/tim/os/libvirt/images/win10x64.img'/>
<backingStore/>
<target dev='vdb' bus='virtio'/>
<alias name='virtio-disk1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
</disk>
<controller type='usb' index='0' model='ich9-ehci1'>
<alias name='usb'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x7'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci1'>
<alias name='usb'/>
<master startport='0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0' multifunction='on'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci2'>
<alias name='usb'/>
<master startport='2'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x1'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci3'>
<alias name='usb'/>
<master startport='4'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x2'/>
</controller>
<controller type='pci' index='0' model='pci-root'>
<alias name='pci.0'/>
</controller>
<controller type='scsi' index='0' model='virtio-scsi'>
<alias name='scsi0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
</controller>
<interface type='network'>
<mac address='52:54:00:59:70:f8'/>
<source network='default' bridge='virbr0'/>
<target dev='vnet0'/>
<model type='virtio'/>
<alias name='net0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
<input type='mouse' bus='ps2'>
<alias name='input0'/>
</input>
<input type='keyboard' bus='ps2'>
<alias name='input1'/>
</input>
<hostdev mode='subsystem' type='pci' managed='yes'>
<driver name='vfio'/>
<source>
<address domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</source>
<alias name='hostdev0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</hostdev>
<hostdev mode='subsystem' type='pci' managed='yes'>
<driver name='vfio'/>
<source>
<address domain='0x0000' bus='0x01' slot='0x00' function='0x1'/>
</source>
<alias name='hostdev1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</hostdev>
<memballoon model='virtio'>
<alias name='balloon0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
</memballoon>
</devices>
<seclabel type='none' model='none'/>
<seclabel type='dynamic' model='dac' relabel='yes'>
<label>+116:+125</label>
<imagelabel>+116:+125</imagelabel>
</seclabel>
</domain>
# /etc/wpa_supplicant.conf
network={
ssid="ssid"
psk="password"
}
# wpa + dhcp
sudo wpa_supplicant -B -i wlp9s0 -c /etc/wpa_supplicant.conf -D wext
sudo dhclient wlp9s0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment