[PATCH] Supports Kimchi on LE systems

On LE systems, some changes on libvirt xml is needed. The input device for keyboard is not kbd anymore, the architecture is still ppc64 and the qemu binary is not qemu-kvm as in the other archs. Signed-off-by: Ramon Medeiros <ramonn@linux.vnet.ibm.com> --- src/kimchi/config.py.in | 11 +++++++++-- src/kimchi/osinfo.py | 6 +++++- src/kimchi/vmtemplate.py | 8 ++++++++ 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/kimchi/config.py.in b/src/kimchi/config.py.in index 83a5dd0..f0089dc 100644 --- a/src/kimchi/config.py.in +++ b/src/kimchi/config.py.in @@ -68,12 +68,19 @@ def find_qemu_binary(find_emulator=False): raise Exception("Unable to get qemu binary location: %s" % e) try: xml = connect.getCapabilities() + + # ISSUE #573: On POWER8 debian little endian, the qemu binary is + # qemu-system-ppc64, not qemu-system-ppc64el as expected + arch = platform.machine() + if platform.machine() == "ppc64le": + arch = "ppc64" + if find_emulator: expr = "/capabilities/guest/arch[@name='%s']\ - /emulator" % platform.machine() + /emulator" % arch else: expr = "/capabilities/guest/arch[@name='%s']\ - /domain[@type='kvm']/emulator" % platform.machine() + /domain[@type='kvm']/emulator" % arch res = xpath_get_text(xml, expr) location = res[0] except Exception, e: diff --git a/src/kimchi/osinfo.py b/src/kimchi/osinfo.py index 0e16b50..2f6558d 100644 --- a/src/kimchi/osinfo.py +++ b/src/kimchi/osinfo.py @@ -29,7 +29,7 @@ from kimchi.config import paths SUPPORTED_ARCHS = {'x86': ('i386', 'i686', 'x86_64'), - 'power': ('ppc', 'ppc64')} + 'power': ('ppc', 'ppc64', 'ppc64le')} common_spec = {'cpus': 1, 'memory': 1024, 'disks': [{'index': 0, 'size': 10}], @@ -94,6 +94,10 @@ def lookup(distro, version): params['os_version'] = version arch = _get_arch() + # ppc64le hack: qemu ppc64le uses ppc64 in libvirt xml + if params["arch"] == "ppc64le": + params["arch"] = "ppc64" + if distro in modern_version_bases[arch]: if LooseVersion(version) >= LooseVersion( modern_version_bases[arch][distro]): diff --git a/src/kimchi/vmtemplate.py b/src/kimchi/vmtemplate.py index e41a959..a017874 100644 --- a/src/kimchi/vmtemplate.py +++ b/src/kimchi/vmtemplate.py @@ -245,9 +245,17 @@ class VMTemplate(object): mouse = """ <input type='mouse' bus='%(mouse_bus)s'/> """ + keyboard = """ <input type='kbd' bus='%(kbd_bus)s'> </input> """ + + # PPC64EL does not uses kbd + if os.uname()[4] == "ppc64le": + keyboard = """ + <input type='keyboard' bus='%(kbd_bus)s'> </input> + """ + tablet = """ <input type='tablet' bus='%(kbd_bus)s'> </input> """ -- 1.8.3.1

Reviewed-By: Christy Perez <christy@linux.vnet.ibm.com> Tested-By: Christy Perez <christy@linux.vnet.ibm.com> On 01/23/2015 12:20 PM, Ramon Medeiros wrote:
On LE systems, some changes on libvirt xml is needed. The input device for keyboard is not kbd anymore, the architecture is still ppc64 and the qemu binary is not qemu-kvm as in the other archs.
Signed-off-by: Ramon Medeiros <ramonn@linux.vnet.ibm.com> --- src/kimchi/config.py.in | 11 +++++++++-- src/kimchi/osinfo.py | 6 +++++- src/kimchi/vmtemplate.py | 8 ++++++++ 3 files changed, 22 insertions(+), 3 deletions(-)
diff --git a/src/kimchi/config.py.in b/src/kimchi/config.py.in index 83a5dd0..f0089dc 100644 --- a/src/kimchi/config.py.in +++ b/src/kimchi/config.py.in @@ -68,12 +68,19 @@ def find_qemu_binary(find_emulator=False): raise Exception("Unable to get qemu binary location: %s" % e) try: xml = connect.getCapabilities() + + # ISSUE #573: On POWER8 debian little endian, the qemu binary is + # qemu-system-ppc64, not qemu-system-ppc64el as expected + arch = platform.machine() + if platform.machine() == "ppc64le": + arch = "ppc64" + if find_emulator: expr = "/capabilities/guest/arch[@name='%s']\ - /emulator" % platform.machine() + /emulator" % arch else: expr = "/capabilities/guest/arch[@name='%s']\ - /domain[@type='kvm']/emulator" % platform.machine() + /domain[@type='kvm']/emulator" % arch res = xpath_get_text(xml, expr) location = res[0] except Exception, e: diff --git a/src/kimchi/osinfo.py b/src/kimchi/osinfo.py index 0e16b50..2f6558d 100644 --- a/src/kimchi/osinfo.py +++ b/src/kimchi/osinfo.py @@ -29,7 +29,7 @@ from kimchi.config import paths
SUPPORTED_ARCHS = {'x86': ('i386', 'i686', 'x86_64'), - 'power': ('ppc', 'ppc64')} + 'power': ('ppc', 'ppc64', 'ppc64le')}
common_spec = {'cpus': 1, 'memory': 1024, 'disks': [{'index': 0, 'size': 10}], @@ -94,6 +94,10 @@ def lookup(distro, version): params['os_version'] = version arch = _get_arch()
+ # ppc64le hack: qemu ppc64le uses ppc64 in libvirt xml + if params["arch"] == "ppc64le": + params["arch"] = "ppc64" + if distro in modern_version_bases[arch]: if LooseVersion(version) >= LooseVersion( modern_version_bases[arch][distro]): diff --git a/src/kimchi/vmtemplate.py b/src/kimchi/vmtemplate.py index e41a959..a017874 100644 --- a/src/kimchi/vmtemplate.py +++ b/src/kimchi/vmtemplate.py @@ -245,9 +245,17 @@ class VMTemplate(object): mouse = """ <input type='mouse' bus='%(mouse_bus)s'/> """ + keyboard = """ <input type='kbd' bus='%(kbd_bus)s'> </input> """ + + # PPC64EL does not uses kbd + if os.uname()[4] == "ppc64le": + keyboard = """ + <input type='keyboard' bus='%(kbd_bus)s'> </input> + """ + tablet = """ <input type='tablet' bus='%(kbd_bus)s'> </input> """

On 23 Jan 2015, at 19:20, Ramon Medeiros <ramonn@linux.vnet.ibm.com> wrote:
On LE systems, some changes on libvirt xml is needed. The input device for keyboard is not kbd anymore, the architecture is still ppc64 and the qemu binary is not qemu-kvm as in the other archs.
Signed-off-by: Ramon Medeiros <ramonn@linux.vnet.ibm.com> --- src/kimchi/config.py.in | 11 +++++++++-- src/kimchi/osinfo.py | 6 +++++- src/kimchi/vmtemplate.py | 8 ++++++++ 3 files changed, 22 insertions(+), 3 deletions(-)
diff --git a/src/kimchi/config.py.in b/src/kimchi/config.py.in index 83a5dd0..f0089dc 100644 --- a/src/kimchi/config.py.in +++ b/src/kimchi/config.py.in @@ -68,12 +68,19 @@ def find_qemu_binary(find_emulator=False): raise Exception("Unable to get qemu binary location: %s" % e) try: xml = connect.getCapabilities() + + # ISSUE #573: On POWER8 debian little endian, the qemu binary is + # qemu-system-ppc64, not qemu-system-ppc64el as expected
typo: s/qemu-system-ppc64el/qemu-system-ppc64le Is this whole patch solving Issue #573? Why not add issue info on commit message, like commit fc99a95?
+ arch = platform.machine() + if platform.machine() == "ppc64le”:
if arch == “ppc64le”:
+ arch = "ppc64" + if find_emulator: expr = "/capabilities/guest/arch[@name='%s']\ - /emulator" % platform.machine() + /emulator" % arch else: expr = "/capabilities/guest/arch[@name='%s']\ - /domain[@type='kvm']/emulator" % platform.machine() + /domain[@type='kvm']/emulator" % arch res = xpath_get_text(xml, expr) location = res[0] except Exception, e: diff --git a/src/kimchi/osinfo.py b/src/kimchi/osinfo.py index 0e16b50..2f6558d 100644 --- a/src/kimchi/osinfo.py +++ b/src/kimchi/osinfo.py @@ -29,7 +29,7 @@ from kimchi.config import paths
SUPPORTED_ARCHS = {'x86': ('i386', 'i686', 'x86_64'), - 'power': ('ppc', 'ppc64')} + 'power': ('ppc', 'ppc64', 'ppc64le’)}
common_spec = {'cpus': 1, 'memory': 1024, 'disks': [{'index': 0, 'size': 10}], @@ -94,6 +94,10 @@ def lookup(distro, version): params['os_version'] = version arch = _get_arch()
+ # ppc64le hack: qemu ppc64le uses ppc64 in libvirt xml
The word ‘hack’ sounds something is wrong here :-D I suggest to change the comment text to something like: “set up arch to ppc64 instead of ppc64le due to libvirt compatibility"
+ if params["arch"] == "ppc64le": + params["arch"] = "ppc64" + if distro in modern_version_bases[arch]: if LooseVersion(version) >= LooseVersion( modern_version_bases[arch][distro]): diff --git a/src/kimchi/vmtemplate.py b/src/kimchi/vmtemplate.py index e41a959..a017874 100644 --- a/src/kimchi/vmtemplate.py +++ b/src/kimchi/vmtemplate.py @@ -245,9 +245,17 @@ class VMTemplate(object): mouse = """ <input type='mouse' bus='%(mouse_bus)s'/> """ + keyboard = """ <input type='kbd' bus='%(kbd_bus)s'> </input> """ + + # PPC64EL does not uses kbd + if os.uname()[4] == "ppc64le": + keyboard = """ + <input type='keyboard' bus='%(kbd_bus)s'> </input> + ""” +
Why not create a variable called kdb_type and set it based on the architecture before the whole block where all parameters is set up? Then you only need change the keyboard to be something like: keyboard = “”” <input type=‘%(kdb_type)s’ bus=‘%(kdb_bus)s’> </input> “”"
tablet = """ <input type='tablet' bus='%(kbd_bus)s'> </input> """ -- 1.8.3.1
_______________________________________________ Kimchi-devel mailing list Kimchi-devel@ovirt.org http://lists.ovirt.org/mailman/listinfo/kimchi-devel

On 01/23/2015 01:20 PM, Ramon Medeiros wrote:
On LE systems, some changes on libvirt xml is needed. The input device for keyboard is not kbd anymore, the architecture is still ppc64 and the qemu binary is not qemu-kvm as in the other archs.
Signed-off-by: Ramon Medeiros <ramonn@linux.vnet.ibm.com> --- src/kimchi/config.py.in | 11 +++++++++-- src/kimchi/osinfo.py | 6 +++++- src/kimchi/vmtemplate.py | 8 ++++++++ 3 files changed, 22 insertions(+), 3 deletions(-)
diff --git a/src/kimchi/config.py.in b/src/kimchi/config.py.in index 83a5dd0..f0089dc 100644 --- a/src/kimchi/config.py.in +++ b/src/kimchi/config.py.in @@ -68,12 +68,19 @@ def find_qemu_binary(find_emulator=False): raise Exception("Unable to get qemu binary location: %s" % e) try: xml = connect.getCapabilities() + + # ISSUE #573: On POWER8 debian little endian, the qemu binary is + # qemu-system-ppc64, not qemu-system-ppc64el as expected + arch = platform.machine() + if platform.machine() == "ppc64le": + arch = "ppc64" + if find_emulator: expr = "/capabilities/guest/arch[@name='%s']\ - /emulator" % platform.machine() + /emulator" % arch else: expr = "/capabilities/guest/arch[@name='%s']\ - /domain[@type='kvm']/emulator" % platform.machine() + /domain[@type='kvm']/emulator" % arch res = xpath_get_text(xml, expr) location = res[0] except Exception, e: diff --git a/src/kimchi/osinfo.py b/src/kimchi/osinfo.py index 0e16b50..2f6558d 100644 --- a/src/kimchi/osinfo.py +++ b/src/kimchi/osinfo.py @@ -29,7 +29,7 @@ from kimchi.config import paths
SUPPORTED_ARCHS = {'x86': ('i386', 'i686', 'x86_64'), - 'power': ('ppc', 'ppc64')} + 'power': ('ppc', 'ppc64', 'ppc64le')}
common_spec = {'cpus': 1, 'memory': 1024, 'disks': [{'index': 0, 'size': 10}], @@ -94,6 +94,10 @@ def lookup(distro, version): params['os_version'] = version arch = _get_arch()
+ # ppc64le hack: qemu ppc64le uses ppc64 in libvirt xml + if params["arch"] == "ppc64le": + params["arch"] = "ppc64" I suggest we add a new item "ppc_le" in "template_specs", because it is a different arch, and does not use kdb. So that we do not need to hack it to be "ppc" + if distro in modern_version_bases[arch]: if LooseVersion(version) >= LooseVersion( modern_version_bases[arch][distro]): diff --git a/src/kimchi/vmtemplate.py b/src/kimchi/vmtemplate.py index e41a959..a017874 100644 --- a/src/kimchi/vmtemplate.py +++ b/src/kimchi/vmtemplate.py @@ -245,9 +245,17 @@ class VMTemplate(object): mouse = """ <input type='mouse' bus='%(mouse_bus)s'/> """ + keyboard = """ <input type='kbd' bus='%(kbd_bus)s'> </input> """ + + # PPC64EL does not uses kbd + if os.uname()[4] == "ppc64le": + keyboard = """ + <input type='keyboard' bus='%(kbd_bus)s'> </input> + """ + tablet = """ <input type='tablet' bus='%(kbd_bus)s'> </input> """
participants (4)
-
Christy Perez
-
Paulo Ricardo Paz Vital
-
Ramon Medeiros
-
Royce Lv