Instalando o dcrd
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
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
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]