From fbb0d0ca718ae560bd1201392343861bcb73837d Mon Sep 17 00:00:00 2001 From: Krzesimir Nowak Date: Mon, 17 Nov 2025 16:07:21 +0100 Subject: [PATCH] overlay coreos/{user-patches,config}: Overrides for thin-provisioning-tools Let's avoid pulling in clang, shall we? Signed-off-by: Krzesimir Nowak --- .../env/sys-block/thin-provisioning-tools | 2 + ...nstallation-of-symlinks-and-manpages.patch | 81 +++++++++++ ...-all-Make-thin_migrate-tool-optional.patch | 135 ++++++++++++++++++ .../thin-provisioning-tools/README.md | 18 +++ 4 files changed, 236 insertions(+) create mode 100644 sdk_container/src/third_party/coreos-overlay/coreos/config/env/sys-block/thin-provisioning-tools create mode 100644 sdk_container/src/third_party/coreos-overlay/coreos/user-patches/sys-block/thin-provisioning-tools/0001-build-Simplify-installation-of-symlinks-and-manpages.patch create mode 100644 sdk_container/src/third_party/coreos-overlay/coreos/user-patches/sys-block/thin-provisioning-tools/0002-all-Make-thin_migrate-tool-optional.patch create mode 100644 sdk_container/src/third_party/coreos-overlay/coreos/user-patches/sys-block/thin-provisioning-tools/README.md diff --git a/sdk_container/src/third_party/coreos-overlay/coreos/config/env/sys-block/thin-provisioning-tools b/sdk_container/src/third_party/coreos-overlay/coreos/config/env/sys-block/thin-provisioning-tools new file mode 100644 index 0000000000..31dd67cbe6 --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/coreos/config/env/sys-block/thin-provisioning-tools @@ -0,0 +1,2 @@ +# This is to disable building thin_migrate tool. +export ECARGO_EXTRA_ARGS=--no-default-features diff --git a/sdk_container/src/third_party/coreos-overlay/coreos/user-patches/sys-block/thin-provisioning-tools/0001-build-Simplify-installation-of-symlinks-and-manpages.patch b/sdk_container/src/third_party/coreos-overlay/coreos/user-patches/sys-block/thin-provisioning-tools/0001-build-Simplify-installation-of-symlinks-and-manpages.patch new file mode 100644 index 0000000000..58bc17e457 --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/coreos/user-patches/sys-block/thin-provisioning-tools/0001-build-Simplify-installation-of-symlinks-and-manpages.patch @@ -0,0 +1,81 @@ +From c5fbb32be0509e4368268a79e7aacc6b5e34d28e Mon Sep 17 00:00:00 2001 +From: Krzesimir Nowak +Date: Thu, 20 Nov 2025 13:16:09 +0100 +Subject: [PATCH 1/2] [build] Simplify installation of symlinks and manpages + +Signed-off-by: Krzesimir Nowak +--- + Makefile | 52 ++++++++-------------------------------------------- + 1 file changed, 8 insertions(+), 44 deletions(-) + +diff --git a/Makefile b/Makefile +index b04937aa..44c99c99 100644 +--- a/Makefile ++++ b/Makefile +@@ -55,55 +55,19 @@ TOOLS:=\ + era_invalidate \ + era_restore + ++# This must be two empty lines to get a newline. ++define NEWLINE ++ ++ ++endef ++ + MANPAGES:=$(patsubst %,man8/%.8,$(TOOLS)) + + install: $(MANPAGES) + $(INSTALL_DIR) $(BINDIR) + $(INSTALL_PROGRAM) $(PDATA_TOOLS) $(BINDIR) +- ln -s -f pdata_tools $(BINDIR)/cache_check +- ln -s -f pdata_tools $(BINDIR)/cache_dump +- ln -s -f pdata_tools $(BINDIR)/cache_metadata_size +- ln -s -f pdata_tools $(BINDIR)/cache_repair +- ln -s -f pdata_tools $(BINDIR)/cache_restore +- ln -s -f pdata_tools $(BINDIR)/cache_writeback +- ln -s -f pdata_tools $(BINDIR)/thin_check +- ln -s -f pdata_tools $(BINDIR)/thin_delta +- ln -s -f pdata_tools $(BINDIR)/thin_dump +- ln -s -f pdata_tools $(BINDIR)/thin_ls +- ln -s -f pdata_tools $(BINDIR)/thin_repair +- ln -s -f pdata_tools $(BINDIR)/thin_restore +- ln -s -f pdata_tools $(BINDIR)/thin_rmap +- ln -s -f pdata_tools $(BINDIR)/thin_metadata_size +- ln -s -f pdata_tools $(BINDIR)/thin_metadata_pack +- ln -s -f pdata_tools $(BINDIR)/thin_metadata_unpack +- ln -s -f pdata_tools $(BINDIR)/thin_migrate +- ln -s -f pdata_tools $(BINDIR)/thin_trim +- ln -s -f pdata_tools $(BINDIR)/era_check +- ln -s -f pdata_tools $(BINDIR)/era_dump +- ln -s -f pdata_tools $(BINDIR)/era_invalidate +- ln -s -f pdata_tools $(BINDIR)/era_restore ++ $(foreach tool, $(TOOLS), ln -s -f pdata_tools $(BINDIR)/$(tool); $(NEWLINE)) + $(INSTALL_DIR) $(MANPATH)/man8 +- $(INSTALL_DATA) man8/cache_check.8 $(MANPATH)/man8 +- $(INSTALL_DATA) man8/cache_dump.8 $(MANPATH)/man8 +- $(INSTALL_DATA) man8/cache_metadata_size.8 $(MANPATH)/man8 +- $(INSTALL_DATA) man8/cache_repair.8 $(MANPATH)/man8 +- $(INSTALL_DATA) man8/cache_restore.8 $(MANPATH)/man8 +- $(INSTALL_DATA) man8/cache_writeback.8 $(MANPATH)/man8 +- $(INSTALL_DATA) man8/thin_check.8 $(MANPATH)/man8 +- $(INSTALL_DATA) man8/thin_delta.8 $(MANPATH)/man8 +- $(INSTALL_DATA) man8/thin_dump.8 $(MANPATH)/man8 +- $(INSTALL_DATA) man8/thin_ls.8 $(MANPATH)/man8 +- $(INSTALL_DATA) man8/thin_repair.8 $(MANPATH)/man8 +- $(INSTALL_DATA) man8/thin_restore.8 $(MANPATH)/man8 +- $(INSTALL_DATA) man8/thin_rmap.8 $(MANPATH)/man8 +- $(INSTALL_DATA) man8/thin_metadata_size.8 $(MANPATH)/man8 +- $(INSTALL_DATA) man8/thin_metadata_pack.8 $(MANPATH)/man8 +- $(INSTALL_DATA) man8/thin_metadata_unpack.8 $(MANPATH)/man8 +- $(INSTALL_DATA) man8/thin_migrate.8 $(MANPATH)/man8 +- $(INSTALL_DATA) man8/era_check.8 $(MANPATH)/man8 +- $(INSTALL_DATA) man8/era_dump.8 $(MANPATH)/man8 +- $(INSTALL_DATA) man8/era_restore.8 $(MANPATH)/man8 +- $(INSTALL_DATA) man8/era_invalidate.8 $(MANPATH)/man8 +- $(INSTALL_DATA) man8/thin_trim.8 $(MANPATH)/man8 ++ $(foreach tool, $(TOOLS), $(INSTALL_DATA) man8/$(tool).8 $(MANPATH)/man8; $(NEWLINE)) + + .PHONY: install +-- +2.51.2 + diff --git a/sdk_container/src/third_party/coreos-overlay/coreos/user-patches/sys-block/thin-provisioning-tools/0002-all-Make-thin_migrate-tool-optional.patch b/sdk_container/src/third_party/coreos-overlay/coreos/user-patches/sys-block/thin-provisioning-tools/0002-all-Make-thin_migrate-tool-optional.patch new file mode 100644 index 0000000000..3282101ee2 --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/coreos/user-patches/sys-block/thin-provisioning-tools/0002-all-Make-thin_migrate-tool-optional.patch @@ -0,0 +1,135 @@ +From 74215dade7bbddbfc0a46e1903fc289a56df3915 Mon Sep 17 00:00:00 2001 +From: Krzesimir Nowak +Date: Thu, 20 Nov 2025 13:17:36 +0100 +Subject: [PATCH 2/2] [all] Make thin_migrate tool optional + +The tool pulls in, indirectly through the devicemapper crate, a +dependency on libclang. Make it possible to skip the tool to avoid the +dependency, but keep it enabled by default. + +Signed-off-by: Krzesimir Nowak +--- + Cargo.toml | 4 +++- + Makefile | 20 ++++++++++++++++++-- + src/bin/pdata_tools.rs | 1 + + src/commands/mod.rs | 1 + + src/thin/mod.rs | 1 + + 5 files changed, 24 insertions(+), 3 deletions(-) + +diff --git a/Cargo.toml b/Cargo.toml +index 8594c6ba..155285a8 100644 +--- a/Cargo.toml ++++ b/Cargo.toml +@@ -18,7 +18,7 @@ clap = { version = "4.5", default-features = false, features = [ + ] } + crc32c = "0.6" + data-encoding = "2.9" +-devicemapper = "0.34" ++devicemapper ={ version = "0.34", optional = true } + exitcode = "1.1.2" + fixedbitset = "0.5" + flate2 = "1.1" +@@ -51,9 +51,11 @@ tempfile = "3.23" + thinp = { path = ".", features = ["devtools"] } + + [features] ++default = ["thin_migrate"] + devtools = ["ratatui", "termion"] + io_uring = ["dep:io-uring"] + no_cleanup = [] ++thin_migrate = ["dep:devicemapper"] + + [profile.release] + debug = true +diff --git a/Makefile b/Makefile +index 44c99c99..a2dd51a4 100644 +--- a/Makefile ++++ b/Makefile +@@ -2,9 +2,10 @@ V=@ + + PDATA_TOOLS:=\ + target/release/pdata_tools ++CARGO_FLAGS:=$(if $(DISABLE_THIN_MIGRATE),--no-default-features) + + $(PDATA_TOOLS): +- $(V) cargo build --release ++ $(V) cargo build --release $(CARGO_FLAGS) + + PREFIX:=/usr + BINDIR:=$(DESTDIR)$(PREFIX)/sbin +@@ -31,6 +32,21 @@ clean: + cargo clean + $(RM) man8/*.8 + ++HAS_PDATA_TOOLS_BINARY:=$(shell if [ -f $(PDATA_TOOLS) ]; then echo 1; fi) ++ifneq ($(HAS_PDATA_TOOLS_BINARY),) ++ ++HAS_THIN_MIGRATE:=$(shell grep -qF thin_migrate.rs $(PDATA_TOOLS).d && echo 1) ++ ++ifneq ($(DISABLE_THIN_MIGRATE),) ++$(warning DISABLE_THIN_MIGRATE variable is ignored, the pdata_tools binary exists and it has $(if $(HAS_THIN_MIGRATE),,no )thin_migrate tool built in) ++endif ++ ++else ++ ++HAS_THIN_MIGRATE:=$(if $(DISABLE_THIN_MIGRATE),,1) ++ ++endif ++ + TOOLS:=\ + cache_check \ + cache_dump \ +@@ -42,13 +58,13 @@ TOOLS:=\ + thin_delta \ + thin_dump \ + thin_ls \ ++ $(if $(HAS_THIN_MIGRATE),thin_migrate) \ + thin_repair \ + thin_restore \ + thin_rmap \ + thin_metadata_size \ + thin_metadata_pack \ + thin_metadata_unpack \ +- thin_migrate \ + thin_trim \ + era_check \ + era_dump \ +diff --git a/src/bin/pdata_tools.rs b/src/bin/pdata_tools.rs +index c288fe03..67ef0d7d 100644 +--- a/src/bin/pdata_tools.rs ++++ b/src/bin/pdata_tools.rs +@@ -29,6 +29,7 @@ fn register_commands<'a>() -> Vec>> { + Box::new(thin_metadata_pack::ThinMetadataPackCommand), + Box::new(thin_metadata_size::ThinMetadataSizeCommand), + Box::new(thin_metadata_unpack::ThinMetadataUnpackCommand), ++ #[cfg(feature = "thin_migrate")] + Box::new(thin_migrate::ThinMigrateCommand), + Box::new(thin_repair::ThinRepairCommand), + Box::new(thin_restore::ThinRestoreCommand), +diff --git a/src/commands/mod.rs b/src/commands/mod.rs +index 5eeb66ab..72481eba 100644 +--- a/src/commands/mod.rs ++++ b/src/commands/mod.rs +@@ -17,6 +17,7 @@ pub mod thin_ls; + pub mod thin_metadata_pack; + pub mod thin_metadata_size; + pub mod thin_metadata_unpack; ++#[cfg(feature = "thin_migrate")] + pub mod thin_migrate; + pub mod thin_repair; + pub mod thin_restore; +diff --git a/src/thin/mod.rs b/src/thin/mod.rs +index 1ef0e1be..eeed031e 100644 +--- a/src/thin/mod.rs ++++ b/src/thin/mod.rs +@@ -10,6 +10,7 @@ pub mod ls; + pub mod metadata; + pub mod metadata_repair; + pub mod metadata_size; ++#[cfg(feature = "thin_migrate")] + pub mod migrate; + pub mod repair; + pub mod restore; +-- +2.51.2 + diff --git a/sdk_container/src/third_party/coreos-overlay/coreos/user-patches/sys-block/thin-provisioning-tools/README.md b/sdk_container/src/third_party/coreos-overlay/coreos/user-patches/sys-block/thin-provisioning-tools/README.md new file mode 100644 index 0000000000..f4192d775f --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/coreos/user-patches/sys-block/thin-provisioning-tools/README.md @@ -0,0 +1,18 @@ +The patches make the thin_migrate tool optional, as this seems to be +the thing that pulls in devicemapper crate, which in order requires +bindgen crate, which in turn depends on libclang. Since thin_migrate +tools was never a part of Flatcar yet, we can skip building it for +now. If users will need the tool, we can think about adding it at a +cost of building clang in SDK builds. + +The patches were filed to upstream: + +https://github.com/device-mapper-utils/thin-provisioning-tools/pull/1 + +If they get accepted, we can try convincing Gentoo to add +"USE=+migrate" to the ebuild and hide the clang dependency behind the +flag. On Flatcar side we could then disable it. + +Until that happens, these patches should be accompanied by a hook +function that will do "export ECARGO_EXTRA_ARGS=--no-default-features" +and "export MAKEOPTS=THIN_MIGRATE_EXCLUDE=x".