Wie kompiliere ich Core 0.8.6 auf Ubuntu (EC2)?

Ich versuche, v0.8.6 des Core-Clients aus source zu kompilieren , um die IDB-Leistung (Initial Blockchain Download) zwischen den Versionen zu vergleichen.

Ich habe eine neue Ubuntu Xenial 16.04-Maschine auf Amazon EC2 erstellt. Ich habe dann die folgenden Befehle ausgeführt (die für Version 0.9.3 und höher ausreichend waren):

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

Zusätzlich für diese spezielle Version lief ich:

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

Ich habe dann die Quelle ausgecheckt und die Kompilierung gestartet:

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

Ich bin nur daran interessiert, headless zu betreiben bitcoind, aber ich bin mir nicht sicher, ob es in dieser Version bereits von der Benutzeroberfläche getrennt war.

Ich bekomme folgenden Fehler:

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

Interessanterweise kompilieren 0.7, 0.6 und 0.5 erfolgreich, obwohl sie während der IDB hängen bleiben, also ist die Kompilierung vielleicht einfach stillschweigend fehlgeschlagen. Dafür mache ich später einen separaten Beitrag.

Ich vermute, dass ich einige sehr spezifische Versionen von Abhängigkeiten installieren muss, bin mir aber nicht sicher, welche und wie ich vorgehen soll. Ich habe Linux seit Jahren nicht mehr benutzt.

Ich habe immer noch die VM, daher kann ich bei Bedarf weitere Details bereitstellen.

Ich bin offen für alternative Ansätze, sogar mit einer Windows-VM :-)

1) Dieser Thread schlägt vor, BOOST_VARIANT_USE_RELAXED_GET_BY_DEFAULT zu deaktivieren oder diese Änderung anzuwenden . 2) Was ist Ihre Boost-Version? PS: Nettes Projekt!
@NickODell- libboost-all-devVersion 1.58.0. Ich könnte aber zuerst den Gitian-Ansatz versuchen.
Wenn Versionen vor 0.8 in IBD stecken bleiben, müssen Sie die Anzahl der BDB-Sperren wie hier beschrieben erhöhen: bitcoin.org/en/alert/2013-03-15-upgrade-deadline .
@PieterWuille danke, das habe ich eigentlich schon gemacht. Sie bleiben an verschiedenen Blöcken hängen: gist.github.com/Sjors/70f14baf1f834f3547bf35553faff610#v072 Ich könnte es auch mit Gitian versuchen, weil ich mir ziemlich sicher bin, dass die Abhängigkeiten auf dem modernen Standard-Ubuntu ein Durcheinander sind.
Sie verwenden eine zu neue OpenSSL-Version, die strenge DER-Signaturen erfordert, die erst nach BIP66 in Bitcoin obligatorisch wurden. Sie benötigen den Patch hier: github.com/bitcoin/bitcoin/pull/5634/files , um die Pre-BIP66-Kette mit dem neuen OpenSSL zu verwenden.
PS, also hat die Synchronisierung 184 Stunden gedauert. Hier ist das Diagramm: medium.com/@provoost/…
Kennen Sie die Abhängigkeiten, die Sie zum Erstellen von 0.8.6 und den anderen Versionen vor 0.8 benötigen? Danke für jeden Einblick!
Nur zur Verdeutlichung, die Versionen der Abhängigkeiten, die Sie verwendet haben. (z. B. Sie haben bereits 1.58.0 Boost erwähnt - was ist mit den anderen? Danke!)

Antworten (2)

Sie können das Gitian-Build-System verwenden. Anweisungen zum Erstellen von 0.8.x mit Gitian sind hier verfügbar: https://github.com/bitcoin/bitcoin/tree/0.8/contrib/gitian-descriptors und hier: https://github.com/bitcoin/bitcoin/blob/ 0.8/doc/release-process.md . Mit gitian sollten Sie genau die gleichen Binärdateien erhalten wie die, die veröffentlicht wurden.

Danke, das ist eine großartige Gelegenheit, mehr über Gitian zu erfahren. Ich werde Ihre Antwort als Akzeptiert markieren, wenn das funktioniert.
Leider funktioniert das nicht sofort auf EC2 (T2): sudo /usr/sbin/kvm-ok INFO: Your CPU does not support KVM extensions KVM acceleration can NOT be usedEs sieht so aus, als müsste ich etwas Ausgefallenes wie Ravello verwenden , oder übersehe ich etwas?
IIRC EC2 selbst ist eine VM, daher können Sie KVM darin nicht verwenden. Sie sollten jedoch in der Lage sein, LXC zu verwenden, und es gibt Anweisungen dafür am Ende des ersten Links, den ich gepostet habe (ignorieren Sie das Virtualbox-Zeug). Sie müssen die make-base-vmBefehle --lxcauch mit der Option ausführen.

Nick ODell wies mich auf die Lösung hin :

Bearbeiten rpcrawtransaction.cppund ändern:

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

Zu:

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

Dies war ausreichend, um es zum Kompilieren zu bringen.

Außerdem habe ich den OpenSSL - Patch angewendet, auf den Pieter Wuille hingewiesen hat .

Sie müssen dies manuell tun, da depends/packages/openssl.mkes nicht mehr existiert und sich der Funktionsname und die Signatur geändert haben. Öffnen Sie einfach src/key.cppalles innerhalb der CKey::VerifyFunktionsklammern und ersetzen Sie es durch diese neue Version .

Bisher wurden mehr als 210.000 Blöcke synchronisiert, also gehe ich davon aus, dass das funktioniert hat.