Mastering Bitcoin
5. El Cliente Bitcoin » El Núcleo de Bitcoin: La Implementación de Referencia » Compilando Bitcoin Core desde el Código Fuente.
Página 24 de 98
5. El Cliente Bitcoin
El Núcleo de Bitcoin: La Implementación de Referencia
Puede descargar el cliente de referencia Bitcoin Core, también conocido como «cliente Satoshi» desde bitcoin.org. Este cliente implementa todos los aspectos del sistema bitcoin, incluyendo carteras, un motor de verificación de transacciones con una copia completa del histórico de transacciones (blockchain, la cadena de bloques), y un nodo completo de la red peer-to-peer bitcoin.
En la página Elija Su Cartera Bitcoin, seleccione Bitcoin Core para descargar el cliente de referencia.
Dependiendo de su sistema operativo, descargará un instalador ejecutable. Para Windows, esto es o bien un archivo ZIP o un archivo ejecutable .exe. Para Mac OS es una imagen de disco .dmg. Las versiones de Linux incluyen un paquete PPA para Ubuntu o un archivo tar.gz. La página bitcoin.org muestra una lista de clientes bitcoin recomendados en el desplegable en el apartado con respecto a la elección de clientes bitcoin.

Figura 1. Eligiendo un cliente bitcoin en bitcoin.org
Ejecutando Bitcoin Core por Primera Vez
Si usted descarga un paquete instalable, como un archivo .exe, .dmg o PPA, puede instalarlo de la misma forma que cualquier aplicación de tu sistema operativo. En Windows, ejecute el archivo .exe y siga las instrucciones paso a paso. Para Mac OS, ejecute el archivo .dmg y arrastre el icono de Bitcoin-QT en su carpeta de Aplicaciones. Para Ubuntu, haga doble clic en el fichero PPA en el Explorador de archivos y abrirá el gestor de paquetes para instalar el paquete. Una vez que se haya completado la instalación debe tener una nueva aplicación llamada Bitcoin-Qt en su lista de aplicaciones. Haga doble clic en el icono para iniciar el cliente de Bitcoin.
La primera vez que ejecute Bitcoin Core se iniciará la descarga de la cadena de bloques, un proceso que podría tardar varios días (ver imagen). Deje que se ejecute en segundo plano hasta que aparezca «sincronizada» y no muestre más «fuera de sincronización» al lado del saldo.

Figura 2. Bitcoin Core durante la inicialización de la cadena de bloques
Bitcoin Core mantiene una copia completa del histórico de transacciones de la red bitcoin (cadena de bloques), con cada transacción que haya ocurrido en la red Bitcoin desde su creación en 2009. Este conjunto de datos es de varios gigabytes de tamaño (aproximadamente 16 Gigabytes a finales de 2013) y se descarga gradualmente durante varios días. El cliente no será capaz de procesar transacciones o actualizar los saldos de cuenta hasta que se descargue el conjunto de datos completo perteneciente a la cadena de bloques. Durante ese tiempo, el cliente mostrará «fuera de sincronización» al lado de los saldos de las cuentas y mostrará «Sincronizando» en el pie de página. Asegúrese de que tiene suficiente espacio en disco, ancho de banda, y tiempo para completar la sincronización inicial.
Compilando Bitcoin Core desde el Código Fuente.
Para los desarrolladores, también existe la opción de descargar el código fuente completo como un archivo ZIP o clonando el repositorio fuente mediante GitHub. En la página bitcoin de GitHub, seleccione Descargar ZIP de la barra lateral. También puede utilizar la línea de comandos git para crear una copia local del código fuente en su sistema. En el siguiente ejemplo, clonamos el código fuente desde una línea de comandos Unix, Linux o Mac OS:
$ git clone https://github.com/bitcoin/bitcoin.git
Clonando en 'bitcoin'…
remote: Contando objetos: 31864, hecho.
remote: Comprimiendo objetos: 100% (12007/12007), hecho.
remote: Total 31864 (delta 24480), reutilizados 26530 (delta 19621)
Recibiendo objetos: 100% (31864/31864), 18.47 MiB | 119 KiB/s, hecho.
Resolviendo deltas: 100% (24480/24480), hecho.
$
Las instrucciones y salida resultante puede variar de una versión a otra. Siga la documentación que viene con el código, incluso si se diferencia de las instrucciones que usted ve aquí, y no se sorprenda si la salida que se muestra en la pantalla es ligeramente diferente de la de los ejemplos aquí.
Cuando la operación de clonación git ha completado, tendrá una copia local completa del repositorio de código fuente en el directorio bitcoin. Cambie a este directorio tecleando cd bitcoin en el símbolo de sistema:
$ cd bitcoin
Por defecto, la copia local se sincronizará con el código más reciente, que podría ser una versión inestable o beta de bitcoin. Antes de compilar el código, seleccione una versión específica comprobando las etiquetas de versión. Esto sincronizará la copia local con un snapshot específico del repositorio de código identificado por una etiqueta de palabra clave. Las etiquetas se utilizan por los desarrolladores para marcar versiones específicas del código por número de versión. En primer lugar, para encontrar las etiquetas disponibles, utilizamos el comando git tag:
$ git tag
v0.1.5
v0.1.6test1
v0.2.0
v0.2.10
v0.2.11
v0.2.12
[… muchas más etiquetas …]
v0.8.4rc2
v0.8.5
v0.8.6
v0.8.6rc1
v0.9.0rc1
La lista de etiquetas muestra todas las versiones publicadas de bitcoin. Por convención, los candidatos a versión, que están destinados a pruebas, tienen el sufijo «rc» (del inglés, «release candidate», «Candidatos a versión»). Las versiones estables que se pueden ejecutar en producción no tienen sufijo.
De la lista anterior, seleccione la de mayor número, que en el momento de escribir este libro es la v0.9.0rc1. Para sincronizar el código local con esta versión, utilice el comando git checkout:
$ git checkout v0.9.0rc1
Nota: comprobando 'v0.9.0rc1'.
HEAD está ahora en 15ec451… Combinando la petición de extracción #3605
$
El código fuente incluye la documentación, que se puede encontrar en un conjunto de archivos. Revise la documentación principal ubicada en README.md en el directorio bitcoin escribiendo more README.md en el símbolo de sistema y use la barra espaciadora para pasar a la página siguiente. En este capítulo, vamos a construir el cliente bitcoin desde línea de comandos, también conocido como bitcoind en Linux. Revise las instrucciones para compilar el cliente bitcoind desde línea de comandos en su plataforma escribiendo more doc/build-unix.md. Se pueden encontrar instrucciones alternativas para Mac OS y Windows en el directorio doc, como build-osx.md o build-msw.md, respectivamente.
Revise cuidadosamente los prerrequisitos para hacer la construcción, que están en la primera parte de la documentación. Esas son las bibliotecas que deben estar presentes en su sistema antes de que pueda comenzar a compilar bitcoin. Si estos requisitos previos no se hicieran, la construcción dará un error.
Si esto sucede porque no se ha hecho un requisito previo, puede instalarlo y luego reanudar el proceso de construcción desde donde lo dejó. Suponiendo que se instalaron los requisitos previos, puede iniciar el build mediante la generación de un conjunto de scripts de construcción mediante el script autogen.sh.
El proceso de construcción de Bitcoin Core fue modificado para utilizar el sistema autogen/configure/make a partir de la versión 0.9. Las versiones más antiguas utilizan un sencillo Makefile y funcionan de forma ligeramente diferente al siguiente ejemplo. Siga las instrucciones para la versión que desea compilar. El sistema autogen/configure/make introducido en la versión 0.9 es probable que sea el sistema de construcción utilizado para todas las futuras versiones del código y se muestra en los siguientes ejemplos.
$ ./autogen.sh
configure.ac:12: instalandòsrc/build-aux/config.guess'
configure.ac:12: instalandòsrc/build-aux/config.sub'
configure.ac:37: instalandòsrc/build-aux/install-sh'
configure.ac:37: instalandòsrc/build-aux/missing'
src/Makefile.am: instalandòsrc/build-aux/depcomp'
$
El script autogen.sh crea un conjunto de scripts de configuración automática que recogen información de su sistema para descubrir los ajustes correctos y asegurarse de que tiene todas las librerías necesarias para compilar el código. El más importante de ellos es el configure script que ofrece diferentes opciones para personalizar el proceso de construcción. Escriba ./configure --help para ver las distintas opciones:
$ ./configure --help
`configure 'configura Bitcoin Core 0.9.0 para adaptarse a muchos tipos de sistemas.
Uso: ./configure [OPTION]… [VAR=VALUE]…
Para asignar variables de entorno (por ejemplo, CC, CFLAGS…), especifíquelas como VAR=VALUE. Vea a continuación las descripciones de algunas de las variables útiles.
Los valores por defecto para las opciones están entre corchetes
Configuración:
—h --help muestra esta ayuda y sale
—-help=short muestra las opciones específicas de este paquete
—-help=recursive muestra la ayuda corta de todos los paquetes incluidos
—V, --version muestra la información de la versión y sale
[… muchas más opciones y variables se muestran a continuación …]
Funcionalidades opcionales:
—-disable-option-checking ignora lo no reconocido --enable/--with opciones
—-disable-FEATURE ignora FEATURE (es lo mismo que --enable-FEATURE=no
—FEATURE=no)
—-enable-FEATURE[=ARG] incluye FEATURE [ARG=yes]
[… más opciones …]
Use esas variables para invalidar las elecciones hechas por `configure' o para ayudarlo a encontrar librerías y programas de nombres o rutas no estándar
Reportar errores a <info@bitcoin.org>.
$
El script configure le permite activar o desactivar ciertas características de bitcoind a través del uso de las opciones --enable-FEATURE y --disable-FEATURE, donde FEATURE es el nombre de la función, escrita como se muestra en la ayuda. En este capítulo, vamos a construir el cliente bitcoind con todas las características predeterminadas. No vamos a estar utilizando las opciones de configuración, pero debe revisarlos para entender las características opcionales que son parte del cliente. A continuación, ejecute el script configure para detectar automáticamente todas las librerías necesarias y crear un script de construcción personalizado para su sistema:
$ ./configure
comprobando tipo de sistema de construcción… x86_64-unknown-linux-gnu comprobando tipo de sistema de host… x86_64-unknown-linux-gnu
comprobando compatibilidad con BSD… /usr/bin/install -c
comprobando si el entorno de construcción es adecuado… yes
comprobando que mkdir -p es thread-safe… /bin/mkdir -p
comprobando si existiera gawk… no
comprobando si existiera mawk… mawk
comprobando si make configura $(MAKE)… yes
[… muchas más comprobaciones de características son probadas …]
configure: creando ./config.status
config.status: creando Makefile
config.status: creando src/Makefile
config.status: creando src/test/Makefile
config.status: creando src/qt/Makefile
config.status: creando src/qt/test/Makefile
config.status: creando share/setup.nsi
config.status: creando share/qt/Info.plist
config.status: creando qa/pull-tester/run-bitcoind-for-test.sh
config.status: creando qa/pull-tester/build-tests.sh
config.status: creating src/bitcoin-config.h
config.status: executing depfiles commands
$
Si todo sale bien, el comando configure creará scripts de compilación personalizados que nos permitirán compilar bitcoind. Si hay bibliotecas faltantes o errores, el comando configure terminará con error en vez de crear los scripts de compilación. Si ocurre un error, es muy probable que se deba a una biblioteca faltante o incompatible. Relea la documentación de compilación y asegúrese de instalar los requisitos faltantes. Luego ejecute configure nuevamente y vea si eso corrige el error. Luego compilará el código fuente, un proceso que puede tardar hasta una hora en terminar. Durante el proceso de compilación verá mensajes de salida cada pocos segundos o minutos, o un error si algo sale mal. El proceso de compilación puede completarse en cualquier momento si es interrumpido. Teclee make para comenzar a compilar:
$ make
Making all in src
make[1]: Entering directory `/home/ubuntu/bitcoin/src'
make all-recursive
make[2]: Entering directory `/home/ubuntu/bitcoin/src'
Making all in .
make[3]: Entering directory `/home/ubuntu/bitcoin/src'
CXX addrman.o
CXX alert.o
CXX rpcserver.o
CXX bloom.o
CXX chainparams.o
[… siguen muchos otros mensajes de compilación …]
CXX test_bitcoin-wallet_tests.o
CXX test_bitcoin-rpc_wallet_tests.o
CXXLD test_bitcoin
make[4]: Leaving directory `/home/ubuntu/bitcoin/src/test'
make[3]: Leaving directory `/home/ubuntu/bitcoin/src/test'
make[2]: Leaving directory `/home/ubuntu/bitcoin/src'
make[1]: Leaving directory `/home/ubuntu/bitcoin/src'
make[1]: Entering directory `/home/ubuntu/bitcoin'
make[1]: Nothing to be done for àll-am'.
make[1]: Leaving directory `/home/ubuntu/bitcoin'
$
Si todo sale bien bitcoind se encuentra ahora compilado. El paso final es instalar el ejecutable de bitcoind en la ruta del sistema usando el comando make:
$ sudo make install
Making install in src
Making install in .
/bin/mkdir -p '/usr/local/bin'
/usr/bin/install -c bitcoind bitcoin-cli '/usr/local/bin'
Making install in test
make install-am
/bin/mkdir -p '/usr/local/bin'
/usr/bin/install -c test_bitcoin '/usr/local/bin'
$
Puede confirmar que bitcoin se encuentra correctamente instalado preguntándole al sistema por la ruta a los dos ejecutables, de esta forma:
$ which bitcoind
/usr/local/bin/bitcoind
$ which bitcoin-cli
/usr/local/bin/bitcoin-cli
La instalación por defecto de bitcoind lo coloca en /usr/local/bin. Cuando ejecute bitcoind por primera vez le recordará que debe crear un archivo de configuración con una contraseña fuerte para la interfaz JSON-RPC. Ejecute bitcoind tecleando bitcoind en la terminal:
$ bitcoind
Error: Para usar la opción "-server" debe establecer un valor rpcpassword en el archivo de configuración:
/home/ubuntu/.bitcoin/bitcoin.conf
Se recomienda utilizar la siguiente contraseña aleatoria:
rpcuser=bitcoinrpc
rpcpassword=2XA4DuKNCbtZXsBQRRNDEwEY2nM6M4H9Tx5dFjoAVVbK
(no es necesario recordar esta contraseña)
El nombre de usuario y la contraseña DEBEN NO ser iguales.
Si el archivo no existe, créelo con permisos de archivo de solo lectura.
Se recomienda también establecer alertnotify para recibir notificaciones de problemas.
Por ejemplo: alertnotify=echo %s | mail -s "Bitcoin Alert" admin@foo.com
Edite el archivo de configuración en su editor preferido y establezca los parámetros, reemplazando la contraseña con una contraseña fuerte tal como lo recomienda bitcoind. No use el password que se muestra ahí. Cree un archivo dentro del directorio .bitcoin llamado .bitcoin/bitcoin.conf e ingrese un usuario y password:
rpcuser=bitcoinrpc
rpcpassword=2XA4DuKNCbtZXsBQRRNDEwEY2nM6M4H9Tx5dFjoAVVbK
Mientras edite este archivo de configuración puede que quiera establecer algunas otras opciones, tales como txindex (ver apartado sobre base de datos de índices de transacciones). Para una lista completa de las opciones disponibles teclee bitcoind --help.
Ahora ejecute el cliente Bitcoin Core. La primera vez que lo ejecute reconstruirá la cadena de bloques descargando todos los bloques. Este es un archivo de varios gigabytes y tardará en promedio dos días en ser descargado por completo. Puede acortar los tiempos de inicialización de la cadena de bloques descargando una copia parcial de la cadena de bloques usando un cliente BitT orrent de SourceForge.
Ejecute bitcoind en segundo plano con la opción -daemon:
$ bitcoind -daemon
Bitcoin versión v0.9.0rc1-beta (2014-01-31 09:30:15 +0100)
Utilizando la versión de OpenSSL 1.0.1c 10 May 2012
Directorio de datos predeterminado /home/bitcoin/.bitcoin
Utilizando directorio de datos /bitcoin/
Usando como máximo 4 conexiones (1024 descriptores de archivos disponibles) /
init message: Verificando monedero…
dbenv.open LogDir=/bitcoin/database ErrorFile=/bitcoin/db.log
Bound to [::]:8333
Bound to 0.0.0.0:8333
init message: Cargando el índice de bloques..
Abriendo LevelDB en /bitcoin/blocks/index
LevelDB abierto satisfactoriamente
Abriendo LevelDB en /bitcoin/chainstate
LevelDB abierto satisfactoriamente
[… más mensajes de inicialización …]