TD2 : Installation 'from scratch' de bitcoin sources

Ce td a pour objectif d'installer l'intégralité d'un système bitcoin, comme celui utilisé dans le Td1. Il vous apprendra comment compiler un outil unix, présentant des dépendances que votre administrateur système ne peut pas installer sur vos machines. Il s'agit plus d'un tp de compilation, déploiement Unix qu'un TD bitcoin, mais il s'agit d'un point de passage obligé pour travailler sur des outils en mode source.

La chaîne proposée ne fonctionne pas intégralement, des erreurs s'y sont glissées. A vous de corriger les différentes erreurs pour votre environnement de travail.

A la fin, vous devez rendre un script shell d'installation complet qui fonctionne avec l'appel suivant sur vos postes : ./instbitcoin-Nom1Nom2.sh. Nom1Nom2 est le nom des personnes de votre binôme. Le script doit permettre d'installer toute la chaine spécifique de compilation du service bitcoin. Ce script est à envoyer par mail en fin de séance à votre encadrant de TD.

--> Récupérer les sources de bitcoin

mkdir -p /tmp/bitcoin
cd /tmp/bitcoin
git clone https://github.com/bitcoin/bitcoin.git bitcoin-src

--> Lancer le script d'install bitcoin

cd /tmp/bitcoin/bitcoin-src    
./autogen.sh 
-> configure.ac:28: installing 'build-aux/install-sh'
-> configure.ac:28: installing 'build-aux/missing'
-> Makefile.am:8: error: Libtool library    used but 'LIBTOOL' is undefined

--> Créer un répertoire pour y mettre les installation des bibliothèques externes

mkdir /tmp/bitcoin/tools

--> Installer libtool

cd /tmp/bitcoin
wget https://ftp.gnu.org/gnu/libtool/libtool-2.4.6.tar.gz
tar zxvf ./libtool-2.4.6.tar.gz
cd /tmp/bitcoin/libtool-xxx
./configure --prefix=/tmp/bitcoin/tools/libtool
make
make install

--> Lancer le script d'install bitcoin même erreur

export ACLOCAL_PATH=/tmp/bitcoin/tools/libtool/share/aclocal/
--> Erreur sur libtoolize
export PATH=$PATH:/tmp/bitcoin/tools/libtool/bin/

--> Lancer le script ./configure --disable-wallet

...
checking for boostlib >= 1.20.0... configure: We could not detect the boost libraries (version 1.20 or higher). If you have a staged boost library (still not installed) please specify $BOOST_ROOT in your environment and do not give a PATH to --with-boost option.  If you are sure you have boost installed, then check your version number looking in <boost/version.hpp>. See http://randspringer.de/boost for more documentation.
...

--> Installer Boost

wget https://sourceforge.net/projects/boost/files/boost/1.61.0/boost_1_61_0.tar.gz/download
mv download boost_1_61_0.tar.gz
tar zxvf boost_1_61_0.tar.gz
cd ~/tools/boost
./bootstrap.sh --prefix=/tmp/bitcoin/tools/boost
./b2
cd ~/bt-src
export BOOST_ROOT=/tmp/bitcoin/boost_1_61_0

--> ./configure --disable-wallet

...
configure: error: openssl  not found.

--> Installer openssl

wget https://www.openssl.org/source/openssl-1.1.0.tar.gz
tar zxvf openssl-1.1.0.tar.gz
cd openssl-1.1.0
./config --prefix=/tmp/bitcoin/tools/openssl
make
make install
cd ~/bt-src

Q1: Quelle est la procédure standard d'installation d'un outil opensource unix ?

--> ./configure --disable-wallet

Q2: L'erreur openssl persiste, trouvez la correction à apporter dans le fichier config.log généré à la phase de configure.

--> ./configure --disable-wallet ... configure: error: libevent not found

Déroulez la même démarche que la réponse à Q2 pour installer libevent.

--> ./configure --disable-wallet

configure: creating ./config.status
config.status: creating Makefile
config.status: creating libsecp256k1.pc
config.status: creating src/libsecp256k1-config.h
config.status: src/libsecp256k1-config.h is unchanged
config.status: executing depfiles commands
config.status: executing libtool commands
Fixing libtool for -rpath problems.

Tout c'est bien passé, on peut faire un make.
Si tout se passe bien.

  CXXLD    bench/bench_bitcoin
make[2] : on quitte le  répertoire « /tmp/bitcoin/bt-src/src »
make[1] : on quitte le répertoire « /tmp/bitcoin/bt-src/src »
make[1] : on entre dans le répertoire « /tmp/bitcoin/bt-src »
make[1]: rien à faire pour « all-am ».
make[1] : on quitte le répertoire « /tmp/bitcoin/bt-src »

L'exécutable src/bitcoind est maintenant disponible. Vous pouvez l'exécuter.

Q3 : que se passe t'il ?

./src/bitcoind -debug -printtoconsole


Si vous êtes arrivé ici, vous savez compiler un programme unix avec les autools et l'ensemble des dépendances associées. Vous pouvez maintenant modifier les sources de ce programme et relancer des make pour vos tests.

Vous pouvez maintenant attaquer le TP : Je fais ma blockchain


wget https://github.com/libevent/libevent/releases/download/release-2.0.22-stable/libevent-2.0.22-stable.tar.gz
tar zxvf libevent-2.0.22-stable.tar.gz
cd libevent-2.0.22-stable
./configure --prefix=/tmp/bitcoin/tools/libevent
make
make install
cd ~/bt-src
export PKG_CONFIG_PATH=/tmp/bitcoin/tools/openssl/lib/pkgconfig/:/tmp/bitcoin/tools/libevent/lib/pkgconfig/
./configure --disable-wallet

export LD_LIBRARY_PATH=/tmp/bitcoin/boost_1_61_0/stage/lib/:/tmp/bitcoin/tools/openssl/lib/:/tmp/bitcoin/tools/libevent/lib
./src/bitcoind -debug -printtoconsole

Autotools
http://www-igm.univ-mlv.fr/~dr/XPOSE/Breugnot/
https://www.lrde.epita.fr/~adl/dl/autotools.pdf

comments powered by Disqus