This repository has been archived on 2026-08-16. You can view files and clone it, but cannot push or open issues or pull requests.
ollie-core/toolsrv/bootstrap.sh

60 lines
1.6 KiB
Bash

#!/bin/sh
# Bootstrap script for ollie-remote SSH deployment.
# Checks for cached binary by hash, downloads if needed, then execs.
main() {
set -e
#
CACHE_DIR="${XDG_CACHE_HOME:-$HOME/.cache}/ollie/bin"
CACHE_BIN="$CACHE_DIR/ollie-remote"
CACHE_HASH="$CACHE_DIR/ollie-remote.hash"
#
if [ -x "$CACHE_BIN" ] && [ -f "$CACHE_HASH" ] && [ "$(cat "$CACHE_HASH")" = "@@HASH@@" ]; then
echo "LoaderStart {\"need_download\":false}" >&2
else
# Find base64 decoder
if command -v base64 >/dev/null 2>&1; then
BASE64_CMD="base64 -d"
if ! echo "dGVzdA==" | base64 -d >/dev/null 2>&1; then
BASE64_CMD="base64 -D"
fi
elif command -v openssl >/dev/null 2>&1; then
BASE64_CMD="openssl base64 -d"
else
echo "ERROR: no base64 decoder found" >&2
exit 1
fi
#
if ! command -v gunzip >/dev/null 2>&1 && ! command -v gzip >/dev/null 2>&1; then
echo "ERROR: no gunzip found" >&2
exit 1
fi
GUNZIP_CMD="gunzip"
command -v gunzip >/dev/null 2>&1 || GUNZIP_CMD="gzip -d"
#
mkdir -p "$CACHE_DIR"
echo "LoaderStart {\"need_download\":true}" >&2
#
# Read download size, then binary data
while IFS= read -r line; do
case "$line" in
Download\ *) BINARY_LENGTH="${line#Download }"; break ;;
esac
done
#
CACHE_TMP="$CACHE_BIN.tmp.$$"
if ! head -c "$BINARY_LENGTH" | $BASE64_CMD | $GUNZIP_CMD > "$CACHE_TMP"; then
rm -f "$CACHE_TMP"
echo "ERROR: binary transfer failed" >&2
exit 1
fi
chmod +x "$CACHE_TMP"
mv "$CACHE_TMP" "$CACHE_BIN"
echo "@@HASH@@" > "$CACHE_HASH"
echo "LoaderReady" >&2
fi
#
exec "$CACHE_BIN" serve --cwd @@CWD@@
exit 1
}
main "$@"; exit 2