//! El sandbox hermético de build (bubblewrap). Ver `docs/02-build-lab.md` §3 y §4. //! //! Esqueleto de Fase 0. Define la forma del aislamiento que implementaremos: raíz tmpfs, //! compilador read-only inyectado, fuentes/deps read-only, sin red, salida vía DESTDIR. use std::path::PathBuf; /// Descripción de un sandbox de build a montar con `bwrap`. #[derive(Debug, Clone, Default)] pub struct Sandbox { /// Binds read-only: (origen_host, destino_sandbox). pub ro_binds: Vec<(PathBuf, PathBuf)>, /// Directorio de salida (DESTDIR) dentro del sandbox. pub out: PathBuf, /// Aislar red (hermeticidad: el build no descarga nada no declarado). pub isolate_net: bool, } impl Sandbox { /// Construye los argumentos para `bwrap`. TODO(fase-0): completar y ejecutar. pub fn bwrap_args(&self) -> Vec { let mut args = vec![ "--unshare-all".into(), "--tmpfs".into(), "/".into(), "--proc".into(), "/proc".into(), "--dev".into(), "/dev".into(), ]; if !self.isolate_net { args.push("--share-net".into()); } for (src, dst) in &self.ro_binds { args.push("--ro-bind".into()); args.push(src.display().to_string()); args.push(dst.display().to_string()); } args } }