mirror of https://github.com/k3d-io/k3d
parent
68c38a104f
commit
845339e9da
@ -0,0 +1,187 @@ |
|||||||
|
#!/usr/bin/env bash |
||||||
|
|
||||||
|
APP_NAME="k3d" |
||||||
|
REPO_URL="https://github.com/iwilltry42/k3d-go" |
||||||
|
|
||||||
|
: ${USE_SUDO:="true"} |
||||||
|
: ${K3D_INSTALL_DIR:="/usr/local/bin"} |
||||||
|
|
||||||
|
# initArch discovers the architecture for this system. |
||||||
|
initArch() { |
||||||
|
ARCH=$(uname -m) |
||||||
|
case $ARCH in |
||||||
|
armv5*) ARCH="armv5";; |
||||||
|
armv6*) ARCH="armv6";; |
||||||
|
armv7*) ARCH="arm";; |
||||||
|
aarch64) ARCH="arm64";; |
||||||
|
x86) ARCH="386";; |
||||||
|
x86_64) ARCH="amd64";; |
||||||
|
i686) ARCH="386";; |
||||||
|
i386) ARCH="386";; |
||||||
|
esac |
||||||
|
} |
||||||
|
|
||||||
|
# initOS discovers the operating system for this system. |
||||||
|
initOS() { |
||||||
|
OS=$(echo `uname`|tr '[:upper:]' '[:lower:]') |
||||||
|
|
||||||
|
case "$OS" in |
||||||
|
# Minimalist GNU for Windows |
||||||
|
mingw*) OS='windows';; |
||||||
|
esac |
||||||
|
} |
||||||
|
|
||||||
|
# runs the given command as root (detects if we are root already) |
||||||
|
runAsRoot() { |
||||||
|
local CMD="$*" |
||||||
|
|
||||||
|
if [ $EUID -ne 0 -a $USE_SUDO = "true" ]; then |
||||||
|
CMD="sudo $CMD" |
||||||
|
fi |
||||||
|
|
||||||
|
$CMD |
||||||
|
} |
||||||
|
|
||||||
|
# verifySupported checks that the os/arch combination is supported for |
||||||
|
# binary builds. |
||||||
|
verifySupported() { |
||||||
|
local supported="darwin-386\ndarwin-amd64\nlinux-386\nlinux-amd64\nlinux-arm\nlinux-arm64\nwindows-386\nwindows-amd64" |
||||||
|
if ! echo "${supported}" | grep -q "${OS}-${ARCH}"; then |
||||||
|
echo "No prebuilt binary for ${OS}-${ARCH}." |
||||||
|
echo "To build from source, go to $REPO_URL" |
||||||
|
exit 1 |
||||||
|
fi |
||||||
|
|
||||||
|
if ! type "curl" > /dev/null && ! type "wget" > /dev/null; then |
||||||
|
echo "Either curl or wget is required" |
||||||
|
exit 1 |
||||||
|
fi |
||||||
|
} |
||||||
|
|
||||||
|
# checkK3dInstalledVersion checks which version of k3d is installed and |
||||||
|
# if it needs to be changed. |
||||||
|
checkK3dInstalledVersion() { |
||||||
|
if [[ -f "${K3D_INSTALL_DIR}/${APP_NAME}" ]]; then |
||||||
|
local version=$(k3d --version | cut -d " " -f3) |
||||||
|
if [[ "$version" == "$TAG" ]]; then |
||||||
|
echo "k3d ${version} is already ${DESIRED_VERSION:-latest}" |
||||||
|
return 0 |
||||||
|
else |
||||||
|
echo "k3d ${TAG} is available. Changing from version ${version}." |
||||||
|
return 1 |
||||||
|
fi |
||||||
|
else |
||||||
|
return 1 |
||||||
|
fi |
||||||
|
} |
||||||
|
|
||||||
|
# checkLatestVersion grabs the latest version string from the releases |
||||||
|
checkLatestVersion() { |
||||||
|
local latest_release_url="$REPO_URL/releases/latest" |
||||||
|
if type "curl" > /dev/null; then |
||||||
|
TAG=$(curl -Ls -o /dev/null -w %{url_effective} $latest_release_url | grep -oE "[^/]+$" ) |
||||||
|
elif type "wget" > /dev/null; then |
||||||
|
TAG=$(wget $latest_release_url --server-response -O /dev/null 2>&1 | awk '/^ Location: /{DEST=$2} END{ print DEST}' | grep -oE "[^/]+$") |
||||||
|
fi |
||||||
|
} |
||||||
|
|
||||||
|
# downloadFile downloads the latest binary package and also the checksum |
||||||
|
# for that binary. |
||||||
|
downloadFile() { |
||||||
|
K3D_DIST="k3d-$OS-$ARCH" |
||||||
|
DOWNLOAD_URL="$REPO_URL/releases/download/$TAG/$K3D_DIST" |
||||||
|
K3D_TMP_ROOT="$(mktemp -dt k3d-binary-XXXXXX)" |
||||||
|
K3D_TMP_FILE="$K3D_TMP_ROOT/$K3D_DIST" |
||||||
|
if type "curl" > /dev/null; then |
||||||
|
curl -SsL "$DOWNLOAD_URL" -o "$K3D_TMP_FILE" |
||||||
|
elif type "wget" > /dev/null; then |
||||||
|
wget -q -O "$K3D_TMP_FILE" "$DOWNLOAD_URL" |
||||||
|
fi |
||||||
|
} |
||||||
|
|
||||||
|
# installFile verifies the SHA256 for the file, then unpacks and |
||||||
|
# installs it. |
||||||
|
installFile() { |
||||||
|
echo "Preparing to install $APP_NAME into ${K3D_INSTALL_DIR}" |
||||||
|
runAsRoot chmod +x "$K3D_TMP_FILE" |
||||||
|
runAsRoot cp "$K3D_TMP_FILE" "$K3D_INSTALL_DIR/$APP_NAME" |
||||||
|
echo "$APP_NAME installed into $K3D_INSTALL_DIR/$APP_NAME" |
||||||
|
} |
||||||
|
|
||||||
|
# fail_trap is executed if an error occurs. |
||||||
|
fail_trap() { |
||||||
|
result=$? |
||||||
|
if [ "$result" != "0" ]; then |
||||||
|
if [[ -n "$INPUT_ARGUMENTS" ]]; then |
||||||
|
echo "Failed to install $APP_NAME with the arguments provided: $INPUT_ARGUMENTS" |
||||||
|
help |
||||||
|
else |
||||||
|
echo "Failed to install $APP_NAME" |
||||||
|
fi |
||||||
|
echo -e "\tFor support, go to $REPO_URL." |
||||||
|
fi |
||||||
|
cleanup |
||||||
|
exit $result |
||||||
|
} |
||||||
|
|
||||||
|
# testVersion tests the installed client to make sure it is working. |
||||||
|
testVersion() { |
||||||
|
set +e |
||||||
|
K3D="$(which $APP_NAME)" |
||||||
|
if [ "$?" = "1" ]; then |
||||||
|
echo "$APP_NAME not found. Is $K3D_INSTALL_DIR on your "'$PATH?' |
||||||
|
exit 1 |
||||||
|
fi |
||||||
|
set -e |
||||||
|
echo "Run '$APP_NAME --help' to see what you can do with it." |
||||||
|
} |
||||||
|
|
||||||
|
# help provides possible cli installation arguments |
||||||
|
help () { |
||||||
|
echo "Accepted cli arguments are:" |
||||||
|
echo -e "\t[--help|-h ] ->> prints this help" |
||||||
|
echo -e "\t[--no-sudo] ->> install without sudo" |
||||||
|
} |
||||||
|
|
||||||
|
# cleanup temporary files |
||||||
|
cleanup() { |
||||||
|
if [[ -d "${K3D_TMP_ROOT:-}" ]]; then |
||||||
|
rm -rf "$K3D_TMP_ROOT" |
||||||
|
fi |
||||||
|
} |
||||||
|
|
||||||
|
# Execution |
||||||
|
|
||||||
|
#Stop execution on any error |
||||||
|
trap "fail_trap" EXIT |
||||||
|
set -e |
||||||
|
|
||||||
|
# Parsing input arguments (if any) |
||||||
|
export INPUT_ARGUMENTS="${@}" |
||||||
|
set -u |
||||||
|
while [[ $# -gt 0 ]]; do |
||||||
|
case $1 in |
||||||
|
'--no-sudo') |
||||||
|
USE_SUDO="false" |
||||||
|
;; |
||||||
|
'--help'|-h) |
||||||
|
help |
||||||
|
exit 0 |
||||||
|
;; |
||||||
|
*) exit 1 |
||||||
|
;; |
||||||
|
esac |
||||||
|
shift |
||||||
|
done |
||||||
|
set +u |
||||||
|
|
||||||
|
initArch |
||||||
|
initOS |
||||||
|
verifySupported |
||||||
|
checkLatestVersion |
||||||
|
if ! checkK3dInstalledVersion; then |
||||||
|
downloadFile |
||||||
|
installFile |
||||||
|
fi |
||||||
|
testVersion |
||||||
|
cleanup |
Loading…
Reference in new issue