Message ID | 20230414024121.29031-1-felix.moessbauer@siemens.com |
---|---|
State | Accepted, archived |
Headers | show |
Series | [1/1] fix xattrs of rootfs when using sstate cache | expand |
On 14.04.23 04:41, 'Felix Moessbauer' via isar-users wrote: > When creating the sstate cache artifact, the extended file attributes > need to be stored in the tar archive as well. Otherwise, capabilities on > files are lost when the artifact from the cache is used. > > Note, that for tar versions shipped with debian bullseye and bookworm, > despite of the documentation, both --xattrs and --xattrs-include='*' is > required to store all extended attributes. Are we already demanding >= bullseye as build env? Or is buster still supported? Jan > > Signed-off-by: Felix Moessbauer <felix.moessbauer@siemens.com> > --- > meta/classes/rootfs.bbclass | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/meta/classes/rootfs.bbclass b/meta/classes/rootfs.bbclass > index 784793b5..22449d71 100644 > --- a/meta/classes/rootfs.bbclass > +++ b/meta/classes/rootfs.bbclass > @@ -327,6 +327,8 @@ SSTATETASKS += "do_rootfs_install" > SSTATECREATEFUNCS += "rootfs_install_sstate_prepare" > SSTATEPOSTINSTFUNCS += "rootfs_install_sstate_finalize" > > +SSTATE_TAR_ATTR_FLAGS ?= "--xattrs --xattrs-include='*'" > + > # the rootfs is owned by root, so we need some sudoing to pack and unpack > rootfs_install_sstate_prepare() { > # this runs in SSTATE_BUILDDIR, which will be deleted automatically > @@ -335,7 +337,7 @@ rootfs_install_sstate_prepare() { > mkdir -p ${WORKDIR}/mnt/rootfs > sudo mount --bind ${WORKDIR}/rootfs ${WORKDIR}/mnt/rootfs -o ro > lopts="--one-file-system --exclude=var/cache/apt/archives" > - sudo tar -C ${WORKDIR}/mnt -cpSf rootfs.tar $lopts rootfs > + sudo tar -C ${WORKDIR}/mnt -cpSf rootfs.tar $lopts ${SSTATE_TAR_ATTR_FLAGS} rootfs > sudo umount ${WORKDIR}/mnt/rootfs > sudo chown $(id -u):$(id -g) rootfs.tar > } > @@ -346,7 +348,7 @@ rootfs_install_sstate_finalize() { > # - after building the rootfs, the tar won't be there, but we also don't need to unpack > # - after restoring from cache, there will be a tar which we unpack and then delete > if [ -f rootfs.tar ]; then > - sudo tar -C ${WORKDIR} -xpf rootfs.tar > + sudo tar -C ${WORKDIR} -xpf rootfs.tar ${SSTATE_TAR_ATTR_FLAGS} > rm rootfs.tar > fi > }
On Fri, 2023-04-14 at 10:22 +0200, Jan Kiszka wrote: > On 14.04.23 04:41, 'Felix Moessbauer' via isar-users wrote: > > When creating the sstate cache artifact, the extended file > > attributes > > need to be stored in the tar archive as well. Otherwise, > > capabilities on > > files are lost when the artifact from the cache is used. > > > > Note, that for tar versions shipped with debian bullseye and > > bookworm, > > despite of the documentation, both --xattrs and --xattrs- > > include='*' is > > required to store all extended attributes. > > Are we already demanding >= bullseye as build env? Or is buster still > supported? Actually that does not matter, as this pattern will work on any version (also buster). The point I wanted to highlight here is, that - despite the documentation saying otherwise - it is not enough to just use -- xattrs. This applies to all tar versions I was able to test (buster, bullseye, bookworm). Felix > > Jan > > > > > Signed-off-by: Felix Moessbauer <felix.moessbauer@siemens.com> > > --- > > meta/classes/rootfs.bbclass | 6 ++++-- > > 1 file changed, 4 insertions(+), 2 deletions(-) > > > > diff --git a/meta/classes/rootfs.bbclass > > b/meta/classes/rootfs.bbclass > > index 784793b5..22449d71 100644 > > --- a/meta/classes/rootfs.bbclass > > +++ b/meta/classes/rootfs.bbclass > > @@ -327,6 +327,8 @@ SSTATETASKS += "do_rootfs_install" > > SSTATECREATEFUNCS += "rootfs_install_sstate_prepare" > > SSTATEPOSTINSTFUNCS += "rootfs_install_sstate_finalize" > > > > +SSTATE_TAR_ATTR_FLAGS ?= "--xattrs --xattrs-include='*'" > > + > > # the rootfs is owned by root, so we need some sudoing to pack and > > unpack > > rootfs_install_sstate_prepare() { > > # this runs in SSTATE_BUILDDIR, which will be deleted > > automatically > > @@ -335,7 +337,7 @@ rootfs_install_sstate_prepare() { > > mkdir -p ${WORKDIR}/mnt/rootfs > > sudo mount --bind ${WORKDIR}/rootfs ${WORKDIR}/mnt/rootfs -o > > ro > > lopts="--one-file-system --exclude=var/cache/apt/archives" > > - sudo tar -C ${WORKDIR}/mnt -cpSf rootfs.tar $lopts rootfs > > + sudo tar -C ${WORKDIR}/mnt -cpSf rootfs.tar $lopts > > ${SSTATE_TAR_ATTR_FLAGS} rootfs > > sudo umount ${WORKDIR}/mnt/rootfs > > sudo chown $(id -u):$(id -g) rootfs.tar > > } > > @@ -346,7 +348,7 @@ rootfs_install_sstate_finalize() { > > # - after building the rootfs, the tar won't be there, but we > > also don't need to unpack > > # - after restoring from cache, there will be a tar which we > > unpack and then delete > > if [ -f rootfs.tar ]; then > > - sudo tar -C ${WORKDIR} -xpf rootfs.tar > > + sudo tar -C ${WORKDIR} -xpf rootfs.tar > > ${SSTATE_TAR_ATTR_FLAGS} > > rm rootfs.tar > > fi > > } >
14/04/2023 05:41, 'Felix Moessbauer' via isar-users wrote: > When creating the sstate cache artifact, the extended file attributes > need to be stored in the tar archive as well. Otherwise, capabilities on > files are lost when the artifact from the cache is used. > > Note, that for tar versions shipped with debian bullseye and bookworm, > despite of the documentation, both --xattrs and --xattrs-include='*' is > required to store all extended attributes. > > Signed-off-by: Felix Moessbauer <felix.moessbauer@siemens.com> Applied to next, thanks.
diff --git a/meta/classes/rootfs.bbclass b/meta/classes/rootfs.bbclass index 784793b5..22449d71 100644 --- a/meta/classes/rootfs.bbclass +++ b/meta/classes/rootfs.bbclass @@ -327,6 +327,8 @@ SSTATETASKS += "do_rootfs_install" SSTATECREATEFUNCS += "rootfs_install_sstate_prepare" SSTATEPOSTINSTFUNCS += "rootfs_install_sstate_finalize" +SSTATE_TAR_ATTR_FLAGS ?= "--xattrs --xattrs-include='*'" + # the rootfs is owned by root, so we need some sudoing to pack and unpack rootfs_install_sstate_prepare() { # this runs in SSTATE_BUILDDIR, which will be deleted automatically @@ -335,7 +337,7 @@ rootfs_install_sstate_prepare() { mkdir -p ${WORKDIR}/mnt/rootfs sudo mount --bind ${WORKDIR}/rootfs ${WORKDIR}/mnt/rootfs -o ro lopts="--one-file-system --exclude=var/cache/apt/archives" - sudo tar -C ${WORKDIR}/mnt -cpSf rootfs.tar $lopts rootfs + sudo tar -C ${WORKDIR}/mnt -cpSf rootfs.tar $lopts ${SSTATE_TAR_ATTR_FLAGS} rootfs sudo umount ${WORKDIR}/mnt/rootfs sudo chown $(id -u):$(id -g) rootfs.tar } @@ -346,7 +348,7 @@ rootfs_install_sstate_finalize() { # - after building the rootfs, the tar won't be there, but we also don't need to unpack # - after restoring from cache, there will be a tar which we unpack and then delete if [ -f rootfs.tar ]; then - sudo tar -C ${WORKDIR} -xpf rootfs.tar + sudo tar -C ${WORKDIR} -xpf rootfs.tar ${SSTATE_TAR_ATTR_FLAGS} rm rootfs.tar fi }
When creating the sstate cache artifact, the extended file attributes need to be stored in the tar archive as well. Otherwise, capabilities on files are lost when the artifact from the cache is used. Note, that for tar versions shipped with debian bullseye and bookworm, despite of the documentation, both --xattrs and --xattrs-include='*' is required to store all extended attributes. Signed-off-by: Felix Moessbauer <felix.moessbauer@siemens.com> --- meta/classes/rootfs.bbclass | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)