• Nenhum resultado encontrado

Compilando o Bitcoin Core a partir do Código-Fonte

No documento Dominando Bitcoin (páginas 41-48)

Para desenvolvedores, ainda há a opção de baixar o código-fonte completo como um arquivo ZIP ou clonar a fonte oficial do repositório do GitHub. Em GitHub bitcoin page, selecione Download ZIP na barra lateral. Você também pode usar a linha de comando git para criar uma cópia local do código fonte em seu sistema. No exemplo a seguir, nós estamo clonando o código fonte de uma linha de comando do tipo Unix, em Linux ou MaC OS:

$ git clone https://github.com/bitcoin/bitcoin.git Clonando para 'bitcoin'...

remote: Contando objetos: 31864, concluído.

remote: Comprimindo objetos: 100% (12007/12007), concluído.

remote: Total 31864 (delta 24480), re-utilizados 26530 (delta 19621) Recebendo objetos: 100% (31864/31864), 18.47 MiB | 119 KiB/s, concluído. Resolvendo deltas: 100% (24480/24480), concluído.

$

TIP

As instruções e o output resultante podem variar de versão para versão. Siga os passos da documentação que acompanha o código mesmo que eles sejam diferentes das instruções que você vê aqui, e não se surpreenda se o output exibido em sua tela seja levemente diferente dos exemplos desse livro.

Quando a operação de git clone completar, você terá uma cópia local completa do repositório do código-conte na sua pasta bitcoin. Modifique essa pasta ao digitar cd bitcoin no prompt:

$ cd bitcoin

Por padrão, a cópia local será sincronizada com o código mais recente, que pode ser uma versão beta ou instável do bitcoin. Antes de compilar o código, selecione a versão específica ao checar uma tag de lançamento . Isso irá sincronizar a cópia local com um snapshot específico do respositório do código identificado por uma tag palavra-chave. As tags são usadas pelos desenvolvedores para marcar lançamentos específicos do código através de um número de versão. Primeiro, para encontrar as tags disponíveis, nós usaremos o comando git tag:

$ git tag v0.1.5 v0.1.6test1 v0.2.0 v0.2.10 v0.2.11 v0.2.12

[... muitas outras tags ...] v0.8.4rc2

v0.8.5 v0.8.6 v0.8.6rc1 v0.9.0rc1

planejados para testes e contém o sufixo "rc". Versões estáveis que possam ser executadas em sistemas de produção não possuem sufixo. Da lista existente, selecione a versão mais recente, que até este momento era v0.10.2. Para sincronizar o código local com esta versão, use o comando git checkout.

$ git checkout v0.9.0rc1

Note: checking out 'v0.9.0rc1'.

HEAD is now at 15ec451... Merge pull request #3605 $

O código-fonte inclui uma documentação, que pode ser encontrada em vários arquivos. Veja a documentação principal localizada em README.md na pasta bitcoin ao digitar more README.md no prompt e usando a barra de espaço para ler a próxima página. Nesse capítulo, iremos fazer o build do cliente de bitcoin na linha de comando, também conhecido como bitcoind no Linux. Veja as instruções para compilar o cliente bitcoind em linha de comando na sua plataforma ao digitar more doc/build- unix.md. Instruções alternativas para Mac OS X e Windows podem ser encontradas na pasta doc, como

build-osx.md ou build-msw.md, respectivamente.

Analise cuidadosamente os pré-requisitos da versão, presentes na primeira parte da documentação do mesmo. Estas são as bibliotecas que devem estar presentes em seu sistema antes que você possa iniciar a compilação do bitcoin. Se estes pré-requisitos estiverem ausentes, o processo irá falhar. Logo, você pode instalá-los e então continuar o processo de compilação de onde você parou. Assumindo que os pré-requisitos estão instalados, você inicia o processo de compilação, gerando um conjunto de scripts de construção que utilizam o script autogen.sh.

TIP

O processo de build do Bitcoin Core foi modificado para usar o sistema autogen/configure/make a partir da versão 0.9. As versões mais antigas usam um Makefile simples e funcionam um pouco diferente do exemplo demonstrado a seguir. Siga as instruções para a versão que você quer compilar. O autogen/configure/make introduzido na 0.0 provavelmente será o sistema de build usado para todas as versões futuras do código e é o sistema demonstrado nos exemplos a seguir.

$ ./autogen.sh

configure.ac:12: instalando `src/build-aux/config.guess' configure.ac:12: instalando `src/build-aux/config.sub' configure.ac:37: instalando `src/build-aux/install-sh' configure.ac:37: instalando `src/build-aux/missing' src/Makefile.am: instalando `src/build-aux/depcomp' $

O script autogen.sh cria um conjunto de scripts de configuração automática que irão interrogar seu sistema a descobrir as configurações corretas e garantir que você tenha todas as bibliotecas necessárias para compilar o código. O mais importante desses é o script configure que oferece várias

opções diferentes para customizar o processo de build. Digite ./configure --help para ver as várias opções:

$ ./configure --help

`configure' configura o Bitcoin Core 0.9.0 para se adaptar a muitos tipos de sistemas. Uso: ./configure [OPÇÃO]... [VAR=VALOR]...

Para atribuir as variáveis de ambiente (ex.: CC, CFLAGS...), especifique-as como VAR=VALOR. Consulte abaixo descrições de algumas variáveis úteis.

As opções padrão estão especificadas em parênteses. Configuração:

  -h, --help exibe essa ajuda e sai

  --help=short exibe opções específicas para esse pacote

  --help=recursive exibe a ajuda curta (short) de todos os pacotes incluídos   -V, --version exibe as informações de versão e sai

[... muitas outras opções e variáveis são exibidas abaixo ...] Funções opcionais:

  --disable-option-checking ignore unrecognized --enable/--with options   --disable-FEATURE não incluir FEATURE (mesmo que --enable-FEATURE=no)   --enable-FEATURE[=ARG] incluir FEATURE [ARG=yes]

[... mais opções ...]

Use essas variáveis para sobrescrever as escolhas feitas pelo `configure' ou para ajudar a encontrar livrarias e programas com nomes/localizações não-padrões.

Informe bugs para <info@bitcoin.org>. $

O script configure permite que você habilite ou desabilite certas funções do bitcoind através do uso das flags --enable-FEATURE e --disable-FEATURE, onde FEATURE é substituída pelo nome de uma função, como listado no output do help. Nesse capítulo, nós iremos construir o cliente bitocind com todas as funções padrões. Nós não iremos usar as flags de configurações, mas você deveria revisá-las para entender quais funções opcionais fazem parte do cliente. A seguir, rode o script configure para automaticamente descobrir todas as bibliotecas necessárias e criar um script de build customizado para o seu sistema:

$ ./configure

checking build system type... x86_64-unknown-linux-gnu checking host system type... x86_64-unknown-linux-gnu

checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes

checking for a thread-safe mkdir -p... /bin/mkdir -p checking for gawk... no

checking for mawk... mawk

checking whether make sets $(MAKE)... yes

[... muitos outros recursos do sistema são testados ...] configure: creating ./config.status

config.status: creating Makefile config.status: creating src/Makefile config.status: creating src/test/Makefile config.status: creating src/qt/Makefile config.status: creating src/qt/test/Makefile config.status: creating share/setup.nsi config.status: creating share/qt/Info.plist

config.status: creating qa/pull-tester/run-bitcoind-for-test.sh config.status: creating qa/pull-tester/build-tests.sh

config.status: creating src/bitcoin-config.h config.status: executing depfiles commands $

Se tudo der certo, o comando configure terminará criando os scripts de build customizados que nos permitirão compilar o bitcoind. Se houver qualquer livrarias faltando ou erros, o comando configure irá terminar com um erro ao invés de criar os script de build. Se um erro ocorrer, mais provavelmente será devido a uma biblioteca faltando ou incompatível. Revise a documentação do build novamente e certifique-se que você instalou os pré-requisitos que estão em falta. Então execute o configure novamente e veja se isso corrige o erro. Em seguida, você irá compilar o código fonte, um processo que pode levar até uma hora para ser completado. Durante o processo de compilação você deverá ver um output a cada poucos segundos ou minutos, ou um erro se algo der errado. O processo de compilação pode ser reiniciado a qualquer momento se for interrompido. Digite make para iniciar a compilação:

$ 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

[... muitas outras mensagens de compilação ...]   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 `all-am'.

make[1]: Leaving directory `/home/ubuntu/bitcoin' $

Se tudo ocorrer dentro do esperado, o bitcoind agora está compilado. O passo final é instalar o executável do bitcoind no caminho do sistema usando o 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' $

Você pode confirmar que o bitcoin está corretamente instalado ao perguntar ao sistema pelo caminho dos dois executáveis, como demonstrado a seguir:

$ which bitcoind

/usr/local/bin/bitcoind $ which bitcoin-cli

/usr/local/bin/bitcoin-cli

A instalação padrão do bitcoind o salva em /usr/local/bin. Quando você rodar o bitcoind pela primeira vez, ele irá lembrá-lo para criar um arquivo de configuração com uma senha forte para a interface JSON-RPC. Execute o bitcoind ao digitar bitcoind no terminal:

$ bitcoind

Erro: Para usar a opção "-server", você precisa definir uma rpcpassword no arquivo de configuração:

/home/ubuntu/.bitcoin/bitcoin.conf

É recomendado que você use a seguinte senha aleatória: rpcuser=bitcoinrpc

rpcpassword=2XA4DuKNCbtZXsBQRRNDEwEY2nM6M4H9Tx5dFjoAVVbK (você não precisa se lembrar dessa senha)

O usuário e senha NÃO DEVEM ser iguais.

Se o arquivo não existir, crie um com permissões de arquivo owner-somente leitura Também recomenda-se definir um alertnotify, para que você seja notificado sobre problemas;

por exemplo: alertnotify=echo %s | mail -s "Alerta Bitcoin" admin@foo.com

Edite o arquivo de configuração em seu editor de preferência e defina os parâmetros, substituindo a senha por uma senha forte como recomendado pelo bitcoind. Não use a senha mostrada aqui. Crie um arquivo no interior da pasta .bitcoin de maneira que ela fique nomeada como .bitcoin/bitcoin.conf e insira um usuário e senha:

rpcuser=bitcoinrpc

rpcpassword=2XA4DuKNCbtZXsBQRRNDEwEY2nM6M4H9Tx5dFjoAVVbK

Enquanto você estiver editando esse arquivo de configuração, você pode querer definir algumas outras opções, como a txindex (ver Índice do Banco de Dados de Transações e a Opção txindex). Para uma listagem completa das opções disponíveis, digite bitcoind --help.

Agora, execute o cliente Bitcoin Core. Ao ser executado pela primeira vez, ele irá reconstruir a blockchain do bitcoin ao fazer o download de todos os blocos. Ela é um arquivo de vários gigabytes e levará em média dois dias para ser completamente baixada. Você pode diminuir o tempo de inicialização da blockchain ao fazer o download de uma cópia parcial dela usando um cliente BitTorrent a partir de SourceForge.

asciidoc3")

$ bitcoind -daemon

Bitcoin version v0.9.0rc1-beta (2014-01-31 09:30:15 +0100) _(N.T. A versão será diferente de acordo com a versão baixada no GitHub)_

Using OpenSSL version OpenSSL 1.0.1c 10 May 2012 Default data directory /home/bitcoin/.bitcoin Using data directory /bitcoin/

Using at most 4 connections (1024 file descriptors available) init message: Verifying wallet...

dbenv.open LogDir=/bitcoin/database ErrorFile=/bitcoin/db.log Bound to [::]:8333

Bound to 0.0.0.0:8333

init message: Loading block index... Opening LevelDB in /bitcoin/blocks/index Opened LevelDB successfully

Opening LevelDB in /bitcoin/chainstate Opened LevelDB successfully

[... mais mensagens de inicialização ...]

Usando a API JSON-RPC do Bitcoin Core a partir da Linha

No documento Dominando Bitcoin (páginas 41-48)