From 739691785f8de66ad83caf761d34fa4c5eb38f34 Mon Sep 17 00:00:00 2001 From: matteo-chesi Date: Tue, 19 May 2026 11:34:51 +0200 Subject: [PATCH 1/2] Fix #9 - alternative way to collect bundle from OciState (#13) --- crates/mkhomedir/Cargo.toml | 1 + crates/mkhomedir/src/main.rs | 34 +++++++++++++++++++++++++++++++++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/crates/mkhomedir/Cargo.toml b/crates/mkhomedir/Cargo.toml index 5fed5b4..d497365 100644 --- a/crates/mkhomedir/Cargo.toml +++ b/crates/mkhomedir/Cargo.toml @@ -10,3 +10,4 @@ libc = "0.2.185" procfs = "0.18.0" serde = { version = "1.0.228", features = ["derive"] } serde_json = "1.0.149" +sysinfo = "0.38.4" diff --git a/crates/mkhomedir/src/main.rs b/crates/mkhomedir/src/main.rs index ac701a0..4ba1f35 100644 --- a/crates/mkhomedir/src/main.rs +++ b/crates/mkhomedir/src/main.rs @@ -13,6 +13,7 @@ use std::{ #[derive(Debug, Deserialize)] struct OciState { bundle: String, + id: String, status: String, root: String, } @@ -202,6 +203,28 @@ fn get_home_from_etc_passwd(root: &Path, uid: uid_t) -> Result )) } +fn get_graphroot_from_root(root: &PathBuf) -> Result { + + let mut graphroot = root.clone(); + let mut uplevels = 3; + while uplevels > 0 { + if graphroot.pop() { + uplevels -= 1; + } else { + return Err(format!("failed get graphroot from root: {:#?}", root)); + } + } + Ok(graphroot) +} + +fn get_bundle_from_graphroot_and_id(graphroot: &PathBuf, id: &String) -> String { + let rel_path_str = format!("overlay-containers/{id}/userdata"); + let rel_path = Path::new(&rel_path_str); + let bundle = graphroot.join(rel_path); + let bundle_string = bundle.to_string_lossy().to_string(); + bundle_string +} + fn run() -> Result { let oci_state: OciState = read_stdin_json().map_err(|e| format!("failed to parse OCI State: {e}"))?; @@ -210,7 +233,16 @@ fn run() -> Result { return Ok(0); } - let config = get_config_from_bundle(Path::new(&oci_state.bundle))?; + let bundle; + if oci_state.bundle != "/" { + bundle = oci_state.bundle; + } else { + let root_path = PathBuf::from(&oci_state.root); + let graphroot = get_graphroot_from_root(&root_path)?; + bundle = get_bundle_from_graphroot_and_id(&graphroot, &oci_state.id); + } + + let config = get_config_from_bundle(Path::new(&bundle))?; let home = match config.home { Some(h) => { From 74ce52b1bff62646167b513ab050c84b16a6c7ff Mon Sep 17 00:00:00 2001 From: Matteo Chesi Date: Tue, 19 May 2026 12:03:49 +0200 Subject: [PATCH 2/2] mkhomedir - remove unnecessary dependency --- crates/mkhomedir/Cargo.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/crates/mkhomedir/Cargo.toml b/crates/mkhomedir/Cargo.toml index d497365..5fed5b4 100644 --- a/crates/mkhomedir/Cargo.toml +++ b/crates/mkhomedir/Cargo.toml @@ -10,4 +10,3 @@ libc = "0.2.185" procfs = "0.18.0" serde = { version = "1.0.228", features = ["derive"] } serde_json = "1.0.149" -sysinfo = "0.38.4"