For work I run a personal and a work VM on my laptop. When I was at
VMware I dogfooded internal builds of Workstation which worked well,
but was always a challenge to have its additions consistently building
against latest kernels. About 5 and half years ago, the only
practical alternative option was VirtualBox. IIRC SPICE maybe didn't even exist or was very early,
and while VNC is OK to fiddle with something, completely impractical
for primary daily use.
VirtualBox is fine, but there is the promised land of all the great
features of qemu/kvm and many recent improvements in 3D integration
always calling. I'm trying all this on my Fedora 28 host, with a
Fedora 28 guest (which has been in-place upgraded since Fedora 19), so
everything is pretty recent. Periodically I try this conversion
again, but, spoiler alert, have not yet managed to get things quite
right.
As I happened to close an IRC window, somehow my client seemed to
crash X11. How odd ... so I thought, everything has just disappeared
anyway; I might as well try switching again.
Image conversion has become much easier. My primary VM has a number
of snapshots, so I used the VirtualBox GUI to clone the VM and
followed the prompts to create the clone with squashed snapshots.
Then simply convert the VDI to a RAW image with
$ qemu-img convert -p -f vdi -O raw image.vdi image.raw
Note if you forget the progress meter, send the pid a SIGUSR1 to
get it to spit out a progress.
virt-manager has come a long way too.
Creating a new VM was trivial. I wanted to make sure I was using all
the latest SPICE gl etc., stuff. Here I hit some problems with what
seemed to be permission denials on drm devices before even getting
the machine started. Something suggested using libvirt in session
mode, with the qemu:///session URL -- which seemed more like what
I want anyway (a VM for only my user). I tried that, put the
converted raw image in my home directory and the VM would boot. Yay!
It was a bit much to expect it to work straight away; while GRUB did
start, it couldn't find the root disks. In hindsight, you should
probably generate a non-host specific initramfs before converting
the disk, so that it has a larger selection of drivers to find the
boot devices (especially the modern virtio drivers). On Fedora that
would be something like
sudo dracut --no-hostonly --regenerate-all -f
As it turned out, I "simply" attached a live-cd and booted into that,
then chrooted into my old VM and regenerated the initramfs for the
latest kernel manually. After this the system could find the LVM
volumes in the image and would boot.
After a fiddly start, I was hopeful. The guest kernel dmesg DRM
sections showed everything was looking good for 3D support, along with
the glxinfo showing all the virtio-gpu stuff looking correct.
However, I could not get what I hoped was trivial automatic window
resizing happening no matter what. After a bunch of searching,
ensuring my agents were running correctly, etc. it turns out that has
to be implemented by the window-manager now, and it is not supported
by my preferred XFCE (see
https://bugzilla.redhat.com/show_bug.cgi?id=1290586). Note you
can do this manually with xrandr --output Virtual-1 --auto to get
it to resize, but that's rather annoying.
I thought that it is 2018 and I could live with Gnome, so installed
that. Then I tried to ping something, and got another selinux denial
(on the host) from qemu-system-x86 creating icmp_socket. I am
guessing this has to do with the interaction between libvirt session
mode and the usermode networking device (filed
https://bugzilla.redhat.com/show_bug.cgi?id=1609142). I figured
I'd limp along with ICMP and look into details later...
Finally when I moved the window to my portrait-mode external monitor,
the SPICE window expanded but the internal VM resolution would not
expand to the full height. It looked like it was taking the height
from the portrait-orientation width.
Unfortunately, forced swapping of environments and still having
two/three non-trivial bugs to investigate exceeded my practical time
to fiddle around with all this. I'll stick with VirtualBox for a
little longer; 2020 might be the year!