diff --git a/crates/guest/src/init.rs b/crates/guest/src/init.rs index fa85f68..6929b3b 100644 --- a/crates/guest/src/init.rs +++ b/crates/guest/src/init.rs @@ -5,7 +5,7 @@ use ipnetwork::IpNetwork; use krata::ethtool::EthtoolHandle; use krata::idm::client::IdmClient; use krata::launchcfg::{LaunchInfo, LaunchNetwork}; -use libc::{setsid, TIOCSCTTY}; +use libc::{sethostname, setsid, TIOCSCTTY}; use log::{trace, warn}; use nix::ioctl_write_int_bad; use nix::unistd::{dup2, execve, fork, ForkResult, Pid}; @@ -91,6 +91,18 @@ impl GuestInit { self.nuke_initrd().await?; self.bind_new_root().await?; + if let Some(hostname) = launch.hostname.clone() { + let result = unsafe { + sethostname( + hostname.as_bytes().as_ptr() as *mut libc::c_char, + hostname.len(), + ) + }; + if result != 0 { + warn!("failed to set hostname: {}", result); + } + } + if let Some(network) = &launch.network { trace!("initializing network"); if let Err(error) = self.network_setup(network).await { diff --git a/crates/krata/src/launchcfg.rs b/crates/krata/src/launchcfg.rs index 8a5d5b6..601852b 100644 --- a/crates/krata/src/launchcfg.rs +++ b/crates/krata/src/launchcfg.rs @@ -29,6 +29,7 @@ pub struct LaunchNetwork { #[derive(Serialize, Deserialize, Debug)] pub struct LaunchInfo { + pub hostname: Option, pub network: Option, pub env: HashMap, pub run: Option>, diff --git a/crates/runtime/src/launch.rs b/crates/runtime/src/launch.rs index 10db81c..4b5f2c1 100644 --- a/crates/runtime/src/launch.rs +++ b/crates/runtime/src/launch.rs @@ -64,6 +64,12 @@ impl GuestLauncher { let ipv6_network_mask: u32 = 10; let launch_config = LaunchInfo { + hostname: Some( + request + .name + .map(|x| x.to_string()) + .unwrap_or_else(|| format!("krata-{}", uuid)), + ), network: Some(LaunchNetwork { link: "eth0".to_string(), ipv4: LaunchNetworkIpv4 {