[elbe-devel] [PATCH 1/1] Fix libvirt emulator qemu-kvm for x86_64

Bastian Germann bage at linutronix.de
Wed Feb 5 20:42:13 CET 2020


Am 03.02.20 um 02:23 schrieb Olivier Dion:
> libvirt is looking for file "/usr/bin/qemu-system-x86_64 -enable-kvm".
> See the following traceback:
> 
> ----------------------------------------------------------------------
> Traceback (most recent call last):
> File "./elbe", line 55, in <module>
> cmdmod.run_command(sys.argv[2:])
> File "/home/olivier/linutronix/elbe/elbepack/commands/initvm.py", \
> line 98, in run_command
> action.execute(directory, opt, args[1:])
> File "/home/olivier/linutronix/elbe/elbepack/initvmaction.py", \
> line 560, in execute
> self.conn.defineXML(xml)
> File "/usr/lib/python3.8/site-packages/libvirt.py", line 3941, \
> in defineXML
> if ret is None:raise libvirtError('virDomainDefineXML() failed', \
> conn=self)
> libvirt.libvirtError: Cannot check QEMU binary \
> /usr/bin/qemu-system-x86_64 -enable-kvm: No such file or directory
> ----------------------------------------------------------------------
> 
> In order to pass arguments to the emulator, 'find_kvm_exe()' returns a
> dict with the informations about the qemu executable.  These
> informations are then used in the 'libvirt.xml.mako' template to
> generate the proper XML node.
> 
> Signed-off-by: Olivier Dion <dion at linutronix.de>

This does not show up installing elbe via the deb repository because it
depends on qemu-kvm.

Reviewed-by: Bastian Germann <bage at linutronix.de>
Tested-by: Bastian Germann <bage at linutronix.de>

> ---
>  elbepack/init/libvirt.xml.mako |  5 +++++
>  elbepack/kvm.py                | 26 +++++++++++++++++++++++---
>  elbepack/xmldefaults.py        |  5 +++--
>  3 files changed, 31 insertions(+), 5 deletions(-)
> 
> diff --git a/elbepack/init/libvirt.xml.mako b/elbepack/init/libvirt.xml.mako
> index cafa385fe..801590058 100644
> --- a/elbepack/init/libvirt.xml.mako
> +++ b/elbepack/init/libvirt.xml.mako
> @@ -91,6 +91,11 @@ xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
>      </channel>
>    </devices>
>    <qemu:commandline>
> +% if defs["interpreter-args"] is not None:
> +% for arg in defs["interpreter-args"]:
> +    <qemu:arg value='${arg}' />
> +% endfor
> +% endif
>      <qemu:arg value='-netdev' />
>      <qemu:arg value='user,id=user.0${forward}' />
>      <qemu:arg value='-device' />
> diff --git a/elbepack/kvm.py b/elbepack/kvm.py
> index 8ea0e6dd0..65fd43f03 100644
> --- a/elbepack/kvm.py
> +++ b/elbepack/kvm.py
> @@ -16,10 +16,20 @@ kvm_exe_list = [
>      '/usr/bin/qemu-system-x86_64'
>  ]
>  
> +cached_kvm_infos = None
>  
>  def find_kvm_exe():
> +
> +    global cached_kvm_infos
> +
> +    if cached_kvm_infos:
> +        return cached_kvm_infos
> +
>      version = "0.0.0"
> +    args = []
> +
>      for fname in kvm_exe_list:
> +
>          if os.path.isfile(fname) and os.access(fname, os.X_OK):
>              # determine kvm version
>              _, stdout = command_out(fname + ' --version')
> @@ -28,8 +38,18 @@ def find_kvm_exe():
>                      version = line.split()[3].split('(')[0].strip()
>  
>              if fname == "/usr/bin/qemu-system-x86_64":
> -                fname += " -enable-kvm"
> +                args.append("-enable-kvm")
> +
> +            cached_kvm_infos = {
> +                "exec_name": fname,
> +                "version": version,
> +                "args":args
> +            }
>  
> -            return fname, version
> +            return cached_kvm_infos
>  
> -    return 'kvm_executable_not_found'
> +    return {
> +        "exec_name": "kvm_executable_not_found",
> +        "version": version,
> +        "args": args
> +    }
> diff --git a/elbepack/xmldefaults.py b/elbepack/xmldefaults.py
> index 1979b67df..3ca7102a4 100644
> --- a/elbepack/xmldefaults.py
> +++ b/elbepack/xmldefaults.py
> @@ -146,8 +146,9 @@ ppc64el_defaults = {
>  
>  amd64_defaults = {
>      "arch": "amd64",
> -    "interpreter": find_kvm_exe()[0],
> -    "interpreterversion": find_kvm_exe()[1],
> +    "interpreter": find_kvm_exe()["exec_name"],
> +    "interpreterversion": find_kvm_exe()["version"],
> +    "interpreter-args": find_kvm_exe()["args"],
>      "console": "ttyS0,115200n1",
>      "machine": "pc",
>      "nicmodel": "virtio",
> 



More information about the elbe-devel mailing list