working on 14

This commit is contained in:
Konstantin Kudryavtsev 2016-02-05 08:39:49 -05:00
parent c8a556c47c
commit 158d8530d2

View File

@ -2,322 +2,598 @@
GET_DEPS_URL=http://get-deps.ethcore.io GET_DEPS_URL=http://get-deps.ethcore.io
#PARITY_DEB_URL=https://github.com/ethcore/parity/releases/download/beta-0.9/parity_0.9.0-0_amd64.deb
PARITY_DEB_URL=https://github.com/jesuscript/scripts/raw/master/parity_0.9.0-0_amd64.deb
function run_installer() function run_installer()
{ {
####### Init vars ####### Init vars
declare OS_TYPE HOMEBREW_PREFIX=/usr/local
HOMEBREW_CACHE=/Library/Caches/Homebrew
HOMEBREW_REPO=https://github.com/Homebrew/homebrew
OSX_REQUIERED_VERSION="10.7.0"
####### Setup colors declare OS_TYPE
declare OSX_VERSION
declare GIT_PATH
declare RUBY_PATH
declare BREW_PATH
declare INSTALL_FILES=""
red=`tput setaf 1` errorMessages=""
green=`tput setaf 2` isOsVersion=false
yellow=`tput setaf 3` isGit=false
blue=`tput setaf 4` isRuby=false
magenta=`tput setaf 5` isBrew=false
cyan=`tput setaf 6` canContinue=true
white=`tput setaf 7` depCount=0
b=`tput bold` depFound=0
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() { ####### Setup colors
echo "${blue}${b}==>${white} $1${reset}"
}
function info() { red=`tput setaf 1`
echo "${blue}${b}==>${reset} $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 successHeading() {
echo "${green}${b}==> $1${reset}"
}
function success() { function head() {
echo "${green}${b}==>${reset}${green} $1${reset}" echo "${blue}${b}==>${white} $1${reset}"
} }
function error() { function info() {
echo "${red}==> ${u}${b}${red}$1${reset}" echo "${blue}${b}==>${reset} $1"
} }
function smallError() { function successHeading() {
echo "${red}==>${reset} $1" echo "${green}${b}==> $1${reset}"
} }
function green() { function success() {
echo "${green}$1${reset}" echo "${green}${b}==>${reset}${green} $1${reset}"
} }
function red() { function error() {
echo "${red}$1${reset}" echo "${red}==> ${u}${b}${red}$1${reset}"
} }
function check() { function smallError() {
echo "${green}${bold}${reset} $1${reset}" echo "${red}==>${reset} $1"
} }
function uncheck() { function green() {
echo "${red}${bold}${reset} $1${reset}" 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 ####### Setup methods
function wait_for_user() { function wait_for_user() {
while : while :
do do
read -p "${blue}==>${reset} $1 [Y/n] " imp read -p "${blue}==>${reset} $1 [Y/n] " imp
case $imp in case $imp in
[yY] ) return 0; break ;; [yY] ) return 0; break ;;
'' ) echo; break ;; '' ) echo; break ;;
[nN] ) return 1 ;; [nN] ) return 1 ;;
* ) echo "Unrecognized option provided. Please provide either 'Y' or 'N'"; * ) echo "Unrecognized option provided. Please provide either 'Y' or 'N'";
esac esac
done done
} }
function prompt_for_input() { function prompt_for_input() {
while : while :
do do
read -p "$1 " imp read -p "$1 " imp
echo $imp echo $imp
return return
done done
} }
function linux_version() function exe() {
{ echo "\$ $@"; "$@"
source /etc/lsb-release }
if [[ $DISTRIB_ID == "Ubuntu" ]]; then function detectOS() {
if [[ $DISTRIB_RELEASE == "14.04" ]]; then if [[ "$OSTYPE" == "linux-gnu" ]]
check "Ubuntu-14.04" then
isUbuntu1404=true OS_TYPE="linux"
else get_linux_dependencies
check "Ubuntu, but not 14.04" elif [[ "$OSTYPE" == "darwin"* ]]
isUbuntu1404=false then
fi OS_TYPE="osx"
else get_osx_dependencies
check "Ubuntu not found" else
isUbuntu1404=false OS_TYPE="win"
fi 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
function detectOS() { echo
if [[ "$OSTYPE" == "linux-gnu" ]]
then if [[ $depCount == $depFound ]]
OS_TYPE="linux" then
linux_version green "Found all dependencies ($depFound/$depCount)"
elif [[ "$OSTYPE" == "darwin"* ]] else
then if [[ $canContinue == true ]]
OS_TYPE="osx" then
else red "Some dependencies are missing ($depFound/$depCount)"
OS_TYPE="win" elif [[ $canContinue == false && $depFound == 0 ]]
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}" 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 linux_version()
{
source /etc/lsb-release
if [[ $DISTRIB_ID == "Ubuntu" ]]; then
if [[ $DISTRIB_RELEASE == "14.04" ]]; then
check "Ubuntu-14.04"
isUbuntu1404=true
else
check "Ubuntu, but not 14.04"
isUbuntu1404=false
fi
else
check "Ubuntu not found"
isUbuntu1404=false
fi
}
function get_linux_dependencies()
{
linux_version
find_multirust
find_rocksdb
find_curl
find_git
find_make
find_gcc
find_apt
}
function find_rocksdb()
{
depCount=$((depCount+1))
if [[ $(ldconfig -v 2>/dev/null | grep rocksdb | wc -l) == 1 ]]; then
depFound=$((depFound+1))
check "apt-get"
isRocksDB=true
else
uncheck "librocksdb is missing"
isRocksDB=false
INSTALL_FILES+="${blue}${dim}==>${reset}\tlibrocksdb\n"
fi
}
function find_multirust()
{
depCount=$((depCount+2))
MULTIRUST_PATH=`which multirust 2>/dev/null`
if [[ -f $MULTIRUST_PATH ]]; then
depFound=$((depFound+1))
check "multirust"
isMultirust=true
if [[ $(multirust show-default 2>/dev/null | grep nightly | wc -l) == 4 ]]; then
depFound=$((depFound+1))
check "rust nightly"
isMultirustNightly=true
else
uncheck "rust is not nightly"
isMultirustNightly=false
INSTALL_FILES+="${blue}${dim}==>${reset}\tmultirust -> rust nightly\n"
fi
else
uncheck "multirust is missing"
uncheck "rust nightly is missing"
isMultirust=false
isMultirustNightly=false
INSTALL_FILES+="${blue}${dim}==>${reset}\tmultirust\n"
fi
}
function find_apt()
{
depCount=$((depCount+1))
APT_PATH=`which apt-get 2>/dev/null`
if [[ -f $APT_PATH ]]
then
depFound=$((depFound+1))
check "apt-get"
isApt=true
else
uncheck "apt-get is missing"
isApt=false
if [[ $isGCC == false || $isGit == false || $isMake == false || $isCurl == false ]]; then
canContinue=false
errorMessages+="${red}==>${reset} ${b}Couldn't find apt-get:${reset} We can only use apt-get in order to grab our dependencies.\n"
errorMessages+=" Please switch to a distribution such as Debian or Ubuntu or manually install the missing packages.\n"
fi
fi
}
function find_gcc()
{
depCount=$((depCount+1))
GCC_PATH=`which g++ 2>/dev/null`
if [[ -f $GCC_PATH ]]
then
depFound=$((depFound+1))
check "g++"
isGCC=true
else
uncheck "g++ is missing"
isGCC=false
INSTALL_FILES+="${blue}${dim}==>${reset}\tg++\n"
fi
}
function find_git()
{
depCount=$((depCount+1))
GIT_PATH=`which git 2>/dev/null`
if [[ -f $GIT_PATH ]]
then
depFound=$((depFound+1))
check "git"
isGit=true
else
uncheck "git is missing"
isGit=false
INSTALL_FILES+="${blue}${dim}==>${reset}\tgit\n"
fi
}
function find_make()
{
depCount=$((depCount+1))
MAKE_PATH=`which make 2>/dev/null`
if [[ -f $MAKE_PATH ]]
then
depFound=$((depFound+1))
check "make"
isMake=true
else
uncheck "make is missing"
isMake=false
INSTALL_FILES+="${blue}${dim}==>${reset}\tmake\n"
fi
}
function find_curl()
{
depCount=$((depCount+1))
CURL_PATH=`which curl 2>/dev/null`
if [[ -f $CURL_PATH ]]
then
depFound=$((depFound+1))
check "curl"
isCurl=true
else
uncheck "curl is missing"
isCurl=false
INSTALL_FILES+="${blue}${dim}==>${reset}\tcurl\n"
fi
}
function ubuntu1404_rocksdb_installer()
{
sudo apt-get update -qq
sudo apt-get install -qq -y software-properties-common
sudo apt-add-repository -y ppa:giskou/librocksdb
sudo apt-get -f -y install
sudo apt-get update -qq
sudo apt-get install -qq -y librocksdb
}
function linux_rocksdb_installer()
{
if [[ $isUbuntu1404 == true ]]; then
ubuntu1404_rocksdb_installer
else
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
fi
}
function verify_installation()
{
ETH_PATH=`which parity 2>/dev/null`
if [[ -f $ETH_PATH ]]
then
success "Parity has been installed"
else
error "Parity is missing"
abortInstall
fi
}
function verify_dep_installation()
{
info "Verifying installation"
if [[ $OS_TYPE == "linux" ]]; then
find_curl
find_git
find_make
find_gcc
find_rocksdb
find_multirust
if [[ $isCurl == false || $isGit == false || $isMake == false || $isGCC == false || $isRocksDB == false || $isMultirustNightly == false ]]; then
abortInstall
fi
fi
}
function linux_deps_installer()
{
if [[ $isGCC == false || $isGit == false || $isMake == false || $isCurl == false ]]; then
info "Installing build dependencies..."
sudo apt-get update -qq
if [[ $isGit == false ]]; then
sudo apt-get install -q -y git
fi
if [[ $isGCC == false ]]; then
sudo apt-get install -q -y g++ gcc
fi
if [[ $isMake == false ]]; then
sudo apt-get install -q -y make
fi
if [[ $isCurl == false ]]; then
sudo apt-get install -q -y curl
fi
echo
fi
if [[ $isRocksDB == false ]]; then
info "Installing rocksdb..."
linux_rocksdb_installer
echo
fi
if [[ $isMultirust == false ]]; then
info "Installing multirust..."
curl -sf https://raw.githubusercontent.com/brson/multirust/master/blastoff.sh | sudo sh -s -- --yes
echo
fi
if [[ $isMultirustNightly == false ]]; then
info "Installing rust nightly..."
sudo multirust update nightly
sudo multirust default nightly
echo
fi fi
echo }
}
function find_eth() function linux_installer()
{ {
ETH_PATH=`which parity 2>/dev/null` linux_deps_installer
verify_dep_installation
if [[ -f $ETH_PATH ]]
then
check "Found parity: $ETH_PATH"
isEth=true
else
uncheck "parity is missing"
isEth=false
fi
}
function osx_installer()
{
info "Adding ethcore repository"
brew tap ethcore/ethcore https://github.com/ethcore/homebrew-ethcore.git
echo
info "Updating brew"
brew update
echo
info "Installing parity" info "Installing parity"
if [[ $isEth == true ]] file=/tmp/parity.deb
then
brew reinstall parity
else
brew install parity
brew linkapps parity
fi
echo
}
function build_parity() wget $PARITY_DEB_URL -qO $file
{ sudo dpkg -i $file
oldpwd= $(pwd) rm $file
info "Downloading Parity..." }
git clone git@github.com:ethcore/parity $HOME/parity
cd $HOME/parity
git submodule init
git submodule update
info "Building Parity..." function osx_installer()
cargo build --release {
info "Adding ethcore repository"
brew tap ethcore/ethcore https://github.com/ethcore/homebrew-ethcore.git
echo
sudo cp target/release/parity /usr/bin/ info "Updating brew"
brew update
echo
cd $oldpwd info "Installing parity"
if [[ $isEth == true ]]
then
brew reinstall parity
else
brew install parity
brew linkapps parity
fi
echo
}
echo function install()
info "Parity source code is in $(pwd)/parity" {
info "Run a client with: ${b}cargo run --release${reset} or just ${b}parity${reset}" echo
} head "Installing Parity build dependencies"
function linux_installer() if [[ $OS_TYPE == "osx" ]]
{ then
build_parity osx_installer
} elif [[ $OS_TYPE == "linux" ]]
then
linux_installer
fi
function install_netstats() verify_installation
{ }
echo "Installing netstats"
secret=$(prompt_for_input "Please enter the netstats secret:")
instance_name=$(prompt_for_input "Please enter your instance name:")
contact_details=$(prompt_for_input "Please enter your contact details (optional):")
curl -sL https://deb.nodesource.com/setup_0.12 | bash - function install_netstats()
sudo apt-get update {
# install ethereum & install dependencies echo "Installing netstats"
sudo apt-get install -y -qq build-essential git unzip wget nodejs ntp cloud-utils
# add node symlink if it doesn't exist secret=$(prompt_for_input "Please enter the netstats secret:")
[[ ! -f /usr/bin/node ]] && sudo ln -s /usr/bin/nodejs /usr/bin/node instance_name=$(prompt_for_input "Please enter your instance name:")
contact_details=$(prompt_for_input "Please enter your contact details (optional):")
# set up time update cronjob curl -sL https://deb.nodesource.com/setup_0.12 | bash -
sudo bash -c "cat > /etc/cron.hourly/ntpdate << EOF sudo apt-get update
#!/bin/sh # install ethereum & install dependencies
pm2 flush sudo apt-get install -y -qq build-essential git unzip wget nodejs ntp cloud-utils
sudo service ntp stop
sudo ntpdate -s ntp.ubuntu.com
sudo service ntp start
EOF"
sudo chmod 755 /etc/cron.hourly/ntpdate # add node symlink if it doesn't exist
[[ ! -f /usr/bin/node ]] && sudo ln -s /usr/bin/nodejs /usr/bin/node
[ ! -d "www" ] && git clone https://github.com/cubedro/eth-net-intelligence-api netstats # set up time update cronjob
oldpwd= $(pwd) sudo bash -c "cat > /etc/cron.hourly/ntpdate << EOF
cd netstats #!/bin/sh
git pull pm2 flush
git checkout 95d595258239a0fdf56b97dedcfb2be62f6170e6 sudo service ntp stop
sudo ntpdate -s ntp.ubuntu.com
sudo service ntp start
EOF"
sudo npm install sudo chmod 755 /etc/cron.hourly/ntpdate
sudo npm install pm2 -g
cat > app.json << EOL cd $HOME
[ ! -d "www" ] && git clone https://github.com/cubedro/eth-net-intelligence-api netstats
oldpwd= $(pwd)
cd netstats
git pull
git checkout 95d595258239a0fdf56b97dedcfb2be62f6170e6
sudo npm install
sudo npm install pm2 -g
cat > app.json << EOL
[ [
{ {
"name" : "node-app", "name" : "node-app",
"script" : "app.js", "script" : "app.js",
"log_date_format" : "YYYY-MM-DD HH:mm Z", "log_date_format" : "YYYY-MM-DD HH:mm Z",
"merge_logs" : false, "merge_logs" : false,
"watch" : false, "watch" : false,
"max_restarts" : 10, "max_restarts" : 10,
"exec_interpreter" : "node", "exec_interpreter" : "node",
"exec_mode" : "fork_mode", "exec_mode" : "fork_mode",
"env": "env":
{ {
"NODE_ENV" : "production", "NODE_ENV" : "production",
"RPC_HOST" : "localhost", "RPC_HOST" : "localhost",
"RPC_PORT" : "8545", "RPC_PORT" : "8545",
"LISTENING_PORT" : "30303", "LISTENING_PORT" : "30303",
"INSTANCE_NAME" : "${instance_name}", "INSTANCE_NAME" : "${instance_name}",
"CONTACT_DETAILS" : "${contact_details}", "CONTACT_DETAILS" : "${contact_details}",
"WS_SERVER" : "wss://rpc.ethstats.net", "WS_SERVER" : "wss://rpc.ethstats.net",
"WS_SECRET" : "${secret}", "WS_SECRET" : "${secret}",
"VERBOSITY" : 2 "VERBOSITY" : 2
} }
} }
] ]
EOL EOL
pm2 start app.json pm2 startOrRestart app.json
cd $oldpwd cd $oldpwd
} }
function install() function abortInstall()
{ {
if [[ $OS_TYPE == "osx" ]] echo
then error "Installation failed"
osx_installer echo -e "$1"
elif [[ $OS_TYPE == "linux" ]] echo
then exit 0
linux_installer }
fi
} function finish()
{
echo
successHeading "All done"
# head "Next steps"
# info "Run ${cyan}\`\`${reset} to get started.${reset}"
echo
exit 0
}
head "Checking OS dependencies"
detectOS
if [[ $INSTALL_FILES != "" ]]; then
echo
head "In addition to the Parity build dependencies, this script will install:"
printf "$INSTALL_FILES"
echo
fi
#DEBUG
function abortInstall() head "${b}OK,${reset} let's install Parity now!"
{ echo
echo echo
error "Installation failed" install
echo -e "$1"
echo
exit 0
}
function finish() if [[ $OS_TYPE == "linux" ]]
{ then
echo echo "Netstats:"
successHeading "Installation successful!" head "Would you like to install and configure a netstats client?"
# head "Next steps" if wait_for_user "${b}OK,${reset} let's go!"
# info "Run ${cyan}\`\`${reset} to get started.${reset}" then
echo install_netstats
exit 0 fi
} fi
head "Checking OS dependencies"
detectOS
if [[ $INSTALL_FILES != "" ]]; then
echo
head "In addition to the Parity build dependencies, this script will install:"
echo "$INSTALL_FILES"
echo
fi
head "${b}OK,${reset} let's install Parity now!"
echo
echo
install
if [[ $OS_TYPE == "linux" ]]
then
echo "Netstats:"
head "Would you like to install and configure a netstats client?"
if wait_for_user "${b}OK,${reset} let's go!"
then
install_netstats
fi
fi
# Display goodbye message # Display goodbye message
finish finish
} }
run_installer run_installer