#!/usr/bin/env bash # Compila origin-chain-node (release, con el WASM real) para la rp1, Raspberry Pi 5 linux/aarch64, # en un Mac Apple Silicon con Docker (linux/arm64 corre nativo, sin emulación). # # scripts/rp1/construir-aarch64.sh # # Por qué así (medido el 2026-10-24): # - La rp1 no compila Substrate: es el runner de CI de la casa y tiene 8 GB. # - Imagen bookworm (glibc 2.36): el binario corre en la rp1 (Debian 13, glibc 2.41). # - El target vive en un VOLUMEN de Docker y no en el disco externo de compilación: la VM de # Docker Desktop no ve /Volumes/MacOSBukup si el disco se montó después de arrancar Docker # («not a directory»), y reiniciar Docker tiraría los contenedores de otras hermanas. # Al acabar se copia el binario fuera y se borra el volumen. # - 4 jobs: la VM tiene 8 GB compartidos con las bases de datos de otras hermanas. # - WASM_BUILD_WORKSPACE_HINT=/src: substrate-wasm-builder busca Cargo.lock subiendo desde el # target; con el target fuera del workspace no lo encuentra, resuelve dependencias nuevas # (que piden rustc 1.90) y el build del runtime falla. set -euo pipefail DESTINO="${1:?carpeta destino}" RAIZ="$(cd "$(dirname "$0")/../.." && pwd)" IMG=origin-chain-builder:1.88-bookworm docker image inspect "$IMG" >/dev/null 2>&1 || docker build -q -t "$IMG" -f "$RAIZ/scripts/rp1/Dockerfile.aarch64" "$RAIZ/scripts/rp1" docker volume create charon-arm64-target >/dev/null docker volume create charon-arm64-registry >/dev/null docker run --rm --name charon-aarch64 \ -v "$RAIZ":/src:ro -v charon-arm64-target:/target -v charon-arm64-registry:/usr/local/cargo/registry \ -e CARGO_TARGET_DIR=/target -e WASM_BUILD_WORKSPACE_HINT=/src -e WASM_BUILD_STD=0 -e CARGO_BUILD_JOBS=4 \ -e CC_wasm32v1_none=clang -e AR_wasm32v1_none=llvm-ar \ -e CC_wasm32_unknown_unknown=clang -e AR_wasm32_unknown_unknown=llvm-ar \ -w /src "$IMG" cargo build --release -p origin-chain-node --features wasm-build mkdir -p "$DESTINO" # docker cp escribe desde el host: funciona aunque la VM no vea el destino (p. ej. /Volumes/…). C=$(docker create -v charon-arm64-target:/target "$IMG" true) docker cp "$C:/target/release/origin-chain-node" "$DESTINO/origin-chain-node" docker rm "$C" >/dev/null file "$DESTINO/origin-chain-node" shasum -a 256 "$DESTINO/origin-chain-node" echo "Para liberar el disco de Docker: docker volume rm charon-arm64-target charon-arm64-registry"