Add installation dependencies script.
This commit is contained in:
		
							parent
							
								
									e36c22e0b0
								
							
						
					
					
						commit
						77794bc4b3
					
				
							
								
								
									
										466
									
								
								install-deps.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										466
									
								
								install-deps.sh
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,466 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
function run_installer()
 | 
			
		||||
{
 | 
			
		||||
	####### Init vars
 | 
			
		||||
 | 
			
		||||
	HOMEBREW_PREFIX=/usr/local
 | 
			
		||||
	HOMEBREW_CACHE=/Library/Caches/Homebrew
 | 
			
		||||
	HOMEBREW_REPO=https://github.com/Homebrew/homebrew
 | 
			
		||||
	OSX_REQUIERED_VERSION="10.7.0"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	declare OS_TYPE
 | 
			
		||||
	declare OSX_VERSION
 | 
			
		||||
	declare GIT_PATH
 | 
			
		||||
	declare RUBY_PATH
 | 
			
		||||
	declare BREW_PATH
 | 
			
		||||
	declare INSTALL_FILES=""
 | 
			
		||||
 | 
			
		||||
	errorMessages=""
 | 
			
		||||
	isOsVersion=false
 | 
			
		||||
	isGit=false
 | 
			
		||||
	isRuby=false
 | 
			
		||||
	isBrew=false
 | 
			
		||||
	canContinue=true
 | 
			
		||||
	depCount=0
 | 
			
		||||
	depFound=0
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	####### Setup colors
 | 
			
		||||
 | 
			
		||||
	red=`tput setaf 1`
 | 
			
		||||
	green=`tput setaf 2`
 | 
			
		||||
	yellow=`tput setaf 3`
 | 
			
		||||
	blue=`tput setaf 4`
 | 
			
		||||
	magenta=`tput setaf 5`
 | 
			
		||||
	cyan=`tput setaf 6`
 | 
			
		||||
	white=`tput setaf 7`
 | 
			
		||||
	b=`tput bold`
 | 
			
		||||
	u=`tput sgr 0 1`
 | 
			
		||||
	ul=`tput smul`
 | 
			
		||||
	xl=`tput rmul`
 | 
			
		||||
	stou=`tput smso`
 | 
			
		||||
	xtou=`tput rmso`
 | 
			
		||||
	dim=`tput dim`
 | 
			
		||||
	reverse=`tput rev`
 | 
			
		||||
	reset=`tput sgr0`
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	function head() {
 | 
			
		||||
		echo "${blue}${b}==>${white} $1${reset}"
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function info() {
 | 
			
		||||
		echo "${blue}${b}==>${reset} $1"
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function successHeading() {
 | 
			
		||||
		echo "${green}${b}==> $1${reset}"
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function success() {
 | 
			
		||||
		echo "${green}${b}==>${reset}${green} $1${reset}"
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function error() {
 | 
			
		||||
		echo "${red}==> ${u}${b}${red}$1${reset}"
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function smallError() {
 | 
			
		||||
		echo "${red}==>${reset} $1"
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function green() {
 | 
			
		||||
		echo "${green}$1${reset}"
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function red() {
 | 
			
		||||
		echo "${red}$1${reset}"
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function check() {
 | 
			
		||||
		echo "${green}${bold} ✓${reset}  $1${reset}"
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function uncheck() {
 | 
			
		||||
		echo "${red}${bold} ✘${reset}  $1${reset}"
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	####### Setup methods
 | 
			
		||||
 | 
			
		||||
	function wait_for_user() {
 | 
			
		||||
		while :
 | 
			
		||||
		do
 | 
			
		||||
			read -p "${blue}==>${reset} $1 [Y/n] " imp
 | 
			
		||||
			case $imp in
 | 
			
		||||
				[yY] ) echo; break ;;
 | 
			
		||||
				'' ) echo; break ;;
 | 
			
		||||
				[nN] ) abortInstall "${red}==>${reset} Process stopped by user. To resume the install run the one-liner command again." ;;
 | 
			
		||||
				* ) echo "Unrecognized option provided. Please provide either 'Y' or 'N'";
 | 
			
		||||
			esac
 | 
			
		||||
		done
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	function exe() {
 | 
			
		||||
		echo "\$ $@"; "$@"
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function detectOS() {
 | 
			
		||||
		if [[ "$OSTYPE" == "linux-gnu" ]]
 | 
			
		||||
		then
 | 
			
		||||
			OS_TYPE="linux"
 | 
			
		||||
			get_linux_dependencies
 | 
			
		||||
		elif [[ "$OSTYPE" == "darwin"* ]]
 | 
			
		||||
		then
 | 
			
		||||
			OS_TYPE="osx"
 | 
			
		||||
			get_osx_dependencies
 | 
			
		||||
		else
 | 
			
		||||
			OS_TYPE="win"
 | 
			
		||||
			abortInstall "${red}==>${reset} ${b}OS not supported:${reset} parity one-liner currently support OS X and Linux.\nFor instructions on installing parity on other platforms please visit ${u}${blue}http://ethcore.io/${reset}"
 | 
			
		||||
		fi
 | 
			
		||||
 | 
			
		||||
		echo
 | 
			
		||||
 | 
			
		||||
		if [[ $depCount == $depFound ]]
 | 
			
		||||
		then
 | 
			
		||||
			green "Found all dependencies ($depFound/$depCount)"
 | 
			
		||||
		else
 | 
			
		||||
			if [[ $canContinue == true ]]
 | 
			
		||||
			then
 | 
			
		||||
				red "Some dependencies are missing ($depFound/$depCount)"
 | 
			
		||||
			elif [[ $canContinue == false && $depFound == 0 ]]
 | 
			
		||||
			then
 | 
			
		||||
				red "All dependencies are missing and cannot be auto-installed ($depFound/$depCount)"
 | 
			
		||||
				abortInstall "$errorMessages";
 | 
			
		||||
			elif [[ $canContinue == false ]]
 | 
			
		||||
			then
 | 
			
		||||
				red "Some dependencies which cannot be auto-installed are missing ($depFound/$depCount)"
 | 
			
		||||
				abortInstall "$errorMessages";
 | 
			
		||||
			fi
 | 
			
		||||
		fi
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function get_osx_dependencies()
 | 
			
		||||
	{
 | 
			
		||||
		macos_version
 | 
			
		||||
		find_git
 | 
			
		||||
		find_ruby
 | 
			
		||||
		find_brew
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function macos_version()
 | 
			
		||||
	{
 | 
			
		||||
		declare -a reqVersion
 | 
			
		||||
		declare -a localVersion
 | 
			
		||||
 | 
			
		||||
		depCount=$((depCount+1))
 | 
			
		||||
		OSX_VERSION=`/usr/bin/sw_vers -productVersion 2>/dev/null`
 | 
			
		||||
 | 
			
		||||
		if [ -z "$OSX_VERSION" ]
 | 
			
		||||
		then
 | 
			
		||||
			uncheck "OS X version not supported 🔥"
 | 
			
		||||
			isOsVersion=false
 | 
			
		||||
			canContinue=false
 | 
			
		||||
		else
 | 
			
		||||
			IFS='.' read -a localVersion <<< "$OSX_VERSION"
 | 
			
		||||
			IFS='.' read -a reqVersion <<< "$OSX_REQUIERED_VERSION"
 | 
			
		||||
 | 
			
		||||
			if (( ${reqVersion[0]} <= ${localVersion[0]} )) && (( ${reqVersion[1]} <= ${localVersion[1]} ))
 | 
			
		||||
			then
 | 
			
		||||
				check "OS X Version ${OSX_VERSION}"
 | 
			
		||||
				isOsVersion=true
 | 
			
		||||
				depFound=$((depFound+1))
 | 
			
		||||
				return
 | 
			
		||||
			else
 | 
			
		||||
				uncheck "OS X version not supported"
 | 
			
		||||
				isOsVersion=false
 | 
			
		||||
				canContinue=false
 | 
			
		||||
			fi
 | 
			
		||||
		fi
 | 
			
		||||
 | 
			
		||||
		errorMessages+="${red}==>${reset} ${b}Mac OS version too old:${reset} eth requires OS X version ${red}$OSX_REQUIERED_VERSION${reset} at least in order to run.\n"
 | 
			
		||||
		errorMessages+="    Please update the OS and reload the install process.\n"
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function find_eth()
 | 
			
		||||
	{
 | 
			
		||||
		ETH_PATH=`which eth 2>/dev/null`
 | 
			
		||||
 | 
			
		||||
		if [[ -f $ETH_PATH ]]
 | 
			
		||||
		then
 | 
			
		||||
			check "Found eth: $ETH_PATH"
 | 
			
		||||
			echo "$($ETH_PATH -V)"
 | 
			
		||||
			isEth=true
 | 
			
		||||
		else
 | 
			
		||||
			uncheck "Eth is missing"
 | 
			
		||||
			isEth=false
 | 
			
		||||
		fi
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function find_git()
 | 
			
		||||
	{
 | 
			
		||||
		depCount=$((depCount+1))
 | 
			
		||||
 | 
			
		||||
		GIT_PATH=`which git 2>/dev/null`
 | 
			
		||||
 | 
			
		||||
		if [[ -f $GIT_PATH ]]
 | 
			
		||||
		then
 | 
			
		||||
			check "$($GIT_PATH --version)"
 | 
			
		||||
			isGit=true
 | 
			
		||||
			depFound=$((depFound+1))
 | 
			
		||||
		else
 | 
			
		||||
			uncheck "Git is missing"
 | 
			
		||||
			isGit=false
 | 
			
		||||
		fi
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function find_ruby()
 | 
			
		||||
	{
 | 
			
		||||
		depCount=$((depCount+1))
 | 
			
		||||
 | 
			
		||||
		RUBY_PATH=`which ruby 2>/dev/null`
 | 
			
		||||
 | 
			
		||||
		if [[ -f $RUBY_PATH ]]
 | 
			
		||||
		then
 | 
			
		||||
			RUBY_VERSION=`ruby -e "print RUBY_VERSION"`
 | 
			
		||||
			check "Ruby ${RUBY_VERSION}"
 | 
			
		||||
			isRuby=true
 | 
			
		||||
			depFound=$((depFound+1))
 | 
			
		||||
		else
 | 
			
		||||
			uncheck "Ruby is missing 🔥"
 | 
			
		||||
			isRuby=false
 | 
			
		||||
			canContinue=false
 | 
			
		||||
			errorMessages+="${red}==>${reset} ${b}Couldn't find Ruby:${reset} Brew requires Ruby which could not be found.\n"
 | 
			
		||||
			errorMessages+="    Please install Ruby using these instructions ${u}${blue}https://www.ruby-lang.org/en/documentation/installation/${reset}.\n"
 | 
			
		||||
		fi
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function find_brew()
 | 
			
		||||
	{
 | 
			
		||||
		BREW_PATH=`which brew 2>/dev/null`
 | 
			
		||||
 | 
			
		||||
		if [[ -f $BREW_PATH ]]
 | 
			
		||||
		then
 | 
			
		||||
			check "$($BREW_PATH -v)"
 | 
			
		||||
			isBrew=true
 | 
			
		||||
			depFound=$((depFound+1))
 | 
			
		||||
		else
 | 
			
		||||
			uncheck "Homebrew is missing"
 | 
			
		||||
			isBrew=false
 | 
			
		||||
 | 
			
		||||
			INSTALL_FILES+="${blue}${dim}==> Homebrew:${reset}\n"
 | 
			
		||||
			INSTALL_FILES+=" ${blue}${dim}➜${reset}  $HOMEBREW_PREFIX/bin/brew\n"
 | 
			
		||||
			INSTALL_FILES+=" ${blue}${dim}➜${reset}  $HOMEBREW_PREFIX/Library\n"
 | 
			
		||||
			INSTALL_FILES+=" ${blue}${dim}➜${reset}  $HOMEBREW_PREFIX/share/man/man1/brew.1\n"
 | 
			
		||||
		fi
 | 
			
		||||
 | 
			
		||||
		depCount=$((depCount+1))
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function install_brew()
 | 
			
		||||
	{
 | 
			
		||||
		if [[ $isBrew == false ]]
 | 
			
		||||
		then
 | 
			
		||||
			head "Installing Homebrew"
 | 
			
		||||
 | 
			
		||||
			if [[ $isRuby == true ]]
 | 
			
		||||
			then
 | 
			
		||||
				ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
 | 
			
		||||
			else
 | 
			
		||||
				cd /usr
 | 
			
		||||
 | 
			
		||||
				if [[ ! -d $HOMEBREW_PREFIX ]]
 | 
			
		||||
				then
 | 
			
		||||
					sudo mkdir $HOMEBREW_PREFIX
 | 
			
		||||
					sudo chmod g+rwx $HOMEBREW_PREFIX
 | 
			
		||||
				fi
 | 
			
		||||
 | 
			
		||||
				if [[ ! -d $HOMEBREW_CACHE ]]
 | 
			
		||||
				then
 | 
			
		||||
					sudo mkdir $HOMEBREW_CACHE
 | 
			
		||||
					sudo chmod g+rwx $HOMEBREW_CACHE
 | 
			
		||||
				fi
 | 
			
		||||
 | 
			
		||||
				DEVELOPER_DIR=`/usr/bin/xcode-select -print-path 2>/dev/null`
 | 
			
		||||
 | 
			
		||||
				if [[ ! $(ls -A $DEVELOPER_DIR) || ! -f $DEVELOPER_DIR/usr/bin/git ]]
 | 
			
		||||
				then
 | 
			
		||||
					info "Installing the Command Line Tools (expect a GUI popup):"
 | 
			
		||||
					sudo /usr/bin/xcode-select --install
 | 
			
		||||
 | 
			
		||||
					echo "Press any key when the installation has completed"
 | 
			
		||||
				fi
 | 
			
		||||
 | 
			
		||||
				cd $HOMEBREW_PREFIX
 | 
			
		||||
 | 
			
		||||
				bash -o pipefail -c "curl -fsSL ${HOMEBREW_REPO}/tarball/master | tar xz -m --strip 1"
 | 
			
		||||
			fi
 | 
			
		||||
 | 
			
		||||
			find_brew
 | 
			
		||||
			echo
 | 
			
		||||
 | 
			
		||||
			if [[ $isBrew == false ]]
 | 
			
		||||
			then
 | 
			
		||||
				abortInstall "Couldn't install brew"
 | 
			
		||||
			fi
 | 
			
		||||
		fi
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function osx_installer()
 | 
			
		||||
	{
 | 
			
		||||
		osx_dependency_installer
 | 
			
		||||
 | 
			
		||||
		info "Updating brew"
 | 
			
		||||
		exe brew update
 | 
			
		||||
		echo
 | 
			
		||||
 | 
			
		||||
		info "Installing rocksdb"
 | 
			
		||||
		exe brew install rocksdb
 | 
			
		||||
		info "Installing multirust"
 | 
			
		||||
		exe brew install multirust
 | 
			
		||||
		sudo multirust update nightly
 | 
			
		||||
		sudo multirust default nightly
 | 
			
		||||
		echo
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function osx_dependency_installer()
 | 
			
		||||
	{
 | 
			
		||||
		if [[ $isGit == false ]];
 | 
			
		||||
		then
 | 
			
		||||
			echo "Installing Git"
 | 
			
		||||
		fi
 | 
			
		||||
 | 
			
		||||
		if [[ $isRuby == false ]];
 | 
			
		||||
		then
 | 
			
		||||
			echo "Installing Ruby"
 | 
			
		||||
		fi
 | 
			
		||||
 | 
			
		||||
		if [[ $isBrew == false ]];
 | 
			
		||||
		then
 | 
			
		||||
			install_brew
 | 
			
		||||
		fi
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function get_linux_dependencies()
 | 
			
		||||
	{
 | 
			
		||||
		find_apt
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function find_apt()
 | 
			
		||||
	{
 | 
			
		||||
		APT_PATH=`which apt-get 2>/dev/null`
 | 
			
		||||
 | 
			
		||||
		if [[ -f $APT_PATH ]]
 | 
			
		||||
		then
 | 
			
		||||
			check "apt-get"
 | 
			
		||||
			echo "$($APT_PATH -v)"
 | 
			
		||||
			isApt=true
 | 
			
		||||
		else
 | 
			
		||||
			uncheck "apt-get is missing"
 | 
			
		||||
			isApt=false
 | 
			
		||||
		fi
 | 
			
		||||
	}
 | 
			
		||||
	function linux_rocksdb_installer()
 | 
			
		||||
	{
 | 
			
		||||
		oldpwd=`pwd`
 | 
			
		||||
		cd /tmp
 | 
			
		||||
		exe git clone --branch v4.1 --depth=1 https://github.com/facebook/rocksdb.git
 | 
			
		||||
		cd rocksdb
 | 
			
		||||
		exe make shared_lib
 | 
			
		||||
		sudo cp -a librocksdb.so* /usr/lib
 | 
			
		||||
		sudo ldconfig
 | 
			
		||||
		cd /tmp
 | 
			
		||||
		rm -rf /tmp/rocksdb
 | 
			
		||||
		cd $oldpwd
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function linux_installer()
 | 
			
		||||
	{
 | 
			
		||||
		info "Installing git"
 | 
			
		||||
		sudo apt-get install -q -y git
 | 
			
		||||
		echo
 | 
			
		||||
 | 
			
		||||
		info "Installing rocksdb"
 | 
			
		||||
		linux_rocksdb_installer
 | 
			
		||||
		echo
 | 
			
		||||
 | 
			
		||||
		info "Installing multirust"
 | 
			
		||||
		curl -sf https://raw.githubusercontent.com/brson/multirust/master/blastoff.sh | sudo sh -s -- --yes
 | 
			
		||||
		sudo multirust update nightly
 | 
			
		||||
		sudo multirust default nightly
 | 
			
		||||
		echo
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function install()
 | 
			
		||||
	{
 | 
			
		||||
		echo
 | 
			
		||||
		head "Installing Parity build dependencies"
 | 
			
		||||
 | 
			
		||||
		if [[ $OS_TYPE == "osx" ]]
 | 
			
		||||
		then
 | 
			
		||||
			osx_installer
 | 
			
		||||
		elif [[ $OS_TYPE == "linux" ]]
 | 
			
		||||
		then
 | 
			
		||||
			linux_installer
 | 
			
		||||
		fi
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function verify_installation()
 | 
			
		||||
	{
 | 
			
		||||
		info "Verifying installation"
 | 
			
		||||
#		find_eth
 | 
			
		||||
 | 
			
		||||
#		if [[ $isEth == false ]]
 | 
			
		||||
#		then
 | 
			
		||||
#			abortInstall
 | 
			
		||||
#		fi
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function abortInstall()
 | 
			
		||||
	{
 | 
			
		||||
		echo
 | 
			
		||||
		error "Installation failed"
 | 
			
		||||
		echo -e "$1"
 | 
			
		||||
		echo
 | 
			
		||||
		exit 0
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function finish()
 | 
			
		||||
	{
 | 
			
		||||
#		echo
 | 
			
		||||
#		successHeading "Installation successful!"
 | 
			
		||||
#		head "Next steps"
 | 
			
		||||
#		info "Run ${cyan}\`\`${reset} to get started.${reset}"
 | 
			
		||||
#		echo
 | 
			
		||||
		exit 0
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	# Check dependencies
 | 
			
		||||
	head "Checking OS dependencies"
 | 
			
		||||
	detectOS
 | 
			
		||||
 | 
			
		||||
	echo
 | 
			
		||||
	head "In addition to the parity build dependencies, this script will install:"
 | 
			
		||||
	echo "$INSTALL_FILES"
 | 
			
		||||
	echo
 | 
			
		||||
 | 
			
		||||
	# Prompt user to continue or abort
 | 
			
		||||
	wait_for_user "${b}OK,${reset} let's go!"
 | 
			
		||||
 | 
			
		||||
	# Install dependencies and eth
 | 
			
		||||
	install
 | 
			
		||||
 | 
			
		||||
	# Check installation
 | 
			
		||||
	verify_installation
 | 
			
		||||
 | 
			
		||||
	# Display goodby message
 | 
			
		||||
	finish
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
run_installer
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user