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>
47 lines
1.9 KiB
Bash
Executable File
47 lines
1.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# farm-sync.sh <user@host> — orquesta el worker VPS desde el HUB (laptop). Una sola pasada:
|
|
# 1. sube código + recipes/incoming/ al worker (rsync, el worker no toca gitea)
|
|
# 2. baja el store/ sellado que el worker construyó
|
|
# 3. promueve+firma lo cosechado (cache-hit instantáneo en los artefactos bajados) + commit/push
|
|
#
|
|
# El acceso es UNO solo: laptop->VPS por SSH (la clave de firma y gitea nunca salen del laptop).
|
|
# Idempotente y seguro de re-correr. Pensado para correr cada vez que el laptop está online.
|
|
#
|
|
# Uso: scripts/farm/farm-sync.sh root@1.2.3.4
|
|
# scripts/farm/farm-sync.sh root@1.2.3.4 --no-promote # sólo sincroniza, no firma
|
|
# Env: SSH_KEY (def ~/.ssh/github5), REMOTE (def /opt/hammer)
|
|
set -euo pipefail
|
|
|
|
VPS="${1:?uso: farm-sync.sh user@host [--no-promote]}"
|
|
SSH_KEY="${SSH_KEY:-$HOME/.ssh/github5}"
|
|
REMOTE="${REMOTE:-/opt/hammer}"
|
|
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
|
|
cd "$ROOT"
|
|
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 /.scratch \
|
|
--exclude '*.png' --exclude '/content*' \
|
|
./ "$VPS:$REMOTE/"
|
|
|
|
echo "==> 2. bajando artefactos sellados del worker"
|
|
rsync -az -e "$SSH" "$VPS:$REMOTE/store/" ./store/
|
|
|
|
if [ "${2:-}" = "--no-promote" ]; then
|
|
echo "✓ store sincronizado (sin promote)"; exit 0
|
|
fi
|
|
|
|
echo "==> 3. promote + firma (cache-hit en lo que el worker selló)"
|
|
scripts/build-farm.sh
|
|
|
|
echo "==> 4. commit + push de la cosecha"
|
|
git add recipes/ tandas/ 2>/dev/null || true
|
|
if ! git diff --cached --quiet; then
|
|
git commit -q -m "Etapa G: cosecha del worker VPS — promote + firma"
|
|
git push -q origin main && echo "✓ pusheado"
|
|
else
|
|
echo "(nada nuevo que commitear)"
|
|
fi
|