提交 ebe7fe81 编写于 作者: B Bill Hamilton

added new build scripts for ubuntu, fedora, darwin red hat (on hold)

上级 81b3db97
#!/bin/bash
##########################################################################
# This is EOS bootstrapper script for Linux and OS X.
# This file was downloaded from https://github.com/EOSIO/eos
#
# Copyright (c) 2017, Respective Authors all rights reserved.
#
# After June 1, 2018 this software is available under the following terms:
#
# The MIT License
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
# https://github.com/EOSIO/eos/blob/master/LICENSE.txt
##########################################################################
VERSION=1.1
ULIMIT=$( ulimit -u )
# Define directories.
WORK_DIR=$PWD
BUILD_DIR=${WORK_DIR}/build
TEMP_DIR=/tmp
ARCH=$(uname)
bldred=${txtbld}$(tput setaf 1)
txtrst=$(tput sgr0)
printf "\n\tARCHITECTURE ${ARCH}\n"
if [ $ARCH == "Linux" ]; then
declare -a DIST=(Ubuntu "Red Hat Enterprise Linux Server" Fedora Centos Amazon)
FILE=""
if [ ! -e /etc/os-release ]; then
printf "EOSIO currently supports Ubuntu, Red Hat & Fedora Linux only.\n"
printf "Please install on the latest version of one of these Linux distributions.\n"
printf "https://www.ubuntu.com/\n"
printf "https://start.fedoraproject.org/en/\n"
printf "Exiting now.\n"
exit 1
fi
OS_NAME=$( cat /etc/os-release | grep ^NAME | cut -d'=' -f2 | sed 's/\"//gI' )
case $OS_NAME in
"Ubuntu")
FILE=${WORK_DIR}/scripts/eosio_build_ubuntu.sh
CXX_COMPILER=clang++-4.0
C_COMPILER=clang-4.0
;;
"Red Hat Enterprise Linux Server")
printf "\n\tRed Hat Linux is Unsupported at this time.\nCheck back soon. Exiting now.\n\n"
exit 1
FILE=${WORK_DIR}/scripts/eosio_build_rhel.sh
CXX_COMPILER=clang++
C_COMPILER=clang
;;
"Fedora")
FILE=${WORK_DIR}/scripts/eosio_build_fedora.sh
CXX_COMPILER=${HOME}/opt/llvm/bin/clang++
C_COMPILER=${HOME}/opt/llvm/bin/clang
;;
*)
printf "\n\tUnsupported Linux Distribution. Exiting now.\n\n"
exit 1
esac
export BOOST_ROOT=${HOME}/opt/boost_1_66_0
export BINARYEN_BIN=${HOME}/opt/binaryen/bin
export OPENSSL_ROOT_DIR=/usr/include/openssl
export OPENSSL_LIBRARIES=/usr/include/openssl
export WASM_LLVM_CONFIG=${HOME}/opt/wasm/bin/llvm-config
. $FILE
fi
if [ $ARCH == "Darwin" ]; then
OPENSSL_ROOT_DIR=/usr/local/opt/openssl@1.1
OPENSSL_LIBRARIES=/usr/local/opt/openssl@1.1/lib
BINARYEN_BIN=/usr/local/binaryen/bin/
WASM_LLVM_CONFIG=/usr/local/wasm/bin/llvm-config
CXX_COMPILER=clang++
C_COMPILER=clang
. ${FILE}/scripts/eosio_build_darwin.sh
fi
printf "\n\n>>>>>>>> ALL dependencies sucessfully found or installed . Installing EOS.IO\n\n"
# Debug flags
COMPILE_EOS=1
COMPILE_CONTRACTS=1
# Define default arguments.
CMAKE_BUILD_TYPE=RelWithDebugInfo
# Create the build dir
cd ${WORK_DIR}
mkdir -p ${BUILD_DIR}
cd ${BUILD_DIR}
# Build EOS
cmake -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_CXX_COMPILER=${CXX_COMPILER} \
-DCMAKE_C_COMPILER=${C_COMPILER} -DWASM_LLVM_CONFIG=${WASM_LLVM_CONFIG} \
-DBINARYEN_BIN=${BINARYEN_BIN} -DOPENSSL_ROOT_DIR=${OPENSSL_ROOT_DIR} \
-DOPENSSL_LIBRARIES=${OPENSSL_LIBRARIES} ..
make -j$(nproc)
if [ $? -ne 0 ]; then
printf "\n\t>>>>>>>>>>>>>>>>>>>> CMAKE building EOSIO has exited with the above error.\n\n"
else
printf "\n\t>>>>>>>>>>>>>>>>>>>> EOSIO has been successfully installed.\n\n"
fi
\ No newline at end of file
Subproject commit a0cf75ad7c39137ebf03b0f3b0b4e5b7f731296b
Subproject commit d8e24895d5d3d019d5083ccafc9e290bdc96a32c
Subproject commit e2a2e74e456413f5d6e6439d4918d1b417ede1c3
Subproject commit 651f8491764b085de5c8c62cf4fb59d25704fede
OS_VER=`sw_vers -productVersion`
OS_MAJ=`echo "${OS_VER}" | cut -d'.' -f1`
OS_MIN=`echo "${OS_VER}" | cut -d'.' -f2`
OS_PATCH=`echo "${OS_VER}" | cut -d'.' -f3`
MEM_GIG=`bc <<< "($(sysctl -in hw.memsize) / 1024000000)"`
CPU_SPEED=`bc <<< "scale=2; ($(sysctl -in hw.cpufrequency) / 100000000) / 10"`
CPU_CORE=$( sysctl -in machdep.cpu.core_count )
DISK_TOTAL=`df -H $PWD | grep /dev | tr -s ' ' | cut -d\ -f2 | sed 's/[^0-9]//'`
DISK_AVAIL=`df -H $PWD | grep /dev | tr -s ' ' | cut -d\ -f4 | sed 's/[^0-9]//'`
printf "\n\tOS name: $ARCH\n"
printf "\tOS Version: ${OS_VER}\n"
printf "\tCPU speed: ${CPU_SPEED}Ghz\n"
printf "\tCPU cores: $CPU_CORE\n"
printf "\tPhysical Memory: $MEM_GIG Gbytes\n"
printf "\tDisk space total: ${DISK_TOTAL}G\n"
printf "\tDisk space available: ${DISK_AVAIL}G\n\n"
if [ $MEM_GIG -lt 8 ]; then
printf "\tYour system must have 8 or more Gigabytes of physical memory installed.\n"
printf "\tExiting now.\n"
exit 1
fi
if [ $OS_MIN -lt 10 ]; then
printf "\tYou must be running Mac OS 10.10.x or higher to install EOSIO.\n"
printf "\tExiting now.\n"
exit 1
fi
if [ $DISK_AVAIL -lt 100 ]; then
printf "\tYou must have at least 100GB of available storage to install EOSIO.\n"
printf "\tExiting now.\n"
exit 1
fi
process_dep()
{
printf "\tChecking XCode installation\n"
XCODESELECT=$(which xcode-select)
if [ $? -ne 0 ]; then
printf "\n\tXCode must be installed in order to proceed.\n\n"
printf "\texiting now.\n"
exit 1
fi
printf "\tXCode installation found.\n\n"
printf "\tChecking Ruby installation\n"
RUBY=$(which ruby)
if [ $? -ne 0 ]; then
printf "\nRuby must be installed in order to proceed.\n\n"
printf "\texiting now.\n"
exit 1
fi
printf "\tRuby installation found.\n\n"
printf "\tChecking Home Brew installation\n"
BREW=$(which brew)
if [ $? -ne 0 ]; then
printf "\tHomebrew must be installed to compile EOS.IO\n\n"
printf "\tDo you wish to install Home Brew?\n"
select yn in "Yes" "No"; do
case $yn in
[Yy]* )
$XCODESELECT --install 2>/dev/null;
$RUBY -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
if [ $? -ne 0 ]; then
echo "User aborted homebrew installation. Exiting now."
exit 0;
fi
break;;
[Nn]* ) echo "User aborted homebrew installation. Exiting now.";
exit;;
* ) echo "Please enter 1 for yes or 2 for no.";;
esac
done
fi
printf "\tHome Brew installation found.\n\n"
# DEPS="git automake libtool openssl cmake wget boost llvm@4 gmp gettext"
DCOUNT=0
COUNT=1
PERMISSION_GETTEXT=0
DISPLAY=""
DEP=""
printf "\tChecking dependencies.\n"
for line in `cat ${WORK_DIR}/scripts/eosio_build_dep`; do
pkg=$( echo "${line}" | cut -d',' -f1 )
printf "\tChecking $pkg ... "
BIN=$(which $pkg)
if [ $? -eq 0 ]; then
printf "\t$pkg found\n"
continue
fi
LIB=$( ls -l /usr/local/lib/lib${pkg}* 2>/dev/null | wc -l)
if [ ${LIB} -ne 0 ]; then
printf "\t$pkg found\n"
continue
else
let DCOUNT++
if [ $pkg = "LLVM" ]; then
pkg="llvm@4"
fi
if [ $pkg = "gettext" ]; then
PERMISSION_GETTEXT=1
fi
DEP=$DEP" ${pkg} "
DISPLAY="${DISPLAY}${COUNT}. ${pkg}\n\t"
printf "\tPackage ${pkg} ${bldred}NOT${txtrst} found.\n"
let COUNT++
fi
done
if [ $DCOUNT -ne 0 ]; then
printf "\n\tThe following dependencies are required to install EOSIO.\n"
printf "\n\t$DISPLAY\n\n"
echo "Do you wish to install these packages?"
select yn in "Yes" "No"; do
case $yn in
[Yy]* )
if [ $PERMISSION_GETTEXT -eq 1 ]; then
sudo chown -R $(whoami) /usr/local/share
fi
$XCODESELECT --install 2>/dev/null;
printf "\tUpdating Home Brew.\n"
brew update
printf "\tInstalling Dependencies.\n"
brew install --force $DEP
brew unlink $DEP && brew link --force $DEP
break;;
[Nn]* ) echo "User aborting installation of required dependencies, Exiting now."; exit;;
* ) echo "Please type 1 for yes or 2 for no.";;
esac
done
else
printf "\n\tNo required Home Brew dependencies to install.\n"
fi
return 0
}
process_dep
printf "\n\tChecking for secp256k1-zkp\n"
# install secp256k1-zkp (Cryptonomex branch)
if [ ! -e /usr/local/lib/libsecp256k1.a ]; then
cd ${TEMP_DIR}
git clone https://github.com/cryptonomex/secp256k1-zkp.git
cd secp256k1-zkp
./autogen.sh
if [ $? -ne 0 ]; then
printf "\tError running autogen\n"
printf "\tExiting now.\n\n"
exit;
fi
./configure
make
if [ $? -ne 0 ]; then
printf "\tError compiling secp256k1-zkp.\n"
printf "\tExiting now.\n\n"
exit;
fi
sudo make install
sudo rm -rf ${TEMP_DIR}/secp256k1-zkp
else
printf "\tsecp256k1 found at /usr/local/lib/\n"
fi
printf "\n\tChecking for binaryen\n"
if [ ! -e /usr/local/binaryen/bin/binaryen.js ]; then
cd ${TEMP_DIR}
git clone https://github.com/WebAssembly/binaryen
cd binaryen
git checkout tags/1.37.14
cmake . && make
if [ $? -ne 0 ]; then
printf "\tError compiling binaryen.\n"
printf "\tExiting now.\n\n"
exit;
fi
sudo mkdir /usr/local/binaryen
sudo mv ${TEMP_DIR}/binaryen/bin /usr/local/binaryen
sudo ln -s /usr/local/binaryen/bin/* /usr/local
sudo rm -rf ${TEMP_DIR}/binaryen
else
printf "\tBinaryen found at /usr/local/binaryen/bin/\n"
fi
printf "\n\tChecking for WASM\n"
if [ ! -d /usr/local/wasm/bin ]; then
# Build LLVM and clang for WASM:
cd ${TEMP_DIR}
mkdir wasm-compiler
cd wasm-compiler
git clone --depth 1 --single-branch --branch release_40 https://github.com/llvm-mirror/llvm.git
cd llvm/tools
git clone --depth 1 --single-branch --branch release_40 https://github.com/llvm-mirror/clang.git
cd ..
mkdir build
cd build
sudo cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=/usr/local/wasm \
-DLLVM_TARGETS_TO_BUILD= -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly \
-DCMAKE_BUILD_TYPE=Release ../
if [ $? -ne 0 ]; then
printf "\tError compiling WASM.\n"
printf "\tExiting now.\n\n"
exit;
fi
sudo make -j4 install
sudo rm -rf ${TEMP_DIR}/wasm-compiler
else
printf "\tWASM found at /usr/local/wasm/bin/\n"
fi
\ No newline at end of file
automake,http://ftp.gnu.org/gnu/automake/automake-1.15.tar.gz
libtool,http://gnu.askapache.com/libtool/libtool-2.4.6.tar.gz
openssl,https://www.openssl.org/source/openssl-1.0.2n.tar.gz
LLVM,http://releases.llvm.org/5.0.1/llvm-5.0.1.src.tar.xz
wget,https://ftp.gnu.org/gnu/wget/wget-1.19.2.tar.gz
cmake,https://cmake.org/files/v3.10/cmake-3.10.1-Darwin-x86_64.tar.gz
boost,https://dl.bintray.com/boostorg/release/1.66.0/source/boost_1_66_0.tar.gz
gmp,https://ftp.gnu.org/gnu/gmp/gmp-6.1.2.tar.bz2
gettext,https://ftp.gnu.org/pub/gnu/gettext/gettext-latest.tar.gz
\ No newline at end of file
OS_VER=$( cat /etc/os-release | grep VERSION_ID | cut -d'=' -f2 | sed 's/[^0-9\.]//gI' )
MEM_MEG=$( free -m | grep Mem | tr -s ' ' | cut -d\ -f2 )
CPU_SPEED=$( lscpu | grep "MHz" | tr -s ' ' | cut -d\ -f3 | cut -d'.' -f1 )
CPU_CORE=$( lscpu | grep "^CPU(s)" | tr -s ' ' | cut -d\ -f2 )
DISK_TOTAL=`df -h / | grep /dev | tr -s ' ' | cut -d\ -f2 | sed 's/[^0-9]//'`
DISK_AVAIL=`df -h / | grep /dev | tr -s ' ' | cut -d\ -f4 | sed 's/[^0-9]//'`
printf "\n\tOS name: $OS_NAME\n"
printf "\tOS Version: ${OS_VER}\n"
printf "\tCPU speed: ${CPU_SPEED}Mhz\n"
printf "\tCPU cores: $CPU_CORE\n"
printf "\tPhysical Memory: $MEM_MEG Mgb\n"
printf "\tDisk space total: ${DISK_TOTAL}G\n"
printf "\tDisk space available: ${DISK_AVAIL}G\n"
if [ $MEM_MEG -lt 4000 ]; then
echo "Your system must have 8 or more Gigabytes of physical memory installed."
echo "exiting now."
exit 1
fi
if [ $OS_VER -lt 25 ]; then
echo "You must be running Fedora 25 or higher to install EOSIO."
echo "exiting now"
exit 1
fi
if [ $DISK_AVAIL -lt 100 ]; then
echo "You must have at least 100GB of available storage to install EOSIO."
echo "exiting now"
exit 1
fi
printf "\n\tChecking Yum installation\n"
YUM=$( which yum 2>/dev/null )
if [ $? -ne 0 ]; then
printf "\n\tYum must be installed to compile EOS.IO.\n"
printf "\n\tExiting now.\n"
exit 0
fi
printf "\tYum installation found at ${YUM}.\n"
printf "\tUpdating YUM.\n"
UPDATE=$( sudo yum update )
if [ $? -ne 0 ]; then
printf "\n\tYUM update failed.\n"
printf "\n\tExiting now.\n"
exit 1
fi
printf "\t${UPDATE}\n"
# DEP_ARRAY=(clang-4.0 lldb-4.0 libclang-4.0-dev cmake make libbz2-dev libssl-dev libgmp3-dev autotools-dev build-essential libicu-dev python-dev autoconf libtool)
DEP_ARRAY=( git gcc.x86_64 gcc-c++.x86_64 autoconf automake libtool make cmake.x86_64 bzip2 bzip2-devel.x86_64 openssl-devel.x86_64 gmp.x86_64 gmp-devel.x86_64 libstdc++-devel.x86_64 python3-devel.x86_64 libedit.x86_64 ncurses-devel.x86_64 swig.x86_64 )
DCOUNT=0
COUNT=1
DISPLAY=""
DEP=""
printf "\n\tChecking YUM for installed dependencies.\n\n"
for (( i=0; i<${#DEP_ARRAY[@]}; i++ ));
do
pkg=$( sudo $YUM info ${DEP_ARRAY[$i]} 2>/dev/null | grep Repo | tr -s ' ' | cut -d: -f2 | sed 's/ //g' )
if [ "$pkg" != "@System" ]; then
DEP=$DEP" ${DEP_ARRAY[$i]} "
DISPLAY="${DISPLAY}${COUNT}. ${DEP_ARRAY[$i]}\n\t"
printf "\tPackage ${DEP_ARRAY[$i]} ${bldred} NOT ${txtrst} found.\n"
let COUNT++
let DCOUNT++
else
printf "\tPackage ${DEP_ARRAY[$i]} found.\n"
continue
fi
done
if [ ${DCOUNT} -ne 0 ]; then
printf "\n\tThe following dependencies are required to install EOSIO.\n"
printf "\n\t$DISPLAY\n\n"
printf "\tDo you wish to install these dependencies?\n"
select yn in "Yes" "No"; do
case $yn in
[Yy]* )
printf "\n\n\tInstalling dependencies\n\n"
sudo yum -y install ${DEP}
if [ $? -ne 0 ]; then
printf "\n\tYUM dependency installation failed.\n"
printf "\n\tExiting now.\n"
exit 1
else
printf "\n\tYUM dependencies installed successfully.\n"
fi
break;;
[Nn]* ) echo "User aborting installation of required dependencies, Exiting now."; exit;;
* ) echo "Please type 1 for yes or 2 for no.";;
esac
done
else
printf "\n\tNo required YUM dependencies to install.\n"
fi
printf "\n\tChecking for boost libraries\n"
if [ ! -d ${HOME}/opt/boost_1_66_0 ]; then
# install boost
printf "\tInstalling boost libraries\n"
cd ${TEMP_DIR}
curl -L https://dl.bintray.com/boostorg/release/1.66.0/source/boost_1_66_0.tar.bz2 > boost_1.66.0.tar.bz2
tar xf boost_1.66.0.tar.bz2
cd boost_1_66_0/
./bootstrap.sh "--prefix=$BOOST_ROOT"
./b2 install
rm -rf ${TEMP_DIR}/boost_1_66_0/
rm -f ${TEMP_DIR}/boost_1.66.0.tar.bz2
else
printf "\tBoost 1.66 found at ${HOME}/opt/boost_1_66_0\n"
fi
printf "\n\tChecking for secp256k1-zkp\n"
# install secp256k1-zkp (Cryptonomex branch)
if [ ! -e /usr/local/lib/libsecp256k1.a ]; then
printf "\tInstalling secp256k1-zkp (Cryptonomex branch)\n"
cd ${TEMP_DIR}
git clone https://github.com/cryptonomex/secp256k1-zkp.git
cd secp256k1-zkp
./autogen.sh
if [ $? -ne 0 ]; then
printf "\tError running autogen for secp256k1-zkp.\n"
printf "\tExiting now.\n\n"
exit;
fi
./configure
make
if [ $? -ne 0 ]; then
printf "\tError compiling secp256k1-zkp.\n"
printf "\tExiting now.\n\n"
exit;
fi
sudo make install
rm -rf cd ${TEMP_DIR}/secp256k1-zkp
else
printf "\tsecp256k1 found\n"
fi
printf "\n\tChecking for binaryen\n"
if [ ! -d ${HOME}/opt/binaryen ]; then
# Install binaryen v1.37.14:
printf "\tInstalling binaryen v1.37.14:\n"
cd ${TEMP_DIR}
git clone https://github.com/WebAssembly/binaryen
cd binaryen
git checkout tags/1.37.14
cmake . && make
if [ $? -ne 0 ]; then
printf "\tError compiling binaryen.\n"
printf "\tExiting now.\n\n"
exit;
fi
mkdir -p ${HOME}/opt/binaryen/ 2>/dev/null
mv ${TEMP_DIR}/binaryen/bin ${HOME}/opt/binaryen/
rm -rf ${TEMP_DIR}/binaryen
else
printf "\tBinaryen found at ${HOME}/opt/binaryen\n"
fi
printf "\n\tChecking for LLVM with WASM support.\n"
if [ ! -d ${HOME}/opt/wasm/bin ]; then
# Build LLVM and clang with EXPERIMENTAL WASM support:
printf "\tInstalling LLVM & WASM\n"
cd ${TEMP_DIR}
mkdir llvm-compiler 2>/dev/null
cd llvm-compiler
git clone --depth 1 --single-branch --branch release_40 https://github.com/llvm-mirror/llvm.git
cd llvm/tools
git clone --depth 1 --single-branch --branch release_40 https://github.com/llvm-mirror/clang.git
cd ..
mkdir build
cd build
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=${HOME}/opt/wasm -DLLVM_TARGETS_TO_BUILD= -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly -DCMAKE_BUILD_TYPE=Release ../
if [ $? -ne 0 ]; then
printf "\tError compiling LLVM and clang with EXPERIMENTAL WASM support.\n"
printf "\tExiting now.\n\n"
exit;
fi
make -j$(nproc)
if [ $? -ne 0 ]; then
printf "\tError compiling LLVM and clang with EXPERIMENTAL WASM support.\n"
printf "\tExiting now.\n\n"
exit;
fi
make install
rm -rf build
else
printf "\tWASM found at ${HOME}/opt/wasm\n"
fi
printf "\n\tChecking for LLVM with RTTI support.\n"
if [ ! ${HOME}/opt/llvm/bin ]; then
if [ ! -d ${TEMP_DIR}/llvm-compiler/llvm ]; then
cd ${TEMP_DIR}
mkdir llvm-compiler 2>/dev/null
cd llvm-compiler
git clone --depth 1 --single-branch --branch release_40 https://github.com/llvm-mirror/llvm.git
cd llvm/tools
git clone --depth 1 --single-branch --branch release_40 https://github.com/llvm-mirror/clang.git
fi
cd ${TEMP_DIR}/llvm-compiler/llvm
mkdir build
cd build
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=${HOME}/opt/llvm -DCMAKE_BUILD_TYPE=release -DLLVM_ENABLE_RTTI=1 ../
if [ $? -ne 0 ]; then
printf "\tError compiling LLVM and clang with RTTI support.\n"
printf "\tExiting now.\n\n"
exit;
fi
make -j$(nproc)
if [ $? -ne 0 ]; then
printf "\tError compiling LLVM and clang with RTTI support.\n"
printf "\tExiting now.\n\n"
exit;
fi
make install
fi
rm -rf ${TEMP_DIR}/llvm-compiler 2>/dev/null
\ No newline at end of file
OS_VER=$( cat /etc/os-release | grep VERSION_ID | cut -d'=' -f2 | sed 's/[^0-9\.]//gI' )
OS_MAJ=`echo "${OS_VER}" | cut -d'.' -f1`
OS_MIN=`echo "${OS_VER}" | cut -d'.' -f2`
MEM_MEG=$( free -m | grep Mem | tr -s ' ' | cut -d\ -f2 )
CPU_SPEED=$( lscpu | grep "MHz" | tr -s ' ' | cut -d\ -f3 | cut -d'.' -f1 )
CPU_CORE=$( lscpu | grep "^CPU(s)" | tr -s ' ' | cut -d\ -f2 )
DISK_TOTAL=`df -h / | grep /dev | tr -s ' ' | cut -d\ -f2 | sed 's/[^0-9]//'`
DISK_AVAIL=`df -h / | grep /dev | tr -s ' ' | cut -d\ -f4 | sed 's/[^0-9]//'`
printf "\n\tOS name: $OS_NAME\n"
printf "\tOS Version: ${OS_VER}\n"
printf "\tCPU speed: ${CPU_SPEED}Mhz\n"
printf "\tCPU cores: $CPU_CORE\n"
printf "\tPhysical Memory: $MEM_MEG Mgb\n"
printf "\tDisk space total: ${DISK_TOTAL}G\n"
printf "\tDisk space available: ${DISK_AVAIL}G\n"
if [ $MEM_MEG -lt 4000 ]; then
echo "Your system must have 8 or more Gigabytes of physical memory installed."
echo "exiting now."
exit 1
fi
if [ $OS_MIN -lt 4 ]; then
echo "You must be running Ubuntu 16.04.x or higher to install EOSIO."
echo "exiting now"
exit 1
fi
if [ $DISK_AVAIL -lt 100 ]; then
echo "You must have at least 100GB of available storage to install EOSIO."
echo "exiting now"
exit 1
fi
# EPEL Versions
# clang 3.4.2
printf "\n\tChecking Yum installation\n"
YUM=$( which yum 2>/dev/null )
if [ $? -ne 0 ]; then
printf "\n\tYum must be installed to compile EOS.IO.\n"
printf "\n\tExiting now.\n"
exit 0
fi
printf "\tYum installation found at ${YUM}.\n"
printf "\n\tChecking EPEL repository installation.\n"
epel=$( sudo $YUM repoinfo epel | grep Repo-status | tr -s ' ' | cut -d: -f2 | sed 's/ //g' )
if [ -z "$epel" ]; then
printf "\n\tInstallation of EOS.IO requires the EPEL yum repository be installed.\n"
printf "\tWould you like to install the EPEL yum repository?\n"
select yn in "Yes" "No"; do
case $yn in
[Yy]* )
printf "\n\n\tInstalling EPEL Repository.\n\n"
sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-$(rpm -E '%{rhel}').noarch.rpm
if [ $? -ne 0 ]; then
printf "\n\tInstallation of EPEL repository was unsuccessful.\n"
printf "\n\tExiting now.\n"
exit 1;
else
printf "\n\tEPEL repository successfully installed.\n"
fi
break;;
[Nn]* ) printf "\n\tUser aborting installation of required EPEL repository,\n\tExiting now.\n"; exit;;
* ) printf "\n\tPlease type 1 for yes or 2 for no.\n";;
esac
done
fi
printf "\tEPEL repository found.\n"
# DEP_ARRAY=(clang-4.0 lldb-4.0 libclang-4.0-dev cmake make libbz2-dev libssl-dev libgmp3-dev autotools-dev build-essential libicu-dev python-dev autoconf libtool)
DEP_ARRAY=(git autoconf automake libtool make gcc gcc-c++ bzip2 bzip2-devel.x86_64 openssl-devel.x86_64 gmp.x86_64 gmp-devel.x86_64 libstdc++-devel.x86_64 python python-devel libedit.x86_64 libxml2-devel.x86_64 ncurses-devel.x86_64 swig.x86_64 )
DCOUNT=0
COUNT=1
DISPLAY=""
DEP=""
printf "\n\tChecking YUM for installed dependencies.\n\n"
for (( i=0; i<${#DEP_ARRAY[@]}; i++ ));
do
pkg=$( sudo yum info ${DEP_ARRAY[$i]} 2>/dev/null | grep Repo | tr -s ' ' | cut -d: -f2 | sed 's/ //g' )
if [ "$pkg" != "installed" ]; then
DEP=$DEP" ${DEP_ARRAY[$i]} "
DISPLAY="${DISPLAY}${COUNT}. ${DEP_ARRAY[$i]}\n\t"
printf "\tPackage ${DEP_ARRAY[$i]} ${bldred} NOT ${txtrst} found.\n"
let COUNT++
let DCOUNT++
else
printf "\tPackage ${DEP_ARRAY[$i]} found.\n"
continue
fi
done
if [ ${DCOUNT} -ne 0 ]; then
printf "\n\tThe following dependencies are required to install EOSIO.\n"
printf "\n\t$DISPLAY\n\n"
printf "\tDo you wish to install these packages?\n"
select yn in "Yes" "No"; do
case $yn in
[Yy]* )
printf "\n\n\tInstalling dependencies\n\n"
sudo apt-get update
sudo yum -y install ${DEP}
if [ $? -ne 0 ]; then
printf "\n\tYUM dependency installation failed.\n"
printf "\n\tExiting now.\n"
exit 1
else
printf "\n\tYUM dependencies installed successfully.\n"
fi
break;;
[Nn]* ) echo "User aborting installation of required dependencies, Exiting now."; exit;;
* ) echo "Please type 1 for yes or 2 for no.";;
esac
done
else
printf "\n\tNo required YUM dependencies to install.\n"
fi
printf "\n\tChecking for boost libraries\n"
if [ ! -d ${HOME}/opt/boost_1_66_0 ]; then
# install boost
printf "\tInstalling boost libraries\n"
cd ${TEMP_DIR}
curl -L https://dl.bintray.com/boostorg/release/1.66.0/source/boost_1_66_0.tar.bz2 > boost_1.66.0.tar.bz2
tar xf boost_1.66.0.tar.bz2
cd boost_1_66_0/
./bootstrap.sh "--prefix=$BOOST_ROOT"
./b2 install
rm -rf ${TEMP_DIR}/boost_1_66_0/
rm -f ${TEMP_DIR}/boost_1.66.0.tar.bz2
else
printf "\tBoost 1.66 found at ${HOME}/opt/boost_1_66_0\n"
fi
printf "\n\tChecking for secp256k1-zkp\n"
# install secp256k1-zkp (Cryptonomex branch)
if [ ! -e /usr/local/lib/libsecp256k1.a ]; then
printf "\tInstalling secp256k1-zkp (Cryptonomex branch)\n"
cd ${TEMP_DIR}
git clone https://github.com/cryptonomex/secp256k1-zkp.git
cd secp256k1-zkp
./autogen.sh
if [ $? -ne 0 ]; then
printf "\tError running autogen for secp256k1-zkp.\n"
printf "\tExiting now.\n\n"
exit;
fi
./configure
make
if [ $? -ne 0 ]; then
printf "\tError compiling secp256k1-zkp.\n"
printf "\tExiting now.\n\n"
exit;
fi
sudo make install
rm -rf cd ${TEMP_DIR}/secp256k1-zkp
else
printf "\tsecp256k1 found\n"
fi
printf "\n\tChecking for CMAKE.\n"
CMAKE=$( which cmake 2>/dev/null )
# install CMAKE 3.10.2
if [ -z $CMAKE ]; then
printf "\tInstalling CMAKE\n"
cd ${TEMP_DIR}
curl -L -O https://cmake.org/files/v3.10/cmake-3.10.2.tar.gz
tar xf cmake-3.10.2.tar.gz
rm -f cmake-3.10.2.tar.gz
cd cmake-3.10.2
./bootstrap
if [ $? -ne 0 ]; then
printf "\tError running bootstrap for CMAKE.\n"
printf "\tExiting now.\n\n"
exit;
fi
make
if [ $? -ne 0 ]; then
printf "\tError compiling CMAKE.\n"
printf "\tExiting now.\n\n"
exit;
fi
sudo make install
rm -rf cd ${TEMP_DIR}/cmake-3.10.2
else
printf "\tCMAKE found\n"
fi
printf "\n\tChecking for binaryen\n"
if [ ! -d ${HOME}/opt/binaryen ]; then
# Install binaryen v1.37.14:
printf "\tInstalling binaryen v1.37.14:\n"
cd ${TEMP_DIR}
git clone https://github.com/WebAssembly/binaryen
cd binaryen
git checkout tags/1.37.14
cmake . && make
if [ $? -ne 0 ]; then
printf "\tError compiling binaryen.\n"
printf "\tExiting now.\n\n"
exit;
fi
mkdir -p ${HOME}/opt/binaryen/ 2>/dev/null
mv ${TEMP_DIR}/binaryen/bin ${HOME}/opt/binaryen/
rm -rf ${TEMP_DIR}/binaryen
else
printf "\tBinaryen found at ${HOME}/opt/binaryen\n"
fi
printf "\n\tChecking for WASM\n"
if [ ! -d ${HOME}/opt/wasm ]; then
# Build LLVM and clang for WASM:
printf "\tInstalling LLVM & WASM\n"
cd ${TEMP_DIR}
mkdir wasm-compiler 2>/dev/null
cd wasm-compiler
git clone --depth 1 --single-branch --branch release_40 https://github.com/llvm-mirror/llvm.git
cd llvm/tools
git clone --depth 1 --single-branch --branch release_40 https://github.com/llvm-mirror/clang.git
cd ..
mkdir build
cd build
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=${HOME}/opt/wasm -DLLVM_TARGETS_TO_BUILD= -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly -DCMAKE_BUILD_TYPE=Release ../
make -j $(nproc) install
rm -rf ${TEMP_DIR}/wasm-compiler
else
printf "\tWASM found at ${HOME}/opt/wasm\n"
fi
\ No newline at end of file
OS_VER=$( cat /etc/os-release | grep VERSION_ID | cut -d'=' -f2 | sed 's/[^0-9\.]//gI' )
OS_MAJ=`echo "${OS_VER}" | cut -d'.' -f1`
OS_MIN=`echo "${OS_VER}" | cut -d'.' -f2`
MEM_MEG=$( free -m | grep Mem | tr -s ' ' | cut -d\ -f2 )
CPU_SPEED=$( lscpu | grep "MHz" | tr -s ' ' | cut -d\ -f3 | cut -d'.' -f1 )
CPU_CORE=$( lscpu | grep "^CPU(s)" | tr -s ' ' | cut -d\ -f2 )
DISK_TOTAL=`df -h / | grep /dev | tr -s ' ' | cut -d\ -f2 | sed 's/[^0-9]//'`
DISK_AVAIL=`df -h / | grep /dev | tr -s ' ' | cut -d\ -f4 | sed 's/[^0-9]//'`
printf "\n\tOS name: $OS_NAME\n"
printf "\tOS Version: ${OS_VER}\n"
printf "\tCPU speed: ${CPU_SPEED}Mhz\n"
printf "\tCPU cores: $CPU_CORE\n"
printf "\tPhysical Memory: $MEM_MEG Mgb\n"
printf "\tDisk space total: ${DISK_TOTAL}G\n"
printf "\tDisk space available: ${DISK_AVAIL}G\n"
if [ $MEM_MEG -lt 4000 ]; then
echo "Your system must have 8 or more Gigabytes of physical memory installed."
echo "exiting now."
exit 1
fi
if [ $OS_MIN -lt 4 ]; then
echo "You must be running Ubuntu 16.04.x or higher to install EOSIO."
echo "exiting now"
exit 1
fi
if [ $DISK_AVAIL -lt 100 ]; then
echo "You must have at least 100GB of available storage to install EOSIO."
echo "exiting now"
exit 1
fi
DEP_ARRAY=(clang-4.0 lldb-4.0 libclang-4.0-dev cmake make libbz2-dev libssl-dev libgmp3-dev autotools-dev build-essential libbz2-dev libicu-dev python-dev autoconf libtool curl)
DCOUNT=0
COUNT=1
DISPLAY=""
DEP=""
printf "\n\tChecking for installed dependencies.\n\n"
for (( i=0; i<${#DEP_ARRAY[@]}; i++ ));
do
pkg=$( dpkg -s ${DEP_ARRAY[$i]} 2>/dev/null | grep Status | tr -s ' ' | cut -d\ -f4 )
if [ -z "$pkg" ]; then
DEP=$DEP" ${DEP_ARRAY[$i]} "
DISPLAY="${DISPLAY}${COUNT}. ${DEP_ARRAY[$i]}\n\t"
printf "\tPackage ${DEP_ARRAY[$i]} ${bldred} NOT ${txtrst} found.\n"
let COUNT++
let DCOUNT++
else
printf "\tPackage ${DEP_ARRAY[$i]} found.\n"
continue
fi
done
if [ ${DCOUNT} -ne 0 ]; then
printf "\n\tThe following dependencies are required to install EOSIO.\n"
printf "\n\t$DISPLAY\n\n"
printf "\tDo you wish to install these packages?\n"
select yn in "Yes" "No"; do
case $yn in
[Yy]* )
printf "\n\n\tInstalling dependencies\n\n"
sudo apt-get update
sudo apt-get -y install ${DEP}
if [ $? -ne 0 ]; then
printf "\n\tDPKG dependency failed.\n"
printf "\n\tExiting now.\n"
exit 1
else
printf "\n\tDPKG dependencies installed successfully.\n"
fi
break;;
[Nn]* ) echo "User aborting installation of required dependencies, Exiting now."; exit;;
* ) echo "Please type 1 for yes or 2 for no.";;
esac
done
else
printf "\n\tNo required dpkg dependencies to install.\n"
fi
printf "\n\tChecking for boost libraries\n"
if [ ! -d ${HOME}/opt/boost_1_66_0 ]; then
# install boost
printf "\tInstalling boost libraries\n"
cd ${TEMP_DIR}
curl -L https://dl.bintray.com/boostorg/release/1.66.0/source/boost_1_66_0.tar.bz2 > boost_1.66.0.tar.bz2
tar xf boost_1.66.0.tar.bz2
cd boost_1_66_0/
./bootstrap.sh "--prefix=$BOOST_ROOT"
./b2 install
rm -rf ${TEMP_DIR}/boost_1_66_0/
rm -f ${TEMP_DIR}/boost_1.66.0.tar.bz2
else
printf "\tBoost 1.66 found at ${HOME}/opt/boost_1_66_0\n"
fi
printf "\n\tChecking for secp256k1-zkp\n"
# install secp256k1-zkp (Cryptonomex branch)
if [ ! -e /usr/local/lib/libsecp256k1.a ]; then
printf "\tInstalling secp256k1-zkp (Cryptonomex branch)\n"
cd ${TEMP_DIR}
git clone https://github.com/cryptonomex/secp256k1-zkp.git
cd secp256k1-zkp
./autogen.sh
if [ $? -ne 0 ]; then
printf "\tError running autogen for secp256k1-zkp.\n"
printf "\tExiting now.\n\n"
exit;
fi
./configure
make
if [ $? -ne 0 ]; then
printf "\tError compiling secp256k1-zkp.\n"
printf "\tExiting now.\n\n"
exit;
fi
sudo make install
rm -rf cd ${TEMP_DIR}/secp256k1-zkp
else
printf "\tsecp256k1 found\n"
fi
printf "\n\tChecking for binaryen\n"
if [ ! -d ${HOME}/opt/binaryen ]; then
# Install binaryen v1.37.14:
printf "\tInstalling binaryen v1.37.14:\n"
cd ${TEMP_DIR}
git clone https://github.com/WebAssembly/binaryen
cd binaryen
git checkout tags/1.37.14
cmake . && make
if [ $? -ne 0 ]; then
printf "\tError compiling binaryen.\n"
printf "\tExiting now.\n\n"
exit;
fi
mkdir -p ${HOME}/opt/binaryen/ 2>/dev/null
mv ${TEMP_DIR}/binaryen/bin ${HOME}/opt/binaryen/
rm -rf ${TEMP_DIR}/binaryen
else
printf "\tBinaryen found at ${HOME}/opt/binaryen\n"
fi
printf "\n\tChecking for LLVM with WASM support.\n"
if [ ! -d ${HOME}/opt/wasm/bin ]; then
# Build LLVM and clang for WASM:
printf "\tInstalling LLVM & WASM\n"
cd ${TEMP_DIR}
mkdir llvm-compiler 2>/dev/null
cd llvm-compiler
git clone --depth 1 --single-branch --branch release_40 https://github.com/llvm-mirror/llvm.git
cd llvm/tools
git clone --depth 1 --single-branch --branch release_40 https://github.com/llvm-mirror/clang.git
cd ..
mkdir build
cd build
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=${HOME}/opt/wasm -DLLVM_TARGETS_TO_BUILD= -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly -DCMAKE_BUILD_TYPE=Release ../
if [ $? -ne 0 ]; then
printf "\tError compiling LLVM and clang with EXPERIMENTAL WASM support.\n"
printf "\tExiting now.\n\n"
exit;
fi
make -j$(nproc)
if [ $? -ne 0 ]; then
printf "\tError compiling LLVM and clang with EXPERIMENTAL WASM support.\n"
printf "\tExiting now.\n\n"
exit;
fi
rm -rf ${TEMP_DIR}/llvm-compiler
else
printf "\tWASM found at ${HOME}/opt/wasm/bin\n"
fi
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册