¿Cómo compilo Core 0.8.6 en Ubuntu (EC2)?

Estoy tratando de compilar v0.8.6 del cliente principal desde la fuente , para comparar el rendimiento de IDB (descarga inicial de blockchain) entre versiones.

Creé una nueva máquina Ubuntu Xenial 16.04 en Amazon EC2. Luego ejecuté los siguientes comandos (que fueron suficientes para la versión 0.9.3 y posteriores):

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

Además para esta versión específica ejecuté:

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

Luego revisé la fuente y comencé la compilación:

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

Solo estoy interesado en ejecutar headless bitcoind, pero no estoy seguro de si ya estaba separado de la interfaz de usuario en ese lanzamiento.

Obtuve el siguiente 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

Curiosamente, 0.7, 0.6 y 0.5 se compilan con éxito, aunque se atascan durante IDB, por lo que tal vez la compilación falló silenciosamente. Voy a hacer una publicación separada para esos más tarde.

Sospecho que necesito instalar algunas versiones muy específicas de dependencias, pero no estoy seguro de cuál y cómo hacerlo. No he usado Linux en años.

Todavía tengo la VM, por lo que puedo proporcionar más detalles si es necesario.

Estoy abierto a enfoques alternativos, incluso usando una máquina virtual de Windows :-)

1) Este hilo sugiere desactivar BOOST_VARIANT_USE_RELAXED_GET_BY_DEFAULT, o aplicar este cambio . 2) ¿Cuál es tu versión boost? PD: Buen proyecto!
@NickODell libboost-all-devversión 1.58.0. Sin embargo, podría intentar el enfoque gitian primero.
En cuanto a las versiones anteriores a la 0.8 que se atascan en IBD, deberá aumentar la cantidad de bloqueos de BDB como se describe aquí: bitcoin.org/en/alert/2013-03-15-upgrade-deadline .
@PieterWuille gracias, en realidad ya lo hice. Se atascan en diferentes bloques: gist.github.com/Sjors/70f14baf1f834f3547bf35553faff610#v072 También podría probar gitian para esos, porque estoy bastante seguro de que las dependencias son un desastre en Ubuntu moderno predeterminado.
Está utilizando una versión de OpenSSL demasiado reciente que requiere firmas DER estrictas, que solo se volvieron obligatorias en Bitcoin después de BIP66. Necesitará el parche aquí: github.com/bitcoin/bitcoin/pull/5634/files para usar la cadena anterior a BIP66 con el nuevo OpenSSL.
PD: tardó 184 horas en sincronizarse. Aquí está el gráfico: medium.com/@provoost/…
¿Conoces las dependencias que necesitabas para construir 0.8.6 y las otras versiones anteriores a 0.8? ¡Gracias por cualquier idea!
Solo para aclarar, las versiones de las dependencias que usó. (por ejemplo, ya mencionaste 1.58.0 boost, ¿qué pasa con los demás? ¡Gracias!)

Respuestas (2)

Puede usar el sistema de compilación gitian. Las instrucciones para construir 0.8.x con gitian están disponibles aquí: https://github.com/bitcoin/bitcoin/tree/0.8/contrib/gitian-descriptors y aquí: https://github.com/bitcoin/bitcoin/blob/ 0.8/doc/release-process.md . El uso de gitian debería proporcionarle exactamente los mismos binarios que los que se publicaron.

Gracias, es una gran oportunidad para aprender sobre Gitian. Marcaré tu respuesta como Aceptada si funciona.
Desafortunadamente, esto no funcionará en EC2 (T2): sudo /usr/sbin/kvm-ok INFO: Your CPU does not support KVM extensions KVM acceleration can NOT be usedparece que tendría que usar algo elegante como Ravello , ¿o me estoy perdiendo algo?
IIRC EC2 en sí es una VM, por lo que no puede usar KVM en ella. Sin embargo, debería poder usar LXC y hay instrucciones para eso en la parte inferior del primer enlace que publiqué (ignore las cosas de virtualbox). Tendrá que hacer los make-base-vmcomandos con la --lxcopción también.

Nick ODell me indicó la solución :

Editar rpcrawtransaction.cppy cambiar:

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

A:

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

Esto fue suficiente para que compilara.

Además, apliqué el parche OpenSSL que señaló Pieter Wuille .

Tiene que hacer esto manualmente porque depends/packages/openssl.mkya no existe y el nombre y la firma de la función han cambiado. Simplemente abra src/key.cppy reemplace todo lo que esté dentro de los CKey::Verifyparéntesis de función con esta nueva versión .

Más de 210 000 bloques sincronizados hasta ahora, así que asumo que esto funcionó.