89 lines
2.6 KiB
Bash
89 lines
2.6 KiB
Bash
#!/bin/sh
|
|
# Bootstrap script for ollie-remote SSH deployment.
|
|
# Checks for cached binaries 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"
|
|
CACHE_LANDRUN="$CACHE_DIR/landrun"
|
|
CACHE_LANDRUN_HASH="$CACHE_DIR/landrun.hash"
|
|
#
|
|
NEED_DOWNLOAD=false
|
|
NEED_LANDRUN=false
|
|
#
|
|
if ! [ -x "$CACHE_BIN" ] || ! [ -f "$CACHE_HASH" ] || [ "$(cat "$CACHE_HASH")" != "@@HASH@@" ]; then
|
|
NEED_DOWNLOAD=true
|
|
fi
|
|
if ! [ -x "$CACHE_LANDRUN" ] || ! [ -f "$CACHE_LANDRUN_HASH" ] || [ "$(cat "$CACHE_LANDRUN_HASH")" != "@@LANDRUN_HASH@@" ]; then
|
|
NEED_LANDRUN=true
|
|
fi
|
|
#
|
|
if [ "$NEED_DOWNLOAD" = "false" ] && [ "$NEED_LANDRUN" = "false" ]; then
|
|
echo "OLLIE_LOADER_START {\"need_download\":false,\"need_landrun\":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\":$NEED_DOWNLOAD,\"need_landrun\":$NEED_LANDRUN}" >&2
|
|
#
|
|
if [ "$NEED_DOWNLOAD" = "true" ]; then
|
|
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: ollie-remote transfer failed" >&2
|
|
exit 1
|
|
fi
|
|
chmod +x "$CACHE_TMP"
|
|
mv "$CACHE_TMP" "$CACHE_BIN"
|
|
echo "@@HASH@@" > "$CACHE_HASH"
|
|
fi
|
|
#
|
|
if [ "$NEED_LANDRUN" = "true" ]; then
|
|
while IFS= read -r line; do
|
|
case "$line" in
|
|
OLLIE_DOWNLOAD\ *) BINARY_LENGTH="${line#OLLIE_DOWNLOAD }"; break ;;
|
|
esac
|
|
done
|
|
CACHE_TMP="$CACHE_LANDRUN.tmp.$$"
|
|
if ! head -c "$BINARY_LENGTH" | $BASE64_CMD | $GUNZIP_CMD > "$CACHE_TMP"; then
|
|
rm -f "$CACHE_TMP"
|
|
echo "ERROR: landrun transfer failed" >&2
|
|
exit 1
|
|
fi
|
|
chmod +x "$CACHE_TMP"
|
|
mv "$CACHE_TMP" "$CACHE_LANDRUN"
|
|
echo "@@LANDRUN_HASH@@" > "$CACHE_LANDRUN_HASH"
|
|
fi
|
|
echo "OLLIE_LOADER_READY" >&2
|
|
fi
|
|
#
|
|
exec "$CACHE_BIN" serve --cwd @@CWD@@
|
|
exit 1
|
|
}
|
|
main "$@"; exit 2
|