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" "$@"