Add configuration support for libvirt (KVM/QEMU) as a virtual machine provider.
Description
Details
- Reference
- bz69223
Subject | Repo | Branch | Lines +/- | |
---|---|---|---|---|
Restore libvirt support | mediawiki/vagrant | master | +17 -17 | |
Add support for libvirt (KVM/QEMU) | mediawiki/vagrant | master | +52 -3 |
Related Objects
Event Timeline
Working with a volunteer in this at the hackathon.
Some things we are trying:
$ vagrant plugin install vagrant-kvm
$ vagrant plugin install vagrant-mutate
$ vagrant mutate trusty-cloud kvm
$ vagrant up --provider=kvm
You may need things like:
$ apt-get install redir
$ apt-get install apparmor-utils
$ sudo aa-complain /usr/lib/libvert/virt-aa-helper
We added a config block for the kvm provider that was basically a copy of the vagrant provider block.
I'm interested in this because using KVM and VirtualBox is mutually exclusive and for my distribution (Fedora) libvirt seems to be the preferred virtualization solution. I added:
# libvirt (KVM/QEMU) provider config.vm.provider :libvirt do |_libvirt, override| override.vm.box = 'trusty-cloud' override.vm.network :private_network, ip: settings[:static_ip] end
and:
config.vm.provider :libvirt do |libvirt| libvirt.driver = 'qemu' end
to Vagrantfile. I then converted the trusty-cloud box that VirtualBox is downloading with [[https://github.com/sciurus/vagrant-mutate|vagrant mutate]] to a libvirt box (it would be nice if in the long run there would be an official/trustable source for an already-converted box).
After that, a vagrant up (Vagrant 1.7.4, vagrant-libvirt 0.0.30) times out on my system when trying to mount NFS. If I vagrant ssh afterwards and try to repeat the mount:
vagrant@mediawiki-vagrant:~$ sudo mount -o 'vers=3,udp' 192.168.121.1:'/home/tim/src/mediawiki-vagrant/libvirt-test' /vagrant mount.nfs: Connection timed out vagrant@mediawiki-vagrant:~$
(A NFS server with /etc/exports set up by vagrant is running on the host.)
As I had trouble with NFS with VirtualBox as well, I also tried 9p by adding type: '9p' to config.vm.synced_folder calls. This will fail first – as shown by sudo dmesg | tail on the guest – because it doesn't understand the mount option access=vagrant. If I remove that option, the mount "succeeds", but any access (sudo ls -l /vagrant) fails with access denied.
The last resort type: 'rsync' worked (AFAICT; Puppet is still running), but as its functionality is severely limited compared to NFS and 9p, that's not a real-life option.
9p failed due to owner being set to vagrant in synced_folder which produces the access=vagrant option for the mount call; I have filed that upstream. To work around that/fix that on mediawiki/vagrant's side, owner would need not to be set when nfs_shares is false.
But I've run into general permission problems on my host then (the VM not being allowed to read/write my directory), so I couldn't test so far that that will indeed work.
(NFS failed first because the firewall blocked it and, after I fixed that, because it requires vers=3 as a mount option from a Trusty client to a Fedora 23 server. I will submit a patch that introduces a nfs_force_v3 option for that.)
Change 280785 had a related patch set uploaded (by Tim Landscheidt):
Add support for libvirt (KVM/QEMU)
https://gerrit.wikimedia.org/r/280785, https://gerrit.wikimedia.org/r/280786 and https://gerrit.wikimedia.org/r/280787 are a snapshot of my current progess. It's still abysmally slow, and commenting out shared_apt_cache is just one case where the VM failed when trying to write as root to the shared folder. The POC in T128304#2081875 is much better for libvirt on my machine.
That was working at some point for sure thanks to https://gerrit.wikimedia.org/r/#/c/280785/
As part of bumping it to Jessie (T154296) I managed to provision a vagrant box based on Jessie :]
Change 399945 had a related patch set uploaded (by Hashar; owner: Hashar):
[mediawiki/vagrant@master] Restore libvirt support
Change 399945 merged by jenkins-bot:
[mediawiki/vagrant@master] Restore libvirt support