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

Royce Lv lvroyce at linux.vnet.ibm.com
Fri Jan 30 01:26:51 UTC 2015


On 01/29/2015 07:05 AM, Rodrigo Trujillo wrote:
> 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".
>
> Royce:
>
> 'ppc64le': ['ppc64', 'ppc64le']}  ->   'ppc64le' (arch of the host)  
> ,   ['ppc64', 'ppc64le']  (archs supported by the host)
>
> current jsons does not have ppc64le inside them, but ppc64 will work 
> the same.
OK, I was just wandering why there is such ppc64le arch without an ISO link.
I think that's fine.
>
>>>
>>>   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
>>
>




More information about the Kimchi-devel mailing list