diff options
author | Bill Randle <william.c.randle@intel.com> | 2016-04-12 08:22:21 -0700 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2016-04-13 10:12:43 +0100 |
commit | d71f4f54b4c22c9382bddce66c1580d875dcfef2 (patch) | |
tree | 7b66f10fda77ba0bb7feddda06f9b0dfa8e6a0b5 | |
parent | 036b26093e3c88dbb903a4a11d29c32c7516bc02 (diff) | |
download | openembedded-core-d71f4f54b4c22c9382bddce66c1580d875dcfef2.tar.gz openembedded-core-d71f4f54b4c22c9382bddce66c1580d875dcfef2.tar.bz2 openembedded-core-d71f4f54b4c22c9382bddce66c1580d875dcfef2.zip |
package.bbclass: handle links in sorted order
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.
[YOCTO #9430]
Signed-off-by: Bill Randle <william.c.randle@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r-- | meta/classes/package.bbclass | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass index 4452e2f4f4..894b7294a2 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 |