Bug 497254 - Cannot determine QEMU argv syntax with kvm >= 85
Cannot determine QEMU argv syntax with kvm >= 85
Product: Virtualization Tools
Classification: Community
Component: libvirt (Show other bugs)
x86_64 Linux
low Severity medium
: ---
: ---
Assigned To: Daniel Veillard
Depends On:
  Show dependency treegraph
Reported: 2009-04-22 22:31 EDT by jblawn
Modified: 2010-03-16 13:19 EDT (History)
4 users (show)

See Also:
Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
Last Closed: 2009-06-04 06:57:18 EDT
Type: ---
Regression: ---
Mount Type: ---
Documentation: ---
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---

Attachments (Terms of Use)
update the MAX_HELP_OUTPUT_SIZE to 16384 for kvm-85 and above (i hope) (379 bytes, patch)
2009-05-09 13:32 EDT, Richard Groux
no flags Details | Diff
Fix command line arg parsing for newer KVM & improve error reporting (2.61 KB, patch)
2009-05-11 10:30 EDT, Daniel Berrange
no flags Details | Diff

  None (edit)
Description jblawn 2009-04-22 22:31:30 EDT
Description of problem:
Receiving "Cannot determine QEMU argv syntax" on kvm-85 with latest libvirt git as of 20090422.  This is occurring when defining a new VM and with already created VMs.

Version-Release number of selected component (if applicable):

How reproducible:
Create new VM through virt-manager 0.7

Actual results:
Unable to complete install '<class 'libvirt.libvirtError'> internal error Cannot determine QEMU argv syntax /usr/bin/kvm
Traceback (most recent call last):
  File "/usr/local/share/virt-manager/virtManager/create.py", line 1485, in do_install
    dom = guest.start_install(False, meter = meter)
  File "/usr/local/lib/python2.6/dist-packages/virtinst/Guest.py", line 541, in start_install
    return self._do_install(consolecb, meter, removeOld, wait)
  File "/usr/local/lib/python2.6/dist-packages/virtinst/Guest.py", line 633, in _do_install
    self.domain = self.conn.createLinux(install_xml, 0)
  File "/usr/lib/python2.6/libvirt.py", line 974, in createLinux
    if ret is None:raise libvirtError('virDomainCreateLinux() failed', conn=self)
libvirtError: internal error Cannot determine QEMU argv syntax /usr/bin/kvm

Expected results:

Additional info:
Comment 1 Daniel Berrange 2009-04-23 05:46:28 EDT
We're probably being tripped up by a change in help output format.

Can you run '/usr/bin/kvm -help' save the output to a file, and attach to this BZ ticket
Comment 2 jblawn 2009-04-23 21:02:11 EDT
QEMU PC emulator version 0.10.0 (kvm-85), Copyright (c) 2003-2008 Fabrice Bellard
usage: qemu [options] [disk_image]                                               

'disk_image' is a raw hard image image for IDE hard disk 0

Standard options:
-h or -help     display this help and exit
-M machine      select emulated machine (-M ? for list)
-cpu cpu        select CPU (-cpu ? for list)           
-smp n          set the number of CPUs to 'n' [default=1]
-fda/-fdb file  use 'file' as floppy disk 0/1 image      
-hda/-hdb file  use 'file' as IDE hard disk 0/1 image    
-hdc/-hdd file  use 'file' as IDE hard disk 2/3 image    
-cdrom file     use 'file' as IDE cdrom image (cdrom is ide1 master)
-drive [file=file][,if=type][,bus=n][,unit=m][,media=d][,index=i]   
                use 'file' as a drive image                         
-mtdblock file  use 'file' as on-board Flash memory image           
-sd file        use 'file' as SecureDigital card image              
-pflash file    use 'file' as a parallel flash image                
-boot [a|c|d|n] boot on floppy (a), hard disk (c), CD-ROM (d), or network (n)
-snapshot       write to temporary files instead of disk image files         
-m megs         set virtual RAM size to megs MB [default=128]                
-k language     use keyboard layout (for example 'fr' for French)            
-audio-help     print list of audio drivers and their options                
-soundhw c1,... enable audio support                                         
                and only specified sound cards (comma separated list)        
                use -soundhw ? to get the list of supported cards            
                use -soundhw all to enable all of them                       
-usb            enable the USB driver (will be the default soon)             
-usbdevice name add the host or guest USB device 'name'                      
-name string    set the name of the guest                                    
-uuid %08x-%04x-%04x-%04x-%012x                                              
                specify machine UUID                                         

Display options:
-nographic      disable graphical output and redirect serial I/Os to console
-curses         use a curses/ncurses interface instead of SDL               
-portrait       rotate graphical output 90 deg left (only PXA LCD)          
-vga [std|cirrus|vmware|none]                                               
                select video card type                                      
-full-screen    start in full screen                                        
-vnc display    start a VNC server on display                               

i386 target only:
-win2k-hack     use it when installing Windows 2000 to avoid a disk full bug
-rtc-td-hack    use it to fix time drift in Windows ACPI HAL                
-no-fd-bootchk  disable boot signature checking for floppy disks            
-no-acpi        disable ACPI                                                
-no-hpet        disable HPET                                                
-acpitable [sig=str][,rev=n][,oem_id=str][,oem_table_id=str][,oem_rev=n][,asl_compiler_id=str][,asl_compiler_rev=n][,data=file1[:file2]...]
                ACPI table description                                                                                                     

Network options:
-net nic[,vlan=n][,macaddr=addr][,model=type][,name=str]
                create a new Network Interface Card and connect it to VLAN 'n'
-net user[,vlan=n][,name=str][,hostname=host]                                 
                connect the user mode network stack to VLAN 'n' and send      
                hostname 'host' to DHCP clients                               
-net tap[,vlan=n][,name=str][,fd=h][,ifname=name][,script=file][,downscript=dfile]
                connect the host TAP network interface to VLAN 'n' and use the    
                network scripts 'file' (default=/etc/qemu-ifup)                   
                and 'dfile' (default=/etc/qemu-ifdown);                           
                use '[down]script=no' to disable script execution;                
                use 'fd=h' to connect to an already opened TAP interface          
-net socket[,vlan=n][,name=str][,fd=h][,listen=[host]:port][,connect=host:port]   
                connect the vlan 'n' to another VLAN using a socket connection    
-net socket[,vlan=n][,name=str][,fd=h][,mcast=maddr:port]                         
                connect the vlan 'n' to multicast maddr and port                  
-net vde[,vlan=n][,name=str][,sock=socketpath][,port=n][,group=groupname][,mode=octalmode]
                connect the vlan 'n' to port 'n' of a vde switch running                  
                on host and listening for incoming connections on 'socketpath'.           
                Use group 'groupname' and mode 'octalmode' to change default              
                ownership and permissions for communication port.                         
-net none       use it alone to have zero network devices; if no -net option              
                is provided, the default is '-net nic -net user'                          
-tftp dir       allow tftp access to files in dir [-net user]                             
-bootp file     advertise file in BOOTP replies                                           
-smb dir        allow SMB access to files in 'dir' [-net user]                            
-redir [tcp|udp]:host-port:[guest-host]:guest-port                                        
                redirect TCP or UDP connections from host to guest [-net user]            

-bt hci,null    dumb bluetooth HCI - doesn't respond to commands
-bt hci,host[:id]                                               
                use host's HCI with the given name              
-bt hci[,vlan=n]                                                
                emulate a standard HCI in virtual scatternet 'n'
-bt vhci[,vlan=n]                                               
                add host computer to virtual scatternet 'n' using VHCI
-bt device:dev[,vlan=n]                                               
                emulate a bluetooth device 'dev' in scatternet 'n'    

Linux boot specific:
-kernel bzImage use 'bzImage' as kernel image
-append cmdline use 'cmdline' as kernel command line
-initrd file    use 'file' as initial ram disk      

Debug/Expert options:
-serial dev     redirect the serial port to char device 'dev'
-parallel dev   redirect the parallel port to char device 'dev'
-monitor dev    redirect the monitor to char device 'dev'
-pidfile file   write PID to 'file'
-singlestep   always run in singlestep mode
-S              freeze CPU at startup (use 'c' to start execution)
-gdb dev        wait for gdb connection on 'dev'
-s              shorthand for -gdb tcp::1234
-d item1,...    output log to /tmp/qemu.log (use -d ? for a list of log items)
-hdachs c,h,s[,t]
                force hard disk 0 physical geometry and the optional BIOS
                translation (t=none or lba) (usually qemu can guess them)
-L path         set the directory for the BIOS, VGA BIOS and keymaps
-bios file      set the filename for the BIOS
-no-reboot      exit instead of rebooting
-no-shutdown    stop before shutdown
-loadvm [tag|id]
                start right away with a saved state (loadvm in monitor)
-daemonize      daemonize QEMU after initializing
-option-rom rom load a file, rom, into the option ROM space
-clock          force the use of the given methods for timer alarm.
                To see what timers are available use -clock ?
-localtime      set the real time clock to local time [default=utc]
-startdate      select initial date of the clock
-icount [N|auto]
                enable virtual instruction counter with 2^N clock ticks per
-echr chr       set terminal escape character instead of ctrl-a
-virtioconsole c
                set virtio console
-show-cursor    show cursor
-tb-size n      set TB size
-incoming p     prepare for incoming migration, listen on port p
-chroot dir     Chroot to dir just before starting the VM.
-runas user     Change to user id user just before starting the VM.
-no-kvm         disable KVM hardware virtualization
-no-kvm-irqchip disable KVM kernel mode PIC/IOAPIC/LAPIC
-no-kvm-pit     disable KVM kernel mode PIT
-no-kvm-pit-reinjection disable KVM kernel mode PIT interrupt reinjection
-pcidevice host=bus:dev.func[,dma=none][,name=string]
                expose a PCI device to the guest OS.
                dma=none: don't perform any dma translations (default is to use an iommu)
                'string' is used in log output.
-enable-nesting enable support for running a VM inside the VM (AMD only)
-cpu-vendor STRING   override the cpuid vendor string
-nvram FILE          provide ia64 nvram contents
-tdf                 enable guest time drift compensation
-kvm-shadow-memory MEGABYTES
                     allocate MEGABYTES for kvm mmu shadowing
-mempath FILE        provide backing storage for guest RAM
-mem-prealloc        preallocate guest memory (use with -mempath)

During emulation, the following keys are useful:
ctrl-alt-f      toggle full screen
ctrl-alt-n      switch to virtual console 'n'
ctrl-alt        toggle mouse and keyboard grab

When using -nographic, press 'ctrl-a h' to get some help.
Comment 3 Richard Groux 2009-05-09 13:02:52 EDT
today i play with the new kvm (85) and this bug, and i found 2 things.

1) I save kvm -help (version 84) to file (kvm.84)

i create a script kvm.sh for injecting this kvm.84 file when i try to start kvm -help with the new version

and it works very well.

2) what is the difference between this 2 command
  version 84 -> kvm -help 
  version 85 -> kvm -help

answer: some little change, but nothing explain the bug, except when we look and analyze the size of the output of these command.

version  84 => kvm -help | wc => 157 1044 8051
version  85 => kvm -help | wc => 161 1057 8286

and when we change the output of kvm -help (85) for a size less then 8192 Octects

in conclusion wee need to change the size of MAX_HELP_OUTPUT_SIZE from 8192 to 16384 in the qemu_conf.c file
Comment 4 Richard Groux 2009-05-09 13:32:07 EDT
Created attachment 343226 [details]
update the MAX_HELP_OUTPUT_SIZE to 16384 for kvm-85 and above (i hope)
Comment 5 Daniel Berrange 2009-05-11 10:30:15 EDT
Created attachment 343453 [details]
Fix command line arg parsing for newer KVM & improve error reporting

Patch from upstream

Comment 6 Daniel Berrange 2009-06-04 06:57:18 EDT
This was addressed in the 0.6.4 release

Note You need to log in before you can comment on or make changes to this bug.