diff mbox series

[meta-filesystem,v2] composefs: add a new recipe

Message ID 20240409075444.27196-1-fathi.boudra@linaro.org
State Accepted
Headers show
Series [meta-filesystem,v2] composefs: add a new recipe | expand

Commit Message

Fathi Boudra April 9, 2024, 7:54 a.m. UTC
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

Comments

Jose Quaresma April 9, 2024, 10 a.m. UTC | #1
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]
> -=-=-=-=-=-=-=-=-=-=-=-
>
>
Fathi Boudra April 9, 2024, 10:09 a.m. UTC | #2
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.
Jose Quaresma April 9, 2024, 10:28 a.m. UTC | #3
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 mbox series

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"
+ 
+ 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"