github.com/hasnat/dolt/go@v0.0.0-20210628190320-9eb5d843fbb7/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 if [ "$ARCH" != x86_64 -a "$ARCH" != i386 -a "$ARCH" != i686 -a "$ARCH-$OS" != arm64-Darwin ]; then 55 fail "E_UNSUPPOSED_ARCH" "dolt install.sh only supports installing dolt on x86_64 or x86 or Darwin-arm64." 56 fi 57 58 if [ "$OS" == Linux ]; then 59 PLATFORM_TUPLE=linux 60 else 61 PLATFORM_TUPLE=darwin 62 fi 63 if [ "$ARCH" == x86_64 ]; then 64 PLATFORM_TUPLE=$PLATFORM_TUPLE-amd64 65 elif [ "$ARCH" == arm64 -a "$OS" == Darwin ]; then 66 PLATFORM_TUPLE=$PLATFORM_TUPLE-amd64 67 else 68 PLATFORM_TUPLE=$PLATFORM_TUPLE-386 69 fi 70 } 71 72 assert_dependencies() { 73 type -p curl > /dev/null || fail "E_CURL_MISSING" "Please install curl(1)." 74 type -p tar > /dev/null || fail "E_TAR_MISSING" "Please install tar(1)." 75 type -p uname > /dev/null || fail "E_UNAME_MISSING" "Please install uname(1)." 76 type -p install > /dev/null || fail "E_INSTALL_MISSING" "Please install install(1)." 77 type -p mktemp > /dev/null || fail "E_MKTEMP_MISSING" "Please install mktemp(1)." 78 } 79 80 assert_uid_zero() { 81 uid=`id -u` 82 if [ "$uid" != 0 ]; then 83 fail "E_UID_NONZERO" "dolt install.sh must run as root; please try running with sudo or running\n\`curl $INSTALL_URL | sudo bash\`." 84 fi 85 } 86 87 create_workdir() { 88 WORK_DIR=`mktemp -d -t dolt-installer.XXXXXX` 89 cleanup() { 90 rm -rf "$WORK_DIR" 91 } 92 trap cleanup EXIT 93 cd "$WORK_DIR" 94 } 95 96 install_binary_release() { 97 local FILE=dolt-$PLATFORM_TUPLE.tar.gz 98 local URL=$RELEASES_BASE_URL/$FILE 99 echo "Downloading:" $URL 100 curl -A "$CURL_USER_AGENT" -fsL "$URL" > "$FILE" 101 tar zxf "$FILE" 102 echo "Installing dolt, git-dolt and git-dolt-smudge to /usr/local/bin." 103 [ -d /usr/local/bin ] || install -o 0 -g 0 -d /usr/local/bin 104 install -o 0 -g 0 dolt-$PLATFORM_TUPLE/bin/{dolt,git-dolt,git-dolt-smudge} /usr/local/bin 105 install -o 0 -g 0 -d /usr/local/share/doc/dolt/ 106 install -o 0 -g 0 -m 644 dolt-$PLATFORM_TUPLE/LICENSES /usr/local/share/doc/dolt/ 107 } 108 109 assert_linux_or_macos 110 assert_dependencies 111 assert_uid_zero 112 create_workdir 113 install_binary_release 114 115 } 116 117 _ "$0" "$@"