Etapa G: fixes del kit de granja distribuida (validados en VPS Hetzner real)
Tres frentes que aparecieron al provisionar un CCX13 (Ubuntu 24.04) de verdad: - bootstrap-devfs §3b: el loader musl-256-keys ahora DETECTA la versión del rootfs (apk db) en vez de hardcodear 1.2.5. Alpine edge avanzó a musl 1.2.6 ⇒ un loader 1.2.5 vs coreutils 1.2.6 da `renameat2: symbol not found` → chmod roto en el sandbox → el wrapper zig-cc no queda +x → EACCES. case con sha de 1.2.5 y 1.2.6, die si aparece una nueva. - vps-setup §2b: compila bubblewrap 0.11.2 si el de la distro no soporta --overlay-src (Ubuntu 24.04 trae 0.9.0 sin overlayfs; el sandbox lo necesita). - farm-sync: excluye /.scratch (44G de fuentes mrustc/rustc) + *.png/content* del rsync al worker (casi copia 44G de más). Smoke test en el VPS: builds compilan código real (pasan cc/chmod), rustc 2 cores al 93%, RAM holgada. Worker funcional. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user