BitcoinCore is Bitcoin reference implementation.
We are going to download BitcoinCore source code and then build and install it on a Debian Sid system.
https://github.com/bitcoin/bitcoin/blob/master/doc/build-unix.md
Get Bitcoin source code
First we download source code from BitcoinCore repository by using git:
$ sudo aptitude install gitclone Bitcoin repo:
$ git clone https://github.com/bitcoin/bitcoin$ cd bitcoinWe have downloaded master development branch. We rather a stable one, e.g: 0.15 one
bitcoin$ git branch* master
bitcoin$ git remote showorigin
bitcoin$ git remote show origin* remote origin
Fetch URL: https://github.com/bitcoin/bitcoin
Push URL: https://github.com/bitcoin/bitcoin
HEAD branch: master
Remote branches:
0.10 tracked
0.11 tracked
0.12 tracked
0.13 tracked
0.14 tracked
0.15 tracked
0.8 tracked
0.9 tracked
master tracked
Local branch configured for 'git pull':
master merges with remote master
Local ref configured for 'git push':
master pushes to master (up to date)
We change into 0.15 branch:
$ git checkout -b 0.15 --track origin/0.15Branch '0.15' set up to track remote branch '0.15' from 'origin'.
Switched to a new branch '0.15'
$ git branch* 0.15
master
Generate configure file
We install some dependencies and execute autogen.sh to generate configure file:
$ sudo aptitude install autoconf libtool pkg-config$ bash autogen.shWe are going to compile Bitcoin node in a separate directory bitcoin_build
$ cd ..$ mkdir bitcoin_build$ cd bitcoin_buildInstall Berkeley database version 4.8
If we install some dependencies more and try to compile:
$ sudo aptitude install gawk$ sudo aptitude install g++ make$ ../bitcoin/configureWe get this error:
configure: error: libdb_cxx headers missing, Bitcoin Core requires this library for wallet functionality (--disable-wallet to disable wallet functionality)
It needs Berkeley database version 4.8 for compatibility with old wallet.dat files.
https://github.com/bitcoin/bitcoin/issues/3686
https://talk.peercoin.net/t/xolominer-how-to-compile-and-run-in-linux/825
We download Berkeley database and build it:
$ mkdir bdb-4.8$ cd bdb_4.8$ wget http://download.oracle.com/berkeley-db/db-4.8.30.tar.gz$ tar xvzf db-4.8.30.tar.gz$ cd db-4.8.30/build_unix/$ ../dist/configure --enable-cxxAn error happens because a builtin function in gcc has same name as a macro in bdb:
http://rupasundar.blogspot.com.es/2015/02/warning-conflicting-types-for-built-in.html
https://github.com/narkoleptik/os-x-berkeleydb-patch/blob/master/atomic.patch
../dist/../dbinc/atomic.h:179:19: warning: conflicting types for built-in function '__atomic_compare_exchange' [-Wbuiltin-declaration-mismatch] static inline int __atomic_compare_exchange( ../dist/../dbinc/atomic.h:147:2: error: incorrect number of arguments to function '__atomic_compare_exchange' __atomic_compare_exchange((p), (o), (n))
I rename __atomic_compare_exchange to __atomic_compare_exchange_db:
$ nano ../dbinc/atomic.h#define atomic_compare_exchange(env, p, o, n) \
__atomic_compare_exchange_db((p), (o), (n))Now we can finish installation of BDB
$ make$ sudo make installOnce bdb-4.8 is installed we continue with Bitcoin compilation:
We need to tell our system where to find db4.8
$ export BDB_INCLUDE_PATH="/usr/local/BerkeleyDB.4.8/include"$ export BDB_LIB_PATH="/usr/local/BerkeleyDB.4.8/lib"$ sudo ln -s /usr/local/BerkeleyDB.4.8/lib/libdb-4.8.so /usr/lib/libdb-4.8.so$ sudo ln -s /usr/local/BerkeleyDB.4.8/lib/libdb_cxx-4.8.so /usr/lib/libdb_cxx-4.8.so$ sudo ldconfig$ cd ~/devel/bitcoin_build$ ../bitcoin/configurechecking for Berkeley DB C++ headers... no
configure: error: libdb_cxx headers missing, Bitcoin Core requires this library for wallet functionality (--disable-wallet to disable wallet functionality)
We will set CPPFLAGS and LDFLAGS variables for the compiler and linker to find BDB headers and libraries.
$ ../bitcoin/configure CPPFLAGS="-I/usr/local/BerkeleyDB.4.8/include -O2" LDFLAGS="-L/usr/local/BerkeleyDB.4.8/lib"Finish BitcoinCore compilation
We install boost dependency
$ sudo aptitude install libboost-all-devFor hexdump binary dependency:
$ sudo aptitude install bsdmainutilsSSL dependency:
$ sudo aptitude install openssl libssl-devFinally we compile BitcoinCore:
$ ../bitcoin/configure CPPFLAGS="-I/usr/local/BerkeleyDB.4.8/include -O2" LDFLAGS="-L/usr/local/BerkeleyDB.4.8/lib"$ make$ sudo make installNow you can run your BitcoinCore node.
How to run a Bitcoin node in Debian