commit 13fefa9eefe684730f069272d099e26ef7290c8b
parent 7a86cf8f3c5c0445d6d9569ec24be57f4f4cd19c
Author: Francisco Armando Rosmino <franciscorosmino@rosmino.com.ar>
Date: Sat, 3 Oct 2026 11:38:16 -0300
Catan: linux-release.sh compila en docker local (sudo con askpass) o remoto
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat:
1 file changed, 52 insertions(+), 22 deletions(-)
diff --git a/catan/tools/linux-release.sh b/catan/tools/linux-release.sh
@@ -1,30 +1,60 @@
#!/bin/sh
# Compila el catan de Linux para repartir: un solo archivo que corre en la mayoria de las
# distros. Se compila dentro de un Ubuntu 22.04 (docker) porque un binario de Linux solo
-# corre en sistemas con una libc igual o mas nueva que la de donde se compilo; la de esta
-# compu es muy nueva. SDL3 y ncurses van adentro (estaticos); lo grafico (X11/Wayland, audio)
-# SDL lo busca al arrancar en la compu de cada uno.
+# corre en sistemas con una libc igual o mas nueva que la de donde se compilo; la de la X1
+# es muy nueva. SDL3 y ncurses van adentro (estaticos); lo grafico (X11/Wayland, audio) SDL
+# lo busca al arrancar en la compu de cada uno.
+#
+# Docker corre en esta compu (en la X1 pancho no esta en el grupo docker: se usa sudo con el
+# popup de sudo-askpass), o en RELEASE_HOST por ssh (ej. RELEASE_HOST=ct112-remoto, que tiene
+# docker y entramos como root).
# Uso: tools/linux-release.sh <version> <salida> (lo llama make release)
set -e
VERSION=$1; OUT=$2
+HOST=${RELEASE_HOST:-local}
+DOCKER=docker
+if [ "$HOST" = local ] && ! docker info >/dev/null 2>&1; then
+ export SUDO_ASKPASS=${SUDO_ASKPASS:-$(command -v sudo-askpass)}
+ DOCKER="sudo -A docker"
+fi
SDL_SRC=${WIN_SDL_SRC:-$HOME/.local/opt/src/SDL3-3.4.16}
ROOT=$(cd "$(dirname "$0")/../.." && pwd)
-docker run --rm -v "$ROOT":/src:ro -v "$SDL_SRC":/sdl:ro -v "$(dirname "$(realpath -m "$OUT")")":/out \
- -e VERSION="$VERSION" -e OUTNAME="$(basename "$OUT")" -e HUID="$(id -u)" ubuntu:22.04 sh -ec '
- export DEBIAN_FRONTEND=noninteractive
- apt-get update -qq >/dev/null
- apt-get install -y -qq build-essential cmake ninja-build pkg-config libncurses-dev \
- libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxi-dev libxss-dev libxfixes-dev \
- libwayland-dev libxkbcommon-dev wayland-protocols libegl-dev libgl-dev libdecor-0-dev \
- libasound2-dev libpulse-dev libdrm-dev libgbm-dev >/dev/null
- cmake -S /sdl -B /tmp/sdl -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/opt/sdl \
- -DSDL_SHARED=OFF -DSDL_STATIC=ON -DSDL_TESTS=OFF -DSDL_EXAMPLES=OFF >/dev/null
- cmake --build /tmp/sdl >/dev/null && cmake --install /tmp/sdl >/dev/null
- cp -r /src /tmp/j && cd /tmp/j/catan && rm -f catan
- make catan VERSION="$VERSION" CFLAGS="-O2" \
- SDL="$(PKG_CONFIG_PATH=/opt/sdl/lib/pkgconfig pkg-config --cflags --static --libs sdl3)" \
- NCURSES="-Wl,-Bstatic -lncursesw -ltinfo -Wl,-Bdynamic" >/dev/null
- strip catan
- cp catan /out/$OUTNAME && chown $HUID /out/$OUTNAME
- ldd /out/$OUTNAME | sed "s/^/ /"
-'
+
+# lo que corre dentro del contenedor: /src el repo, /sdl la fuente de SDL3, /out la salida
+BUILD='set -e
+export DEBIAN_FRONTEND=noninteractive
+apt-get update -qq >/dev/null
+apt-get install -y -qq build-essential cmake ninja-build pkg-config libncurses-dev \
+ libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxi-dev libxss-dev libxfixes-dev \
+ libwayland-dev libxkbcommon-dev wayland-protocols libegl-dev libgl-dev libdecor-0-dev \
+ libasound2-dev libpulse-dev libdrm-dev libgbm-dev >/dev/null
+cmake -S /sdl -B /tmp/sdl -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/opt/sdl \
+ -DSDL_SHARED=OFF -DSDL_STATIC=ON -DSDL_TESTS=OFF -DSDL_EXAMPLES=OFF >/dev/null
+cmake --build /tmp/sdl >/dev/null && cmake --install /tmp/sdl >/dev/null
+cp -r /src /tmp/j && cd /tmp/j/catan && rm -f catan
+make catan VERSION="$VERSION" CFLAGS="-O2" \
+ SDL="$(PKG_CONFIG_PATH=/opt/sdl/lib/pkgconfig pkg-config --cflags --static --libs sdl3)" \
+ NCURSES="-Wl,-Bstatic -lncursesw -ltinfo -Wl,-Bdynamic" >/dev/null
+strip catan
+cp catan /out/catan
+ldd /out/catan | sed "s/^/ /"'
+
+if [ "$HOST" = local ]; then
+ mkdir -p "$(dirname "$OUT")"
+ T=$(mktemp -d)
+ $DOCKER run --rm -v "$ROOT":/src:ro -v "$SDL_SRC":/sdl:ro -v "$T":/out -e VERSION="$VERSION" \
+ ubuntu:22.04 sh -c "$BUILD"
+ cp "$T/catan" "$OUT"; rm -rf "$T"
+ exit 0
+fi
+
+# remoto: se manda el codigo (lo que esta en git, tal como esta ahora) y la fuente de SDL3
+R=/tmp/catan-release
+ssh "$HOST" "rm -rf $R && mkdir -p $R/src $R/sdl $R/out"
+(cd "$ROOT" && git ls-files -z | tar --null -T - -cz) | ssh "$HOST" "tar -xz -C $R/src"
+tar -C "$SDL_SRC" --exclude='build*' -cz . | ssh "$HOST" "tar -xz -C $R/sdl"
+ssh "$HOST" "docker run --rm -v $R/src:/src:ro -v $R/sdl:/sdl:ro -v $R/out:/out -e VERSION='$VERSION' \
+ ubuntu:22.04 sh -c '$(printf '%s' "$BUILD" | sed "s/'/'\\\\''/g")'"
+mkdir -p "$(dirname "$OUT")"
+scp -q "$HOST:$R/out/catan" "$OUT"
+ssh "$HOST" "rm -rf $R"