github.com/dolthub/dolt/go@v0.40.5-0.20240520175717-68db7794bea6/utils/publishrelease/install.sh (about) 1 #!/bin/bash 2 3 # This script installs dolt on your Linux or macOS computer. 4 # It should be run as root, and can be run directly from a GitHub 5 # release, for example as: 6 # 7 # curl https://github.com/dolthub/dolt/releases/download/v__DOLT_VERSION__/install.sh | sudo bash 8 # 9 # All downloads occur over HTTPS from the Github releases page. 10 11 if test -z "$BASH_VERSION"; then 12 echo "Please run this script using bash, not sh or any other shell." >&2 13 exit 1 14 fi 15 16 _() { 17 18 set -euo pipefail 19 20 DOLT_VERSION=__DOLT_VERSION__ 21 RELEASES_BASE_URL=https://github.com/dolthub/dolt/releases/download/v"$DOLT_VERSION" 22 INSTALL_URL=$RELEASES_BASE_URL/install.sh 23 24 CURL_USER_AGENT=${CURL_USER_AGENT:-dolt-installer} 25 26 OS= 27 ARCH= 28 WORK_DIR= 29 30 PLATFORM_TUPLE= 31 32 error() { 33 if [ $# != 0 ]; then 34 echo -e "\e[0;31m""$@""\e[0m" >&2 35 fi 36 } 37 38 fail() { 39 local error_code="$1" 40 shift 41 echo "*** INSTALLATION FAILED ***" >&2 42 echo "" >&2 43 error "$@" 44 echo "" >&2 45 exit 1 46 } 47 48 assert_linux_or_macos() { 49 OS=`uname` 50 ARCH=`uname -m` 51 if [ "$OS" != Linux -a "$OS" != Darwin ]; then 52 fail "E_UNSUPPORTED_OS" "dolt install.sh only supports macOS and Linux." 53 fi 54 55 # Translate aarch64 to arm64, since that's what GOARCH calls it 56 if [ "$ARCH" == "aarch64" ]; then 57 ARCH="arm64" 58 fi 59 60 if [ "$ARCH-$OS" != "x86_64-Linux" -a "$ARCH-$OS" != "x86_64-Darwin" -a "$ARCH-$OS" != "arm64-Darwin" -a "$ARCH-$OS" != "arm64-Linux" ]; then 61 fail "E_UNSUPPOSED_ARCH" "dolt install.sh only supports installing dolt on x86_64, x86, Linux-aarch64, or Darwin-arm64." 62 fi 63 64 if [ "$OS" == Linux ]; then 65 PLATFORM_TUPLE=linux 66 else 67 PLATFORM_TUPLE=darwin 68 fi 69 if [ "$ARCH" == x86_64 ]; then 70 PLATFORM_TUPLE=$PLATFORM_TUPLE-amd64 71 elif [ "$ARCH" == arm64 ]; then 72 PLATFORM_TUPLE=$PLATFORM_TUPLE-arm64 73 fi 74 } 75 76 assert_dependencies() { 77 type -p curl > /dev/null || fail "E_CURL_MISSING" "Please install curl(1)." 78 type -p tar > /dev/null || fail "E_TAR_MISSING" "Please install tar(1)." 79 type -p uname > /dev/null || fail "E_UNAME_MISSING" "Please install uname(1)." 80 type -p install > /dev/null || fail "E_INSTALL_MISSING" "Please install install(1)." 81 type -p mktemp > /dev/null || fail "E_MKTEMP_MISSING" "Please install mktemp(1)." 82 } 83 84 assert_uid_zero() { 85 uid=`id -u` 86 if [ "$uid" != 0 ]; then 87 fail "E_UID_NONZERO" "dolt install.sh must run as root; please try running with sudo or running\n\`curl $INSTALL_URL | sudo bash\`." 88 fi 89 } 90 91 create_workdir() { 92 WORK_DIR=`mktemp -d -t dolt-installer.XXXXXX` 93 cleanup() { 94 rm -rf "$WORK_DIR" 95 } 96 trap cleanup EXIT 97 cd "$WORK_DIR" 98 } 99 100 install_binary_release() { 101 local FILE=dolt-$PLATFORM_TUPLE.tar.gz 102 local URL=$RELEASES_BASE_URL/$FILE 103 echo "Downloading:" $URL 104 curl -A "$CURL_USER_AGENT" -fsL "$URL" > "$FILE" 105 tar zxf "$FILE" 106 echo "Installing dolt /usr/local/bin." 107 [ -d /usr/local/bin ] || install -o 0 -g 0 -d /usr/local/bin 108 install -o 0 -g 0 dolt-$PLATFORM_TUPLE/bin/dolt /usr/local/bin 109 install -o 0 -g 0 -d /usr/local/share/doc/dolt/ 110 install -o 0 -g 0 -m 644 dolt-$PLATFORM_TUPLE/LICENSES /usr/local/share/doc/dolt/ 111 } 112 113 assert_linux_or_macos 114 assert_dependencies 115 assert_uid_zero 116 create_workdir 117 install_binary_release 118 119 } 120 121 _ "$0" "$@"