diff --git a/src/base_image.rs b/src/base_image.rs index 6f3cb79..50d7873 100644 --- a/src/base_image.rs +++ b/src/base_image.rs @@ -97,25 +97,22 @@ where for dir in dest.read_dir()? { let path = dir?.path(); if let Err(err) = chmod_dirs(&path, |mode| mode | 0o700) { - log::error!( + bail!( "could not fix permissions for {}: {}", path.display(), err ); - bail!(err); } if path.is_dir() { if let Err(err) = fs::remove_dir_all(&path) { - log::error!("could not remove {}: {}", path.display(), err); - bail!(err); + bail!("could not remove {}: {}", path.display(), err); } } else if let Err(err) = fs::remove_file(&path) { - log::error!("could not remove {}: {}", path.display(), err); - bail!(err); + bail!("could not remove {}: {}", path.display(), err); } } - } else { - fs::create_dir_all(dest).unwrap(); + } else if let Err(err) = fs::create_dir_all(dest) { + bail!("could not create {}: {}", dest.display(), err); } log::info!("unpacking base image into {}", dest.display()); diff --git a/src/bin/dive.rs b/src/bin/dive.rs index fe4add3..cdfdc0a 100644 --- a/src/bin/dive.rs +++ b/src/bin/dive.rs @@ -50,6 +50,18 @@ fn get_lead_pid(container_id: &str) -> Option { .or_else(|| pid_lookup(container_id)) } +fn base_state_dir() -> PathBuf { + let cfg_state_dir = option_env!("CONFIG_STATE_DIR"); + if std::env::var_os("XDG_STATE_HOME").is_none() { + cfg_state_dir + .map(PathBuf::from) + .or(dirs::state_dir()) + .unwrap() + } else { + dirs::state_dir().unwrap() + } +} + fn get_img_dir(args: &Args) -> PathBuf { if let Ok(img_dir) = std::env::var(ENV_IMG_DIR) { return PathBuf::from(img_dir); @@ -57,14 +69,14 @@ fn get_img_dir(args: &Args) -> PathBuf { if args.img_dir.is_some() { return PathBuf::from(args.img_dir.clone().unwrap()); } - dirs::state_dir().unwrap().join(APP_NAME).join(IMG_DIR) + base_state_dir().join(APP_NAME).join(IMG_DIR) } fn get_state_dir() -> PathBuf { if let Ok(ovl_dir) = std::env::var(ENV_STATE_DIR) { return PathBuf::from(ovl_dir); } - dirs::state_dir().unwrap().join(APP_NAME) + base_state_dir().join(APP_NAME) } fn init_logging() {