From 90364fabbf6d3fa2a3129e81b0c029ec2719c3c2 Mon Sep 17 00:00:00 2001 From: Sergio Date: Fri, 4 Sep 2026 21:24:47 +0000 Subject: [PATCH] =?UTF-8?q?nodejs=20y=20firefox:=20strip=5Fdebug=20?= =?UTF-8?q?=E2=80=94=20medido,=20no=20supuesto?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit El nodejs que selló en el LXC sin strip pesa 984 MB, de los cuales .debug_info son 497 MB y .debug_line otros 43: MÁS DE LA MITAD del artefacto es información de depuración, para una herramienta que nadie va a depurar y que ni siquiera se publica. Se aplica también a firefox ANTES de construirlo, que es donde importa: Firefox es varias veces V8 y sin strip su artefacto entraría en varios GB. El store no es sólo disco — se sincroniza hub↔worker y se respalda. Es el hallazgo del SDD 23: el 79% del contenido binario del store era .debug_*, y quitarlo hace que artefactos que no reproducían PASEN a reproducir, porque lo que difería eran las rutas del árbol de build embebidas en esas secciones. El campo entra en hash_inputs a propósito (cambia el contenido) y usa zig objcopy, que siempre está en el sandbox ⇒ no agrega dep de build. Node se reconstruye. --- recipes/firefox.toml | 13 +++++++++++++ recipes/nodejs.toml | 5 +++++ 2 files changed, 18 insertions(+) diff --git a/recipes/firefox.toml b/recipes/firefox.toml index 215db017..300c83b0 100644 --- a/recipes/firefox.toml +++ b/recipes/firefox.toml @@ -80,6 +80,19 @@ compiler = "zig-cc" target = "x86_64-linux-musl" link = "dynamic" flags = [] +# ══ `strip_debug`: SIN ESTO EL ARTEFACTO SERÍA INMANEJABLE ═════════════════════════════════════ +# Medido en el `nodejs` que acaba de sellar sin strip: su binario pesa **984 MB, de los cuales +# `.debug_info` son 497 MB y `.debug_line` otros 43** — más de la mitad del artefacto es información +# de depuración. Firefox es varias veces V8, así que sin strip su artefacto entraría en varios GB, y +# el store no es sólo disco: se sincroniza hub↔worker y se respalda. +# +# Es además el hallazgo del SDD 23: el 79% del contenido binario del store era `.debug_*`, y quitarlo +# hace que artefactos que no reproducían PASEN a reproducir, porque lo que difería eran las rutas del +# árbol de build embebidas en esas secciones. +# +# Entra en `hash_inputs` A PROPÓSITO (cambia el contenido del artefacto), y usa `zig objcopy`, que +# siempre está en el sandbox ⇒ no agrega una dep de build. +strip_debug = true [build.phases] configure = ''' diff --git a/recipes/nodejs.toml b/recipes/nodejs.toml index 658efa93..b79e824d 100644 --- a/recipes/nodejs.toml +++ b/recipes/nodejs.toml @@ -35,6 +35,11 @@ compiler = "zig-cc" target = "x86_64-linux-musl" link = "dynamic" flags = [] +# `strip_debug`: la primera vuelta selló SIN esto y el binario salió de **984 MB, con `.debug_info` +# de 497 MB y `.debug_line` de 43** — más de la mitad del artefacto era información de depuración, +# para una herramienta que nadie va a depurar. Entra en `hash_inputs` a propósito (cambia el +# contenido) y usa `zig objcopy`, que ya está en el sandbox. +strip_debug = true [build.phases] # ⚠ `SIMDJSON_IMPLEMENTATION_ICELAKE=0` — el simdjson que Node bundlea trae un kernel AVX-512 y