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 1576Shell 205Rust 111Markdown 993774 Definiciones

⎇ 0295fd6dbe01a2d1869d932633bc5a918e092ec2 scripts/diagnostico/verificar-arreglo-sandbox.sh Shell · 58 líneas · 3.5 KB Historia crudo

takana: la ruta del repo es /mnt/vvv/takana 17f8f4fb8 · Sergio ·

1#!/bin/bash
2# verificar-arreglo-sandbox.sh — A/B del arreglo del cuelgue: arnés VIEJO contra arnés ARREGLADO,
3# intercalados, bajo la presión de memoria en la que aparecieron los cuelgues.
4#
5#   VIEJO     = MOZ_DISABLE_CONTENT_SANDBOX=1 solamente  ⇒ 2 segfaults de 'Sandbox Forked' por corrida
6#   ARREGLADO = las 5 MOZ_DISABLE_*_SANDBOX              ⇒ 0 segfaults, 0 EPERM, 0 helpers
7#
8# El marcador que se mide NO es el cuelgue (2,5 %: haría falta muchísima corrida) sino el SEGFAULT,
9# que está en el 100 % de las corridas del arnés viejo. Un mecanismo presente siempre se puede
10# refutar con pocas muestras; un síntoma raro, no. El recuento de cuelgues va igual, como control.
11set -u
12RAIZ=/mnt/vvv/takana; R=$RAIZ/store/.rootfs/sway-v2
13AQUI=$(cd "$(dirname "$0")" && pwd); N=${N:-50}; UMBRAL=${UMBRAL:-60}
14A=$(ls -d $RAIZ/store/3d199174*-firefox | head -1)
15VIEJO='MOZ_DISABLE_CONTENT_SANDBOX=1'
16NUEVO='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'
17declare -A SEGV COLG SHOT
18for k in viejo nuevo; do SEGV[$k]=0; COLG[$k]=0; SHOT[$k]=0; done
19
20python3 "$AQUI/presion-memoria.py" 2000 3600 >/dev/null 2>&1 & HOG=$!
21trap 'kill $HOG 2>/dev/null' EXIT
22for _ in $(seq 1 40); do sleep 2; [ "$(awk '/MemAvailable/{print int($2/1024)}' /proc/meminfo)" -le 2300 ] && break; done
23echo "presión lista: disponible=$(awk '/MemAvailable/{print int($2/1024)}' /proc/meminfo) MiB"
24
25for i in $(seq 1 $N); do
26  for k in viejo nuevo; do
27    [ $k = viejo ] && ENV="$VIEJO" || ENV="$NUEVO"
28    SAL=$(mktemp -d)
29    # ⚠ `setsid` + matar el GRUPO, no el bwrap (medido 2026-09-08, DOS veces el mismo día).
30    # `kill $BW` mata el bwrap EXTERIOR, que no es el init del namespace de PID: el firefox de
31    # dentro sobrevive. Y si el arnés corría bajo `flock`, ese superviviente HEREDA el fd del lock
32    # y deja a la granja sin poder compilar hasta que alguien lo note — pasó hora y media, en
33    # silencio. Medido: matando sólo el bwrap queda 1 firefox vivo; matando el grupo, 0.
34    setsid bwrap --ro-bind "$R" / --ro-bind /usr/lib/musl/lib/libc.so /lib/ld-musl-x86_64.so.1 \
35      --ro-bind "$A/usr/lib/firefox" /usr/lib/firefox --dev /dev --proc /proc --tmpfs /run --tmpfs /tmp \
36      --unshare-pid --ro-bind "$AQUI" /bench --bind "$SAL" /salida --unshare-user --uid 0 --gid 0 \
37      --setenv PATH /usr/bin:/bin --setenv APAGA "$ENV" \
38      /bin/sh -c 'export HOME=/tmp/h MOZ_HEADLESS=1 LIBGL_ALWAYS_SOFTWARE=1 LANG=C.UTF-8; mkdir -p $HOME; export $APAGA
39        LD_LIBRARY_PATH=/usr/lib/firefox /usr/lib/firefox/firefox --headless --screenshot /salida/x.png file:///bench/fuera-del-corpus.html' \
40      >"$SAL/nav.log" 2>&1 &
41    BW=$!; t=0
42    while kill -0 $BW 2>/dev/null && [ $t -lt $UMBRAL ]; do sleep 1; t=$((t+1)); done
43    if kill -0 $BW 2>/dev/null; then
44      COLG[$k]=$(( ${COLG[$k]} + 1 )); cp -r "$SAL" "$RAIZ/work/colgada-$k-$i" 2>/dev/null
45      kill -TERM -$BW 2>/dev/null; sleep 3; kill -KILL -$BW 2>/dev/null   # el GRUPO
46    else
47      wait $BW 2>/dev/null
48      SEGV[$k]=$(( ${SEGV[$k]} + $(grep -c 'exited on signal 11' "$SAL/nav.log") ))
49      [ -f "$SAL/x.png" ] && SHOT[$k]=$(( ${SHOT[$k]} + 1 ))
50    fi
51    rm -rf "$SAL"
52  done
53  [ $((i % 10)) = 0 ] && echo "  $i/$N · viejo segv=${SEGV[viejo]} colg=${COLG[viejo]} · nuevo segv=${SEGV[nuevo]} colg=${COLG[nuevo]}"
54done
55echo ""
56for k in viejo nuevo; do
57  printf "%-10s segfaults=%-4s COLGADAS=%-3s screenshots=%s/%s\n" "$k" "${SEGV[$k]}" "${COLG[$k]}" "${SHOT[$k]}" "$N"
58done