diff --git a/userspace/ksud/src/module.rs b/userspace/ksud/src/module.rs index 642c6eede6e5..d978db891d32 100644 --- a/userspace/ksud/src/module.rs +++ b/userspace/ksud/src/module.rs @@ -330,7 +330,7 @@ fn _install_module(zip: &str) -> Result<()> { // print banner println!(include_str!("banner")); - assets::ensure_binaries(true).with_context(|| "Failed to extract assets")?; + assets::ensure_binaries(false).with_context(|| "Failed to extract assets")?; // first check if workding dir is usable ensure_dir_exists(defs::WORKING_DIR).with_context(|| "Failed to create working dir")?; diff --git a/userspace/ksud/src/utils.rs b/userspace/ksud/src/utils.rs index 50b969621ac1..aa870e4ba40f 100644 --- a/userspace/ksud/src/utils.rs +++ b/userspace/ksud/src/utils.rs @@ -1,7 +1,7 @@ use anyhow::{bail, Context, Error, Ok, Result}; use std::{ - fs::{create_dir_all, write, File, OpenOptions}, - io::{ErrorKind::AlreadyExists, Write}, + fs::{create_dir_all, remove_file, write, File, OpenOptions}, + io::{ErrorKind::AlreadyExists, ErrorKind::NotFound, Write}, path::Path, }; @@ -63,6 +63,13 @@ pub fn ensure_binary>( ) })?)?; + if let Err(e) = remove_file(path.as_ref()) { + if e.kind() != NotFound { + return Err(Error::from(e)) + .with_context(|| format!("failed to unlink {}", path.as_ref().display())); + } + } + write(&path, contents)?; #[cfg(unix)] set_permissions(&path, Permissions::from_mode(0o755))?;