diff --git a/scripts/bootstrap-devfs.sh b/scripts/bootstrap-devfs.sh index 684d724b..b8d44fdb 100755 --- a/scripts/bootstrap-devfs.sh +++ b/scripts/bootstrap-devfs.sh @@ -202,11 +202,23 @@ fi # loader. ABI-compat (mismo musl 1.2.5): gcc/make/etc. siguen corriendo. Seguro para of_tree: el # loader runtime de las tools no afecta los bytes que emiten; el 4/4 es estático contra hammer-musl. # Idempotente: si ya existe el backup .orig128, no rehace nada. +# CRÍTICO: el loader reconstruido DEBE ser de la MISMA versión de musl que el rootfs (Alpine edge +# es rodante: pasó de 1.2.5 a 1.2.6). Si difieren, los coreutils del rootfs (linkeados contra la +# versión de edge) no hallan símbolos nuevos en el loader viejo (p.ej. `renameat2: symbol not +# found` con loader 1.2.5 vs coreutils 1.2.6) ⇒ chmod/cat/rm rotos dentro del sandbox y los builds +# fallan al ejecutar el wrapper zig-cc (EACCES). Por eso DETECTAMOS la versión del rootfs. MUSL_LOADER="$ROOTFS/lib/ld-musl-x86_64.so.1" if [[ $SKIP_APK -eq 0 && ! -f "$MUSL_LOADER.orig128" ]]; then - log "musl: reconstruyendo loader del toolchain con PTHREAD_KEYS_MAX=256 (frente rust)" - MUSL_VER=1.2.5 - MUSL_SHA=a9a118bbe84d8764da0ea0d28b3ab3fae8477fc7e4085d90102b8596fc7c75e4 + # versión de musl instalada en el rootfs (apk db): "1.2.6-r2" → "1.2.6" + MUSL_VER="$(awk '/^P:musl$/{f=1} f&&/^V:/{sub(/-.*/,"",$0);print substr($0,3);exit}' \ + "$ROOTFS/lib/apk/db/installed" 2>/dev/null)" + MUSL_VER="${MUSL_VER:-1.2.6}" + case "$MUSL_VER" in + 1.2.5) MUSL_SHA=a9a118bbe84d8764da0ea0d28b3ab3fae8477fc7e4085d90102b8596fc7c75e4 ;; + 1.2.6) MUSL_SHA=d585fd3b613c66151fc3249e8ed44f77020cb5e6c1e635a616d3f9f82460512a ;; + *) die "musl $MUSL_VER del rootfs sin sha256 conocido — agregalo al case (bootstrap-devfs.sh §3b)" ;; + esac + log "musl: reconstruyendo loader del toolchain $MUSL_VER con PTHREAD_KEYS_MAX=256 (frente rust)" MWORK="$WORK/musl256"; rm -rf "$MWORK"; mkdir -p "$MWORK" curl -fsSL -o "$MWORK/musl.tar.gz" "https://musl.libc.org/releases/musl-$MUSL_VER.tar.gz" echo "$MUSL_SHA $MWORK/musl.tar.gz" | sha256sum -c - >/dev/null || die "musl tarball sha256 mismatch" diff --git a/scripts/farm/farm-sync.sh b/scripts/farm/farm-sync.sh index e0aa9e07..29e7e03a 100755 --- a/scripts/farm/farm-sync.sh +++ b/scripts/farm/farm-sync.sh @@ -22,7 +22,8 @@ SSH="ssh -i $SSH_KEY -o StrictHostKeyChecking=accept-new" echo "==> 1. subiendo código + cola al worker ($VPS:$REMOTE)" rsync -az --delete -e "$SSH" \ --exclude /work --exclude /store --exclude '/store-*' --exclude /target \ - --exclude /dist --exclude /.dev-fs --exclude /.git \ + --exclude /dist --exclude /.dev-fs --exclude /.git --exclude /.scratch \ + --exclude '*.png' --exclude '/content*' \ ./ "$VPS:$REMOTE/" echo "==> 2. bajando artefactos sellados del worker" diff --git a/scripts/farm/vps-setup.sh b/scripts/farm/vps-setup.sh index ca4d02ba..19c6d88e 100755 --- a/scripts/farm/vps-setup.sh +++ b/scripts/farm/vps-setup.sh @@ -29,6 +29,21 @@ kernel.apparmor_restrict_unprivileged_userns=0 EOF sysctl --system >/dev/null 2>&1 || true +echo "==> 2b. bubblewrap con soporte overlay (el de la distro suele ser viejo/sin overlayfs)" +# El sandbox del lab usa `bwrap --overlay-src --tmp-overlay`; bubblewrap <0.10 (p.ej. el 0.9.0 de +# Ubuntu 24.04) responde "Unknown option --overlay-src". Compilamos 0.11.2 a /usr/local/bin (gana +# el PATH de systemd) si el instalado no lo soporta. +if ! bwrap --help 2>&1 | grep -q overlay-src; then + apt-get install -y -q meson ninja-build libcap-dev + BWV=0.11.2 + curl -sL "https://github.com/containers/bubblewrap/releases/download/v${BWV}/bubblewrap-${BWV}.tar.xz" -o /tmp/bwrap.tar.xz + ( cd /tmp && rm -rf "bubblewrap-${BWV}" && tar xf bwrap.tar.xz && cd "bubblewrap-${BWV}" \ + && meson setup _build --prefix=/usr/local -Dman=disabled -Dtests=false >/dev/null \ + && ninja -C _build >/dev/null && ninja -C _build install >/dev/null ) + hash -r + echo " bwrap actualizado: $(/usr/local/bin/bwrap --version)" +fi + echo "==> 3. swap 16G (8GB de RAM es justo para builds Rust con JOBS=2)" if ! swapon --show 2>/dev/null | grep -q /swapfile; then fallocate -l 16G /swapfile 2>/dev/null || dd if=/dev/zero of=/swapfile bs=1M count=16384 status=none