[OE-core] [PATCH] sdk.py: fix conflicts of packages

Mark Hatle mark.hatle at windriver.com
Tue Sep 1 21:51:25 UTC 2015


On 9/1/15 4:29 PM, Mark Hatle wrote:
> On 9/1/15 4:11 PM, Richard Purdie wrote:
>> On Tue, 2015-08-25 at 16:29 +0800, Jian Liu wrote:
>>> If packages are conveyed to smart to install at the same time,
>>> conflicts will not happen.
>>> Try to install packages into sdk image at the same time.

I forgot to add..  If we have two packages that are conflicting, even in an
'attemptonly' install... it's likely a bug in those packages.  Two files of the
same path/name should never be written to that same location.. they either need
to be made to be identical, or we need to justify why the two packages can never
be installed at the same time.

(In the case if ncurses-dev, I'd be hard to justify why they shouldn't be
installed at the same time.)

--Mark

>> Doesn't smart have an issue where if one package fails to install for
>> some reason, others listed in the same command won't be attempted? Did
>> you test that?
> 
> I believe this was fixed in:
> 
> commit cd475aea5f5bc4b6a2dd3e576070a117ae079597
> Author: Mark Hatle <mark.hatle at windriver.com>
> Date:   Thu Jan 22 16:10:34 2015 -0600
> 
>     python-smartpm: Fix attemptonly builds when file conflicts occur
> 
>     [YOCTO #7299]
> 
>     When file conflicts occur, the RPM transaction aborts.  Instead of
>     simply accepting the failure, we now identify, capture, and remove
>     the offending package(s) from the transaction and retry.
> 
>     Signed-off-by: Mark Hatle <mark.hatle at windriver.com>
>     Signed-off-by: Ross Burton <ross.burton at intel.com>
> 
> 
> 
> 
> --Mark
> 
>> Cheers,
>>
>> Richard
>>
>>> This patch is not so perfect. For example,
>>>   IMAGE_INSTALL += "lib32-ncurses"
>>>   IMAGE_INSTALL += "ncurses-dev"
>>>  ncurses-dev and lib32-ncurses-dev will have conflicts during packages installation.
>>>
>>> Signed-off-by: Jian Liu <jian.liu at windriver.com>
>>> ---
>>>  sdk.py |   45 +++++++++++++++++++++++++++++++++------------
>>>  1 file changed, 33 insertions(+), 12 deletions(-)
>>>
>>> diff --git a/meta/lib/oe/sdk.py b/meta/lib/oe/sdk.py
>>> index c57a441..7b43a29 100644
>>> --- a/meta/lib/oe/sdk.py
>>> +++ b/meta/lib/oe/sdk.py
>>> @@ -107,10 +107,17 @@ class RpmSdk(Sdk):
>>>          pm.dump_all_available_pkgs()
>>>          pm.update()
>>>  
>>> -        for pkg_type in self.install_order:
>>> -            if pkg_type in pkgs_to_install:
>>> -                pm.install(pkgs_to_install[pkg_type],
>>> -                           [False, True][pkg_type == Manifest.PKG_TYPE_ATTEMPT_ONLY])
>>> +        pkgs = []
>>> +        pkgs_attempt = []
>>> +        for pkg_type in pkgs_to_install:
>>> +            if pkg_type == Manifest.PKG_TYPE_ATTEMPT_ONLY:
>>> +                pkgs_attempt += pkgs_to_install[pkg_type]
>>> +            else:
>>> +                pkgs += pkgs_to_install[pkg_type]
>>> +
>>> +        pm.install(pkgs)
>>> +
>>> +        pm.install(pkgs_attempt, True)
>>>  
>>>      def _populate(self):
>>>          bb.note("Installing TARGET packages")
>>> @@ -184,10 +191,17 @@ class OpkgSdk(Sdk):
>>>  
>>>          pm.update()
>>>  
>>> -        for pkg_type in self.install_order:
>>> -            if pkg_type in pkgs_to_install:
>>> -                pm.install(pkgs_to_install[pkg_type],
>>> -                           [False, True][pkg_type == Manifest.PKG_TYPE_ATTEMPT_ONLY])
>>> +        pkgs = []
>>> +        pkgs_attempt = []
>>> +        for pkg_type in pkgs_to_install:
>>> +            if pkg_type == Manifest.PKG_TYPE_ATTEMPT_ONLY:
>>> +                pkgs_attempt += pkgs_to_install[pkg_type]
>>> +            else:
>>> +                pkgs += pkgs_to_install[pkg_type]
>>> +
>>> +        pm.install(pkgs)
>>> +
>>> +        pm.install(pkgs_attempt, True)
>>>  
>>>      def _populate(self):
>>>          bb.note("Installing TARGET packages")
>>> @@ -260,10 +274,17 @@ class DpkgSdk(Sdk):
>>>          pm.write_index()
>>>          pm.update()
>>>  
>>> -        for pkg_type in self.install_order:
>>> -            if pkg_type in pkgs_to_install:
>>> -                pm.install(pkgs_to_install[pkg_type],
>>> -                           [False, True][pkg_type == Manifest.PKG_TYPE_ATTEMPT_ONLY])
>>> +        pkgs = []
>>> +        pkgs_attempt = []
>>> +        for pkg_type in pkgs_to_install:
>>> +            if pkg_type == Manifest.PKG_TYPE_ATTEMPT_ONLY:
>>> +                pkgs_attempt += pkgs_to_install[pkg_type]
>>> +            else:
>>> +                pkgs += pkgs_to_install[pkg_type]
>>> +
>>> +        pm.install(pkgs)
>>> +
>>> +        pm.install(pkgs_attempt, True)
>>>  
>>>      def _populate(self):
>>>          bb.note("Installing TARGET packages")
>>
>>
> 




More information about the Openembedded-core mailing list