#!/bin/bash # Publica la versión ya empaquetada (empaquetar.py) para que las copias instaladas se actualicen solas: # 1. sube los dos zips al NAS (storage/herramientas/ del OS) # 2. deja el manifiesto en GitHub (labstream-os/public/herramientas/organizador.json), en un commit # que solo toca ese archivo, sin mezclar cambios locales de labstream-os # 3. lanza el despliegue del OS en el NAS y espera a que publique la versión # Uso (desde Git Bash): bash publicar.sh # Requisitos: llave ~/.ssh/editorias_nas con acceso Labstream@192.168.0.22 (sudo sin contraseña), # y permiso de push a Labstream2026/labstream-os. set -e AQUI="$(cd "$(dirname "$0")" && pwd)" OS="$AQUI/../labstream-os" NAS="Labstream@192.168.0.22" SSH="ssh -o BatchMode=yes -o StrictHostKeyChecking=no -o ServerAliveInterval=30 -i $HOME/.ssh/editorias_nas" DEST=/volume5/contenedores/labstream-os/data/storage/herramientas V=$(grep -o '"version": "[^"]*"' "$AQUI/manifiesto.json" | head -1 | cut -d'"' -f4) APP="OrganizadorLabstream-app-$V.zip"; FULL="OrganizadorLabstream-portatil-$V.zip" [ -f "$AQUI/$APP" ] && [ -f "$AQUI/$FULL" ] || { echo "Faltan los zips de la $V: corre antes py -3.12 empaquetar.py"; exit 1; } echo "== OrganiLAB $V ==" echo "1/3 subiendo al NAS…" # el NAS no tiene SFTP: scp en modo antiguo (-O). La carpeta es del usuario del contenedor (1001): se sube a # la carpeta personal y se mueve con sudo. scp -O -q -o BatchMode=yes -o StrictHostKeyChecking=no -i "$HOME/.ssh/editorias_nas" "$AQUI/$APP" "$AQUI/$FULL" "$NAS:~/" $SSH "$NAS" "sudo mv ~/$APP ~/$FULL $DEST/ && sudo chown 1001:1001 $DEST/$APP $DEST/$FULL && cd $DEST && sha256sum $APP $FULL" 2>/dev/null grep -o '"sha256": "[^"]*"' "$AQUI/manifiesto.json" | sed 's/.*: "//; s/"//' | sed 's/^/local /' echo "2/3 manifiesto a GitHub…" cd "$OS" git fetch -q origin main export GIT_INDEX_FILE="$(mktemp)" git read-tree origin/main blob=$(git hash-object -w public/herramientas/organizador.json) git update-index --add --cacheinfo "100644,$blob,public/herramientas/organizador.json" tree=$(git write-tree); unset GIT_INDEX_FILE if [ "$tree" = "$(git rev-parse origin/main^{tree})" ]; then echo " (el manifiesto ya estaba publicado)"; else commit=$(git commit-tree "$tree" -p origin/main -m "OrganiLAB $V: paquete y manifiesto") git push -q origin "$commit:main" && echo " commit $(echo $commit | cut -c1-8) en main" fi echo "3/3 desplegando el OS (tarda unos minutos)…" # por SSH, sudo no lleva /usr/local/bin en el PATH y «docker» no se encuentra: se pasa a mano $SSH "$NAS" "sudo env PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin bash /var/services/homes/Labstream/claude-job.sh >/dev/null 2>&1; tail -1 /volume5/despliegues/labstream-os-deploy.log" 2>/dev/null for i in $(seq 1 30); do pub=$(curl -s -H "Cache-Control: no-cache" https://os.labstreamsas.com/herramientas/organizador.json | grep -o '"version": "[^"]*"' | cut -d'"' -f4) [ "$pub" = "$V" ] && { echo "Publicado: os.labstreamsas.com sirve la $V. Las copias instaladas avisarán al abrirse."; exit 0; } sleep 10 done echo "El OS aún sirve la $pub. Mira /volume5/despliegues/labstream-os-deploy.log en el NAS."; exit 1