pub const KERNEL_BYTES: &[u8] = include_bytes!(concat!(env!("OUT_DIR"), "/kernel"));
pub const KERNEL_LEN: usize = KERNEL_BYTES.len();
pub const BUSYBOX_BYTES: &[u8] = include_bytes!(concat!(env!("OUT_DIR"), "/busybox"));
pub const BUSYBOX_LEN: usize = BUSYBOX_BYTES.len();
pub const OMEA_AGENT_BYTES: &[u8] = include_bytes!(concat!(env!("OUT_DIR"), "/omea-agent"));
pub const OMEA_AGENT_LEN: usize = OMEA_AGENT_BYTES.len();
pub fn extract_kernel_to(dest: &std::path::Path) -> std::io::Result<()> {
std::fs::write(dest, KERNEL_BYTES)
}
pub fn extract_kernel_to_with_parents(dest: &std::path::Path) -> std::io::Result<()> {
if let Some(parent) = dest.parent() {
std::fs::create_dir_all(parent)?;
}
extract_kernel_to(dest)
}
pub fn extract_busybox_to(dest: &std::path::Path) -> std::io::Result<()> {
std::fs::write(dest, BUSYBOX_BYTES)?;
set_executable(dest)
}
pub fn extract_busybox_to_with_parents(dest: &std::path::Path) -> std::io::Result<()> {
if let Some(parent) = dest.parent() {
std::fs::create_dir_all(parent)?;
}
extract_busybox_to(dest)
}
pub fn extract_omea_agent_to(dest: &std::path::Path) -> std::io::Result<()> {
std::fs::write(dest, OMEA_AGENT_BYTES)?;
set_executable(dest)
}
pub fn extract_omea_agent_to_with_parents(dest: &std::path::Path) -> std::io::Result<()> {
if let Some(parent) = dest.parent() {
std::fs::create_dir_all(parent)?;
}
extract_omea_agent_to(dest)
}
#[cfg(unix)]
fn set_executable(dest: &std::path::Path) -> std::io::Result<()> {
use std::os::unix::fs::PermissionsExt;
let mut perms = std::fs::metadata(dest)?.permissions();
perms.set_mode(0o755);
std::fs::set_permissions(dest, perms)
}
#[cfg(not(unix))]
fn set_executable(_dest: &std::path::Path) -> std::io::Result<()> {
Ok(())
}