2014-10-08 163 views
3

我有一个很难该QEMU命令转换为libvirt的域XML:转换QEMU命令行参数传递给libvirt的网域XML

qemu-system-x86_64 -enable-kvm \ 
-m 3072 \ 
-cpu core2duo \ 
-machine q35 \ 
-smp 2 \ 
-usbdevice keyboard \ 
-usbdevice mouse \ 
-vga std \ 
-device isa-applesmc,osk="${osx_osk_key}" \ 
-kernel "${chameleon_file_path}" \ 
-device ide-drive,bus=ide.2,drive=MacHDD \ 
-drive id=MacHDD,if=none,cache=none,file="${vm_hdd_img_file_path}" 
-netdev user,id=hub0port0 \ 
-device virtio-net,netdev=hub0port0,id=eth0 

它完美,如果我把它从一个终端(Ubuntu的14.10),但virsh domxml-from-native qemu-argv失败的MacHDD -device与此错误:

error: internal error: missing index/unit/bus parameter in drive 'id=MacHDD,if=none,cache=none,file="${vm_hdd_img_file_path}"' 

(注:当然,我用实际路径尝试在地方的变量,同样的错误的 - 如果我删除最后一个有两个参数它将它转换甚至在包含变量的情况下对XML进行域化)

我该如何解决这个问题?或者什么是域xml中最后两个参数的等价物? (尝试了很多不同的组合,但不能把它与libvirt的/的virsh工作)

编辑

对于这个记录是我所得到的,而不-device运行的virsh的领域,从本地命令-drive

<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'> 
    <name>unnamed</name> 
    <uuid>38cafecb-4774-4590-83eb-e576a79aab93</uuid> 
    <memory unit='KiB'>3145728</memory> 
    <currentMemory unit='KiB'>3145728</currentMemory> 
    <vcpu placement='static'>2</vcpu> 
    <os> 
    <type arch='x86_64' machine='q35'>hvm</type> 
    <kernel>${chameleon_file_path}</kernel> 
    </os> 
    <features> 
    <acpi/> 
    </features> 
    <cpu mode='custom' match='exact'> 
    <model fallback='allow'>core2duo</model> 
    </cpu> 
    <clock offset='utc'/> 
    <on_poweroff>destroy</on_poweroff> 
    <on_reboot>restart</on_reboot> 
    <on_crash>destroy</on_crash> 
    <devices> 
    <emulator>/usr/bin/qemu-system-x86_64</emulator> 
    <controller type='sata' index='0'/> 
    <controller type='pci' index='0' model='pcie-root'/> 
    <controller type='pci' index='1' model='dmi-to-pci-bridge'/> 
    <controller type='pci' index='2' model='pci-bridge'/> 
    <input type='keyboard' bus='usb'/> 
    <input type='mouse' bus='usb'/> 
    <input type='mouse' bus='ps2'/> 
    <input type='keyboard' bus='ps2'/> 
    <graphics type='sdl'/> 
    <video> 
     <model type='vga' vram='9216' heads='1'/> 
    </video> 
    <memballoon model='none'/> 
    </devices> 
    <qemu:commandline> 
    <qemu:arg value='-device'/> 
    <qemu:arg value='isa-applesmc,osk=&quot;${osx_osk_key}&quot;'/> 
    <qemu:arg value='-netdev'/> 
    <qemu:arg value='user,id=hub0port0'/> 
    <qemu:arg value='-device'/> 
    <qemu:arg value='virtio-net,netdev=hub0port0,id=eth0'/> 
    </qemu:commandline> 
</domain> 

但我无法弄清楚什么是在这种情况下,-device -drive相当于,我无法从该域的XML创建一个VM。

即使没有MacHDD -device和A-驱动,当我尝试用$ virsh create

error: Failed to create domain from libvirt.xml 
error: internal error: cannot load AppArmor profile 'libvirt-38cafecb-4774-4590-83eb-e576a79aab93' 

回答

1

TBH我不是那熟悉的libvirt创建VM我得到这个错误,但不会是什么如:

<disk type='file' device='disk'> 
    <source file='/path/to/image.img'/> 
    <target dev='hda' bus='ide'/> 
    </disk> 
+0

我想我尝试过这样的事情,但我会试一试。 – 2014-10-25 07:00:06

0

这对我有用。

变化:

-drive id=MacHDD,if=none,cache=none,file="${vm_hdd_img_file_path}" 

对于

-drive id=MacHDD,if=ide,index=2,file="${vm_hdd_img_file_path}" 
0

这个怎么样?

<disk type='file' device='disk'> 
    <driver name='qemu' type='qcow2'/> 
    <source file='/home/vbox/mac_hdd_10.10Chimera410R1280x1024x32TV.img'/> 
    <target dev='hda' bus='ide'/> 
    <boot order='1'/> 
    <address type='drive' controller='0' bus='0' target='0' unit='0'/> 
</disk> 
<seclabel type='dynamic' model='apparmor' relabel='yes'/> 

这是kimchi所做的,当时我使用virt-manager创建了VM。并感谢那<qemu:commandline>的事情。我正在寻找它。如果可能的话,请指出有关使用Mac OS X KVM的声音的任何信息?