3

I'm trying to compile v0.8.6 of the core client from source, in order to compare IDB (Initial Blockchain Download) performance between versions.

I created a fresh Ubuntu Xenial 16.04 machine on Amazon EC2. I then ran the following commands (which were sufficient for version 0.9.3 and up):

sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install build-essential autoconf libboost-all-dev \
                     libssl-dev libtool pkg-config libevent-dev

In addition for this specific version I ran:

sudo apt-get install libdb++-dev libminiupnpc-dev

I then checked out the source and started the compilation:

git clone https://github.com/bitcoin/bitcoin.git
cd bitcoin
git checkout v0.8.6
cd src/
make -f makefile.unix

I'm only interested in running headless bitcoind, but I'm not sure if it was already separated form the UI at that release.

I get the following error:

rpcrawtransaction.cpp:241:77:   required from here
/usr/include/boost/variant/get.hpp:178:5: error: invalid application of ‘sizeof’ to incomplete type ‘boost::STATIC_ASSERTION_FAILURE<false>’
 BOOST_STATIC_ASSERT_MSG(
 ^
makefile.unix:172: recipe for target 'obj/rpcrawtransaction.o' failed
make: *** [obj/rpcrawtransaction.o] Error 1

Interestingly 0.7, 0.6 and 0.5 do compile successfully, although they get stuck during IDB, so perhaps compilation just failed silently. I'll make a separate post for those later.

I suspect that I need to install some very specific versions of dependencies, but I'm not sure which and how to go about that. I haven't used Linux in years.

I still have the VM, so I can provide more details if needed.

I'm open to alternative approaches, even using a Windows VM :-)

8

2 Answers 2

2

You can use the gitian build system. Instructions for building 0.8.x with gitian are available here: https://github.com/bitcoin/bitcoin/tree/0.8/contrib/gitian-descriptors and here: https://github.com/bitcoin/bitcoin/blob/0.8/doc/release-process.md. Using gitian should get you exactly the same binaries as those that were released.

3
  • Thanks, that's a great opportunity to learn about Gitian. I'll mark your answer as Accepted if that works out. Jul 5, 2017 at 18:06
  • Unfortunately this won't work out of the box on EC2 (T2): sudo /usr/sbin/kvm-ok INFO: Your CPU does not support KVM extensions KVM acceleration can NOT be used It looks like I would have to use something fancy like Ravello, or am I missing something? Jul 6, 2017 at 9:22
  • 1
    IIRC EC2 itself is a VM, so you can't use KVM in it. However, you should be able to use LXC and there are instructions for that at the bottom of the first link I posted (ignore the virtualbox stuff). You will need to do the make-base-vm commands with the --lxc option too.
    – Andrew Chow
    Jul 6, 2017 at 16:33
1

Nick ODell pointed me to the solution:

Edit rpcrawtransaction.cpp and change:

const CScriptID& hash = boost::get<const CScriptID&>(address);

To:

const CScriptID& hash = boost::get<CScriptID>(address);

This was sufficient to get it to compile.

In addition I applied the OpenSSL patch Pieter Wuille pointed out.

You have to do this manually because depends/packages/openssl.mk no longer exists, and the function name and signature has changed. Simply open src/key.cpp and replace everything inside the CKey::Verify function brackets with this new version.

More than 210,000 blocks synced so far, so I'm assuming this worked.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.