| #!/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 |