[1/1] fix xattrs of rootfs when using sstate cache

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

Commit Message

MOESSBAUER, Felix April 14, 2023, 2:41 a.m. UTC
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(-)

Comments

Jan Kiszka April 14, 2023, 8:22 a.m. UTC | #1
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
>  }
MOESSBAUER, Felix April 14, 2023, 8:33 a.m. UTC | #2
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
> >  }
>
Anton Mikanovich May 3, 2023, 2:48 p.m. UTC | #3
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.

Patch

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
 }