The reason I am enabling this in my virtual machine is to develop with android studio under windows or Linux in a dedicated development machine (Let us call it an android development virtual machine), you will need to enable nested virtualization for the virtual android phone that comes with Android studio, there are many occasions where you need nested virtualization, so let us see what we need to do.
1- Check if our system allows nested virtualization with the following line
cat /sys/module/kvm_intel/parameters/nested
If this returns a Y or a 1, then we are good to go to the next step, if not, then execute the following to enable the feature on the host system
echo 'options kvm_intel nested=1' >> /etc/modprobe.d/qemu-system-x86.conf
Now, with that out of the way, we can move to the next step
2- Enable nested virtualization in the config of the virtual machine, either with virsh edit or edit the file manually and reload it, whatever you are used to doing should work
virsh edit androiddev
Now, specify either host-model OR host-passthrough, host model is more compatible when moving the virtual machine to a new CPU, while host-passthrough will deliver absolutly all CPU features to the guest os, but is very unfriendly to moving the machine to a different KVM host
<cpu mode='host-model'>
This is a simple task, and it is only simple because of foxlet (@FoxletFox on twitter)
Anyway, let us get to setting it up, to begin with, you don’t need to download MacOS, when using foxlet’s macOS-Simple-KVM, your virtual machine downloads MacOS on it’s own
Step 1: Make sure you have KVM ! and the relevant tools
apt-get install qemu-kvm libvirt-daemon qemu-system qemu-utils python3 python3-pip bridge-utils virtinst libvirt-daemon-system virt-manager
You know, the usual kvm setup ;), I am hoping you already have KVM, if not, see this post and install KVM first
Now that you have kvm, you need to insure that vhost_net is installed, loaded and enabled
modprobe vhost_net
lsmod | grep vhost
You will also need git to download macOS-Simple-KVM
git
git clone https://github.com/foxlet/macOS-Simple-KVM.git
Now, download MacOS base image that will download the rest of the operating system (catalina is the latest ?) options in that script are –high-sierra, –mojave, or –catalina.
./jumpstart.sh --catalina
The setup assumed in this post is as follows, you are working on a remote windows computer, there is a Linux KVM host computer running guest virtual machines somewhere (OS of guest irrelevant), and you would like to connect to a guest machine’s console (which may be running windows, linux, macOS, or any operating system)
KVM, by default only allows people to connect through VNC to the console of a virtual machine if they are using the local host computer, so here are the tips on creating a tunnel to the host computer and connecting to your KVM virtual machine.
Windows does not support VNC very well, (Most VNC servers don’t run well on windows), but the VNC server here is not windows, it is KVM that is providing the VNC server to the guest’s console.
1- Create a tunnel (Putty on windows), simply put, save the connection in putty to that host machine, then under tunnels you will need to have something like this
Just create a tunnel for port 5900 and the destination localhost:5900 (5901 for the second virtual machine and so on), leave all other tunnel options unchecked/default
2- to know which ones are enabled on your machine run this command
netstat -tlpn | grep 590
3- VNC should now connect to localhost:9500 for example (I am using tightVNC on windows), and that connection should be automatically router to the KVM host, which will display the guest’s console depending on the port (every guest has it’s own port)
By default, KVM gives your virtual machine a realtek rtl8139 Ethernet adapter, with an ancient 100Mbit/Second speed, we all need gigabit Ethernet adapter for the KVM guest.
The answer is changing the string rtl8139 with virtio in the XML file of the virtual machine, then installing the drivers
The steps i use are
Run virtual machine with the realtek adapter to download the other adapter’s driver
once the adapter is there, shutdown the virtual machine guest (Windows guest), then edit the xml of the guest, and restart libvirtd
start the KVM guest again
open with VNC, start the device manager, install the driver you downloaded.
You are good, the adapter should report the speed of 10Gbit/second (10 gigabit per second)
One annoying thing is that all windows drivers come in a big ISO file, you probably just want the driver you need.
I will add the download links in the coming few days, but you can get them right now if you like from fedora, the fedora windows guest drivers should work on any linux distribution (Debian, ubuntu, etc…)