]> git.ipfire.org Git - thirdparty/openembedded/openembedded-core.git/commitdiff
sstate: another fix for touching files inside pseudo
authorJose Quaresma <quaresma.jose@gmail.com>
Sun, 7 Nov 2021 11:36:52 +0000 (11:36 +0000)
committerAnuj Mittal <anuj.mittal@intel.com>
Wed, 10 Nov 2021 03:58:47 +0000 (11:58 +0800)
This patch is a fixup for 676757f "sstate: fix touching files inside pseudo"

running the 'id' command inside the sstate_unpack_package
function shows that this funcion run inside the pseudo:

 uid=0(root) gid=0(root) groups=0(root)

The check for [ -w ${SSTATE_PKG} ] and [ -O ${SSTATE_PKG}.siginfo ]
will always return true and the touch can fail when the real user
don't have permission or in readonly filesystem.

As the documentation refers:
- the file test operator "-w" check if the file has write permission
(for the user running the test).
- the file test operator "-O" check if you are owner of file

We can avoid this test running the touch and mask any return errors
that we have.

(From OE-Core rev: 29fc85997ade490ae46ffca37ef8e1a56957c876)

Signed-off-by: Jose Quaresma <quaresma.jose@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 5b9210d66c78bb3f79056e5586cea7b0edd714a9)
Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
meta/classes/sstate.bbclass

index 957762db5c31cb0484e1989a4457b17db20426a1..da292259833a321f7eef1ab5f2ed09f642c22ca0 100644 (file)
@@ -863,12 +863,12 @@ python sstate_report_unihash() {
 #
 sstate_unpack_package () {
        tar -xvzf ${SSTATE_PKG}
-       # update .siginfo atime on local/NFS mirror
-       [ -O ${SSTATE_PKG}.siginfo ] && [ -w ${SSTATE_PKG}.siginfo ] && [ -h ${SSTATE_PKG}.siginfo ] && touch -a ${SSTATE_PKG}.siginfo
-       # Use "! -w ||" to return true for read only files
-       [ ! -w ${SSTATE_PKG} ] || touch --no-dereference ${SSTATE_PKG}
-       [ ! -w ${SSTATE_PKG}.sig ] || [ ! -e ${SSTATE_PKG}.sig ] || touch --no-dereference ${SSTATE_PKG}.sig
-       [ ! -w ${SSTATE_PKG}.siginfo ] || [ ! -e ${SSTATE_PKG}.siginfo ] || touch --no-dereference ${SSTATE_PKG}.siginfo
+       # update .siginfo atime on local/NFS mirror if it is a symbolic link
+       [ ! -h ${SSTATE_PKG}.siginfo ] || touch -a ${SSTATE_PKG}.siginfo 2>/dev/null || true
+       # update each symbolic link instead of any referenced file
+       touch --no-dereference ${SSTATE_PKG} 2>/dev/null || true
+       [ ! -e ${SSTATE_PKG}.sig ] || touch --no-dereference ${SSTATE_PKG}.sig 2>/dev/null || true
+       [ ! -e ${SSTATE_PKG}.siginfo ] || touch --no-dereference ${SSTATE_PKG}.siginfo 2>/dev/null || true
 }
 
 BB_HASHCHECK_FUNCTION = "sstate_checkhashes"