diff --git a/xc-bin/src/main.rs b/xc-bin/src/main.rs index 432ee5e..189d43e 100644 --- a/xc-bin/src/main.rs +++ b/xc-bin/src/main.rs @@ -791,12 +791,17 @@ fn main() -> Result<(), ActionError> { use_tty: terminal, }; - if let Ok(response) = do_exec(&mut conn, request)? { - if let Some(socket) = response.terminal_socket { - _ = attach::run(socket); + match do_exec(&mut conn, request)? { + Ok(response) => { + if let Some(socket) = response.terminal_socket { + _ = attach::run(socket); + } + let exit = n.notified_sync_take_value(); + std::process::exit((exit.unwrap_or(2) - 1) as i32) + }, + Err(err) => { + eprintln!("{err:?}") } - let exit = n.notified_sync_take_value(); - std::process::exit((exit.unwrap_or(2) - 1) as i32) } } Action::Volume(action) => { diff --git a/xc/src/container/runner/mod.rs b/xc/src/container/runner/mod.rs index 124fe5e..95d5b77 100644 --- a/xc/src/container/runner/mod.rs +++ b/xc/src/container/runner/mod.rs @@ -381,13 +381,16 @@ impl ProcessRunner { match result { Ok(spawn_info) => write_response(0, spawn_info).unwrap(), - Err(_err) => write_response( - freebsd::libc::EIO, - serde_json::json!({ - "message": "failed to spawn" - }), - ) - .unwrap(), + Err(err) => { + error!("exec error: {err:?}"); + write_response( + freebsd::libc::EIO, + serde_json::json!({ + "message": format!("failed to spawn process in container: {err:?}") + }), + ) + .unwrap() + }, } } else if method == "run_main" { if let Some(main) = self.container.main_proto.clone() { diff --git a/xcd/src/site.rs b/xcd/src/site.rs index fd892fd..3e7f396 100644 --- a/xcd/src/site.rs +++ b/xcd/src/site.rs @@ -296,7 +296,7 @@ impl Site { if response.errno == 0 { Ok(serde_json::from_value(response.value).unwrap()) } else { - ipc_err(freebsd::libc::EIO, "something went wrong") + ipc_err(freebsd::libc::EIO, &format!("something went wrong: {:?}", response.value)) } }