[OE-core] [PATCH] package.bbclass: handle links in sorted order

Dan McGregor danismostlikely at gmail.com
Wed Apr 13 17:30:08 UTC 2016


On 12 April 2016 at 10:51, Denys Dmytriyenko <denis at denix.org> wrote:
> On Tue, Apr 12, 2016 at 08:22:21AM -0700, Bill Randle wrote:
>> When processing links, the directories are processed in unsorted order
>> which can result in cases like /var/lock -> /run/lock handled before
>> /var/run -> /run throwing an error for /var/run because /run already exists.
>> Change the link processing to ensure links are processed in sorted order of
>> the destination.
>
> Seems to resolve the issue for me.
>
>

For me it introduces a new issue. I use two perm files, the OE default
one, and one that changes two links to real directories. The new
packaging code complains that a link target exists as a directory,
even though a subsequent rule sets it up as a directory.

I think during parsing it should remove links as it finds directories
with the same path, and remove directories with the same path in the
order it sees them, that way when it does the in order processing it
uses the last definition in the permissions table.


>> [YOCTO #9430]
>>
>> Signed-off-by: Bill Randle <william.c.randle at intel.com>
>
> Reported-by: Denys Dmytriyenko <denys at ti.com>
> Tested-by: Denys Dmytriyenko <denys at ti.com>
>
>
>> ---
>>  meta/classes/package.bbclass | 19 ++++++++++---------
>>  1 file changed, 10 insertions(+), 9 deletions(-)
>>
>> diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass
>> index 4452e2f..894b729 100644
>> --- a/meta/classes/package.bbclass
>> +++ b/meta/classes/package.bbclass
>> @@ -727,6 +727,7 @@ python fixup_perms () {
>>      dvar = d.getVar('PKGD', True)
>>
>>      fs_perms_table = {}
>> +    fs_link_table = {}
>>
>>      # By default all of the standard directories specified in
>>      # bitbake.conf will get 0755 root:root.
>> @@ -773,24 +774,27 @@ python fixup_perms () {
>>                      continue
>>                  entry = fs_perms_entry(d.expand(line))
>>                  if entry and entry.path:
>> -                    fs_perms_table[entry.path] = entry
>> +                    if entry.link:
>> +                        fs_link_table[entry.link] = entry
>> +                    else:
>> +                        fs_perms_table[entry.path] = entry
>>              f.close()
>>
>>      # Debug -- list out in-memory table
>>      #for dir in fs_perms_table:
>>      #    bb.note("Fixup Perms: %s: %s" % (dir, str(fs_perms_table[dir])))
>> +    #for link in fs_link_table:
>> +    #    bb.note("Fixup Perms: %s: %s" % (link, str(fs_link_table[link])))
>>
>>      # We process links first, so we can go back and fixup directory ownership
>>      # for any newly created directories
>> -    for dir in fs_perms_table:
>> -        if not fs_perms_table[dir].link:
>> -            continue
>> -
>> +    # Process in sorted order so /run gets created before /run/lock, etc.
>> +    for link in sorted(fs_link_table):
>> +        dir = fs_link_table[link].path
>>          origin = dvar + dir
>>          if not (cpath.exists(origin) and cpath.isdir(origin) and not cpath.islink(origin)):
>>              continue
>>
>> -        link = fs_perms_table[dir].link
>>          if link[0] == "/":
>>              target = dvar + link
>>              ptarget = link
>> @@ -810,9 +814,6 @@ python fixup_perms () {
>>          os.symlink(link, origin)
>>
>>      for dir in fs_perms_table:
>> -        if fs_perms_table[dir].link:
>> -            continue
>> -
>>          origin = dvar + dir
>>          if not (cpath.exists(origin) and cpath.isdir(origin)):
>>              continue
>> --
>> 2.5.0
>>
>> --
>> _______________________________________________
>> Openembedded-core mailing list
>> Openembedded-core at lists.openembedded.org
>> http://lists.openembedded.org/mailman/listinfo/openembedded-core
> --
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core at lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core



More information about the Openembedded-core mailing list