Reverted 7c0fd561bad0250a00cef63e3d787573112a59cf Created separate group of hardlinks for the files inside the same package. This should prevent stripped files to be populated outside of package directories.
[YOCTO #7586] Signed-off-by: Ed Bartosh <[email protected]> --- meta/classes/package.bbclass | 15 ++++++++++++++- meta/lib/oe/package.py | 3 +-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass index f1b966d..e54c366 100644 --- a/meta/classes/package.bbclass +++ b/meta/classes/package.bbclass @@ -812,7 +812,7 @@ python fixup_perms () { } python split_and_strip_files () { - import stat, errno + import stat, errno, subprocess dvar = d.getVar('PKGD', True) pn = d.getVar('PN', True) @@ -877,6 +877,7 @@ python split_and_strip_files () { symlinks = {} hardlinks = {} kernmods = [] + inodes = {} libdir = os.path.abspath(dvar + os.sep + d.getVar("libdir", True)) baselibdir = os.path.abspath(dvar + os.sep + d.getVar("base_libdir", True)) if (d.getVar('INHIBIT_PACKAGE_STRIP', True) != '1'): @@ -914,6 +915,18 @@ python split_and_strip_files () { #bb.note("Sym: %s (%d)" % (ltarget, isELF(ltarget))) symlinks[file] = target continue + + if s.st_ino in inodes: + os.unlink(file) + os.link(inodes[s.st_ino], file) + elif s.st_nlink > 1: + inodes[s.st_ino] = file + cmd = "cp -fa %s %s.tmp && mv -f %s.tmp %s" % (file, file, file, file) + bb.debug(1, "split_and_strip_files: breaking hardlink: %s" % cmd) + ret = subprocess.call(cmd, shell=True) + if ret: + bb.error("split_and_strip_files: '%s' command failed" % cmd) + # It's a file (or hardlink), not a link # ...but is it ELF, and is it already stripped? elf_file = isELF(file) diff --git a/meta/lib/oe/package.py b/meta/lib/oe/package.py index 8bc56c6..ea6feaa 100644 --- a/meta/lib/oe/package.py +++ b/meta/lib/oe/package.py @@ -30,8 +30,7 @@ def runstrip(arg): elif elftype & 8 or elftype & 4: extraflags = "--remove-section=.comment --remove-section=.note" - # Use mv to break hardlinks - stripcmd = "'%s' %s '%s' -o '%s.tmp' && chown --reference='%s' '%s.tmp' && mv '%s.tmp' '%s'" % (strip, extraflags, file, file, file, file, file, file) + stripcmd = "'%s' %s '%s'" % (strip, extraflags, file) bb.debug(1, "runstrip: %s" % stripcmd) ret = subprocess.call(stripcmd, shell=True) -- 2.1.4 -- _______________________________________________ Openembedded-core mailing list [email protected] http://lists.openembedded.org/mailman/listinfo/openembedded-core
