chiark / gitweb /
buildserver: support optionally using qemu+kvm
authorHans-Christoph Steiner <hans@eds.org>
Mon, 5 Sep 2016 21:21:24 +0000 (23:21 +0200)
committerHans-Christoph Steiner <hans@eds.org>
Mon, 19 Sep 2016 14:33:12 +0000 (16:33 +0200)
This makes it possible to run the full build process in a KVM virtual
machine, like jenkins.debian.net.

closes #190

buildserver/Vagrantfile

index 51db27d3e2cd49cae8087004f2b1c6fb226a6a09..c182e07e6b5d025cbda62f82ee6d4d5fa76392ac 100644 (file)
@@ -15,10 +15,28 @@ Vagrant.configure("2") do |config|
   config.vm.box = configfile['basebox']
   config.vm.box_url = configfile['baseboxurl']
 
-  config.vm.provider "virtualbox" do |v|
-    v.customize ["modifyvm", :id, "--memory", configfile['memory']]
-    v.customize ["modifyvm", :id, "--cpus", configfile['cpus']]
-    v.customize ["modifyvm", :id, "--hwvirtex", configfile['hwvirtex']]
+  # TODO detect if jessie64.box is libvirt, or `vagrant mutate jessie64 libvirt`
+  if `systemd-detect-virt`.include? "qemu" or configfile["vm_provider"] == "libvirt"
+    # use KVM/QEMU if this is running in KVM/QEMU
+    config.vm.provider :libvirt do |libvirt|
+      libvirt.driver = "kvm"
+      libvirt.host = "localhost"
+      libvirt.uri = "qemu:///system"
+      libvirt.cpus = configfile["cpus"]
+      libvirt.memory = configfile["memory"]
+    end
+    config.vm.synced_folder './', '/vagrant', type: '9p'
+    synced_folder_type = '9p'
+  elsif not configfile.has_key? "vm_provider" or configfile["vm_provider"] == "virtualbox"
+    # default to VirtualBox if not set
+    config.vm.provider "virtualbox" do |v|
+      v.customize ["modifyvm", :id, "--memory", configfile['memory']]
+      v.customize ["modifyvm", :id, "--cpus", configfile['cpus']]
+      v.customize ["modifyvm", :id, "--hwvirtex", configfile['hwvirtex']]
+    end
+    synced_folder_type = 'virtualbox'
+  else
+    abort("No supported VM Provider found, set vm_provider in Vagrantfile.yaml!")
   end
 
   config.vm.boot_timeout = configfile['boot_timeout']
@@ -32,7 +50,7 @@ Vagrant.configure("2") do |config|
   # default does not need a custom mount
   if configfile["cachedir"] != "buildserver/cache"
     config.vm.synced_folder configfile["cachedir"], '/vagrant/cache',
-      owner: 'root', group: 'root', create: true
+      create: true, type: synced_folder_type
   end
 
   # cache .deb packages on the host via a mount trick