Merge branch 'master' of github.com:ethcore/parity
This commit is contained in:
commit
7f75db688d
@ -17,6 +17,7 @@ ethcore-util = { path = "util" }
|
|||||||
ethcore = { path = "ethcore" }
|
ethcore = { path = "ethcore" }
|
||||||
ethsync = { path = "sync" }
|
ethsync = { path = "sync" }
|
||||||
ethcore-rpc = { path = "rpc", optional = true }
|
ethcore-rpc = { path = "rpc", optional = true }
|
||||||
|
fdlimit = { path = "util/fdlimit" }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = ["rpc"]
|
default = ["rpc"]
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
//! Blockchain database client.
|
//! Blockchain database client.
|
||||||
|
|
||||||
use util::*;
|
use util::*;
|
||||||
use rocksdb::{Options, DB};
|
use rocksdb::{Options, DB, DBCompactionStyle};
|
||||||
use blockchain::{BlockChain, BlockProvider, CacheSize};
|
use blockchain::{BlockChain, BlockProvider, CacheSize};
|
||||||
use views::BlockView;
|
use views::BlockView;
|
||||||
use error::*;
|
use error::*;
|
||||||
@ -163,16 +163,23 @@ pub struct Client {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const HISTORY: u64 = 1000;
|
const HISTORY: u64 = 1000;
|
||||||
|
const CLIENT_DB_VER_STR: &'static str = "1.0";
|
||||||
|
|
||||||
impl Client {
|
impl Client {
|
||||||
/// Create a new client with given spec and DB path.
|
/// Create a new client with given spec and DB path.
|
||||||
pub fn new(spec: Spec, path: &Path, message_channel: IoChannel<NetSyncMessage> ) -> Result<Arc<Client>, Error> {
|
pub fn new(spec: Spec, path: &Path, message_channel: IoChannel<NetSyncMessage> ) -> Result<Arc<Client>, Error> {
|
||||||
|
let mut dir = path.to_path_buf();
|
||||||
|
dir.push(H64::from(spec.genesis_header().hash()).hex());
|
||||||
|
//TODO: sec/fat: pruned/full versioning
|
||||||
|
dir.push(format!("v{}-sec-pruned", CLIENT_DB_VER_STR));
|
||||||
|
let path = dir.as_path();
|
||||||
let gb = spec.genesis_block();
|
let gb = spec.genesis_block();
|
||||||
let chain = Arc::new(RwLock::new(BlockChain::new(&gb, path)));
|
let chain = Arc::new(RwLock::new(BlockChain::new(&gb, path)));
|
||||||
let mut opts = Options::new();
|
let mut opts = Options::new();
|
||||||
opts.set_max_open_files(256);
|
opts.set_max_open_files(256);
|
||||||
opts.create_if_missing(true);
|
opts.create_if_missing(true);
|
||||||
opts.set_use_fsync(false);
|
opts.set_use_fsync(false);
|
||||||
|
opts.set_compaction_style(DBCompactionStyle::DBUniversalCompaction);
|
||||||
/*
|
/*
|
||||||
opts.set_bytes_per_sync(8388608);
|
opts.set_bytes_per_sync(8388608);
|
||||||
opts.set_disable_data_sync(false);
|
opts.set_disable_data_sync(false);
|
||||||
|
@ -48,7 +48,6 @@ impl ClientService {
|
|||||||
info!("Configured for {} using {} engine", spec.name, spec.engine_name);
|
info!("Configured for {} using {} engine", spec.name, spec.engine_name);
|
||||||
let mut dir = env::home_dir().unwrap();
|
let mut dir = env::home_dir().unwrap();
|
||||||
dir.push(".parity");
|
dir.push(".parity");
|
||||||
dir.push(H64::from(spec.genesis_header().hash()).hex());
|
|
||||||
let client = try!(Client::new(spec, &dir, net_service.io().channel()));
|
let client = try!(Client::new(spec, &dir, net_service.io().channel()));
|
||||||
let client_io = Arc::new(ClientIoHandler {
|
let client_io = Arc::new(ClientIoHandler {
|
||||||
client: client.clone()
|
client: client.clone()
|
||||||
|
@ -566,7 +566,7 @@ function run_installer()
|
|||||||
else
|
else
|
||||||
oldpwd=`pwd`
|
oldpwd=`pwd`
|
||||||
cd /tmp
|
cd /tmp
|
||||||
exe git clone --branch v4.1 --depth=1 https://github.com/facebook/rocksdb.git
|
exe git clone --branch v4.2 --depth=1 https://github.com/facebook/rocksdb.git
|
||||||
cd rocksdb
|
cd rocksdb
|
||||||
exe make shared_lib
|
exe make shared_lib
|
||||||
sudo cp -a librocksdb.so* /usr/lib
|
sudo cp -a librocksdb.so* /usr/lib
|
||||||
|
@ -1,9 +1,8 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
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/ethcore/parity/releases/download/beta-0.9/parity_0.9.0-0_amd64.deb
|
||||||
|
|
||||||
|
|
||||||
function run_installer()
|
function run_installer()
|
||||||
{
|
{
|
||||||
####### Init vars
|
####### Init vars
|
||||||
@ -13,7 +12,6 @@ function run_installer()
|
|||||||
HOMEBREW_REPO=https://github.com/Homebrew/homebrew
|
HOMEBREW_REPO=https://github.com/Homebrew/homebrew
|
||||||
OSX_REQUIERED_VERSION="10.7.0"
|
OSX_REQUIERED_VERSION="10.7.0"
|
||||||
|
|
||||||
|
|
||||||
declare OS_TYPE
|
declare OS_TYPE
|
||||||
declare OSX_VERSION
|
declare OSX_VERSION
|
||||||
declare GIT_PATH
|
declare GIT_PATH
|
||||||
@ -26,13 +24,11 @@ function run_installer()
|
|||||||
isGit=false
|
isGit=false
|
||||||
isRuby=false
|
isRuby=false
|
||||||
isBrew=false
|
isBrew=false
|
||||||
isDocker=false
|
|
||||||
canContinue=true
|
canContinue=true
|
||||||
depCount=0
|
depCount=0
|
||||||
depFound=0
|
depFound=0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
####### Setup colors
|
####### Setup colors
|
||||||
|
|
||||||
red=`tput setaf 1`
|
red=`tput setaf 1`
|
||||||
@ -119,6 +115,9 @@ function run_installer()
|
|||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function exe() {
|
||||||
|
echo "\$ $@"; "$@"
|
||||||
|
}
|
||||||
|
|
||||||
function detectOS() {
|
function detectOS() {
|
||||||
if [[ "$OSTYPE" == "linux-gnu" ]]
|
if [[ "$OSTYPE" == "linux-gnu" ]]
|
||||||
@ -155,14 +154,6 @@ function run_installer()
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
function get_osx_dependencies()
|
|
||||||
{
|
|
||||||
macos_version
|
|
||||||
find_git
|
|
||||||
find_ruby
|
|
||||||
find_brew
|
|
||||||
}
|
|
||||||
|
|
||||||
function macos_version()
|
function macos_version()
|
||||||
{
|
{
|
||||||
declare -a reqVersion
|
declare -a reqVersion
|
||||||
@ -197,56 +188,45 @@ function run_installer()
|
|||||||
errorMessages+=" Please update the OS and reload the install process.\n"
|
errorMessages+=" Please update the OS and reload the install process.\n"
|
||||||
}
|
}
|
||||||
|
|
||||||
function find_eth()
|
function get_osx_dependencies()
|
||||||
{
|
{
|
||||||
ETH_PATH=`which parity 2>/dev/null`
|
macos_version
|
||||||
|
find_git
|
||||||
|
find_ruby
|
||||||
|
find_brew
|
||||||
|
}
|
||||||
|
|
||||||
if [[ -f $ETH_PATH ]]
|
function linux_version()
|
||||||
then
|
{
|
||||||
check "Found parity: $ETH_PATH"
|
source /etc/lsb-release
|
||||||
isEth=true
|
|
||||||
|
if [[ $DISTRIB_ID == "Ubuntu" ]]; then
|
||||||
|
if [[ $DISTRIB_RELEASE == "14.04" ]]; then
|
||||||
|
check "Ubuntu-14.04"
|
||||||
|
isUbuntu1404=true
|
||||||
else
|
else
|
||||||
uncheck "parity is missing"
|
check "Ubuntu, but not 14.04"
|
||||||
isEth=false
|
isUbuntu1404=false
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
check "Ubuntu not found"
|
||||||
|
isUbuntu1404=false
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
function find_git()
|
function get_linux_dependencies()
|
||||||
{
|
{
|
||||||
depCount=$((depCount+1))
|
linux_version
|
||||||
|
|
||||||
GIT_PATH=`which git 2>/dev/null`
|
find_multirust
|
||||||
|
find_rocksdb
|
||||||
|
|
||||||
if [[ -f $GIT_PATH ]]
|
find_curl
|
||||||
then
|
find_git
|
||||||
check "$($GIT_PATH --version)"
|
find_make
|
||||||
isGit=true
|
find_gcc
|
||||||
depFound=$((depFound+1))
|
|
||||||
else
|
|
||||||
uncheck "Git is missing"
|
|
||||||
isGit=false
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function find_ruby()
|
find_apt
|
||||||
{
|
|
||||||
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()
|
function find_brew()
|
||||||
@ -271,59 +251,276 @@ function run_installer()
|
|||||||
depCount=$((depCount+1))
|
depCount=$((depCount+1))
|
||||||
}
|
}
|
||||||
|
|
||||||
function install_brew()
|
function find_ruby()
|
||||||
{
|
{
|
||||||
if [[ $isBrew == false ]]
|
depCount=$((depCount+1))
|
||||||
then
|
|
||||||
head "Installing Homebrew"
|
|
||||||
|
|
||||||
if [[ $isRuby == true ]]
|
RUBY_PATH=`which ruby 2>/dev/null`
|
||||||
|
|
||||||
|
if [[ -f $RUBY_PATH ]]
|
||||||
then
|
then
|
||||||
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
|
RUBY_VERSION=`ruby -e "print RUBY_VERSION"`
|
||||||
|
check "Ruby ${RUBY_VERSION}"
|
||||||
|
isRuby=true
|
||||||
|
depFound=$((depFound+1))
|
||||||
else
|
else
|
||||||
cd /usr
|
uncheck "Ruby is missing 🔥"
|
||||||
|
isRuby=false
|
||||||
if [[ ! -d $HOMEBREW_PREFIX ]]
|
canContinue=false
|
||||||
then
|
errorMessages+="${red}==>${reset} ${b}Couldn't find Ruby:${reset} Brew requires Ruby which could not be found.\n"
|
||||||
sudo mkdir $HOMEBREW_PREFIX
|
errorMessages+=" Please install Ruby using these instructions ${u}${blue}https://www.ruby-lang.org/en/documentation/installation/${reset}.\n"
|
||||||
sudo chmod g+rwx $HOMEBREW_PREFIX
|
|
||||||
fi
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
if [[ ! -d $HOMEBREW_CACHE ]]
|
function find_rocksdb()
|
||||||
then
|
{
|
||||||
sudo mkdir $HOMEBREW_CACHE
|
depCount=$((depCount+1))
|
||||||
sudo chmod g+rwx $HOMEBREW_CACHE
|
if [[ $(ldconfig -v 2>/dev/null | grep rocksdb | wc -l) == 1 ]]; then
|
||||||
|
depFound=$((depFound+1))
|
||||||
|
check "librocksdb"
|
||||||
|
isRocksDB=true
|
||||||
|
else
|
||||||
|
uncheck "librocksdb is missing"
|
||||||
|
isRocksDB=false
|
||||||
|
INSTALL_FILES+="${blue}${dim}==>${reset}\tlibrocksdb\n"
|
||||||
fi
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
DEVELOPER_DIR=`/usr/bin/xcode-select -print-path 2>/dev/null`
|
function find_multirust()
|
||||||
|
{
|
||||||
if [[ ! $(ls -A $DEVELOPER_DIR) || ! -f $DEVELOPER_DIR/usr/bin/git ]]
|
depCount=$((depCount+2))
|
||||||
then
|
MULTIRUST_PATH=`which multirust 2>/dev/null`
|
||||||
info "Installing the Command Line Tools (expect a GUI popup):"
|
if [[ -f $MULTIRUST_PATH ]]; then
|
||||||
sudo /usr/bin/xcode-select --install
|
depFound=$((depFound+1))
|
||||||
|
check "multirust"
|
||||||
echo "Press any key when the installation has completed"
|
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
|
fi
|
||||||
|
else
|
||||||
cd $HOMEBREW_PREFIX
|
uncheck "multirust is missing"
|
||||||
|
uncheck "rust nightly is missing"
|
||||||
bash -o pipefail -c "curl -fsSL ${HOMEBREW_REPO}/tarball/master | tar xz -m --strip 1"
|
isMultirust=false
|
||||||
|
isMultirustNightly=false
|
||||||
|
INSTALL_FILES+="${blue}${dim}==>${reset}\tmultirust\n"
|
||||||
fi
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
find_brew
|
function find_apt()
|
||||||
echo
|
{
|
||||||
|
depCount=$((depCount+1))
|
||||||
|
|
||||||
if [[ $isBrew == false ]]
|
APT_PATH=`which apt-get 2>/dev/null`
|
||||||
|
|
||||||
|
if [[ -f $APT_PATH ]]
|
||||||
then
|
then
|
||||||
abortInstall "Couldn't install brew"
|
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
|
||||||
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.2 --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
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function linux_installer()
|
||||||
|
{
|
||||||
|
linux_deps_installer
|
||||||
|
verify_dep_installation
|
||||||
|
|
||||||
|
info "Installing parity"
|
||||||
|
file=/tmp/parity.deb
|
||||||
|
|
||||||
|
wget $PARITY_DEB_URL -qO $file
|
||||||
|
sudo dpkg -i $file
|
||||||
|
rm $file
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function osx_installer()
|
function osx_installer()
|
||||||
{
|
{
|
||||||
osx_dependency_installer
|
|
||||||
|
|
||||||
info "Adding ethcore repository"
|
info "Adding ethcore repository"
|
||||||
brew tap ethcore/ethcore https://github.com/ethcore/homebrew-ethcore.git
|
brew tap ethcore/ethcore https://github.com/ethcore/homebrew-ethcore.git
|
||||||
echo
|
echo
|
||||||
@ -343,104 +540,65 @@ function run_installer()
|
|||||||
echo
|
echo
|
||||||
}
|
}
|
||||||
|
|
||||||
function osx_dependency_installer()
|
function install()
|
||||||
{
|
{
|
||||||
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
|
|
||||||
find_docker
|
|
||||||
}
|
|
||||||
|
|
||||||
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 find_docker()
|
|
||||||
{
|
|
||||||
DOCKER_PATH=`which docker 2>/dev/null`
|
|
||||||
|
|
||||||
if [[ -f $DOCKER_PATH ]]
|
|
||||||
then
|
|
||||||
check "docker"
|
|
||||||
echo "$($DOCKER_PATH -v)"
|
|
||||||
isDocker=true
|
|
||||||
else
|
|
||||||
isDocker=false
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
function linux_rocksdb_installer()
|
|
||||||
{
|
|
||||||
sudo add-apt-repository -y ppa:giskou/librocksdb
|
|
||||||
sudo apt-get -f -y install
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install -y librocksdb
|
|
||||||
}
|
|
||||||
|
|
||||||
function linux_installer()
|
|
||||||
{
|
|
||||||
info "Installing dependencies"
|
|
||||||
sudo apt-get update && sudo apt-get install -q -y git curl g++ wget
|
|
||||||
echo
|
echo
|
||||||
|
head "Installing Parity build dependencies"
|
||||||
|
|
||||||
info "Installing rocksdb"
|
if [[ $OS_TYPE == "osx" ]]
|
||||||
linux_rocksdb_installer
|
then
|
||||||
echo
|
osx_installer
|
||||||
|
elif [[ $OS_TYPE == "linux" ]]
|
||||||
|
then
|
||||||
|
linux_installer
|
||||||
|
fi
|
||||||
|
|
||||||
info "Installing parity"
|
verify_installation
|
||||||
file=/tmp/parity.deb
|
|
||||||
|
|
||||||
|
|
||||||
wget $PARITY_DEB_URL -qO $file
|
|
||||||
sudo dpkg -i $file
|
|
||||||
rm $file
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function install_netstats()
|
function install_netstats()
|
||||||
{
|
{
|
||||||
echo "install netstats"
|
echo "Installing netstats"
|
||||||
|
|
||||||
if [[ $isDocker == false ]]
|
|
||||||
then
|
|
||||||
info "installing docker"
|
|
||||||
curl -sSL https://get.docker.com/ | sh
|
|
||||||
fi
|
|
||||||
|
|
||||||
dir=$HOME/.netstats
|
|
||||||
|
|
||||||
secret=$(prompt_for_input "Please enter the netstats secret:")
|
secret=$(prompt_for_input "Please enter the netstats secret:")
|
||||||
instance_name=$(prompt_for_input "Please enter your instance name:")
|
instance_name=$(prompt_for_input "Please enter your instance name:")
|
||||||
contact_details=$(prompt_for_input "Please enter your contact details (optional):")
|
contact_details=$(prompt_for_input "Please enter your contact details (optional):")
|
||||||
|
|
||||||
|
curl -sL https://deb.nodesource.com/setup_0.12 | bash -
|
||||||
|
sudo apt-get update
|
||||||
|
|
||||||
mkdir -p $dir
|
# install ethereum & install dependencies
|
||||||
cat > $dir/app.json << EOL
|
sudo apt-get install -y -qq build-essential git unzip wget nodejs ntp cloud-utils
|
||||||
|
|
||||||
|
sudo apt-get install -y -qq npm
|
||||||
|
|
||||||
|
# add node symlink if it doesn't exist
|
||||||
|
[[ ! -f /usr/bin/node ]] && sudo ln -s /usr/bin/nodejs /usr/bin/node
|
||||||
|
|
||||||
|
# set up time update cronjob
|
||||||
|
sudo bash -c "cat > /etc/cron.hourly/ntpdate << EOF
|
||||||
|
#!/bin/sh
|
||||||
|
pm2 flush
|
||||||
|
sudo service ntp stop
|
||||||
|
sudo ntpdate -s ntp.ubuntu.com
|
||||||
|
sudo service ntp start
|
||||||
|
EOF"
|
||||||
|
|
||||||
|
sudo chmod 755 /etc/cron.hourly/ntpdate
|
||||||
|
|
||||||
|
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",
|
||||||
@ -468,35 +626,10 @@ function run_installer()
|
|||||||
]
|
]
|
||||||
EOL
|
EOL
|
||||||
|
|
||||||
sudo docker rm --force netstats-client 2> /dev/null
|
pm2 startOrRestart app.json
|
||||||
sudo docker pull ethcore/netstats-client
|
cd $oldpwd
|
||||||
sudo docker run -d --net=host --name netstats-client -v $dir/app.json:/home/ethnetintel/eth-net-intelligence-api/app.json ethcore/netstats-client
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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()
|
function abortInstall()
|
||||||
{
|
{
|
||||||
@ -510,32 +643,37 @@ EOL
|
|||||||
function finish()
|
function finish()
|
||||||
{
|
{
|
||||||
echo
|
echo
|
||||||
successHeading "Installation successful!"
|
successHeading "All done"
|
||||||
# head "Next steps"
|
# head "Next steps"
|
||||||
# info "Run ${cyan}\`\`${reset} to get started.${reset}"
|
# info "Run ${cyan}\`\`${reset} to get started.${reset}"
|
||||||
echo
|
echo
|
||||||
exit 0
|
exit 0
|
||||||
}
|
}
|
||||||
|
|
||||||
# Check dependencies
|
|
||||||
head "Checking OS dependencies"
|
head "Checking OS dependencies"
|
||||||
detectOS
|
detectOS
|
||||||
|
|
||||||
|
if [[ $INSTALL_FILES != "" ]]; then
|
||||||
echo
|
echo
|
||||||
head "In addition to the parity build dependencies, this script will install:"
|
head "In addition to the Parity build dependencies, this script will install:"
|
||||||
echo "$INSTALL_FILES"
|
printf "$INSTALL_FILES"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
# Prompt user to continue or abort
|
|
||||||
if wait_for_user "${b}OK,${reset} let's go!"
|
|
||||||
then
|
|
||||||
echo "Installing..."
|
|
||||||
else
|
|
||||||
abortInstall "${red}==>${reset} Process stopped by user. To resume the install run the one-liner command again."
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Install dependencies and eth
|
#DEBUG
|
||||||
|
|
||||||
|
|
||||||
|
head "${b}OK,${reset} let's install Parity now!"
|
||||||
|
if wait_for_user "${b}Last chance!${reset} Sure you want to install this software?"
|
||||||
|
then
|
||||||
install
|
install
|
||||||
|
echo
|
||||||
|
echo
|
||||||
|
else
|
||||||
|
finish
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if [[ $OS_TYPE == "linux" ]]
|
if [[ $OS_TYPE == "linux" ]]
|
||||||
then
|
then
|
||||||
@ -547,10 +685,8 @@ EOL
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Check installation
|
|
||||||
verify_installation
|
|
||||||
|
|
||||||
# Display goodby message
|
# Display goodbye message
|
||||||
finish
|
finish
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,6 +28,7 @@ extern crate ethsync;
|
|||||||
extern crate log as rlog;
|
extern crate log as rlog;
|
||||||
extern crate env_logger;
|
extern crate env_logger;
|
||||||
extern crate ctrlc;
|
extern crate ctrlc;
|
||||||
|
extern crate fdlimit;
|
||||||
|
|
||||||
#[cfg(feature = "rpc")]
|
#[cfg(feature = "rpc")]
|
||||||
extern crate ethcore_rpc as rpc;
|
extern crate ethcore_rpc as rpc;
|
||||||
@ -95,6 +96,7 @@ fn main() {
|
|||||||
let args: Args = Args::docopt().decode().unwrap_or_else(|e| e.exit());
|
let args: Args = Args::docopt().decode().unwrap_or_else(|e| e.exit());
|
||||||
|
|
||||||
setup_log(&args.flag_logging);
|
setup_log(&args.flag_logging);
|
||||||
|
unsafe { ::fdlimit::raise_fd_limit(); }
|
||||||
|
|
||||||
let spec = ethereum::new_frontier();
|
let spec = ethereum::new_frontier();
|
||||||
let init_nodes = match args.arg_enode.len() {
|
let init_nodes = match args.arg_enode.len() {
|
||||||
|
10
util/fdlimit/Cargo.toml
Normal file
10
util/fdlimit/Cargo.toml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
[package]
|
||||||
|
description = "Utility function to raise file descriptor limit on OS X"
|
||||||
|
homepage = "http://ethcore.io"
|
||||||
|
license = "GPL-3.0"
|
||||||
|
name = "fdlimit"
|
||||||
|
version = "0.1.0"
|
||||||
|
authors = ["Ethcore <admin@ethcore.io>"]
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
libc = "0.2"
|
18
util/fdlimit/src/lib.rs
Normal file
18
util/fdlimit/src/lib.rs
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
// Copyright 2015, 2016 Ethcore (UK) Ltd.
|
||||||
|
// This file is part of Parity.
|
||||||
|
//
|
||||||
|
// Parity is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// Parity is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with Parity. If not, see <http://www.gnu.org/licenses/>.extern crate libc;
|
||||||
|
extern crate libc;
|
||||||
|
pub mod raise_fd_limit;
|
||||||
|
pub use raise_fd_limit::raise_fd_limit;
|
61
util/fdlimit/src/raise_fd_limit.rs
Normal file
61
util/fdlimit/src/raise_fd_limit.rs
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
|
||||||
|
// file at the top-level directory of this distribution and at
|
||||||
|
// http://rust-lang.org/COPYRIGHT.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||||
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
|
// option. This file may not be copied, modified, or distributed
|
||||||
|
// except according to those terms.
|
||||||
|
|
||||||
|
/// darwin_fd_limit exists to work around an issue where launchctl on Mac OS X
|
||||||
|
/// defaults the rlimit maxfiles to 256/unlimited. The default soft limit of 256
|
||||||
|
/// ends up being far too low for our multithreaded scheduler testing, depending
|
||||||
|
/// on the number of cores available.
|
||||||
|
///
|
||||||
|
#[cfg(any(target_os = "macos", target_os = "ios"))]
|
||||||
|
#[allow(non_camel_case_types)]
|
||||||
|
pub unsafe fn raise_fd_limit() {
|
||||||
|
use libc;
|
||||||
|
use std::cmp;
|
||||||
|
use std::io;
|
||||||
|
use std::mem::size_of_val;
|
||||||
|
use std::ptr::null_mut;
|
||||||
|
|
||||||
|
static CTL_KERN: libc::c_int = 1;
|
||||||
|
static KERN_MAXFILESPERPROC: libc::c_int = 29;
|
||||||
|
|
||||||
|
// The strategy here is to fetch the current resource limits, read the
|
||||||
|
// kern.maxfilesperproc sysctl value, and bump the soft resource limit for
|
||||||
|
// maxfiles up to the sysctl value.
|
||||||
|
|
||||||
|
// Fetch the kern.maxfilesperproc value
|
||||||
|
let mut mib: [libc::c_int; 2] = [CTL_KERN, KERN_MAXFILESPERPROC];
|
||||||
|
let mut maxfiles: libc::c_int = 0;
|
||||||
|
let mut size: libc::size_t = size_of_val(&maxfiles) as libc::size_t;
|
||||||
|
if libc::sysctl(&mut mib[0], 2, &mut maxfiles as *mut _ as *mut _, &mut size,
|
||||||
|
null_mut(), 0) != 0 {
|
||||||
|
let err = io::Error::last_os_error();
|
||||||
|
panic!("raise_fd_limit: error calling sysctl: {}", err);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fetch the current resource limits
|
||||||
|
let mut rlim = libc::rlimit{rlim_cur: 0, rlim_max: 0};
|
||||||
|
if libc::getrlimit(libc::RLIMIT_NOFILE, &mut rlim) != 0 {
|
||||||
|
let err = io::Error::last_os_error();
|
||||||
|
panic!("raise_fd_limit: error calling getrlimit: {}", err);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Bump the soft limit to the smaller of kern.maxfilesperproc and the hard
|
||||||
|
// limit
|
||||||
|
rlim.rlim_cur = cmp::min(maxfiles as libc::rlim_t, rlim.rlim_max);
|
||||||
|
|
||||||
|
// Set our newly-increased resource limit
|
||||||
|
if libc::setrlimit(libc::RLIMIT_NOFILE, &rlim) != 0 {
|
||||||
|
let err = io::Error::last_os_error();
|
||||||
|
panic!("raise_fd_limit: error calling setrlimit: {}", err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(not(any(target_os = "macos", target_os = "ios")))]
|
||||||
|
pub unsafe fn raise_fd_limit() {}
|
Loading…
Reference in New Issue
Block a user