uzbek-plus/b12/push.sh

16 lines
1 KiB
Bash

#!/bin/sh
# 480s: push FILE to the board as DEST over NCM in 4 MiB chunks, each sha256-verified (retry up to 3x). Port 9943.
F=$1; DEST=$2; [ -f "$F" ] && [ -n "$DEST" ] || { echo "usage: $0 FILE DEST"; exit 2; }
cd "$(dirname "$0")"; W=$(mktemp -d); split -b 4M -d -a 3 "$F" $W/p.
./tn.sh 2 "rm -f $DEST.part.*" > /dev/null
for p in $W/p.*; do n=${p##*.}; h=$(sha256sum < $p | cut -c1-64); ok=
for t in 1 2 3; do
./tn.sh 2 "nc -l -p 9943 > $DEST.part.$n &" > /dev/null; sleep 1
timeout 60 ncat --send-only 172.16.42.1 9943 < $p
r=$(./tn.sh 3 "sha256sum $DEST.part.$n" | grep -o "^[0-9a-f]\{64\}")
[ "$r" = "$h" ] && { ok=1; break; }; echo "chunk $n try $t mismatch (${r:-none})"; ./tn.sh 2 "pkill -f 'nc -l -p 9943'" >/dev/null
done; [ -n "$ok" ] || { echo "PUSH FAIL chunk $n"; rm -rf $W; exit 1; }
done
H=$(sha256sum < "$F" | cut -c1-64)
r=$(./tn.sh 5 "cat $DEST.part.* > $DEST && rm -f $DEST.part.* && sha256sum $DEST" | grep -o "^[0-9a-f]\{64\}")
rm -rf $W; [ "$r" = "$H" ] && echo "PUSH OK $DEST $H" || { echo "PUSH FAIL final ($r)"; exit 1; }