| #!/bin/bash |
| |
| set -e |
| |
| echo "Checking requirements..." |
| |
| SUDO= |
| if which sudo &>/dev/null; then |
| SUDO=sudo |
| fi |
| |
| function get_linux_platform { |
| if [ -f /etc/redhat-release ]; then |
| # For CentOS or redhat, we treat all as CentOS. |
| echo "CentOS" |
| elif [ -f /etc/lsb-release ]; then |
| DIST=`cat /etc/lsb-release | grep '^DISTRIB_ID' | awk -F= '{ print $2 }'` |
| echo "$DIST" |
| else |
| echo "Unknown" |
| fi |
| } |
| |
| function install_go { |
| echo "Intall go ..." |
| case "$OSTYPE" in |
| linux*) |
| curl -L https://storage.googleapis.com/golang/go1.12.7.linux-amd64.tar.gz -o golang.tar.gz |
| ;; |
| |
| darwin*) |
| curl -L https://storage.googleapis.com/golang/go1.12.7.darwin-amd64.tar.gz -o golang.tar.gz |
| ;; |
| |
| *) |
| echo "unsupported $OSTYPE" |
| exit 1 |
| ;; |
| esac |
| ${SUDO} tar -C /usr/local -xzf golang.tar.gz |
| rm golang.tar.gz |
| echo 'export PATH=$PATH:/usr/local/go/bin' >> $HOME/.profile |
| } |
| |
| function install_gpp { |
| echo "Install g++ ..." |
| case "$OSTYPE" in |
| linux*) |
| dist=$(get_linux_platform) |
| case $dist in |
| Ubuntu) |
| ${SUDO} apt-get install -y g++ |
| ;; |
| CentOS) |
| ${SUDO} yum install -y gcc-c++ libstdc++-static |
| ;; |
| *) |
| echo "unsupported platform $dist, you may install g++ manually" |
| exit 1 |
| ;; |
| esac |
| ;; |
| |
| darwin*) |
| # refer to https://github.com/facebook/rocksdb/blob/master/INSTALL.md |
| xcode-select --install |
| brew update |
| brew tap homebrew/versions |
| brew install gcc48 --use-llvm |
| ;; |
| |
| *) |
| echo "unsupported $OSTYPE" |
| exit 1 |
| ;; |
| esac |
| } |
| |
| # Check rust |
| if which rustc &>/dev/null; then |
| if ! rustc --version | grep nightly &>/dev/null; then |
| printf "Please run following command to upgrade Rust to nightly: \n\ |
| \t rustup install nightly\n\ |
| \t rustup default nightly\n" |
| exit 1 |
| fi |
| else |
| echo "Install Rust ..." |
| ${SUDO} curl https://sh.rustup.rs -sSf | sh |
| ${SUDO} rustup install nightly |
| ${SUDO} rustup default nightly |
| fi |
| |
| # Check go |
| if which go &>/dev/null; then |
| # requires go >= 1.8 |
| GO_VER_1=`go version | awk 'match($0, /([0-9])+(\.[0-9]+)+/) { ver = substr($0, RSTART, RLENGTH); split(ver, n, "."); print n[1];}'` |
| GO_VER_2=`go version | awk 'match($0, /([0-9])+(\.[0-9]+)+/) { ver = substr($0, RSTART, RLENGTH); split(ver, n, "."); print n[2];}'` |
| if [[ (($GO_VER_1 -eq 1 && $GO_VER_2 -lt 10)) || (($GO_VER_1 -lt 1)) ]]; then |
| echo "Please upgrade Go to 1.10 or later." |
| exit 1 |
| fi |
| else |
| install_go |
| fi |
| |
| # Check g++ |
| if which g++ &>/dev/null; then |
| # Check g++ version, RocksDB requires g++ 4.8 or later. |
| G_VER_1=`g++ -dumpversion | awk '{split($0, n, "."); print n[1];}'` |
| G_VER_2=`g++ -dumpversion | awk '{split($0, n, "."); print n[2];}'` |
| if [[ (($G_VER_1 -eq 4 && $G_VER_2 -lt 8)) || (($G_VER_1 -lt 4)) ]]; then |
| echo "Please upgrade g++ to 4.8 or later." |
| exit 1 |
| fi |
| else |
| install_gpp |
| fi |
| |
| echo -e "Run this command:\n\n\tsource $HOME/.profile\n\nor just open a new terminal window to update environment variables" |
| |
| echo OK |