tawasuyu

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 1569Shell 203Rust 109Markdown 993728 Sutichaykuna

Etapa G: Go compile usa GOCACHE/GOTMPDIR en /src (disk), no en el tmpfs /tmp

telegraf/vault (binarios Go gigantes) fallaban en el LINK con 'mapping output file failed: no space
left on device': el sandbox monta --tmpfs /tmp (~½ RAM) y el GOCACHE + temp del linker desbordan ese
tmpfs aunque el disco tenga 18G libres. Ahora GOCACHE/GOTMPDIR van a /src (árbol de fuentes bind-
montado, en disco, per-build, lo limpia el watchdog; no se sella). No entra al hash de input (fase
generada) ⇒ no re-sella el corpus Go.

b3be6c8e3cd0b117b8e44406d51e634f2b0d902b · ruwaq sergio · (3 killa ñawpaq) · tayta 55b47709d · kay commitpi sach'ata qhaway

Semántico sayk'uy · 1

crates/hammer-build/src/lib.rs

1 qillqakuna · +10 −2

diff --git a/crates/hammer-build/src/lib.rs b/crates/hammer-build/src/lib.rs
index 19323680..7539822f 100644
--- a/crates/hammer-build/src/lib.rs
+++ b/crates/hammer-build/src/lib.rs
@@ -744,9 +744,17 @@ fn resolve_phases(recipe: &Recipe, src: &Path) -> hammer_core::Result<Phases> {
                 } else {
                     flags.clone()
                 };
+                // GOCACHE/GOTMPDIR en /src (disk-backed, per-build, lo limpia el watchdog), NO en
+                // /tmp: el sandbox monta `--tmpfs /tmp` (~½ RAM); un proyecto Go ENORME (telegraf,
+                // vault) desborda ese tmpfs con sus objetos compilados + el temp del linker al mapear
+                // el binario → "link: mapping output file failed: no space left on device" aunque el
+                // disco tenga sitio. /src es el árbol de fuentes bind-montado (en disco) y no se sella
+                // (sólo /out) ⇒ inocuo. GOTMPDIR debe pre-existir. No entra al hash de input (es la
+                // fase generada, no un campo de la receta) ⇒ no re-sella el corpus Go.
                 Some(format!(
-                    "export GOCACHE=/tmp/gocache GOPATH=/tmp/gopath GOTOOLCHAIN=local \
-                     CGO_ENABLED=0 GOFLAGS=-mod=vendor GOPROXY=off GOBIN=/out/usr/bin; \
+                    "export GOCACHE=/src/.gocache GOTMPDIR=/src/.gotmp GOPATH=/tmp/gopath \
+                     GOTOOLCHAIN=local CGO_ENABLED=0 GOFLAGS=-mod=vendor GOPROXY=off \
+                     GOBIN=/out/usr/bin; mkdir -p /src/.gotmp; \
                      go install -trimpath -ldflags=-buildid= {pkg}"
                 ))
             }