[Kimchi-devel] [PATCH] Supports Kimchi on LE systems v4

Ramon Medeiros ramonn at linux.vnet.ibm.com
Thu Jan 29 11:07:44 UTC 2015


On 01/29/2015 05:00 AM, Royce Lv wrote:
> I think we are almost there, one nit below.
>
> On 01/28/2015 09:51 AM, 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 at 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']}
>> +
> Update this ARCHS means to tell distroloader to import proper remote 
> ISO url for this host arch.
> So you may need to update the files under "distro.d", because there is 
> no distro in these json files specified remote link with arch "ppc64le".
The time i tested, all remote ppc64 ISOs where displayed. Isn't this 
enough?


>>
>>   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>
>>           """
>
> _______________________________________________
> Kimchi-devel mailing list
> Kimchi-devel at ovirt.org
> http://lists.ovirt.org/mailman/listinfo/kimchi-devel
>


-- 
Ramon Nunes Medeiros
Kimchi Developer
Software Engineer - Linux Technology Center Brazil
IBM Systems & Technology Group
Phone : +55 19 2132 7878
ramonn at br.ibm.com




More information about the Kimchi-devel mailing list