Hello,
I can confirm it is improving a lot support for ppc64le - Using that
patch, make check on Ubuntu/Utopîc ppc64le
is reporting:
Ran 164 tests in 233.076s
FAILED (failures=10, errors=17, skipped=2)
instead of
FAILED (failures=39, errors=31, skipped=2)
without it.
Thanks
On 01/28/2015 03:51 PM, Ramon Medeiros wrote:
Changes:
v4:
Add ppc64le to distroloaders, avoiding to select a template with a
mismatch architecture
v3:
Create a new entry for ppc64le arch
Create key for keyboard type
v2:
Improve coding by removing duplicated actions
Fix typo
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(a)linux.vnet.ibm.com>
---
src/kimchi/config.py.in | 11 +++++++++--
src/kimchi/distroloader.py | 4 +++-
src/kimchi/osinfo.py | 30 ++++++++++++++++++++++++++++--
src/kimchi/vmtemplate.py | 4 +++-
4 files changed, 43 insertions(+), 6 deletions(-)
diff --git a/src/kimchi/config.py.in b/src/kimchi/config.py.in
index a952fb3..f207e3f 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()
+
+ # On Little Endian system, the qemu binary is
+ # qemu-system-ppc64, not qemu-system-ppc64le as expected
+ arch = platform.machine()
+ 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/distroloader.py b/src/kimchi/distroloader.py
index 64505f4..de43238 100644
--- a/src/kimchi/distroloader.py
+++ b/src/kimchi/distroloader.py
@@ -30,7 +30,9 @@ from kimchi.utils import kimchi_log
ARCHS = {'x86_64': ['x86_64', 'amd64', 'i686',
'x86', 'i386'],
'amd64': ['x86_64', 'amd64', 'i686',
'x86', 'i386'],
- 'ppc64': ['ppc', 'ppc64']}
+ 'ppc64': ['ppc', 'ppc64'],
+ 'ppc64le': ['ppc64', 'ppc64le']}
+
class DistroLoader(object):
diff --git a/src/kimchi/osinfo.py b/src/kimchi/osinfo.py
index 0e16b50..d13dd92 100644
--- a/src/kimchi/osinfo.py
+++ b/src/kimchi/osinfo.py
@@ -29,7 +29,8 @@ from kimchi.config import paths
SUPPORTED_ARCHS = {'x86': ('i386', 'i686', 'x86_64'),
- 'power': ('ppc', 'ppc64')}
+ 'power': ('ppc', 'ppc64'),
+ 'ppc64le':('ppc64le')}
common_spec = {'cpus': 1, 'memory': 1024, 'disks':
[{'index': 0, 'size': 10}],
@@ -47,11 +48,28 @@ template_specs = {'x86': {'old': dict(common_spec,
disk_bus='ide',
'power': {'old': dict(common_spec,
disk_bus='scsi',
nic_model='spapr-vlan',
cdrom_bus='scsi',
+ kbd_type="kbd",
kbd_bus='usb',
mouse_bus='usb',
tablet_bus='usb', memory=1280),
'modern': dict(common_spec,
disk_bus='virtio',
nic_model='virtio',
- cdrom_bus='scsi',
kbd_bus='usb',
+ cdrom_bus='scsi',
+ kbd_bus='usb',
+ kbd_type="kbd",
+ mouse_bus='usb',
tablet_bus='usb',
+ memory=1280)},
+ 'ppc64le': {'old': dict(common_spec,
disk_bus='virtio',
+ nic_model='virtio',
+ cdrom_bus='scsi',
+ kbd_bus='usb',
+ kbd_type="keyboard",
+ mouse_bus='usb',
tablet_bus='usb',
+ memory=1280),
+ 'modern': dict(common_spec,
disk_bus='virtio',
+ nic_model='virtio',
+ cdrom_bus='scsi',
+ kbd_bus='usb',
+ kbd_type="keyboard",
mouse_bus='usb',
tablet_bus='usb',
memory=1280)}}
@@ -63,6 +81,10 @@ modern_version_bases = {'x86': {'debian':
'6.0', 'ubuntu': '7.10',
'power': {'rhel': '6.5',
'fedora': '19',
'ubuntu': '14.04',
'opensuse': '13.1',
+ 'sles': '11sp3'},
+ 'ppc64le': {'rhel': '6.5',
'fedora': '19',
+ 'ubuntu': '14.04',
+ 'opensuse': '13.1',
'sles': '11sp3'}}
@@ -94,6 +116,10 @@ def lookup(distro, version):
params['os_version'] = version
arch = _get_arch()
+ # 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..0a3f8ea 100644
--- a/src/kimchi/vmtemplate.py
+++ b/src/kimchi/vmtemplate.py
@@ -245,9 +245,11 @@ class VMTemplate(object):
mouse = """
<input type='mouse' bus='%(mouse_bus)s'/>
"""
+
keyboard = """
- <input type='kbd' bus='%(kbd_bus)s'> </input>
+ <input type='%(kbd_type)s' bus='%(kbd_bus)s'>
</input>
"""
+
tablet = """
<input type='tablet' bus='%(kbd_bus)s'>
</input>
"""
--
Thierry Fauck @ linux.vnet.ibm