From 0611e6dd7d2b7c1e36cf2ed68f5823bfefc87135 Mon Sep 17 00:00:00 2001 From: Nikos Skalkotos Date: Sat, 3 Aug 2013 12:34:33 +0300 Subject: [PATCH] Fix multiple bugs in util.get_kvm_binary The machine hardware name fetched by `uname -m' should have been stripped, and a --enable-kvm option should be added if the returned executable was qemu-system- --- image_creator/os_type/windows.py | 11 +++++++---- image_creator/util.py | 10 ++++++---- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/image_creator/os_type/windows.py b/image_creator/os_type/windows.py index 5d56a05..690a569 100644 --- a/image_creator/os_type/windows.py +++ b/image_creator/os_type/windows.py @@ -768,18 +768,21 @@ class _VM(object): # Use ganeti's VNC port range for a random vnc port self.display = random.randint(11000, 14999) - 5900 - kvm = get_kvm_binary() + kvm, needed_args = get_kvm_binary() if kvm is None: FatalError("Can't find the kvm binary") - args = [ - kvm, '-smp', '1', '-m', '1024', '-drive', + args = [kvm] + args.extend(needed_args) + + args.extend([ + '-smp', '1', '-m', '1024', '-drive', 'file=%s,format=raw,cache=unsafe,if=virtio' % self.disk, '-netdev', 'type=user,hostfwd=tcp::445-:445,id=netdev0', '-device', 'virtio-net-pci,mac=%s,netdev=netdev0' % random_mac(), '-vnc', ':%d' % self.display, '-serial', 'file:%s' % self.serial, - '-monitor', 'stdio'] + '-monitor', 'stdio']) self.process = subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE) diff --git a/image_creator/util.py b/image_creator/util.py index fcf5dd5..e5fab41 100644 --- a/image_creator/util.py +++ b/image_creator/util.py @@ -65,21 +65,23 @@ def get_command(command): def get_kvm_binary(): - """Returns the path to the kvm binary""" + """Returns the path to the kvm binary and some extra arguments if needed""" uname = get_command('uname') which = get_command('which') - machine = str(uname('-m')) + machine = str(uname('-m')).strip() if re.match('i[3-6]86', machine): machine = 'i386' binary = which('qemu-system-%s' % machine) + needed_args = "--enable-kvm", + if binary is None: - return which('kvm') + return which('kvm'), tuple() - return binary + return binary, needed_args def try_fail_repeat(command, *args): -- 1.7.10.4