2024-02-03 22:31:40 +03:00
|
|
|
#!/bin/sh
|
2023-12-16 08:05:45 +03:00
|
|
|
# SPDX-License-Identifier: MIT
|
2024-02-01 20:54:46 +03:00
|
|
|
set -e
|
2023-12-16 08:05:45 +03:00
|
|
|
|
2024-02-01 20:54:46 +03:00
|
|
|
print() {
|
|
|
|
echo "$@" >&2
|
|
|
|
}
|
2023-12-16 08:05:45 +03:00
|
|
|
|
2024-02-01 20:54:46 +03:00
|
|
|
fail() {
|
|
|
|
print "$@"
|
2023-12-16 08:05:45 +03:00
|
|
|
exit 1
|
2024-02-01 20:54:46 +03:00
|
|
|
}
|
2023-12-16 08:05:45 +03:00
|
|
|
|
2024-02-01 20:54:46 +03:00
|
|
|
requireCommands() {
|
|
|
|
for cmd in $*; do
|
|
|
|
if ! command -v $cmd &> /dev/null; then
|
|
|
|
fail "Cannot find required command: $cmd"
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
|
|
|
requireCommands uname sha256sum cut dd chmod rm realpath expr
|
|
|
|
|
|
|
|
if [ "$(realpath $(command -v sha256sum))" = "/bin/busybox" ]; then
|
|
|
|
fail "Busybox sha256sum detected, will not work. Refusing to continue"
|
2023-12-16 08:05:45 +03:00
|
|
|
fi
|
|
|
|
|
2024-02-01 20:54:46 +03:00
|
|
|
# Script could be used for any binary
|
|
|
|
NAME=${BIN:="{{NAME}}"}
|
|
|
|
EXTERNAL_ADDRESS=${EXTERNAL_ADDRESS:="{{EXTERNAL_ADDRESS}}"}
|
2023-12-16 08:05:45 +03:00
|
|
|
DOWNLOAD_COMMAND="curl"
|
|
|
|
OUTPUT_ARG="-o"
|
|
|
|
DIR="/tmp/binhost-$NAME-$(date +%s)"
|
|
|
|
FILE="$DIR/$NAME"
|
2024-02-01 20:54:46 +03:00
|
|
|
PLATFORM="$(uname)"
|
|
|
|
ARCH="$(uname -m)"
|
2023-12-16 08:05:45 +03:00
|
|
|
|
2024-02-01 20:54:46 +03:00
|
|
|
if ! command -v curl &> /dev/null; then
|
|
|
|
if ! command -v wget &> /dev/null; then
|
|
|
|
fail "No curl or wget found, install one and rerun the script"
|
2023-12-16 08:05:45 +03:00
|
|
|
fi
|
|
|
|
export DOWNLOAD_COMMAND="wget"
|
|
|
|
export OUTPUT_ARG="-O"
|
|
|
|
fi
|
|
|
|
|
2024-02-01 20:54:46 +03:00
|
|
|
PLATFORM_LIST="{{PLATFORM_LIST}}"
|
|
|
|
# Making script truly portable
|
|
|
|
if [ ! "{{NAME}}" = $NAME ]; then
|
|
|
|
print ":: Fetching platforms"
|
|
|
|
export PLATFORM_LIST=$($DOWNLOAD_COMMAND $EXTERNAL_ADDRESS/$NAME/platforms $OUTPUT_ARG /dev/stdout)
|
|
|
|
fi
|
|
|
|
|
|
|
|
if ! expr "$PLATFORM_LIST" : "\(.*$(uname)-$(uname -m).*\)" > /dev/null; then
|
|
|
|
fail "Platform \"$(uname)-$(uname -m)\" is not supported"
|
|
|
|
fi
|
|
|
|
|
2023-12-16 08:05:45 +03:00
|
|
|
mkdir $DIR
|
2024-02-01 20:54:46 +03:00
|
|
|
cd $DIR
|
|
|
|
|
|
|
|
print ":: Downloading manifest"
|
|
|
|
$DOWNLOAD_COMMAND $EXTERNAL_ADDRESS/runner/manifest $OUTPUT_ARG manifest
|
2023-12-16 08:05:45 +03:00
|
|
|
|
2024-02-01 20:54:46 +03:00
|
|
|
MANIFEST_HASHSUM=$(sha256sum manifest)
|
|
|
|
|
|
|
|
if [ ! -z $KEY ]; then
|
|
|
|
if [ ! $KEY = "$(echo $MANIFEST_HASHSUM | cut -c 1-${#KEY})" ]; then
|
|
|
|
fail "Invalid manifest hashsum"
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
print "Manifest KEY missing, skipping manifest check"
|
|
|
|
fi
|
2023-12-16 08:05:45 +03:00
|
|
|
|
2024-02-01 20:54:46 +03:00
|
|
|
print ":: Downloading signature"
|
|
|
|
$DOWNLOAD_COMMAND $EXTERNAL_ADDRESS/bin/$NAME/$PLATFORM/$ARCH/sign $OUTPUT_ARG signature
|
|
|
|
|
|
|
|
dd if=manifest of=public_key count=32 bs=1 2> /dev/null
|
|
|
|
dd if=manifest of=hashes skip=32 bs=1 2> /dev/null
|
|
|
|
|
|
|
|
print ":: Downloading runner"
|
|
|
|
|
|
|
|
$DOWNLOAD_COMMAND $EXTERNAL_ADDRESS/runner/runner-$PLATFORM-$ARCH $OUTPUT_ARG "runner-$PLATFORM-$ARCH"
|
|
|
|
|
|
|
|
if ! sha256sum -c hashes --ignore-missing; then
|
|
|
|
fail "Incorrect hashsum of runner"
|
|
|
|
fi
|
|
|
|
|
|
|
|
chmod +x "runner-$PLATFORM-$ARCH"
|
|
|
|
|
|
|
|
print ":: Downloading binary"
|
|
|
|
|
|
|
|
$DOWNLOAD_COMMAND $EXTERNAL_ADDRESS/bin/$NAME/$PLATFORM/$ARCH $OUTPUT_ARG "$FILE"
|
|
|
|
|
|
|
|
if ! ./runner-$PLATFORM-$ARCH "$FILE" >&2; then
|
|
|
|
exit 2
|
|
|
|
fi
|
2023-12-16 08:05:45 +03:00
|
|
|
|
|
|
|
chmod +x "$FILE"
|
|
|
|
|
2024-02-03 22:31:40 +03:00
|
|
|
$FILE $ARGS < /dev/tty
|
2023-12-16 08:05:45 +03:00
|
|
|
|
2024-02-01 20:54:46 +03:00
|
|
|
cd
|
|
|
|
|
|
|
|
rm -rf "$DIR"
|