index.mdwn 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. Este guia presume que estamos usando o Raspian com um Raspberry Pi 3.
  2. [[!toc levels=6]]
  3. ---
  4. # O que é isto?
  5. ## Raspberry Pi
  6. [Raspberry Pi](https://www.raspberrypi.org>) é um computador de baixo custo e baixo consumo de energia, simples e eficiente.
  7. ## cgminer
  8. [cgminer](http://ck.kolivas.org/apps/cgminer/) é um software de mineração de criptomoedas.
  9. ## criptomoeda
  10. [[!wikipedia pt:Criptomoeda desc="Página na Wikipedia"]]
  11. ## mineração
  12. [FAQ Bitcoin](https://bitcoin.org/pt_BR/faq#mineracao)
  13. ---
  14. # Tutorial
  15. Considerando que o sistema operacional é o [Raspian](https://www.raspberrypi.org/downloads/raspbian/).
  16. Não é uma boa prática, mas considerando que o usuário para este guia é **root**.
  17. Seguem os passos para usar **cgminer** ou **bfgminer**.
  18. ## Otimizar Raspberry Pi
  19. ### Instalar screeen, tmux e byobu
  20. apt-get install byobu
  21. Uso:
  22. Selecionar '1' (modo screen):
  23. byobu-ctrl-a
  24. Para conectar na sessão 'miner':
  25. byobu-screen -RD miner
  26. CTRL+A+D para desconectar (a sessão continua rodando).
  27. ## Compilar c/bfgminer
  28. ### Instalar dependências
  29. apt-get install build-essential autoconf automake libtool pkg-config libcurl4-openssl-dev libudev-dev libncurses5-dev
  30. Caso se utilize **bfgminer**, também é necessário instalar os seguintes pacotes:
  31. apt-get install uthash-dev libjansson-dev
  32. ### Obter código fonte do cgminer
  33. git clone https://github.com/ckolivas/cgminer.git
  34. cd cgminer
  35. No caso do **bfgminer**:
  36. git clone https://github.com/luke-jr/bfgminer.git
  37. cd cgminer
  38. ### Compilar
  39. Isto é necessário quando se clona do github
  40. ./autogen.sh
  41. Esta configuração leva em consideração o processador do Raspberry Pi 3.
  42. CFLAGS="-O2 -Wall -mcpu=cortex-a53 -mfpu=neon-fp-armv8" ./configure
  43. make
  44. ### Arquivo de configuração
  45. vim ~/.cgminer/cgminer.conf
  46. #### Exemplo de configuração
  47. {
  48. "disable-rejecting" : true,
  49. "failover-only" : true,
  50. "lowmem" : true,
  51. "net-delay" : true,
  52. "no-submit-stale" : true,
  53. "per-device-stats" : true,
  54. "verbose" : true,
  55. "widescreen" : true,
  56. "worktime" : true,
  57. "scrypt" : true,
  58. "pools" : [
  59. {
  60. "url" : "stratum+tcp://us.litecoinpool.org:3333",
  61. "user" : "desci.iikb",
  62. "pass" : "x"
  63. },
  64. {
  65. "url" : "stratum+tcp://us2.litecoinpool.org:3333",
  66. "user" : "desci.iikb",
  67. "pass" : "x"
  68. }
  69. ]
  70. }
  71. ## Instalar no sistema
  72. make install
  73. ### Systemd
  74. #### Criar arquivo de serviço de sistema
  75. vim /lib/systemd/system/cgminer.service
  76. ##### Conteúdo do arquivo
  77. [Unit]
  78. Description=cgminer
  79. After=network.target nss-lookup.target
  80. [Service]
  81. Type=forking
  82. ExecStart=/usr/bin/screen -dmS miner /usr/local/bin/cgminer -c /root/.cgminer/cgminer.conf
  83. [Install]
  84. WantedBy=multi-user.target
  85. #### Adicionar na inicialização
  86. systemctl enable cgminer.service
  87. #### Iniciando
  88. systemctl start cgminer.service
  89. ### Crontab
  90. crontab -e
  91. #### Adicionar linha
  92. @hourly /bin/bash /bin/systemctl is-active cgminer.service || /bin/systemctl start cgminer.service
  93. ---
  94. # Experiências e casos reais
  95. ## Script de verificação dos arquivos
  96. Normalmente [[eu|desci]] mudo o arquivo de configuração do cgminer frequentemente, ou porque tenho que alterar configuração de mineradoras, ou mais frequentemente, porque tenho que mudar a configuração de *pools*.
  97. Nestas circunstâncias, [[eu|desci]] costumo ter vários arquivos de configuração, sendo que para não alterar os arquivos do sistema, faço um link simbólico para o arquivo de configuração e reinicio o serviço, por exemplo:
  98. rm /root/.cgminer/cgminer.conf; ln -s /root/.cgminer/litecoin.conf /root/.cgminer/cgminer.conf
  99. systemctl -l restart cgminer.service
  100. Isto possibilita alterar a configuração do cgminer sem mexer em todo o sistema. No entanto, o tutorial acima não prevê este uso, e então é necessário alterar pelo menos uma vez o script do systemd para usar um script em bash (ou qualquer outra lingugagem) para alterar algumas coisas.
  101. ### Exemplo de script em bash
  102. mkdir /root/bin
  103. vim /root/bin/cgminer-start.bash
  104. #### Conteúdo do arquivo
  105. Disponível em <https://notabug.org/desci/scripts/src/master/raspian-miner.bash>
  106. #!/bin/bash
  107. ## Verifica arquivos de configuração antes de iniciar cgminer no raspberry pi
  108. ##
  109. ## Variáveis que podem ser alteradas
  110. ##
  111. MINER_BIN="cgminer"
  112. MINER_PATH="/usr/local/bin/${MINER_BIN}"
  113. CONFIG_DIR="/root/.${MINER_BIN}"
  114. CONFIG_FILE="${CONFIG_DIR}/${MINER_BIN}.conf"
  115. CONFIG_DEFAULT="${CONFIG_DIR}/default.conf"
  116. ##
  117. ## Provavelmente não tem nada pra mudar daqui pra frente
  118. ##
  119. CONFIG_FIND="$(find ${CONFIG_FILE} -type l -print0)"
  120. CONFIG_SUCH="$(/bin/echo -n ${CONFIG_FIND} | /bin/grep -e 'No such file or directory')"
  121. CONFIG_BROKEN="$(/bin/echo -n ${CONFIG_FIND} | xargs -r0 file | /bin/grep -e 'broken symbolic link')"
  122. ## Este teste é verdadeiro se o arquivo EXISTE
  123. if [ "${CONFIG_SUCH}" == "" ]
  124. then
  125. ## Este teste é verdadeiro se o link simbólico está quebrado
  126. if [ "${CONFIG_BROKEN}" != "" ]
  127. then
  128. /bin/rm ${CONFIG_FILE}
  129. /bin/ln -s "${CONFIG_DEFAULT}" "${CONFIG}"
  130. fi
  131. /usr/bin/screen -dmS "${MINER_BIN}" "${MINER_PATH}" -c "${CONFIG_FILE}"
  132. else
  133. if [ -f "${CONFIG_DEFAULT}" ]
  134. then
  135. /bin/ln -s "${CONFIG_DEFAULT}" "${CONFIG}"
  136. else
  137. /bin/echo "Nenhum arquivo de configuração encontrado. Verifique a existência dos mesmos."
  138. /bin/echo "O diretório ${CONFIG_DIR} deveria existir, com pelo menos o arquivo ${CONFIG_DEFAULT}."
  139. fi
  140. fi
  141. ### Corrigir permissões do arquivo
  142. chmod ug+x /root/bin/cgminer-start.bash
  143. ### Alterar ExecStart do serviço do systemd
  144. ExecStart=/root/bin/cgminer-start.bash
  145. ### Recarregar o systemd
  146. systemctl daemon-reload
  147. ### Recarregar o serviço
  148. systemctl -l restart cgminer.service
  149. ---
  150. ## Gridseeds
  151. Como [[eu|desci]] minero com ASICs Scrypt, então tenho as seguintes diferenças na hora de compilar o cgminer e na hora de configurar o mesmo:
  152. ### Compilar cgminer com suporte a gridseed e scrypt
  153. #### Repositório alternativo
  154. cgminer não tem mais suporte a scrypt, então eu uso o seguinte repositório: <https://githutb.com/dmaxl/cgminer>
  155. #### Configuração do make
  156. Antes de compilar o cgminer:
  157. CFLAGS="-O2 -Wall -mcpu=cortex-a53 -mfpu=neon-fp-armv8" ./configure --enable-gridseed --enable-scrypt
  158. O bfgminer:
  159. CFLAGS="-O2 -Wall -mcpu=cortex-a53 -mfpu=neon-fp-armv8" ./configure --enable-gridseed --enable-scrypt --disable-all-drivers --disable-sha256d
  160. #### Arquivo de configuração do c/bfgminer
  161. Adicionar nas configurações em json:
  162. "scrypt" : true,
  163. "gridseed-options" : "freq=850,led_off=1",
  164. ### Minerar sem a conta root
  165. #### Criar usuário com acesso a dispositivos
  166. # adduser miner
  167. # usermod -G plugdev -a miner
  168. #### Adicionar mineradora nas regras udev
  169. Criar arquivo `/etc/udev/rules.d/10-gridseed.rules` com o seguinte conteúdo:
  170. ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5740", SUBSYSTEMS=="usb", ACTION=="add", MODE="0666", GROUP="plugdev"
  171. #### Alterar serviço systemd
  172. Adicionar na seção `[Service]`:
  173. User=miner
  174. #### Recarregar systemd
  175. # systemctl daemon-reload
  176. # systemctl restart cgminer.service
  177. [[!tag raspberry "raspberry pi" mineração cgminer bitcoin tutorial]]
  178. [[!meta title="Minerar criptomoeda com raspberry pi"]]