Instalando o dcrd

8 minutos de leitura

1. Introdução

O dcrd é uma implementação full node de um blockchain server da rede Decred escrita em Go. Esse daemon (serviço) mantém uma cópia da ledger e transmite as transações para outros nodes no mundo. Para ver como o dcrd se encaixa no ecossistema Decred, leia A estrutura do Decred.

Há mais informações sobre o dcrd disponíveis no README do Github e na documentação oficial da linha de comando.

Esta instalação não é necessária para os usuários que querem apenas usar o Decrediton, já que o Decrediton possui o seu próprio dcrd interno.

1.1. Vantagens

A configuração como Client-Server permite que outros servidores dcrd se conectem a para atualização de blocos e transações da mempool. Isso torna a rede do Decred mais robusta e por essa razão é a configuração recomendada.

1.2. Arquitetura

É possível executar o dcrd em um host isolado, como full node, um blockchain server em um Raspberry Pi, por exemplo. É possível também especificar a partição (ou disco) onde a blockchain será copiada e onde os arquivos de log serão gerados.

O Decrediton, que possui um dcrd interno, também pode ser configurado para usar um dcrd da rede local (como na próxima figura). A configuração do Decrediton, dcrwallet e dcrctl será tratada em outros artigos.

Figura 1 - Execução do dcrd em um host isolado
Figura 1 - Execução do dcrd em um host isolado

2. Instalação

É possível instalar o dcrd de 3 formas diferentes:

  • via dcrinstall: executável criado pelos desenvolvedores que baixa os arquivos executáveis compilados (dcrd, dcrwallet e dcrctl), verifica as assinaturas, cria os arquivos de configuração e guia o usuário pelo processo de criação da carteira;
  • instalação manual: o usuário baixa os executáveis compilados (dcrd, dcrwallet e dcrctl), verifica as assinaturas, descompacta, decide a arquitetura da solução, cria os arquivos de configuração e executa;
  • clone do código-fonte: útil para quem pretende aprender como funciona os mecanismos internos ou fazer modificações no projeto; o usuário clona localmente o diretório do código-fonte do dcrd, compila e executa.

A forma mais pratica é a instalação via dcrinstall.

2.1. Instalação automática via dcrinstall

Os passos a seguir foram executados em um Debian 9 64-bit e em um macOS 10.13.

a) Acesse https://github.com/decred/decred-release/releases/

b) No Debian: baixe para a mesma pasta os arquivos dcrinstall-linux-$ARCH-$VERSION.tar.gz, manifest-dcrinstall-$VERSION.txt e manifest-dcrinstall-$VERSION.txt.asc

No Mac: baixe para a mesma pasta os arquivos dcrinstall-darwin-$VERSION.tar.gz, manifest-dcrinstall-$VERSION.txt e manifest-dcrinstall-$VERSION.txt.asc

$ARCH representa ‘386’, ‘amd64’, ‘arm’ ou ‘arm64’.

Arquitetura Nome do arquivo
Windows 32-bit dcrinstall-windows-386-[$VERSION].zip
Windows 64-bit dcrinstall-windows-amd64-[$VERSION].zip
Linux 32-bit dcrinstall-linux-386-[$VERSION].tar.gz
Linux 64-bit dcrinstall-linux-amd64-[$VERSION].tar.gz
Linux 32-bit ARM (ex: Raspberry Pi) dcrinstall-linux-arm-[$VERSION].tar.gz
Linux 64-bit ARM (ex: Raspberry Pi) dcrinstall-linux-arm64-[$VERSION].tar.gz
macOS 64-bit dcrinstall-darwin-amd64-[$VERSION].tar.gz
Arquivos de hashes manifest-dcrinstall-[$VERSION].txt
Assinatura do arquivo de hashes manifest-dcrinstall-[$VERSION].txt.asc

c) Caso a chave ainda não tenha sido importada (erro: ‘gpg: Can’t check signature: No public key’): importe a chave pública dos desenvolvedores (o GPG tentará sair pela porta TCP/11371):

$ gpg --keyserver pgp.mit.edu --recv-keys 0x518A031D

Em caso de erro ‘gpg: keyserver receive failed: No dirmngr’:

$ sudo apt-get install dirmngr

d) Confirme que a chave correta foi importada:

gpg: key 6DF634AA7608AF04: "Decred Release <release@decred.org>" imported

e) Verifique a assinatura digital:

$ gpg --verify manifest-dcrinstall-$VERSION.txt.asc

f) Procure no retorno do gpg por: “using RSA key 6D897EDF518A031D” (apenas na primeira verificação após importar a chave). Repare que a segunda metade do ID da RSA key está na etapa c) e no texto ‘Good signature from “Decred Release ”’

g) Para evitar que o dcrd seja executado com privilégios de root, crie o usuário para o dcrd:

$ sudo adduser -m dcrduser
$ cp dcrinstall-$ARCH-$VERSION /home/dcrduser
$ sudo su - dcrduser

h) Adicione o atributo executável ao arquivo e execute:

$ sudo chmod u+x dcrinstall-$ARCH-$VERSION
$ ./dcrinstall-$ARCH-$VERSION

Ao final, se uma carteira não tiver sido gerada anteriormente para esse usuário, o dcrinstall iniciará a criação de uma. Aperte [Ctrl+C] para cancelar a criação da carteira quando o terminal mostrar a mensagem:

creating wallet: mainnet Enter the private passphrase for your new wallet: 

Os binários do Decred serão copiados para o diretório ~/decred-$ARCH-$VERSION. Para facilitar referências futuras, os binários podem ser movidos para a pasta /opt e um link simbólico para /opt/decred/ pode ser criado:

$ sudo mv ~/decred-$ARCH-$VERSION /opt
$ sudo ln -s /opt/decred-$ARCH-$VERSION /opt/decred/

A execução do dcrd com especificação do arquivo de configuração é feita através da opção -C:

$ sudo -u dcrduser /opt/decred/dcrd -C dcrd.conf

Veja como executar o dcrd como um serviço do Linux.

Pule as seções 2.2 e 2.3.

2.2. Instalação manual (binaries)

Os passos a seguir foram executados em um Debian 9 64-bit.

A instalação dos binaries serve para a maioria do usuários, aqueles que apenas querem usar o dcrd. A instalação do source na seção 2.3 é para aqueles que querem desenvolver em Go, alterando código-fonte. Para instalar apenas os binaries (executáveis) do dcrd, dcrwallet e dcrctl, sem precisar instalar o Go, clonar reposítórios e etc:

a) Acesse https://github.com/decred/decred-binaries/releases/

b) No Debian: baixe para a mesma pasta os arquivos decred-linux-$ARCH-$VERSION.tar.gz, manifest-$VERSION.txt e manifest-$VERSION.txt.asc

No Mac: baixe para a mesma pasta os arquivos decred-darwin-$ARCH-$VERSION.tar.gz, manifest-$VERSION.txt e manifest-$VERSION.txt.asc

$ARCH representa ‘386’, ‘amd64’, ‘arm’ ou ‘arm64’.

Arquitetura Nome do arquivo
Windows 32-bit decred-windows-386-[$VERSION].zip
Windows 64-bit decred-windows-amd64-[$VERSION].zip
Linux 32-bit decred-linux-386-[$VERSION].tar.gz
Linux 64-bit decred-linux-amd64-[$VERSION].tar.gz
Linux 32-bit ARM (ex: Raspberry Pi) decred-linux-arm-[$VERSION].tar.gz
Linux 64-bit ARM (ex: Raspberry Pi) decred-linux-arm64-[$VERSION].tar.gz
macOS 64-bit decred-darwin-amd64-[$VERSION].tar.gz
Arquivos de hashes manifest-[$VERSION].txt
Assinatura do arquivo de hashes manifest-[$VERSION].txt.asc

c) Caso a chave ainda não tenha sido importada (erro: ‘gpg: Can’t check signature: No public key’): importe a chave pública dos desenvolvedores (o GPG tentará sair pela porta TCP/11371):

$ gpg --keyserver pgp.mit.edu --recv-keys 0x518A031D

Em caso de erro ‘gpg: keyserver receive failed: No dirmngr’:

$ sudo apt-get install dirmngr

d) Confirme que a chave correta foi importada:

gpg: key 6DF634AA7608AF04: "Decred Release <release@decred.org>" imported

e) Para verificar a assinatura digite no prompt:

$ gpg --verify manifest-$VERSION.txt.asc

f) Procure no retorno do gpg por: “using RSA key 6D897EDF518A031D” (apenas na primeira verificação após importar a chave). Repare que a segunda metade do ID da RSA key está na etapa c) e no texto ‘Good signature from “Decred Release ”’

g) Para evitar que o dcrd seja executado com privilégios de root, crie um usuário para o dcrd:

$ sudo adduser dcrduser
$ sudo cp decred-[linux|darwin]-$ARCH-$VERSION /opt

h) Descompacte:

$ sudo tar -xzf decred-[linux|darwin]-$ARCH-$VERSION.tar.gz

Os binários do Decred serão extraídos para o diretório /opt/decred-$ARCH-$VERSION. Para facilitar referências futuras, um link simbólico pode ser criado:

$ sudo ln -s /opt/decred-$ARCH-$VERSION /opt/decred/

O arquivo de configuração do dcrd pode ser especificado com a opção -C:

$ sudo -u dcrduser /opt/decred/dcrd -C dcrd.conf

Veja como executar o dcrd como um serviço do Linux.

Pule a seção 2.3.

2.3. Instalação manual (source clone)

Pré-requisito

A linguagem Go 1.7 deve estar instalada. Para instalar, veja o artigo Instalando o Go (golang).

Os passos a seguir foram executados em um Debian 9 64-bit.

a) Clone o repositório do dcrd:

$ git clone https://github.com/decred/dcrd $HOME/go/src/github.com/decred/dcrd

Se não possui o git instalado:

$ sudo apt-get install git

b) Entre no diretório que acabou de ser criado, execute o Dep para verificar as dependências e compile:

$ cd $HOME/go/src/github.com/decred/dcrd

$ dep ensure
$ go build
ou
$ /usr/local/bin/go/bin/dep ensure
$ /usr/local/bin/go/bin/go build

c) Se não ocorreu nenhum erro, deve haver um arquivo dcrd com atributo executável. Tente visualizar a mensagem de ajuda do dcrd:

$ ./dcrd --help

d) Para ter uma instalação permanente, instale o dcrd através do Go:

$ go install . ./cmd/...

e) Para evitar que o dcrd seja executado com privilégios de root, crie o usuário para o dcrd:

$ sudo adduser dcrduser

f) Copie o executável do dcrd que foi compilado na etapa b) para o diretório /home/dcrduser:

$ mkdir decred
$ sudo cp ~/go/src/github.com/decred/dcrd/dcrd /home/dcrduser/decred/
$ sudo chown -R dcrduser /home/dcrduser/decred/
$ sudo su - dcrduser

g) Execute:

$ dcrd [--testnet]

3. Configuração

3.1. Decred no Tor

Para quem deseja usar o dcrd na rede Tor: antes de executar o dcrd pela primeira vez faça a configuração conforme o seu ambiente. Como os arquivos de configuração ainda não foram gerados, bloqueie todo o tráfego de rede de saída na porta tcp/9108 (mainnet) ou tcp/19108 (testnet), siga com o passo 3.2 para gerar o arquivo de configuração e então faça a configuração do dcrd para usar o proxy da rede Tor.

3.1.1. Bloqueio de saída do dcrd

$ sudo iptables -A OUTPUT -p tcp -m multiport --dports 9108,19108 -m comment --comment "dcrd to dcrd mainnet/testnet" -j DROP

Execute o passo da seção 3.2 para gerar os arquivos de configuração e siga para a próxima seção (3.1.2).

3.1.2. Liberação do tráfego de saída do dcrd

Para liberar o tráfego é necessário excluir a regra criada na seção anterior.

$ sudo iptables -D OUTPUT -p tcp -m multiport --dports 9108,19108 -m comment --comment "dcrd to dcrd mainnet/testnet" -j DROP

3.2. Geração dos arquivos de configuração

Se realizar a instalação manual conforme as seções 2.2 ou 2.3, é provável que ao terminar não haja nenhum arquivo dcrd.conf. A execução do dcrd sem nenhum parâmetro cria um arquivo de configuração padrão. Execute e logo em seguida interrompa a execução com [Ctrl+C].

$ ./dcrd [--testnet]

Foi gerado um diretório $HOME/.dcrd. A próxima seção mostra alguns parâmetros que podem ser informados ao executar o dcrd ou modificados permanentemente no arquivo dcrd.conf.

3.3. Configuração

Figura 2 - Uso de vários discos para não comprometer a performance
Figura 2 - Uso de vários discos para não comprometer a performance

3.3.1. Blockchain (data) e arquivo de log

Como a blockchain requer muito espaço (na ordem de GBs), é possível especificar outro diretório ou outro diretório em outra partição ou outro disco para armazenar a blockchain. É comum em servidores que precisam de boa performance a separação dos arquivos de log em outro disco, além do sistema operecional ficar isolado para evitar que fim do espaço disponível em disco interrompa o funcionamento do sistema. O default é $HOME/.dcrd/data.

Para execução na linha de comando: --datadir=, --logdir=. Para configuração no dcrd.conf: datadir=, logdir=.

3.3.2. Portas TCP

Veja no artigo A estrutura do Decred quais são as portas necessárias para comunicação do dcrd com outros componentes da rede Decred e com o mundo exterior.

3.4. Permissões de arquivo

Configure como dono da pasta o usuário que executará o dcrd.

$ sudo chown $DCRD_DATAFOLDER $DCRD_USER

Configure as permissões na pasta para que apenas o usuário $DCRD_USER tenha direito de escrita.

$ sudo chmod 755 $DCRD_DATAFOLDER

4. Execução

Com os parâmetros configurados, execute novamente o dcrd. O download da blockchain, que deve levar mais de duas horas, será iniciado para o diretório especificado no parâmetro datadir no dcrd.conf ou para $HOME/.dcrd/data.

$ ./dcrd [--testnet]