gioser

sergio/takana

> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…

TOML 815Rust 56Shell 37Markdown 291229 Definiciones

⎇ 8bf1623044075274682e4351a0f8e120047c2bed crates/hammer-build/src/sandbox.rs Rust · 41 líneas · 1.4 KB Historia Quién tocó qué crudo

Scaffold inicial: workspace Rust + SDDs completos 8bf162304 · sergio ·

1//! El sandbox hermético de build (bubblewrap). Ver `docs/02-build-lab.md` §3 y §4.
2//!
3//! Esqueleto de Fase 0. Define la forma del aislamiento que implementaremos: raíz tmpfs,
4//! compilador read-only inyectado, fuentes/deps read-only, sin red, salida vía DESTDIR.
5
6use std::path::PathBuf;
7
8/// Descripción de un sandbox de build a montar con `bwrap`.
9#[derive(Debug, Clone, Default)]
10pub struct Sandbox {
11    /// Binds read-only: (origen_host, destino_sandbox).
12    pub ro_binds: Vec<(PathBuf, PathBuf)>,
13    /// Directorio de salida (DESTDIR) dentro del sandbox.
14    pub out: PathBuf,
15    /// Aislar red (hermeticidad: el build no descarga nada no declarado).
16    pub isolate_net: bool,
17}
18
19impl Sandbox {
20    /// Construye los argumentos para `bwrap`. TODO(fase-0): completar y ejecutar.
21    pub fn bwrap_args(&self) -> Vec<String> {
22        let mut args = vec![
23            "--unshare-all".into(),
24            "--tmpfs".into(),
25            "/".into(),
26            "--proc".into(),
27            "/proc".into(),
28            "--dev".into(),
29            "/dev".into(),
30        ];
31        if !self.isolate_net {
32            args.push("--share-net".into());
33        }
34        for (src, dst) in &self.ro_binds {
35            args.push("--ro-bind".into());
36            args.push(src.display().to_string());
37            args.push(dst.display().to_string());
38        }
39        args
40    }
41}