diff --git a/scripts/diagnostico/banco-pgo-final.sh b/scripts/diagnostico/banco-pgo-final.sh index 2fc3782e..aa2711d0 100755 --- a/scripts/diagnostico/banco-pgo-final.sh +++ b/scripts/diagnostico/banco-pgo-final.sh @@ -7,6 +7,18 @@ # fuera-del-corpus → DOM/layout: parentesco con lo que entrena el corpus # del-corpus → SunSpider 3d-raytrace: JIT-bound # ajena → imágenes, canvas, JSON, DOM por API: SIN parentesco +# +# ⚠ 2026-09-08: este arnés apaga LOS CINCO sandboxes de Gecko, no sólo el de contenido. Antes dejaba +# 2 ayudantes 'Sandbox Forked' muertos de SIGSEGV en CADA corrida —el sandbox de Firefox no puede +# montar su user-namespace dentro del de bwrap y muere en la salida de error—. Acá no se pierde +# nada de seguridad: bwrap YA es la jaula. Ver scripts/diagnostico/cazar-cuelgue-headless.sh. +# +# Y CAMBIA LAS CONDICIONES DE MEDICIÓN: las cifras publicadas en docs/26 se tomaron con el arnés +# viejo, o sea con esos 2 procesos reventando por corrida. Los porcentajes del PGO comparan dos +# firefox bajo el MISMO arnés, así que el cociente debería aguantar; el nivel absoluto de la línea +# base de arranque (~16 s) no tiene por qué. Si se vuelve a publicar un número, re-medir la línea +# base con este arnés y no reutilizar la vieja. +# set -u RAIZ=/mnt/vvv/hammer; R=$RAIZ/store/.rootfs/sway-v2 AQUI=$(cd "$(dirname "$0")" && pwd) # las 4 páginas viven junto a este script @@ -19,7 +31,7 @@ corre(){ local ini fin --ro-bind "$1/usr/lib/firefox" /usr/lib/firefox --dev /dev --proc /proc --tmpfs /run --tmpfs /tmp \ --unshare-pid --ro-bind "$AQUI" /bench --bind "$SAL" /salida --unshare-user --uid 0 --gid 0 \ --setenv PATH /usr/bin:/bin \ - /bin/sh -c 'export HOME=/tmp/h MOZ_HEADLESS=1 MOZ_DISABLE_CONTENT_SANDBOX=1 LIBGL_ALWAYS_SOFTWARE=1 LANG=C.UTF-8; mkdir -p $HOME + /bin/sh -c 'export HOME=/tmp/h MOZ_HEADLESS=1 LIBGL_ALWAYS_SOFTWARE=1 MOZ_DISABLE_CONTENT_SANDBOX=1 MOZ_DISABLE_GMP_SANDBOX=1 MOZ_DISABLE_RDD_SANDBOX=1 MOZ_DISABLE_SOCKET_PROCESS_SANDBOX=1 MOZ_DISABLE_UTILITY_SANDBOX=1 LANG=C.UTF-8; mkdir -p $HOME LD_LIBRARY_PATH=/usr/lib/firefox /usr/lib/firefox/firefox --headless --screenshot /salida/b.png file:///bench/'"$2" \ >/dev/null 2>&1 fin=$(date +%s%N); echo $(( (fin-ini)/1000000 )); } diff --git a/scripts/pgo-corpus/perfilar.sh b/scripts/pgo-corpus/perfilar.sh index b9ff162e..93ccab99 100755 --- a/scripts/pgo-corpus/perfilar.sh +++ b/scripts/pgo-corpus/perfilar.sh @@ -23,7 +23,11 @@ set -u export HOME=/tmp/home; mkdir -p "$HOME" export LANG=C.UTF-8 MOZ_HEADLESS=1 LIBGL_ALWAYS_SOFTWARE=1 -export MOZ_DISABLE_CONTENT_SANDBOX=1 MOZ_DISABLE_GMP_SANDBOX=1 MOZ_DISABLE_RDD_SANDBOX=1 MOZ_DISABLE_SOCKET_PROCESS_SANDBOX=1 +# Los CINCO sandboxes de Gecko apagados, no cuatro: el sandbox propio de Gecko no puede montar su user-namespace dentro de bwrap +# (uid_map: EPERM) y CADA intento fallido deja un ayudante 'Sandbox Forked' muerto de SIGSEGV. +# Medido 2026-09-08: 2 cadáveres por corrida con sólo CONTENT apagado, 0 con los cinco. Acá no +# se pierde nada: bwrap YA es la jaula. Ver scripts/diagnostico/cazar-cuelgue-headless.sh. +export MOZ_DISABLE_CONTENT_SANDBOX=1 MOZ_DISABLE_GMP_SANDBOX=1 MOZ_DISABLE_RDD_SANDBOX=1 MOZ_DISABLE_SOCKET_PROCESS_SANDBOX=1 MOZ_DISABLE_UTILITY_SANDBOX=1 export LLVM_PROFILE_FILE=/salida/ff-%p-%m.profraw MARCA="pgo-$$-$(cat /proc/sys/kernel/random/uuid 2>/dev/null || echo ${RANDOM:-0}${RANDOM:-0})" diff --git a/scripts/test-atuq-codecs.sh b/scripts/test-atuq-codecs.sh index c03f410f..f802e284 100755 --- a/scripts/test-atuq-codecs.sh +++ b/scripts/test-atuq-codecs.sh @@ -119,7 +119,10 @@ bwrap --overlay-src "$ALPINE" --overlay-src "$RFS" --tmp-overlay / \ --bind "$TMP" /salida --uid 0 --gid 0 \ --setenv PATH /usr/bin:/bin --setenv LD_LIBRARY_PATH "$LDP" \ --setenv HOME /root --setenv XDG_RUNTIME_DIR /run --setenv MOZ_HEADLESS 1 \ - --setenv MOZ_DISABLE_CONTENT_SANDBOX 1 --setenv MOZ_DISABLE_RDD_SANDBOX 1 \ + --setenv MOZ_DISABLE_CONTENT_SANDBOX 1 \ + --setenv MOZ_DISABLE_GMP_SANDBOX 1 \ + --setenv MOZ_DISABLE_RDD_SANDBOX 1 \ + --setenv MOZ_DISABLE_SOCKET_PROCESS_SANDBOX 1 \ --setenv MOZ_DISABLE_UTILITY_SANDBOX 1 \ sh -c "mkdir -p /root; timeout 90 $BIN --no-remote --headless --profile /salida/perfil \ file:///salida/matriz.html > /salida/atuq.log 2>&1; true" diff --git a/scripts/test-atuq-inicio.py b/scripts/test-atuq-inicio.py index d16662ca..013f49d1 100644 --- a/scripts/test-atuq-inicio.py +++ b/scripts/test-atuq-inicio.py @@ -141,7 +141,10 @@ def main(): "--setenv", "XDG_RUNTIME_DIR", "/run", "--setenv", "HOME", "/root", "--setenv", "XDG_DATA_DIRS", "/usr/share", "--setenv", "MOZ_HEADLESS", "1", "--setenv", "MOZ_DISABLE_CONTENT_SANDBOX", "1", + "--setenv", "MOZ_DISABLE_GMP_SANDBOX", "1", "--setenv", "MOZ_DISABLE_RDD_SANDBOX", "1", + "--setenv", "MOZ_DISABLE_SOCKET_PROCESS_SANDBOX", "1", + "--setenv", "MOZ_DISABLE_UTILITY_SANDBOX", "1", "sh", "-c", guion, ], check=False) diff --git a/scripts/test-atuq-nativo.py b/scripts/test-atuq-nativo.py index 12b4a165..8d56e66d 100644 --- a/scripts/test-atuq-nativo.py +++ b/scripts/test-atuq-nativo.py @@ -180,7 +180,10 @@ def main(): # de contenido de Gecko no arranca y cada proceso hijo muere en bucle. Acá se mide el # camino nativo, no el sandbox del motor. "--setenv", "MOZ_DISABLE_CONTENT_SANDBOX", "1", + "--setenv", "MOZ_DISABLE_GMP_SANDBOX", "1", "--setenv", "MOZ_DISABLE_RDD_SANDBOX", "1", + "--setenv", "MOZ_DISABLE_SOCKET_PROCESS_SANDBOX", "1", + "--setenv", "MOZ_DISABLE_UTILITY_SANDBOX", "1", "sh", "-c", guion, ], check=False) diff --git a/scripts/test-atuq-ruteo.py b/scripts/test-atuq-ruteo.py index 185e18d5..ca6f7e54 100755 --- a/scripts/test-atuq-ruteo.py +++ b/scripts/test-atuq-ruteo.py @@ -185,6 +185,8 @@ def correr(tmp, atuq, segundos): "--setenv", "MOZ_DISABLE_CONTENT_SANDBOX", "1", "--setenv", "MOZ_DISABLE_GMP_SANDBOX", "1", "--setenv", "MOZ_DISABLE_RDD_SANDBOX", "1", + "--setenv", "MOZ_DISABLE_SOCKET_PROCESS_SANDBOX", "1", + "--setenv", "MOZ_DISABLE_UTILITY_SANDBOX", "1", "sh", "-c", guion, ] subprocess.run(cmd, check=False)