diff --git a/doc/build-unix.md b/doc/build-unix.md index e1865bbf..9b40d1eb 100644 --- a/doc/build-unix.md +++ b/doc/build-unix.md @@ -2,8 +2,11 @@ Copyright (c) 2009-2013 Bitcoin Developers Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. -This product includes software developed by the OpenSSL Project for use in the [OpenSSL Toolkit](http://www.openssl.org/). This product includes -cryptographic software written by Eric Young ([eay@cryptsoft.com](mailto:eay@cryptsoft.com)), and UPnP software written by Thomas Bernard. +This product includes software developed by the OpenSSL Project for +use in the [OpenSSL Toolkit](http://www.openssl.org/). This product +includes cryptographic software written by Eric Young +([eay@cryptsoft.com](mailto:eay@cryptsoft.com)), and UPnP software +written by Thomas Bernard. UNIX BUILD NOTES @@ -13,116 +16,84 @@ To Build --------------------- cd src/ - make -f makefile.unix # Headless bitcoin + make -f makefile.unix # Headless primeminer Dependencies --------------------- - Library Purpose Description - ------- ------- ----------- - libssl SSL Support Secure communications - libdb4.8 Berkeley DB Blockchain & wallet storage - libboost Boost C++ Library - libgmp Gnu MP Multiprecision arithmetic library developers tools - miniupnpc UPnP Support Optional firewall-jumping support +Required: + - libssl (SSL Support) + - libdb4.8 (Berkeley DB) + - libboost (Boost C++ Library) + - libgmp (GNU Multiprecision) -[miniupnpc](http://miniupnp.free.fr/) may be used for UPnP port mapping. It can be downloaded from [here]( -http://miniupnp.tuxfamily.org/files/). UPnP support is compiled in and -turned off by default. Set USE_UPNP to a different value to control this: +Optional: + - miniupnpc (UPnP Support) - USE_UPNP= No UPnP support miniupnp not required - USE_UPNP=0 (the default) UPnP support turned off by default at runtime - USE_UPNP=1 UPnP support turned on by default at runtime - -IPv6 support may be disabled by setting: - - USE_IPV6=0 Disable IPv6 support +Versions used in this release: + - GCC 4.3.3 + - OpenSSL 1.0.1c + - Berkeley DB 4.8.30.NC (not 5.x!) + - Boost 1.48 + - GMP 5.0.2 + - miniupnpc 1.6 Licenses of statically linked libraries: - Berkeley DB New BSD license with additional requirement that linked - software must be free open source - Boost MIT-like license - miniupnpc New (3-clause) BSD license - -- Versions used in this release: -- GCC 4.3.3 -- OpenSSL 1.0.1c -- Berkeley DB 4.8.30.NC -- Boost 1.48 -- GMP 5.0.2 -- miniupnpc 1.6 + - Berkeley DB: New BSD license with additional requirement that linked software must be free open source + - Boost: MIT-like license + - miniupnpc: New (3-clause) BSD license Dependency Build Instructions: Ubuntu & Debian ---------------------------------------------- Build requirements: - sudo apt-get install build-essential libssl-dev + sudo apt-get install build-essential libssl-dev libboost-all-dev libgmp-dev -for Ubuntu 12.04: +Berkeley db4.8 packages are available [here](https://launchpad.net/~bitcoin/+archive/bitcoin): - sudo apt-get install libboost-all-dev + sudo add-apt-repository ppa:bitcoin/bitcoin + sudo apt-get update + sudo apt-get install libdb4.8-dev libdb4.8++-dev - db4.8 packages are available [here](https://launchpad.net/~bitcoin/+archive/bitcoin). +Ubuntu precise has packages for libdb5.1-dev and libdb5.1++-dev, +but using these will break binary wallet compatibility, and is not recommended. - Ubuntu precise has packages for libdb5.1-dev and libdb5.1++-dev, - but using these will break binary wallet compatibility, and is not recommended. +If you have trouble with libboost dependencies, make sure these are installed: -for other Ubuntu & Debian: + sudo apt-get install libboost-chrono1.48-dev libboost-filesystem1.48-dev libboost-system1.48-dev libboost-program-options1.48-dev libboost-thread1.48-dev - sudo apt-get install libgmp-dev - sudo apt-get install libdb4.8-dev - sudo apt-get install libdb4.8++-dev - sudo apt-get install libboost1.48-dev - sudo apt-get install libboost-timer1.48-dev - sudo apt-get install libboost-chrono1.48-dev - (If using Boost 1.37, append -mt to the boost libraries in the makefile) +(If using Boost 1.37, append -mt to the boost libraries in the makefile, +use `apt-cache search libboost` to find out which version is available for your system.) Optional: - sudo apt-get install libminiupnpc-dev (see USE_UPNP compile flag) + sudo apt-get install libminiupnpc-dev + +[miniupnpc](http://miniupnp.free.fr/) may be used for UPnP port mapping. +It can be downloaded from [here](http://miniupnp.tuxfamily.org/files/). +UPnP support is compiled in and turned off by default. +Set USE_UPNP to a different value to control this: + + USE_UPNP= No UPnP support miniupnp not required + USE_UPNP=0 (the default) UPnP support turned off by default at runtime + USE_UPNP=1 UPnP support turned on by default at runtime + +IPv6 support may be disabled by setting: + + USE_IPV6=0 Disable IPv6 support -Dependency Build Instructions: Gentoo -------------------------------------- - -Note: If you just want to install bitcoind on Gentoo, you can add the Bitcoin overlay and use your package manager: - - layman -a bitcoin && emerge bitcoind - emerge -av1 --noreplace boost glib openssl sys-libs/db:4.8 - -Take the following steps to build (no UPnP support): - - cd ${BITCOIN_DIR}/src - make -f makefile.unix USE_UPNP= USE_IPV6=1 BDB_INCLUDE_PATH='/usr/include/db4.8' - strip bitcoind - - -Notes ------ -The release is built with GCC and then "strip bitcoind" to strip the debug -symbols, which reduces the executable size by about 90%. - - -miniupnpc ---------- - tar -xzvf miniupnpc-1.6.tar.gz - cd miniupnpc-1.6 - make - sudo su - make install - - -Berkeley DB ------------ -You need Berkeley DB 4.8. If you have to build Berkeley DB yourself: +Compiling Berkeley DB +--------------------- +You need Berkeley DB 4.8. If you have to build Berkeley DB yourself: ../dist/configure --enable-cxx make -Boost ------ +Compiling Boost +--------------- If you need to build Boost yourself: sudo su @@ -130,45 +101,54 @@ If you need to build Boost yourself: ./bjam install +Compiling miniupnpc +------------------- + tar -xzvf miniupnpc-1.6.tar.gz + cd miniupnpc-1.6 + make + sudo su + make install + + Security -------- To help make your bitcoin installation more secure by making certain attacks impossible to exploit even if a vulnerability is found, you can take the following measures: * Position Independent Executable - Build position independent code to take advantage of Address Space Layout Randomization - offered by some kernels. An attacker who is able to cause execution of code at an arbitrary - memory location is thwarted if he doesn't know where anything useful is located. - The stack and heap are randomly located by default but this allows the code section to be - randomly located as well. + Build position independent code to take advantage of Address Space Layout Randomization + offered by some kernels. An attacker who is able to cause execution of code at an arbitrary + memory location is thwarted if he doesn't know where anything useful is located. + The stack and heap are randomly located by default but this allows the code section to be + randomly located as well. - On an Amd64 processor where a library was not compiled with -fPIC, this will cause an error - such as: "relocation R_X86_64_32 against `......' can not be used when making a shared object;" + On an Amd64 processor where a library was not compiled with -fPIC, this will cause an error + such as: "relocation R_X86_64_32 against `......' can not be used when making a shared object;" - To build with PIE, use: + To build with PIE, use: - make -f makefile.unix ... -e PIE=1 + make -f makefile.unix ... -e PIE=1 - To test that you have built PIE executable, install scanelf, part of paxutils, and use: + To test that you have built PIE executable, install scanelf, part of paxutils, and use: - scanelf -e ./bitcoin + scanelf -e ./bitcoin - The output should contain: - TYPE - ET_DYN + The output should contain: + TYPE + ET_DYN * Non-executable Stack - If the stack is executable then trivial stack based buffer overflow exploits are possible if - vulnerable buffers are found. By default, bitcoin should be built with a non-executable stack - but if one of the libraries it uses asks for an executable stack or someone makes a mistake - and uses a compiler extension which requires an executable stack, it will silently build an - executable without the non-executable stack protection. + If the stack is executable then trivial stack based buffer overflow exploits are possible if + vulnerable buffers are found. By default, bitcoin should be built with a non-executable stack + but if one of the libraries it uses asks for an executable stack or someone makes a mistake + and uses a compiler extension which requires an executable stack, it will silently build an + executable without the non-executable stack protection. - To verify that the stack is non-executable after compiling use: - `scanelf -e ./bitcoin` + To verify that the stack is non-executable after compiling use: + `scanelf -e ./bitcoin` - the output should contain: + the output should contain: STK/REL/PTL RW- R-- RW- - The STK RW- means that the stack is readable and writeable but not executable. + The STK RW- means that the stack is readable and writeable but not executable. diff --git a/src/main_poolminer.cpp b/src/main_poolminer.cpp index 44d62c4a..e0d959c3 100644 --- a/src/main_poolminer.cpp +++ b/src/main_poolminer.cpp @@ -578,6 +578,7 @@ int main(int argc, char **argv) ParseParameters(argc, argv); socket_to_server = NULL; + pool_share_minimum = (unsigned int)GetArg("-poolshare", 7); thread_num_max = GetArg("-genproclimit", 1); // what about boost's hardware_concurrency() ? fee_to_pay = GetArg("-poolfee", 3); miner_id = GetArg("-minerid", 0); diff --git a/src/makefile.unix b/src/makefile.unix index 2734e85e..0a45c819 100644 --- a/src/makefile.unix +++ b/src/makefile.unix @@ -45,11 +45,9 @@ LIBS += \ -l boost_program_options$(BOOST_LIB_SUFFIX) \ -l boost_thread$(BOOST_LIB_SUFFIX) \ -l boost_chrono$(BOOST_LIB_SUFFIX) \ - -l boost_timer$(BOOST_LIB_SUFFIX) \ -l db_cxx$(BDB_LIB_SUFFIX) \ -l ssl \ -l crypto \ - -l rt \ -Wl,-Bdynamic \ -l gmp \ -Wl,-B$(LMODE) diff --git a/src/prime.cpp b/src/prime.cpp index 6d85688a..74581123 100644 --- a/src/prime.cpp +++ b/src/prime.cpp @@ -14,6 +14,7 @@ std::vector vPrimes; unsigned int nSieveSize = nDefaultSieveSize; unsigned int nSievePercentage = nDefaultSievePercentage; unsigned int nSieveExtensions = nDefaultSieveExtensions; +unsigned int pool_share_minimum = (unsigned int)GetArg("-poolshare", 7); static unsigned int int_invert(unsigned int a, unsigned int nPrime); @@ -712,7 +713,7 @@ static bool ProbablePrimeChainTestFast(const mpz_class& mpzPrimeChainOrigin, CPr } } - return (!poolmining && (nChainLength >= nBits)) || (poolmining && (TargetGetLength(nChainLength) >= POOL_SHARE_MINIMUM)); + return (!poolmining && (nChainLength >= nBits)) || (poolmining && (TargetGetLength(nChainLength) >= pool_share_minimum)); } // Sieve for mining diff --git a/src/prime.h b/src/prime.h index e1894438..077712a6 100644 --- a/src/prime.h +++ b/src/prime.h @@ -15,7 +15,7 @@ /* POOL ADDON */ /**************/ -static const unsigned int POOL_SHARE_MINIMUM = 7; +extern unsigned int pool_share_minimum; extern size_t thread_num_max; class CBlockProvider { diff --git a/src/primeminer b/src/primeminer new file mode 100755 index 00000000..77ddf3e6 Binary files /dev/null and b/src/primeminer differ