From 2a50a765682e95e479e553b66d5b84694961efaf Mon Sep 17 00:00:00 2001 From: Nick Downs Date: Wed, 13 May 2026 23:13:26 -0700 Subject: [PATCH 1/3] Add --virtiofsd CLI option and VIRTIOFSD_BIN env var support --- crates/bcvk-qemu/src/virtiofsd.rs | 55 +++++++++++++++++++------------ crates/kit/Cargo.toml | 2 +- crates/kit/src/run_ephemeral.rs | 9 +++++ 3 files changed, 44 insertions(+), 22 deletions(-) diff --git a/crates/bcvk-qemu/src/virtiofsd.rs b/crates/bcvk-qemu/src/virtiofsd.rs index c993b1f55..539c56ef4 100644 --- a/crates/bcvk-qemu/src/virtiofsd.rs +++ b/crates/bcvk-qemu/src/virtiofsd.rs @@ -21,6 +21,8 @@ pub struct VirtiofsConfig { pub readonly: bool, /// Optional log file path for virtiofsd output. pub log_file: Option, + /// Optional explicit path to virtiofsd binary (overrides auto-detection). + pub virtiofsd_binary: Option, } impl Default for VirtiofsConfig { @@ -32,6 +34,7 @@ impl Default for VirtiofsConfig { // We don't need to write to this, there's a transient overlay readonly: true, log_file: None, + virtiofsd_binary: None, } } } @@ -61,32 +64,42 @@ pub async fn spawn_virtiofsd_async(config: &VirtiofsConfig) -> Result Result, } impl CommonVmOpts { @@ -1171,6 +1178,7 @@ pub(crate) async fn run_impl(opts: RunEphemeralOpts) -> Result<()> { debug: false, readonly: is_readonly, log_file: Some(format!("/run/virtiofsd-{}.log", mount_name_str).into()), + virtiofsd_binary: opts.common.virtiofsd_binary.as_deref().map(Into::into), }; additional_mounts.push((virtiofsd_config, tag.clone())); @@ -1329,6 +1337,7 @@ StandardOutput=file:/dev/virtio-ports/executestatus main_virtiofsd_config.debug = std::env::var("DEBUG_MODE").is_ok(); // Always log virtiofsd output for debugging main_virtiofsd_config.log_file = Some("/run/virtiofsd.log".into()); + main_virtiofsd_config.virtiofsd_binary = opts.common.virtiofsd_binary.as_deref().map(Into::into); std::fs::create_dir_all(CONTAINER_STATEDIR)?; From 5e40180f170e9df470ee94ae9abe6351eee0d983 Mon Sep 17 00:00:00 2001 From: Nick Downs Date: Thu, 14 May 2026 13:25:11 -0700 Subject: [PATCH 2/3] Set the overriden virtiofsd binary path to absolute --- .gitignore | 3 ++- crates/bcvk-qemu/src/virtiofsd.rs | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 9f970225a..606639ec7 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -target/ \ No newline at end of file +target/ +.flox diff --git a/crates/bcvk-qemu/src/virtiofsd.rs b/crates/bcvk-qemu/src/virtiofsd.rs index 539c56ef4..a4ff848b0 100644 --- a/crates/bcvk-qemu/src/virtiofsd.rs +++ b/crates/bcvk-qemu/src/virtiofsd.rs @@ -69,7 +69,7 @@ pub async fn spawn_virtiofsd_async(config: &VirtiofsConfig) -> Result Date: Thu, 14 May 2026 22:21:11 -0700 Subject: [PATCH 3/3] Add --virtiofsd command to libvirt run. --- crates/kit/src/libvirt/base_disks.rs | 4 ++++ crates/kit/src/libvirt/base_disks_cli.rs | 1 + crates/kit/src/libvirt/run.rs | 5 +++++ 3 files changed, 10 insertions(+) diff --git a/crates/kit/src/libvirt/base_disks.rs b/crates/kit/src/libvirt/base_disks.rs index 6aafd7d13..11cd564b2 100644 --- a/crates/kit/src/libvirt/base_disks.rs +++ b/crates/kit/src/libvirt/base_disks.rs @@ -18,6 +18,7 @@ pub fn find_or_create_base_disk( image_digest: &str, install_options: &InstallOptions, connect_uri: Option<&str>, + virtiofsd_binary: Option, ) -> Result { let metadata = DiskImageMetadata::from(install_options, image_digest, source_image); let cache_hash = metadata.compute_cache_hash(); @@ -67,6 +68,7 @@ pub fn find_or_create_base_disk( image_digest, install_options, connect_uri, + virtiofsd_binary, )?; Ok(base_disk_path) @@ -79,6 +81,7 @@ fn create_base_disk( image_digest: &str, install_options: &InstallOptions, connect_uri: Option<&str>, + virtiofsd_binary: Option, ) -> Result<()> { use crate::run_ephemeral::CommonVmOpts; use crate::to_disk::{Format, ToDiskAdditionalOpts, ToDiskOpts}; @@ -116,6 +119,7 @@ fn create_base_disk( memory: crate::common_opts::MemoryOpts { memory: super::LIBVIRT_DEFAULT_MEMORY.to_string(), }, + virtiofsd_binary, ..Default::default() }, ..Default::default() diff --git a/crates/kit/src/libvirt/base_disks_cli.rs b/crates/kit/src/libvirt/base_disks_cli.rs index 2082e4763..d9301c1da 100644 --- a/crates/kit/src/libvirt/base_disks_cli.rs +++ b/crates/kit/src/libvirt/base_disks_cli.rs @@ -77,6 +77,7 @@ pub fn run_create( &image_digest, &opts.install_options, connect_uri, + None, )?; println!("Created base disk: {path}"); diff --git a/crates/kit/src/libvirt/run.rs b/crates/kit/src/libvirt/run.rs index 5dd412fdf..b8a11f29d 100644 --- a/crates/kit/src/libvirt/run.rs +++ b/crates/kit/src/libvirt/run.rs @@ -305,6 +305,10 @@ pub struct LibvirtRunOpts { #[clap(long = "ignition")] pub ignition_config: Option, + /// Path to virtiofsd binary (overrides auto-detection for disk creation) + #[clap(long = "virtiofsd", env = "VIRTIOFSD_BIN")] + pub virtiofsd_binary: Option, + /// Additional metadata key-value pairs (used internally, not exposed via CLI) #[clap(skip)] pub metadata: std::collections::HashMap, @@ -488,6 +492,7 @@ pub fn run(global_opts: &crate::libvirt::LibvirtOptions, mut opts: LibvirtRunOpt &image_digest, &opts.install, connect_uri, + opts.virtiofsd_binary.take(), ) .with_context(|| "Failed to find or create base disk")?;