🛡️ sandbox-labs GitHub ↗

đź§° InstalaciĂłn#

De un equipo en blanco a tener un sandbox levantado.


Por qué hace falta Linux o WSL2#

Un sandbox no es una biblioteca: son primitivas del kernel de Linux. Namespaces, cgroups, capabilities y seccomp no existen en Windows ni en macOS, asĂ­ que ahĂ­ no hay nada que aislar.

No es una elección de este proyecto. Tus alternativas están en la misma situación, solo que lo disimulan: Docker Desktop arranca una máquina virtual Linux por debajo, y WSL lleva el Linux en el nombre.

SistemaCatálogo y docsPanel :9093Sandbox real
Linuxâś…âś…âś… completo
Windows + WSL2âś…âś…âś… dentro de la distro
Windows nativo✅✅❌ no hay namespaces
macOS✅✅❌ solo planificación
En Windows nativo y macOS el repositorio sigue siendo útil: se lee el catálogo, se valida y se planifica. Lo que no existe es la frontera.

1 · El sistema base#

En Windows, instala WSL2 y entra en la distro. Todo lo demás se hace dentro:

wsl --install
wsl

En Linux (o ya dentro de WSL):

sudo apt update
sudo apt install -y bubblewrap util-linux

red cerrada y capabilities.

En Ubuntu 24.04 los user namespaces sin privilegios están restringidos por AppArmor. Si un sandbox falla al arrancar con bwrap: loopback: Failed RTM_NEWADDR, esa es la causa: sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0.

2 · Las herramientas#

# Rust, para el motor
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source "$HOME/.cargo/env"

# Node 22+, para el panel y los validadores
node --version
corepack enable

El proyecto no tiene dependencias npm: pnpm install solo enlaza el workspace, y todos los validadores funcionan con node a secas.

3 · Compilar y comprobar#

git clone https://github.com/vladimiracunadev-create/sandbox-labs.git
cd sandbox-labs

cargo build --workspace --locked
node scripts/validate-config.mjs

4 · Ver qué tiene tu host#

cargo run -p sandboxctl -- doctor

Cada runtime sale como ✅ disponible o ⚪ ausente. Un ⚪ no es un error: el plan lo tratará como control no soportado y la política decidirá qué hacer.

5 · Levantar el primer sandbox#

cargo run -p sandboxctl -- cases                       # qué casos hay
cargo run -p sandboxctl -- service up file-detonation  # levantar uno
cargo run -p sandboxctl -- service list                # ver su estado

Abre <http://127.0.0.1:8803> y trabaja dentro. Para apagarlo:

cargo run -p sandboxctl -- service down --all

6 · El entorno raíz#

pnpm install --frozen-lockfile
pnpm dashboard:build
pnpm dashboard:start

Abre <http://127.0.0.1:9093>: desde ahĂ­ se levantan y apagan todos los casos con un clic, con su estado en vivo y la polĂ­tica bajo la que corren.


Comprobar que contiene de verdad#

cargo run -p sandboxctl -- escape

Lanza sondas que intentan escaparse y devuelve una matriz por runtime. Es lo mismo que ejecuta la integraciĂłn continua en cada commit.


Problemas frecuentes#

SĂ­ntomaCausaSoluciĂłn
linker 'link.exe' not foundCompilando en Windows nativoCompila desde WSL2
bwrap: loopback: Failed RTM_NEWADDRAppArmor restringe los user namespacesVer la nota del paso 1
El puerto 88xx ya está ocupadoOtro proceso o un sandbox anteriorsandboxctl service down --all
El servicio muere al arrancarFalta el runtimesandboxctl doctor y revisa el log del caso
create_dir_all falla con EEXISTCaché de DrvFs en /mnt/cwsl --shutdown y reintenta
Rendimiento malo en /mnt/cCruce de sistemas de archivosClona dentro de ~ en la distro

Dejarlo limpio#

cargo run -p sandboxctl -- service down --all
pnpm test:cleanup      # borra .sandbox-data y las evidencias locales
make clean             # además borra target/

Siguiente paso#