aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBill Randle <william.c.randle@intel.com>2016-04-12 08:22:21 -0700
committerRichard Purdie <richard.purdie@linuxfoundation.org>2016-04-13 10:12:43 +0100
commitd71f4f54b4c22c9382bddce66c1580d875dcfef2 (patch)
tree7b66f10fda77ba0bb7feddda06f9b0dfa8e6a0b5
parent036b26093e3c88dbb903a4a11d29c32c7516bc02 (diff)
downloadopenembedded-core-contrib-d71f4f54b4c22c9382bddce66c1580d875dcfef2.tar.gz
openembedded-core-contrib-d71f4f54b4c22c9382bddce66c1580d875dcfef2.tar.bz2
openembedded-core-contrib-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.bbclass19
1 files changed, 10 insertions, 9 deletions
diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass
index 4452e2f4f45..894b7294a25 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