#!/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 "OLLIE_LOADER_START {\"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 "OLLIE_LOADER_START {\"need_download\":true}" >&2 # # Read download size, then binary data while IFS= read -r line; do case "$line" in OLLIE_DOWNLOAD\ *) BINARY_LENGTH="${line#OLLIE_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 "OLLIE_LOADER_READY" >&2 fi # exec "$CACHE_BIN" serve --cwd @@CWD@@ exit 1 } main "$@"; exit 2