mirror of
https://github.com/hauler-dev/hauler.git
synced 2026-02-14 18:09:51 +00:00
* added env variables for haulerDir/tempDir
* updated hauler directory for the install script
* cleanup/fixes for install script
* updated variables based on feedback
* revert "updated variables based on feedback"
* reverts commit 54f7a4d695
* minor restructure to root flags
* updated logic to include haulerdir flag
* cleaned up/formatted new logic
* more cleanup and formatting
224 lines
7.4 KiB
Bash
Executable File
224 lines
7.4 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Usage:
|
|
# - curl -sfL... | ENV_VAR=... bash
|
|
# - ENV_VAR=... ./install.sh
|
|
#
|
|
# Install Usage:
|
|
# Install Latest Release
|
|
# - curl -sfL https://get.hauler.dev | bash
|
|
# - ./install.sh
|
|
#
|
|
# Install Specific Release
|
|
# - curl -sfL https://get.hauler.dev | HAULER_VERSION=1.0.0 bash
|
|
# - HAULER_VERSION=1.0.0 ./install.sh
|
|
#
|
|
# Set Install Directory
|
|
# - curl -sfL https://get.hauler.dev | HAULER_INSTALL_DIR=/usr/local/bin bash
|
|
# - HAULER_INSTALL_DIR=/usr/local/bin ./install.sh
|
|
#
|
|
# Set Hauler Directory
|
|
# - curl -sfL https://get.hauler.dev | HAULER_DIR=$HOME/.hauler bash
|
|
# - HAULER_DIR=$HOME/.hauler ./install.sh
|
|
#
|
|
# Debug Usage:
|
|
# - curl -sfL https://get.hauler.dev | HAULER_DEBUG=true bash
|
|
# - HAULER_DEBUG=true ./install.sh
|
|
#
|
|
# Uninstall Usage:
|
|
# - curl -sfL https://get.hauler.dev | HAULER_UNINSTALL=true bash
|
|
# - HAULER_UNINSTALL=true ./install.sh
|
|
#
|
|
# Documentation:
|
|
# - https://hauler.dev
|
|
# - https://github.com/hauler-dev/hauler
|
|
|
|
# set functions for logging
|
|
function verbose {
|
|
echo "$1"
|
|
}
|
|
|
|
function info {
|
|
echo && echo "[INFO] Hauler: $1"
|
|
}
|
|
|
|
function warn {
|
|
echo && echo "[WARN] Hauler: $1"
|
|
}
|
|
|
|
function fatal {
|
|
echo && echo "[ERROR] Hauler: $1"
|
|
exit 1
|
|
}
|
|
|
|
# debug hauler from argument or environment variable
|
|
if [ "${HAULER_DEBUG}" = "true" ]; then
|
|
set -x
|
|
fi
|
|
|
|
# start hauler preflight checks
|
|
info "Starting Preflight Checks..."
|
|
|
|
# check for required packages and dependencies
|
|
for cmd in echo curl grep sed rm mkdir awk openssl tar install source; do
|
|
if ! command -v "$cmd" &> /dev/null; then
|
|
fatal "$cmd is required to install Hauler"
|
|
fi
|
|
done
|
|
|
|
# set install directory from argument or environment variable
|
|
HAULER_INSTALL_DIR=${HAULER_INSTALL_DIR:-/usr/local/bin}
|
|
|
|
# ensure install directory exists and/or create it
|
|
if [ ! -d "${HAULER_INSTALL_DIR}" ]; then
|
|
mkdir -p "${HAULER_INSTALL_DIR}" || fatal "Failed to Create Install Directory: ${HAULER_INSTALL_DIR}"
|
|
fi
|
|
|
|
# ensure install directory is writable (by user or root privileges)
|
|
if [ ! -w "${HAULER_INSTALL_DIR}" ]; then
|
|
if [ "$(id -u)" -ne 0 ]; then
|
|
fatal "Root privileges are required to install Hauler to Directory: ${HAULER_INSTALL_DIR}"
|
|
fi
|
|
fi
|
|
|
|
# uninstall hauler from argument or environment variable
|
|
if [ "${HAULER_UNINSTALL}" = "true" ]; then
|
|
# remove the hauler binary
|
|
rm -rf "${HAULER_INSTALL_DIR}/hauler" || fatal "Failed to Remove Hauler from ${HAULER_INSTALL_DIR}"
|
|
|
|
# remove the hauler directory
|
|
rm -rf "${HAULER_DIR}" || fatal "Failed to Remove Hauler Directory: ${HAULER_DIR}"
|
|
|
|
info "Successfully Uninstalled Hauler" && echo
|
|
exit 0
|
|
fi
|
|
|
|
# set version environment variable
|
|
if [ -z "${HAULER_VERSION}" ]; then
|
|
# attempt to retrieve the latest version from GitHub
|
|
HAULER_VERSION=$(curl -sI https://github.com/hauler-dev/hauler/releases/latest | grep -i location | sed -e 's#.*tag/v##' -e 's/^[[:space:]]*//g' -e 's/[[:space:]]*$//g')
|
|
|
|
# exit if the version could not be detected
|
|
if [ -z "${HAULER_VERSION}" ]; then
|
|
fatal "HAULER_VERSION is unable to be detected and/or retrieved from GitHub. Please set: HAULER_VERSION"
|
|
fi
|
|
fi
|
|
|
|
# detect the operating system
|
|
PLATFORM=$(uname -s | tr '[:upper:]' '[:lower:]')
|
|
case $PLATFORM in
|
|
linux)
|
|
PLATFORM="linux"
|
|
;;
|
|
darwin)
|
|
PLATFORM="darwin"
|
|
;;
|
|
*)
|
|
fatal "Unsupported Platform: ${PLATFORM}"
|
|
;;
|
|
esac
|
|
|
|
# detect the architecture
|
|
ARCH=$(uname -m)
|
|
case $ARCH in
|
|
x86_64 | x86-32 | x64 | x32 | amd64)
|
|
ARCH="amd64"
|
|
;;
|
|
aarch64 | arm64)
|
|
ARCH="arm64"
|
|
;;
|
|
*)
|
|
fatal "Unsupported Architecture: ${ARCH}"
|
|
;;
|
|
esac
|
|
|
|
# set hauler directory from argument or environment variable
|
|
HAULER_DIR=${HAULER_DIR:-$HOME/.hauler}
|
|
|
|
# start hauler installation
|
|
info "Starting Installation..."
|
|
|
|
# display the version, platform, and architecture
|
|
verbose "- Version: v${HAULER_VERSION}"
|
|
verbose "- Platform: ${PLATFORM}"
|
|
verbose "- Architecture: ${ARCH}"
|
|
verbose "- Install Directory: ${HAULER_INSTALL_DIR}"
|
|
verbose "- Hauler Directory: ${HAULER_DIR}"
|
|
|
|
# ensure hauler directory exists and/or create it
|
|
if [ ! -d "${HAULER_DIR}" ]; then
|
|
mkdir -p "${HAULER_DIR}" || fatal "Failed to Create Hauler Directory: ${HAULER_DIR}"
|
|
fi
|
|
|
|
# ensure hauler directory is writable (by user or root privileges)
|
|
chmod -R 777 "${HAULER_DIR}" || fatal "Failed to Update Permissions of Hauler Directory: ${HAULER_DIR}"
|
|
|
|
# change to hauler directory
|
|
cd "${HAULER_DIR}" || fatal "Failed to Change Directory to Hauler Directory: ${HAULER_DIR}"
|
|
|
|
# start hauler artifacts download
|
|
info "Starting Download..."
|
|
|
|
# download the checksum file
|
|
if ! curl -sfOL "https://github.com/hauler-dev/hauler/releases/download/v${HAULER_VERSION}/hauler_${HAULER_VERSION}_checksums.txt"; then
|
|
fatal "Failed to Download: hauler_${HAULER_VERSION}_checksums.txt"
|
|
fi
|
|
|
|
# download the archive file
|
|
if ! curl -sfOL "https://github.com/hauler-dev/hauler/releases/download/v${HAULER_VERSION}/hauler_${HAULER_VERSION}_${PLATFORM}_${ARCH}.tar.gz"; then
|
|
fatal "Failed to Download: hauler_${HAULER_VERSION}_${PLATFORM}_${ARCH}.tar.gz"
|
|
fi
|
|
|
|
# start hauler checksum verification
|
|
info "Starting Checksum Verification..."
|
|
|
|
# verify the Hauler checksum
|
|
EXPECTED_CHECKSUM=$(awk -v HAULER_VERSION="${HAULER_VERSION}" -v PLATFORM="${PLATFORM}" -v ARCH="${ARCH}" '$2 == "hauler_"HAULER_VERSION"_"PLATFORM"_"ARCH".tar.gz" {print $1}' "hauler_${HAULER_VERSION}_checksums.txt")
|
|
DETERMINED_CHECKSUM=$(openssl dgst -sha256 "hauler_${HAULER_VERSION}_${PLATFORM}_${ARCH}.tar.gz" | awk '{print $2}')
|
|
|
|
if [ -z "${EXPECTED_CHECKSUM}" ]; then
|
|
fatal "Failed to Locate Checksum: hauler_${HAULER_VERSION}_${PLATFORM}_${ARCH}.tar.gz"
|
|
elif [ "${DETERMINED_CHECKSUM}" = "${EXPECTED_CHECKSUM}" ]; then
|
|
verbose "- Expected Checksum: ${EXPECTED_CHECKSUM}"
|
|
verbose "- Determined Checksum: ${DETERMINED_CHECKSUM}"
|
|
verbose "- Successfully Verified Checksum: hauler_${HAULER_VERSION}_${PLATFORM}_${ARCH}.tar.gz"
|
|
else
|
|
verbose "- Expected: ${EXPECTED_CHECKSUM}"
|
|
verbose "- Determined: ${DETERMINED_CHECKSUM}"
|
|
fatal "Failed Checksum Verification: hauler_${HAULER_VERSION}_${PLATFORM}_${ARCH}.tar.gz"
|
|
fi
|
|
|
|
# uncompress the hauler archive
|
|
tar -xzf "hauler_${HAULER_VERSION}_${PLATFORM}_${ARCH}.tar.gz" || fatal "Failed to Extract: hauler_${HAULER_VERSION}_${PLATFORM}_${ARCH}.tar.gz"
|
|
|
|
# install the hauler binary
|
|
install -m 755 hauler "${HAULER_INSTALL_DIR}" || fatal "Failed to Install Hauler: ${HAULER_INSTALL_DIR}"
|
|
|
|
# add hauler to the path
|
|
if [[ ":$PATH:" != *":${HAULER_INSTALL_DIR}:"* ]]; then
|
|
if [ -f "$HOME/.bashrc" ]; then
|
|
echo "export PATH=\$PATH:${HAULER_INSTALL_DIR}" >> "$HOME/.bashrc"
|
|
source "$HOME/.bashrc"
|
|
elif [ -f "$HOME/.bash_profile" ]; then
|
|
echo "export PATH=\$PATH:${HAULER_INSTALL_DIR}" >> "$HOME/.bash_profile"
|
|
source "$HOME/.bash_profile"
|
|
elif [ -f "$HOME/.zshrc" ]; then
|
|
echo "export PATH=\$PATH:${HAULER_INSTALL_DIR}" >> "$HOME/.zshrc"
|
|
source "$HOME/.zshrc"
|
|
elif [ -f "$HOME/.profile" ]; then
|
|
echo "export PATH=\$PATH:${HAULER_INSTALL_DIR}" >> "$HOME/.profile"
|
|
source "$HOME/.profile"
|
|
else
|
|
warn "Failed to add ${HAULER_INSTALL_DIR} to PATH: Unsupported Shell"
|
|
fi
|
|
fi
|
|
|
|
# display success message
|
|
info "Successfully Installed Hauler at ${HAULER_INSTALL_DIR}/hauler"
|
|
|
|
# display availability message
|
|
info "Hauler v${HAULER_VERSION} is now available for use!"
|
|
|
|
# display hauler docs message
|
|
verbose "- Documentation: https://hauler.dev" && echo
|