diff --git a/Dockerfile b/Dockerfile index f07dcd0..4b2854e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,16 +2,22 @@ FROM debian:latest RUN apt-get update && apt-get install -y \ build-essential cmake git wget tar curl ninja-build mold nodejs npm perl jq ccache nlohmann-json3-dev \ + ca-certificates \ && rm -rf /var/lib/apt/lists/* RUN echo "deb http://deb.debian.org/debian testing main" | tee /etc/apt/sources.list.d/testing-temp.list -RUN apt-get update && apt-get -t testing install -y upx-ucl && \ +RUN apt-get update && apt-get install -f && apt-get -t testing install -y upx-ucl && \ rm -rf /var/lib/apt/lists/* && \ rm /etc/apt/sources.list.d/testing-temp.list && \ - apt-get update + rm -rf /var/lib/apt/lists/* + +RUN curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc +RUN echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null +RUN apt-get update && \ + apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin && \ + rm -rf /var/lib/apt/lists/* -RUN curl -fsSL https://get.docker.com | sh COPY --chmod=0755 ./src/* /usr/local/bin/ diff --git a/src/dropshell-build-install-requirements b/src/dropshell-build-install-requirements index dd20d92..c1c7bed 100755 --- a/src/dropshell-build-install-requirements +++ b/src/dropshell-build-install-requirements @@ -144,24 +144,24 @@ function install_packages() { } -function install_headers() { - # put libassert headers on the host. - echo "Checking for libassert headers" - if [ ! -f "/usr/local/lib/libassert.a" ]; then - echo "libassert not found, installing..." - git clone https://github.com/jeremy-rifkin/libassert.git - #git checkout v2.1.5 - mkdir libassert/build - cd "libassert/build" || exit 1 - cmake .. -DCMAKE_BUILD_TYPE=Release - make -j - ${SUDOCMD:-} make install - cd ../.. - rm -rf libassert - else - echo "libassert headers already installed" - fi -} +# function install_libassert() { +# # put libassert headers on the host. +# echo "Checking for libassert headers" +# if [ ! -f "/usr/local/lib/libassert.a" ]; then +# echo "libassert not found, installing..." +# git clone https://github.com/jeremy-rifkin/libassert.git +# #git checkout v2.1.5 +# mkdir libassert/build +# cd "libassert/build" || exit 1 +# cmake .. -DCMAKE_BUILD_TYPE=Release +# make -j +# ${SUDOCMD:-} make install +# cd ../.. +# rm -rf libassert +# else +# echo "libassert headers already installed" +# fi +# } #---------------------------------------------------------------------------------------------------------- @@ -334,8 +334,6 @@ function main() { install_packages - install_headers - install_musl output_version diff --git a/temp/sos b/temp/sos new file mode 100755 index 0000000..d2cf89e --- /dev/null +++ b/temp/sos @@ -0,0 +1,151 @@ +#!/bin/bash +set -euo pipefail + + +# get dropshell +TEMP_DIR=$(mktemp -d) +ARCH=$(uname -m) +curl -L -s -o "${TEMP_DIR}/dropshell" "https://getbin.xyz/dropshell.${ARCH}" || die "Failed to download dropshell" +chmod +x "${TEMP_DIR}/dropshell" +trap 'rm -rf "${TEMP_DIR}"' EXIT +DROPSHELL="${TEMP_DIR}/dropshell" + + +function show_help() { + cat << EOF + + sos is a script to upload files to a simple object storage server. + +Usage: + sos upload [label:tag ...] + +Example: + sos upload tools.dropshell.app ./file.txt file:latest + +This will upload the file to the server, and return the download URL. + +Environment variables: + SOS_WRITE_TOKEN: The write token to use for the upload. If not set, + the script will look in $HOME/.config/sos/write_token.txt. + +EOF + exit 0 +} + +function die() { + echo "FATAL:" + echo "$@" + exit 1 +} + +function datetime() { + date -u +"%Y.%m%d.%H%M" +} + + +function upload() { + if [ "$#" -lt 3 ]; then + echo "Usage: sos upload [label:tag ...]" + exit 1 + fi + + server=$1 + file=$2 + first_label=$3 + LABELTAGS=("$first_label") + [[ "$first_label" =~ : ]] || die "Label $first_label does not contain a tag!" + + shift 3 + for label in "$@"; do + [[ "$label" =~ : ]] || die "Label $label does not contain a tag!" + LABELTAGS+=("$label") + done + + # check if file contains : + [[ ! "$file" =~ : ]] || die "File contains : - this is not allowed!" + [ -f "$file" ] || die "File not found: $file" + + + # upload the file + TARGET_URL="https://$server/upload" + echo "Uploading $file to $TARGET_URL" + + DATETIME=$(datetime) + + # deduplicate the labeltags + mapfile -t LABELTAGS < <(printf "%s\n" "${LABELTAGS[@]}" | sort -u) + LABELTAGS_JSON=$(printf '"%s",' "${LABELTAGS[@]}") + LABELTAGS_JSON="[${LABELTAGS_JSON%,}]" + +METADATA_JSON=$(cat < $FILENAME" + echo "Alternative: https://$server/$HASH > $FILENAME" +} + +# if no arguments, show help +[ "$#" -gt 0 ] || show_help + +CMD="$1" +shift + +if [ "$CMD" == "upload" ]; then + upload "$@" + exit $? +fi + +die "Unknown command: $CMD"