use anyhow::Result;
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
mod agent;
mod init;
mod supervisor;
mod rpc;
#[cfg(target_os = "linux")]
mod mount;
#[cfg(target_os = "linux")]
mod config;
#[cfg(target_os = "linux")]
mod sandbox;
mod dns;
#[tokio::main]
async fn main() -> Result<()> {
let is_pid1 = std::process::id() == 1;
tracing_subscriber::registry()
.with(
tracing_subscriber::EnvFilter::try_from_default_env()
.unwrap_or_else(|_| "arcbox_agent=info".into()),
)
.with(tracing_subscriber::fmt::layer())
.init();
if is_pid1 {
tracing::info!("Running as PID 1, initializing system");
init::init_system();
let sv = std::sync::Arc::new(tokio::sync::Mutex::new(supervisor::Supervisor::new()));
supervisor::spawn_reaper(sv);
}
tracing::info!("ArcBox agent starting...");
agent::run().await
}