Message ID | 20240409075444.27196-1-fathi.boudra@linaro.org |
---|---|
State | Accepted |
Headers | show |
Series | [meta-filesystem,v2] composefs: add a new recipe | expand |
Fathi Boudra <fathi.boudra@linaro.org> escreveu (terça, 9/04/2024 à(s) 08:54): > Tools to handle creating and mounting composefs images > > Flexible mechanism to support read-only mountable filesystem trees, > stacking on top of Linux filesystem. > > It will allow to enable filesystem integrity by leveraging the stack: > ostree -> composefs -> fs-verity > > For reference: > > https://github.com/containers/composefs?tab=readme-ov-file#filesystem-integrity > https://ostreedev.github.io/ostree/composefs/#using-composefs-with-ostree > > Signed-off-by: Fathi Boudra <fathi.boudra@linaro.org> > --- > > Changes since v1: > * move the recipe to meta-filesystem due to fuse3 dependency. > * add a patch to support latest musl due to the basename function > > https://git.musl-libc.org/cgit/musl/commit/?id=725e17ed6dff4d0cd22487bb64470881e86a92e7 > > .../composefs/composefs_1.0.3.bb | 23 ++++++ > ...e-portable-implementation-for-basena.patch | 75 +++++++++++++++++++ > 2 files changed, 98 insertions(+) > create mode 100644 meta-filesystems/recipes-support/composefs/ > composefs_1.0.3.bb > create mode 100644 > meta-filesystems/recipes-support/composefs/files/0001-musl-basename-use-portable-implementation-for-basena.patch > > diff --git a/meta-filesystems/recipes-support/composefs/composefs_1.0.3.bb > b/meta-filesystems/recipes-support/composefs/composefs_1.0.3.bb > new file mode 100644 > index 0000000000..7607b0a12c > --- /dev/null > +++ b/meta-filesystems/recipes-support/composefs/composefs_1.0.3.bb > @@ -0,0 +1,23 @@ > +SUMMARY = "Tools to handle creating and mounting composefs images" > +HOMEPAGE = "https://github.com/containers/composefs" > +LICENSE = "GPL-3.0-or-later & LGPL-2.0-or-later & Apache-2.0" > +LIC_FILES_CHKSUM = "\ > + file://BSD-2-Clause.txt;md5=121c8a0a8fa5961a26b7863034ebcce8 \ > + file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \ > + file://COPYING.LESSERv3;md5=6a6a8e020838b23406c81b19c1d46df6 \ > + file://COPYING.LIB;md5=4fbd65380cdd255951079008b364516c \ > + file://COPYINGv3;md5=d32239bcb673463ab874e80d47fae504 \ > + file://LICENSE.Apache-2.0;md5=3b83ef96387f14655fc854ddc3c6bd57 \ > +" > +DEPENDS = "fuse3 openssl" > +SRCREV = "2d5cdcb9176cfe4ccf1761ef6d78e1c48de35649" > +PV = "1.0.3" > + > +SRC_URI = "\ > + git://github.com/containers/composefs.git;protocol=https;branch=main > \ > + > file://0001-musl-basename-use-portable-implementation-for-basena.patch \ > +" > + > +S = "${WORKDIR}/git" > + > +inherit autotools pkgconfig > diff --git > a/meta-filesystems/recipes-support/composefs/files/0001-musl-basename-use-portable-implementation-for-basena.patch > b/meta-filesystems/recipes-support/composefs/files/0001-musl-basename-use-portable-implementation-for-basena.patch > new file mode 100644 > index 0000000000..49a0b21c6e > --- /dev/null > +++ > b/meta-filesystems/recipes-support/composefs/files/0001-musl-basename-use-portable-implementation-for-basena.patch > @@ -0,0 +1,75 @@ > +From b21a9d4f10a066cac76bb345d31fdd24afcf3e6f Mon Sep 17 00:00:00 2001 > +From: Fathi Boudra <fathi.boudra@linaro.org> > +Date: Tue, 9 Apr 2024 08:47:37 +0200 > +Subject: [PATCH] musl: basename: use portable implementation for basename > API > + > +musl has removed the non-prototype declaration of basename from string.h > which > +now results in build errors with newer clang compilers. > + > +Implement GNU basename behavior using strchr which is portable across > libcs. > + > +Fixes: > +| ../../git/tools/mountcomposefs.c:43:20: > +| error: call to undeclared function 'basename'; ISO C99 and later do not > +| support implicit function declarations [-Wimplicit-function-declaration] > +| 43 | const char *bin = basename(argv0); > +| | ^ > +| ../../git/tools/mountcomposefs.c:43:14: > +| error: incompatible integer to pointer conversion initializing 'const > char *' > +| with an expression of type 'int' [-Wint-conversion] > +| 43 | const char *bin = basename(argv0); > +| | ^ ~~~~~~~~~~~~~~~ > + > +For reference: > + > https://git.musl-libc.org/cgit/musl/commit/?id=725e17ed6dff4d0cd22487bb64470881e86a92e7 > + > +Closes: https://github.com/containers/composefs/issues/272 > + > +Signed-off-by: Fathi Boudra <fathi.boudra@linaro.org> > + > +Upstream-Status: Submitted [ > https://github.com/containers/composefs/pull/273] > +--- > + libcomposefs/lcfs-utils.h | 6 ++++++ > + tools/mkcomposefs.c | 2 +- > + tools/mountcomposefs.c | 3 ++- > + 3 files changed, 9 insertions(+), 2 deletions(-) > + > +--- a/tools/mountcomposefs.c > ++++ b/tools/mountcomposefs.c > +@@ -37,10 +37,11 @@ > + #include <linux/fsverity.h> > + > + #include "libcomposefs/lcfs-mount.h" > ++#include "libcomposefs/lcfs-utils.h" > Hi Fathi, Maybe just the #include <libgen.h> can do the job. It includes the posix implementation of the basename https://man7.org/linux/man-pages/man0/libgen.h.0p.html Added the same comment on the github PR. Jose + > + static void usage(const char *argv0) > + { > +- const char *bin = basename(argv0); > ++ const char *bin = gnu_basename(argv0); > + fprintf(stderr, > + "usage: %s [-t type] [-o opt[,opts..]] IMAGE MOUNTPOINT\n" > + "Example:\n" > +--- a/libcomposefs/lcfs-utils.h > ++++ b/libcomposefs/lcfs-utils.h > +@@ -161,4 +161,10 @@ static inline void *steal_pointer(void * > + /* type safety */ > + #define steal_pointer(pp) (0 ? (*(pp)) : (steal_pointer)(pp)) > + > ++static inline const char *gnu_basename(const char *filename) > ++{ > ++ const char *p = strrchr(filename, '/'); > ++ return p ? p+1 : filename; > ++} > ++ > + #endif > +--- a/tools/mkcomposefs.c > ++++ b/tools/mkcomposefs.c > +@@ -315,7 +315,7 @@ static int fill_store(struct lcfs_node_s > + > + static void usage(const char *argv0) > + { > +- const char *bin = basename(argv0); > ++ const char *bin = gnu_basename(argv0); > + fprintf(stderr, > + "Usage: %s [OPTIONS] SOURCE IMAGE\n" > + "Options:\n" > -- > 2.43.0 > > > -=-=-=-=-=-=-=-=-=-=-=- > Links: You receive all messages sent to this group. > View/Reply Online (#109876): > https://lists.openembedded.org/g/openembedded-devel/message/109876 > Mute This Topic: https://lists.openembedded.org/mt/105417917/5052612 > Group Owner: openembedded-devel+owner@lists.openembedded.org > Unsubscribe: https://lists.openembedded.org/g/openembedded-devel/unsub [ > quaresma.jose@gmail.com] > -=-=-=-=-=-=-=-=-=-=-=- > >
Hi José, On Tue, 9 Apr 2024 at 12:00, Jose Quaresma <quaresma.jose@gmail.com> wrote: > Hi Fathi, > > Maybe just the #include <libgen.h> can do the job. > > It includes the posix implementation of the basename > https://man7.org/linux/man-pages/man0/libgen.h.0p.html > > Added the same comment on the github PR. > > Jose I tried it initially. It looks like we need to use the gnu implementation in this case, not the posix one (including libgen.h won't be enough). Hence, I ended to propose the approach used in kmod. Though, as many projects are affected and we can find several patches floating around to fix the musl basename function changes, I wonder if we should go down the road to include a stub in musl. I think that's what alpine proposed at some point.
Fathi Boudra <fathi.boudra@linaro.org> escreveu (terça, 9/04/2024 à(s) 11:09): > Hi José, > > On Tue, 9 Apr 2024 at 12:00, Jose Quaresma <quaresma.jose@gmail.com> > wrote: > > Hi Fathi, > > > > Maybe just the #include <libgen.h> can do the job. > > > > It includes the posix implementation of the basename > > https://man7.org/linux/man-pages/man0/libgen.h.0p.html > > > > Added the same comment on the github PR. > > > > Jose > > I tried it initially. It looks like we need to use the gnu > implementation in this case, not the posix one (including libgen.h > won't be enough). Hence, I ended to propose the approach used in kmod. > Ok, understand. My suggestion was mainly because I saw several patches on the Khem branch. Thanks for the clarification. > Though, as many projects are affected and we can find several patches > floating around to fix the musl basename function changes, I wonder if > we should go down the road to include a stub in musl. I think that's > what alpine proposed at some point. > Seems like a good plan but I didn't find references about this problem on the musl mailing list.
diff --git a/meta-filesystems/recipes-support/composefs/composefs_1.0.3.bb b/meta-filesystems/recipes-support/composefs/composefs_1.0.3.bb new file mode 100644 index 0000000000..7607b0a12c --- /dev/null +++ b/meta-filesystems/recipes-support/composefs/composefs_1.0.3.bb @@ -0,0 +1,23 @@ +SUMMARY = "Tools to handle creating and mounting composefs images" +HOMEPAGE = "https://github.com/containers/composefs" +LICENSE = "GPL-3.0-or-later & LGPL-2.0-or-later & Apache-2.0" +LIC_FILES_CHKSUM = "\ + file://BSD-2-Clause.txt;md5=121c8a0a8fa5961a26b7863034ebcce8 \ + file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \ + file://COPYING.LESSERv3;md5=6a6a8e020838b23406c81b19c1d46df6 \ + file://COPYING.LIB;md5=4fbd65380cdd255951079008b364516c \ + file://COPYINGv3;md5=d32239bcb673463ab874e80d47fae504 \ + file://LICENSE.Apache-2.0;md5=3b83ef96387f14655fc854ddc3c6bd57 \ +" +DEPENDS = "fuse3 openssl" +SRCREV = "2d5cdcb9176cfe4ccf1761ef6d78e1c48de35649" +PV = "1.0.3" + +SRC_URI = "\ + git://github.com/containers/composefs.git;protocol=https;branch=main \ + file://0001-musl-basename-use-portable-implementation-for-basena.patch \ +" + +S = "${WORKDIR}/git" + +inherit autotools pkgconfig diff --git a/meta-filesystems/recipes-support/composefs/files/0001-musl-basename-use-portable-implementation-for-basena.patch b/meta-filesystems/recipes-support/composefs/files/0001-musl-basename-use-portable-implementation-for-basena.patch new file mode 100644 index 0000000000..49a0b21c6e --- /dev/null +++ b/meta-filesystems/recipes-support/composefs/files/0001-musl-basename-use-portable-implementation-for-basena.patch @@ -0,0 +1,75 @@ +From b21a9d4f10a066cac76bb345d31fdd24afcf3e6f Mon Sep 17 00:00:00 2001 +From: Fathi Boudra <fathi.boudra@linaro.org> +Date: Tue, 9 Apr 2024 08:47:37 +0200 +Subject: [PATCH] musl: basename: use portable implementation for basename API + +musl has removed the non-prototype declaration of basename from string.h which +now results in build errors with newer clang compilers. + +Implement GNU basename behavior using strchr which is portable across libcs. + +Fixes: +| ../../git/tools/mountcomposefs.c:43:20: +| error: call to undeclared function 'basename'; ISO C99 and later do not +| support implicit function declarations [-Wimplicit-function-declaration] +| 43 | const char *bin = basename(argv0); +| | ^ +| ../../git/tools/mountcomposefs.c:43:14: +| error: incompatible integer to pointer conversion initializing 'const char *' +| with an expression of type 'int' [-Wint-conversion] +| 43 | const char *bin = basename(argv0); +| | ^ ~~~~~~~~~~~~~~~ + +For reference: +https://git.musl-libc.org/cgit/musl/commit/?id=725e17ed6dff4d0cd22487bb64470881e86a92e7 + +Closes: https://github.com/containers/composefs/issues/272 + +Signed-off-by: Fathi Boudra <fathi.boudra@linaro.org> + +Upstream-Status: Submitted [https://github.com/containers/composefs/pull/273] +--- + libcomposefs/lcfs-utils.h | 6 ++++++ + tools/mkcomposefs.c | 2 +- + tools/mountcomposefs.c | 3 ++- + 3 files changed, 9 insertions(+), 2 deletions(-) + +--- a/tools/mountcomposefs.c ++++ b/tools/mountcomposefs.c +@@ -37,10 +37,11 @@ + #include <linux/fsverity.h> + + #include "libcomposefs/lcfs-mount.h" ++#include "libcomposefs/lcfs-utils.h" + + static void usage(const char *argv0) + { +- const char *bin = basename(argv0); ++ const char *bin = gnu_basename(argv0); + fprintf(stderr, + "usage: %s [-t type] [-o opt[,opts..]] IMAGE MOUNTPOINT\n" + "Example:\n" +--- a/libcomposefs/lcfs-utils.h ++++ b/libcomposefs/lcfs-utils.h +@@ -161,4 +161,10 @@ static inline void *steal_pointer(void * + /* type safety */ + #define steal_pointer(pp) (0 ? (*(pp)) : (steal_pointer)(pp)) + ++static inline const char *gnu_basename(const char *filename) ++{ ++ const char *p = strrchr(filename, '/'); ++ return p ? p+1 : filename; ++} ++ + #endif +--- a/tools/mkcomposefs.c ++++ b/tools/mkcomposefs.c +@@ -315,7 +315,7 @@ static int fill_store(struct lcfs_node_s + + static void usage(const char *argv0) + { +- const char *bin = basename(argv0); ++ const char *bin = gnu_basename(argv0); + fprintf(stderr, + "Usage: %s [OPTIONS] SOURCE IMAGE\n" + "Options:\n"
Tools to handle creating and mounting composefs images Flexible mechanism to support read-only mountable filesystem trees, stacking on top of Linux filesystem. It will allow to enable filesystem integrity by leveraging the stack: ostree -> composefs -> fs-verity For reference: https://github.com/containers/composefs?tab=readme-ov-file#filesystem-integrity https://ostreedev.github.io/ostree/composefs/#using-composefs-with-ostree Signed-off-by: Fathi Boudra <fathi.boudra@linaro.org> --- Changes since v1: * move the recipe to meta-filesystem due to fuse3 dependency. * add a patch to support latest musl due to the basename function https://git.musl-libc.org/cgit/musl/commit/?id=725e17ed6dff4d0cd22487bb64470881e86a92e7 .../composefs/composefs_1.0.3.bb | 23 ++++++ ...e-portable-implementation-for-basena.patch | 75 +++++++++++++++++++ 2 files changed, 98 insertions(+) create mode 100644 meta-filesystems/recipes-support/composefs/composefs_1.0.3.bb create mode 100644 meta-filesystems/recipes-support/composefs/files/0001-musl-basename-use-portable-implementation-for-basena.patch