#!/bin/bash # install location LOCATION=/usr/local/bin # exit top level program from subshell trap "exit 1" TERM export TOP_PID=$$ function fail() { kill -s TERM $TOP_PID } # platform IDs LIN=linux MAC=macos WIN=windows # Urls LIN_X64_URL=https://git.phoenix.ipv64.de/public/warp/releases/download/1.0.0/linux-x64.warp-packer LIN_AARCH64_URL=https://git.phoenix.ipv64.de/public/warp/releases/download/1.0.0/linux-aarch64.warp-packer MAC_URL=https://git.phoenix.ipv64.de/public/warp/releases/download/1.0.0/macos-x64.warp-packer # platform architecture X64=x64 AARCH64=aarch64 # returns this platform ID function get_this_platform() { local this_platform="$(uname -s)" case $this_platform in Linux*) echo $LIN ;; Darwin*) echo $MAC ;; *) echo "Error: Unsupported platform $this_platform" >&2 fail ;; esac } # returns this platform architecture function get_this_architecture() { local this_machine="$(uname -m)" case $this_machine in x86_64) echo $X64 ;; aarch64) echo $AARCH64 ;; *) fail_with "Unsupported machine $this_machine" ;; esac } # actually sets this platform THIS_PLATFORM=$(get_this_platform) # actually sets this architecture THIS_ARCHITECTURE=$(get_this_architecture) # fetches latest release download link for the platform function get_warp_link() { local this_platform=$1 local this_architecture=$2 if [ "$this_platform" = "$LIN" ]; then echo "$LIN_URL" if [ "$this_architecture" = "$X64" ]; then echo "$LIN_X64_URL" else echo "$LIN_AARCH64_URL" fi else echo "$MAC_URL" fi } # downloads and installs single binary function install() { local name=$1 local link=$2 local temp_location="/tmp/$name" echo "Downloading $name..." curl -fsSL -o $temp_location $link if [[ $? != 0 ]]; then echo "Error: Failed to download $name" >&2 fail fi echo "Creating $LOCATION/$name..." sudo install -D \ --mode=755 \ --owner=root \ --group=root \ "$temp_location" "$LOCATION" if [[ $? != 0 ]]; then echo "Error: Failed to install $name" >&2 fail fi rm $temp_location } # returns missing dependencies function get_missing_deps() { local deps=( "awk" \ "curl" \ "file" \ "grep" \ "sed" \ "sort" \ "tar" \ "unzip" \ "zip" \ ) for d in ${deps[@]}; do if ! command -v $d &> /dev/null ; then echo -n "$d " fi done } WARP4J_LINK="https://git.phoenix.ipv64.de/public/warp4j/raw/branch/master/warp4j" echo "Getting information about warp-packer releases..." WARP_LINK=$(get_warp_link $THIS_PLATFORM $THIS_ARCHITECTURE) MISSING_DEPS=$(get_missing_deps) install "warp-packer" "$WARP_LINK" && \ install "warp4j" "$WARP4J_LINK" if [[ -z $MISSING_DEPS ]]; then echo "Successfully installed" else echo "Main tools successfully installed" echo "Please install following with your package manager:" for d in ${MISSING_DEPS[@]}; do echo -n "$d " done echo exit 1 fi