From bcbe7bc3eccbecc569a271943e8f01f3cd20230d Mon Sep 17 00:00:00 2001 From: Dallas Strouse Date: Mon, 22 Jun 2026 04:54:35 -0500 Subject: [PATCH] Update composefs And the code reworks to make it work. Signed-off-by: Dallas Strouse --- Cargo.lock | 240 ++++++++++++++++++++++- Cargo.toml | 2 +- crates/etc-merge/src/lib.rs | 1 + crates/initramfs/src/lib.rs | 19 +- crates/lib/src/bootc_composefs/boot.rs | 13 +- crates/lib/src/bootc_composefs/digest.rs | 10 +- crates/lib/src/bootc_composefs/gc.rs | 2 +- crates/lib/src/bootc_composefs/repo.rs | 20 +- crates/lib/src/bootc_composefs/update.rs | 2 +- crates/lib/src/cli.rs | 2 +- crates/lib/src/install.rs | 7 +- crates/lib/src/store/mod.rs | 19 +- crates/lib/src/testutils.rs | 13 +- 13 files changed, 295 insertions(+), 55 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 416625ce1..550e4edfb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -97,6 +97,30 @@ version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" +[[package]] +name = "async-broadcast" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" +dependencies = [ + "event-listener", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-channel" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + [[package]] name = "async-compression" version = "0.4.42" @@ -109,6 +133,24 @@ dependencies = [ "tokio", ] +[[package]] +name = "async-io" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc" +dependencies = [ + "autocfg", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite", + "parking", + "polling", + "rustix", + "slab", + "windows-sys 0.61.2", +] + [[package]] name = "async-trait" version = "0.1.89" @@ -770,7 +812,7 @@ checksum = "55b672471b4e9f9e95499ea597ff64941a309b2cdbffcc46f2cc5e2d971fd335" [[package]] name = "composefs" version = "0.4.0" -source = "git+https://github.com/composefs/composefs-rs?rev=e2770757762ec5091bb183bf0e778fe97c8d5694#e2770757762ec5091bb183bf0e778fe97c8d5694" +source = "git+https://github.com/composefs/composefs-rs?rev=a4c1ca7a7a5e8cc5b87bec3ca212c2b77f48f4f5#a4c1ca7a7a5e8cc5b87bec3ca212c2b77f48f4f5" dependencies = [ "anyhow", "composefs-ioctls", @@ -782,6 +824,7 @@ dependencies = [ "rustix", "serde", "serde_json", + "serde_repr", "sha2 0.11.0", "tempfile", "thiserror 2.0.18", @@ -789,19 +832,20 @@ dependencies = [ "tokio-stream", "xxhash-rust", "zerocopy", + "zlink-core", "zstd", ] [[package]] name = "composefs-boot" version = "0.4.0" -source = "git+https://github.com/composefs/composefs-rs?rev=e2770757762ec5091bb183bf0e778fe97c8d5694#e2770757762ec5091bb183bf0e778fe97c8d5694" +source = "git+https://github.com/composefs/composefs-rs?rev=a4c1ca7a7a5e8cc5b87bec3ca212c2b77f48f4f5#a4c1ca7a7a5e8cc5b87bec3ca212c2b77f48f4f5" dependencies = [ "anyhow", "composefs", "fn-error-context", "hex", - "regex-automata", + "pcre2", "rustix", "thiserror 2.0.18", "zerocopy", @@ -810,7 +854,7 @@ dependencies = [ [[package]] name = "composefs-ctl" version = "0.4.0" -source = "git+https://github.com/composefs/composefs-rs?rev=e2770757762ec5091bb183bf0e778fe97c8d5694#e2770757762ec5091bb183bf0e778fe97c8d5694" +source = "git+https://github.com/composefs/composefs-rs?rev=a4c1ca7a7a5e8cc5b87bec3ca212c2b77f48f4f5#a4c1ca7a7a5e8cc5b87bec3ca212c2b77f48f4f5" dependencies = [ "anyhow", "clap", @@ -823,16 +867,19 @@ dependencies = [ "fn-error-context", "hex", "indicatif 0.17.11", + "libsystemd", + "log", "rustix", "serde", "serde_json", "tokio", + "zlink", ] [[package]] name = "composefs-ioctls" version = "0.4.0" -source = "git+https://github.com/composefs/composefs-rs?rev=e2770757762ec5091bb183bf0e778fe97c8d5694#e2770757762ec5091bb183bf0e778fe97c8d5694" +source = "git+https://github.com/composefs/composefs-rs?rev=a4c1ca7a7a5e8cc5b87bec3ca212c2b77f48f4f5#a4c1ca7a7a5e8cc5b87bec3ca212c2b77f48f4f5" dependencies = [ "rustix", "thiserror 2.0.18", @@ -841,7 +888,7 @@ dependencies = [ [[package]] name = "composefs-oci" version = "0.4.0" -source = "git+https://github.com/composefs/composefs-rs?rev=e2770757762ec5091bb183bf0e778fe97c8d5694#e2770757762ec5091bb183bf0e778fe97c8d5694" +source = "git+https://github.com/composefs/composefs-rs?rev=a4c1ca7a7a5e8cc5b87bec3ca212c2b77f48f4f5#a4c1ca7a7a5e8cc5b87bec3ca212c2b77f48f4f5" dependencies = [ "anyhow", "async-compression", @@ -852,6 +899,7 @@ dependencies = [ "composefs-boot", "composefs-storage", "containers-image-proxy", + "flate2", "fn-error-context", "hex", "indicatif 0.17.11", @@ -865,12 +913,14 @@ dependencies = [ "tokio", "tokio-util", "tracing", + "zlink-core", + "zstd", ] [[package]] name = "composefs-storage" version = "0.4.0" -source = "git+https://github.com/composefs/composefs-rs?rev=e2770757762ec5091bb183bf0e778fe97c8d5694#e2770757762ec5091bb183bf0e778fe97c8d5694" +source = "git+https://github.com/composefs/composefs-rs?rev=a4c1ca7a7a5e8cc5b87bec3ca212c2b77f48f4f5#a4c1ca7a7a5e8cc5b87bec3ca212c2b77f48f4f5" dependencies = [ "anyhow", "base64 0.22.1", @@ -911,6 +961,15 @@ version = "0.4.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc14f565cf027a105f7a44ccf9e5b424348421a1d8952a8fc9d499d313107789" +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "console" version = "0.15.11" @@ -1032,6 +1091,12 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + [[package]] name = "crossterm" version = "0.29.0" @@ -1296,6 +1361,27 @@ dependencies = [ "tracing", ] +[[package]] +name = "event-listener" +version = "5.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" +dependencies = [ + "event-listener", + "pin-project-lite", +] + [[package]] name = "eyre" version = "0.6.12" @@ -1436,6 +1522,19 @@ version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +[[package]] +name = "futures-lite" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + [[package]] name = "futures-macro" version = "0.3.32" @@ -1701,6 +1800,12 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +[[package]] +name = "hermit-abi" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" + [[package]] name = "hex" version = "0.4.3" @@ -2548,6 +2653,12 @@ version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d211803b9b6b570f68772237e415a029d5a50c65d382910b879fb19d3271f94d" +[[package]] +name = "parking" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" + [[package]] name = "parking_lot" version = "0.12.5" @@ -2571,6 +2682,28 @@ dependencies = [ "windows-link", ] +[[package]] +name = "pcre2" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e970b0fcce0c7ee6ef662744ff711f21ccd6f11b7cf03cd187a80e89797fc67" +dependencies = [ + "libc", + "log", + "pcre2-sys", +] + +[[package]] +name = "pcre2-sys" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18b9073c1a2549bd409bf4a32c94d903bb1a09bf845bc306ae148897fa0760a4" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + [[package]] name = "percent-encoding" version = "2.3.2" @@ -2615,6 +2748,20 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" +[[package]] +name = "polling" +version = "3.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi", + "pin-project-lite", + "rustix", + "windows-sys 0.61.2", +] + [[package]] name = "portable-atomic" version = "1.13.1" @@ -3061,6 +3208,17 @@ dependencies = [ "zmij", ] +[[package]] +name = "serde_repr" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "serde_spanned" version = "0.6.9" @@ -3491,6 +3649,7 @@ dependencies = [ "signal-hook-registry", "socket2", "tokio-macros", + "tracing", "windows-sys 0.61.2", ] @@ -4419,6 +4578,73 @@ version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" +[[package]] +name = "zlink" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b895b99588dceb73f4d349b8323eabad9a97d48ce83698d475c7223727c6148" +dependencies = [ + "zlink-smol", + "zlink-tokio", +] + +[[package]] +name = "zlink-core" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd12701bd1d42a982b931f0159cf5054bf13d90e7828a8377dfc02ed4b00342d" +dependencies = [ + "futures-util", + "itoa", + "libc", + "pin-project-lite", + "rustix", + "ryu", + "serde", + "serde_json", + "tracing", + "zlink-macros", +] + +[[package]] +name = "zlink-macros" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6f2416a5f504dfd7e04fee49f31abafe3314a3f62b4ddaa8e9a5fd496d4dd50" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "zlink-smol" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bc53cd0d636ad753f759aab0abb1f456e985c3938a279d11ebda92340ae37b1" +dependencies = [ + "async-broadcast", + "async-channel", + "async-io", + "futures-lite", + "futures-util", + "pin-project-lite", + "zlink-core", +] + +[[package]] +name = "zlink-tokio" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28cbf366ac77ab41bf9a8d43535d3d620a072f7957813e03355d3d010c16cc4f" +dependencies = [ + "futures-util", + "pin-project-lite", + "tokio", + "tokio-stream", + "zlink-core", +] + [[package]] name = "zmij" version = "1.0.21" diff --git a/Cargo.toml b/Cargo.toml index 92ee2b357..ef01bf360 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -44,7 +44,7 @@ clap_mangen = { version = "0.3.0" } # [patch."https://github.com/composefs/composefs-rs"] # composefs-ctl = { path = "/path/to/composefs-rs/crates/composefs-ctl" } # The Justfile will auto-detect these and bind-mount them into container builds. -composefs-ctl = { git = "https://github.com/composefs/composefs-rs", rev = "e2770757762ec5091bb183bf0e778fe97c8d5694" } +composefs-ctl = { git = "https://github.com/composefs/composefs-rs", rev = "a4c1ca7a7a5e8cc5b87bec3ca212c2b77f48f4f5" } fn-error-context = "0.2.1" futures-util = "0.3" hex = "0.4.3" diff --git a/crates/etc-merge/src/lib.rs b/crates/etc-merge/src/lib.rs index 0743435a2..0b78a0af5 100644 --- a/crates/etc-merge/src/lib.rs +++ b/crates/etc-merge/src/lib.rs @@ -52,6 +52,7 @@ impl From<(&cap_std::fs::Metadata, Xattrs)> for MyStat { st_uid: value.0.uid(), st_gid: value.0.gid(), st_mtim_sec: value.0.mtime(), + st_mtim_nsec: value.0.mtime_nsec() as u32, xattrs: value.1, }) } diff --git a/crates/initramfs/src/lib.rs b/crates/initramfs/src/lib.rs index c15dae95d..f01b7fc43 100644 --- a/crates/initramfs/src/lib.rs +++ b/crates/initramfs/src/lib.rs @@ -28,7 +28,7 @@ use composefs::{ mountcompat::{overlayfs_set_fd, overlayfs_set_lower_and_data_fds, prepare_mount}, repository::Repository, }; -use composefs_boot::cmdline::get_cmdline_composefs; +use composefs_boot::cmdline::ComposefsCmdline; use composefs_ctl::composefs; use composefs_ctl::composefs_boot; @@ -463,11 +463,17 @@ pub fn setup_root(args: Args) -> Result<()> { config }; - let (image, insecure) = get_cmdline_composefs::(&cmdline)?; + let composefs_info = ComposefsCmdline::::from_cmdline(&cmdline) + .context("Failed to parse composefs cmdline")? + .ok_or_else(|| anyhow::anyhow!("No composefs image in cmdline"))?; let new_root = match &args.root_fs { Some(path) => open_root_fs(path).context("Failed to clone specified root fs")?, - None => mount_composefs_image(&sysroot, &image.to_hex(), insecure)?, + None => mount_composefs_image( + &sysroot, + &composefs_info.digest().to_hex(), + composefs_info.is_insecure(), + )?, }; // we need to clone this before the next step to make sure we get the old one @@ -497,7 +503,7 @@ pub fn setup_root(args: Args) -> Result<()> { let transient_overlay_fd: Option = if config.root.transient { let overlay_fd = overlay_transient( &new_root, - &format!("transient:composefs={}", image.to_hex()), + &format!("transient:composefs={}", composefs_info.digest().to_hex()), None, )?; @@ -533,7 +539,10 @@ pub fn setup_root(args: Args) -> Result<()> { } // etc + var - let state = open_dir(open_dir(&sysroot, "state/deploy")?, image.to_hex())?; + let state = open_dir( + open_dir(&sysroot, "state/deploy")?, + composefs_info.digest().to_hex(), + )?; mount_subdir(visible_root, &state, "etc", config.etc, MountType::Bind)?; // /var is bind-mounted from the deployment state directory by default. // The systemd.volatile=state cmdline detection above (or an explicit diff --git a/crates/lib/src/bootc_composefs/boot.rs b/crates/lib/src/bootc_composefs/boot.rs index f4a020c5e..eda69f8d4 100644 --- a/crates/lib/src/bootc_composefs/boot.rs +++ b/crates/lib/src/bootc_composefs/boot.rs @@ -82,7 +82,9 @@ use composefs_boot::bootloader::{ BootEntry as ComposefsBootEntry, EFI_ADDON_DIR_EXT, EFI_ADDON_FILE_EXT, EFI_EXT, PEType, UsrLibModulesVmlinuz, get_boot_resources, }; -use composefs_boot::{cmdline::get_cmdline_composefs, os_release::OsReleaseInfo, uki}; +use composefs_boot::{ + cmdline::ComposefsCmdline as ComposefsBootCmdline, os_release::OsReleaseInfo, uki, +}; use composefs_ctl::composefs; use composefs_ctl::composefs_boot; use composefs_ctl::composefs_oci; @@ -811,8 +813,11 @@ fn write_pe_to_esp( if matches!(pe_type, PEType::Uki) { let cmdline = uki::get_cmdline_buffered(&mut uki_reader).context("Getting UKI cmdline")?; - let (composefs_cmdline, missing_verity_allowed_cmdline) = - get_cmdline_composefs::(&cmdline).context("Parsing composefs=")?; + let composefs_info = ComposefsBootCmdline::::from_cmdline(&cmdline) + .context("Parsing composefs=")? + .ok_or_else(|| anyhow::anyhow!("No composefs image in UKI cmdline"))?; + let composefs_cmdline = composefs_info.digest(); + let missing_verity_allowed_cmdline = composefs_info.is_insecure(); // If the UKI cmdline does not match what the user has passed as cmdline option // NOTE: This will only be checked for new installs and now upgrades/switches @@ -830,7 +835,7 @@ fn write_pe_to_esp( _ => { /* no-op */ } } - if composefs_cmdline != *uki_id { + if *composefs_cmdline != *uki_id { anyhow::bail!( "The UKI has the wrong composefs= parameter (is '{composefs_cmdline:?}', should be {uki_id:?})" ); diff --git a/crates/lib/src/bootc_composefs/digest.rs b/crates/lib/src/bootc_composefs/digest.rs index 074423e25..af7d3746b 100644 --- a/crates/lib/src/bootc_composefs/digest.rs +++ b/crates/lib/src/bootc_composefs/digest.rs @@ -11,6 +11,7 @@ use cap_std_ext::cap_std; use cap_std_ext::cap_std::fs::Dir; use composefs::dumpfile; use composefs::fsverity::{Algorithm, FsVerityHashValue}; +use composefs::repository::RepositoryConfig; use composefs_boot::BootOps as _; use composefs_ctl::composefs; use composefs_ctl::composefs_boot; @@ -30,11 +31,10 @@ pub(crate) fn new_temp_composefs_repo() -> Result<(TempDir, Arc Result<()> { ) .context("Populating fs")?; fs.transform_for_boot(&repo).context("Preparing for boot")?; - let id = fs.compute_image_id(); + let id = fs.compute_image_id(repo.erofs_version()); println!("{}", id.to_hex()); if let Some(path) = write_dumpfile_to.as_deref() { diff --git a/crates/lib/src/install.rs b/crates/lib/src/install.rs index d49c6a350..9a1de2ca1 100644 --- a/crates/lib/src/install.rs +++ b/crates/lib/src/install.rs @@ -204,6 +204,7 @@ use crate::task::Task; use crate::utils::sigpolicy_from_opt; use bootc_kernel_cmdline::{INITRD_ARG_PREFIX, ROOTFLAGS, bytes, utf8}; use bootc_mount::Filesystem; +use composefs_ctl::composefs::repository::RepositoryConfig; /// The toplevel boot directory pub(crate) const BOOT: &str = "boot"; @@ -2020,11 +2021,13 @@ async fn install_to_filesystem_impl( let img_manifest_config = get_container_manifest_and_config(&imgref).await?; crate::store::ensure_composefs_dir(&rootfs.physical_root)?; // Use init_path since the repo may not exist yet during install + let config = + RepositoryConfig::new(composefs_ctl::composefs::fsverity::Algorithm::SHA512) + .set_insecure(); let (cfs_repo, _created) = crate::store::ComposefsRepository::init_path( &rootfs.physical_root, crate::store::COMPOSEFS, - composefs_ctl::composefs::fsverity::Algorithm::SHA512, - false, + config, )?; crate::deploy::check_disk_space_composefs( &cfs_repo, diff --git a/crates/lib/src/store/mod.rs b/crates/lib/src/store/mod.rs index 653fd2a25..a5dabdb39 100644 --- a/crates/lib/src/store/mod.rs +++ b/crates/lib/src/store/mod.rs @@ -111,6 +111,7 @@ use ostree_ext::{gio, ostree}; use rustix::fs::Mode; use composefs::fsverity::Sha512HashValue; +use composefs::repository::RepositoryConfig; use composefs_ctl::composefs; use crate::bootc_composefs::backwards_compat::bcompat_boot::prepend_custom_prefix; @@ -618,16 +619,14 @@ impl Storage { let ostree = self.get_ostree()?; let ostree_repo = &ostree.repo(); let ostree_verity = ostree_ext::fsverity::is_verity_enabled(ostree_repo)?; - let (mut composefs, _created) = ComposefsRepository::init_path( - self.physical_root.open_dir(COMPOSEFS)?, - ".", - composefs::fsverity::Algorithm::SHA512, - ostree_verity.enabled, - )?; - if !ostree_verity.enabled { - tracing::debug!("Setting insecure mode for composefs repo"); - composefs.set_insecure(); - } + let config = RepositoryConfig::new(composefs::fsverity::Algorithm::SHA512); + let config = if ostree_verity.enabled { + config + } else { + config.set_insecure() + }; + let (composefs, _created) = + ComposefsRepository::init_path(self.physical_root.open_dir(COMPOSEFS)?, ".", config)?; let composefs = Arc::new(composefs); let r = Arc::clone(self.composefs.get_or_init(|| composefs)); Ok(r) diff --git a/crates/lib/src/testutils.rs b/crates/lib/src/testutils.rs index 3712c7e44..e24a80a5f 100644 --- a/crates/lib/src/testutils.rs +++ b/crates/lib/src/testutils.rs @@ -10,6 +10,7 @@ use anyhow::{Context, Result}; use cap_std_ext::cap_std::{self, fs::Dir}; use cap_std_ext::cap_tempfile; use cap_std_ext::dirext::CapStdExtDirExt; +use composefs_ctl::composefs::repository::RepositoryConfig; use crate::bootc_composefs::boot::{ FILENAME_PRIORITY_PRIMARY, FILENAME_PRIORITY_SECONDARY, get_type1_dir_name, primary_sort_key, @@ -164,14 +165,10 @@ impl TestRoot { // Initialize the composefs repo (creates meta.json) let repo_dir = root.open_dir("composefs")?; - let (mut repo, _created) = ComposefsRepository::init_path( - &repo_dir, - ".", - composefs_ctl::composefs::fsverity::Algorithm::SHA512, - false, - ) - .context("Initializing composefs repo")?; - repo.set_insecure(); + let config = RepositoryConfig::new(composefs_ctl::composefs::fsverity::Algorithm::SHA512) + .set_insecure(); + let (repo, _created) = ComposefsRepository::init_path(&repo_dir, ".", config) + .context("Initializing composefs repo")?; let mut test_root = Self { root,