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] (From OE-Core rev: d71f4f54b4c22c9382bddce66c1580d875dcfef2) Signed-off-by: Bill Randle <william.c.randle@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
29cf26363f
commit
9262d2ff39
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue