composefs: add a new recipe

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>
Signed-off-by: Khem Raj <raj.khem@gmail.com>
This commit is contained in:
Fathi Boudra 2024-04-09 09:54:44 +02:00 committed by Khem Raj
parent 4f72481c68
commit 64082c18e5
No known key found for this signature in database
GPG Key ID: BB053355919D3314
2 changed files with 98 additions and 0 deletions

View File

@ -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

View File

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