Después de la larga espera de los ASIC de nuestros NO amigos de BFL, toca la hora de ponerlos a minar sin descanso, reduciendo costes y resistentes a "casi" cualquier fallo incluso cuando no podemos estar cerca.
El objetivo es:
- montar un minero resiste a los cortes de luz, la flash nos va a ayudar a evitar sorpresas
- Reducir los costes de energía no teniendo que tener un PC
- Ser resistente a torpes, que cualquiera lo pueda reiniciara y arranque solo
- Se pueda verificar el estado de minado remotamente, montaremos un interface web para ver el estado de minado desde internet
- sea 100% desatendido, para ello lo vamos a monitorizar ante falos HW/SW y lo reiniciaremos SW/HW para que se recupere solo
- Si es software libre, siempre sabe mejor
Para ello he desempolvado un viejo router Comtrend ar5831u (los blanquitos de jazztell) que destacan por tener 16 Mb de flash, 64 Mb de RAM, un puerto USB y una CPU modesta BMIPS4350 / 320 MHz
mas info en la wiki de openwrt pero mas que suficiente para montar nuestra propia distribución de openwrt para gestionar los BFL mediante un hub USB, en mi caso hasta 5 dispositivos con la CPU por debajo de 30% de uso.
Como software de minado, aunque siempre he sido de cgminer, en este caso he usado bfgminer, por mi poca experiencia es menos resistente a conexiones/desconexiones de nuevos dispositivos y digamos mas windosero = cargado de features y colores pero propenso a quedarse pensando en otra cosa por no decir en blanco, sobre todo como deicia con nuevos dispositovos que se (re)conectan.
Las ventajas de bfgminer es la existencia de paquete precompilados para OpenWrt y un interface web en PHP bastante feo pero que se le puede sacar mucho jugo y cambiar esos feos colores azules.
Lo que cuento es válido para el router de comtrend, pero si tienes otro ruter con espacio suficiente en flash o en almacenamiento USB con los modulos que indico, no debería haber diferencia.
El primer paso es compilarnos nuestro propio OpenWrt salvo que tengamos la suerte de tener paquetes precompilados que funciones, en mi caso con el Comtrend ar5831u la wifi no tira y el driver USB serial tampoco, así que a compilar
Más info en este hilo de seguridad wireles:
1: descargar las fuentes de Openwrt y configurar:git clone git://github.com/openwrt-es/openwrt.git -b bcm63xx-r38342
cd openwrt
patch -p0 -i openwrt_6328.patch
./scripts/feeds update –a
./scripts/feeds install –a
make menuconfig #(Target: bcm63xx/ Profile: Broadcom Wifi (brcmsmac) / Selecciono los paquetes que quiero instalar)
marcar kmod-usb-serial - kmod-usb-serial-ftdi dentro de USB support
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────
┌──────────────────────────────────────────────── USB Support ────────────────────────────────────────────────┐
│ Arrow keys navigate the menu. <Enter> selects submenus --->. Highlighted letters are hotkeys. Pressing │
│ <Y> includes, <N> excludes, <M> modularizes features. Press <Esc><Esc> to exit, <?> for Help, </> for │
│ Search. Legend: - built-in [ ] excluded <M> module < > module capable │
│ │
│ ┌─────────────────────────────────────────────────────────────────────────────────────────────────────────┐ │
│ │ < > kmod-usb-acm......................... Support for modems/isdn controllers │ │
│ │ < > kmod-usb-atm.................................. Support for ATM on USB bus │ │
│ │ < > kmod-usb-chipidea....................... Support for ChipIdea controllers │ │
│ │ < > kmod-usb-cm109.................................. Support for CM109 device │ │
│ │ -*- kmod-usb-core............................................ Support for USB │ │
│ │ < > kmod-usb-dwc2................................. DWC2 USB controller driver │ │
│ │ < > kmod-usb-hid......................... Support for USB Human Input Devices │ │
│ │ < > kmod-usb-net............... Kernel modules for USB-to-Ethernet convertors │ │
│ │ < > kmod-usb-ohci............................... Support for OHCI controllers │ │
│ │ < > kmod-usb-printer.................................... Support for printers │ │
│ │ <*> kmod-usb-serial..................... Support for USB-to-Serial converters │ │
│ │ < > kmod-usb-serial-ark3116........ Support for ArkMicroChips ARK3116 devices (NEW) │ │
│ │ < > kmod-usb-serial-belkin........................ Support for Belkin devices (NEW) │ │
│ │ < > kmod-usb-serial-ch341.......................... Support for CH341 devices (NEW) │ │
│ │ < > kmod-usb-serial-cp210x........... Support for Silicon Labs cp210x devices (NEW) │ │
│ │ < > kmod-usb-serial-cypress-m8.............. Support for CypressM8 USB-Serial (NEW) │ │
│ │ <*> kmod-usb-serial-ftdi............................ Support for FTDI devices │ │
│ │ < > kmod-usb-serial-ipw.................... Support for IPWireless 3G devices (NEW) │ │
│ │ < > kmod-usb-serial-keyspan........ Support for Keyspan USB-to-Serial devices (NEW) │ │
│ │ < > kmod-usb-serial-mct.............. Support for Magic Control Tech. devices (NEW) │ │
│ │ < > kmod-usb-serial-mos7720.............. Support for Moschip MOS7720 devices (NEW) │ │
│ │ < > kmod-usb-serial-motorola-phone............ Support for Motorola usb phone (NEW) │ │
│ │ < > kmod-usb-serial-option................... Support for Option HSDPA modems (NEW) │ │
│ │ < > kmod-usb-serial-oti6858...... Support for Ours Technology OTI6858 devices (NEW) │ │
│ │ < > kmod-usb-serial-pl2303............... Support for Prolific PL2303 devices (NEW) │ │
│ └─────────────────v(+)────────────────────────────────────────────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ <Select> < Exit > < Help > < Save > < Load > │
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
make kernel_menuconfig (Opcional, sólo si quieres configurar el kernel)
make -j3 V=cs #(-j3 para Dual Core)
si todo sale bien, tendremos en openwrt/bin/brcm63xx/openwrt-96328A-1241N-generic-squashfs-cfe.bin nuestra nueva imagen de OpenWrt, si algo no sale bien, revisa el hilo de seguridad wireless o la wiki de OpenWrt.
2: instalamos la nueva imagen en nuestro router, esto debería ser trivial para este router, para otros puede ser una odisea hasta tener un adaptador jtag3: instalación de modulos y softwareuna vez actualizado a la nueva versión accedemos al sistema por ssh/telnet por el interface de red ethernet (la administración por wireless esta cortado por defecto)
ioxoi@morgana:~/open/openwrt-comtrend-ar5831u/openwrt$ scp ./bin/brcm63xx/packages/kmod-usb-serial-ftdi_3.10.13-1_brcm63xx.ipk ./bin/brcm63xx/packages/kmod-usb-serial_3.10.13-1_brcm63xx.ipk ./bin/brcm63xx/packages/kmod-usb2_3.10.13-1_brcm63xx.ipk root@192.168.1.1:~/
kmod-usb-serial-ftdi_3.10.13-1_brcm63xx.ipk 100% 11KB 11.0KB/s 00:00
kmod-usb-serial_3.10.13-1_brcm63xx.ipk 100% 13KB 12.9KB/s 00:00
kmod-usb2_3.10.13-1_brcm63xx.ipk 100% 26KB 26.5KB/s 00:00
ioxoi@morgana: ssh root@192.168.1.1
root@Mena:~# opkg install kmod-usb-serial-ftdi_3.10.13-1_brcm63xx.ipk kmod-usb-serial_3.10.13-1_brcm63xx.ipk kmod-usb2_3.10.13-1_brcm63xx.ipk
Installing kmod-usb-serial-ftdi (3.10.13-1) to root...
Installing kmod-usb-serial (3.10.13-1) to root...
Package kmod-usb-serial (3.10.13-1) installed in root is up to date.
Installing kmod-usb2 (3.10.13-1) to root...
Configuring kmod-usb2.
Configuring kmod-usb-serial.
Configuring kmod-usb-serial-ftdi.
estaremos sin luci con lo que lo instalamos para revisar la configuración de red, reglas de fw y demás parámetros (ojo a la red, el router tiene que salir a internet)
oot@Mena:~# opkg update
Downloading http://downloads.openwrt.org/snapshots/trunk/brcm63xx/packages/Packages.gz.
Updated list of available packages in /var/opkg-lists/barrier_breaker.
root@Mena:~# opkg install luci luci-ssl
root@mena:/# /etc/init.d/uhttpd enable
root@mena:/# /etc/init.d/uhttpd start
editamos el archivo de sources de opkg para incluir la línea:
src/gz bfgminer
http://luke.dashjr.org/programs/bitcoin/files/bfgminer/testing/openwrt/12.09/brcm63xxOjo que los dos úlimos directorios dependen de la versión y la arquitectura de nuestro router.
quedando algo del estilo:
src/gz barrier_breaker http://downloads.openwrt.org/snapshots/trunk/brcm63xx/packages
src/gz bfgminer http://luke.dashjr.org/programs/bitcoin/files/bfgminer/testing/openwrt/12.09/brcm63xx
dest root /
dest ram /tmp
lists_dir ext /var/opkg-lists
option overlay_root /overlay
Instalamos paquetes
opkg update
opkg install bfgminer kmod-usb-serial-ftdi kmod-usb2 php5-mod-session php5-mod-sockets php5 php5-cgi php5-mod-ctype zoneinfo-europe
añadimos el modulo ftdi_sio al arranque y lo arrancamso a mano, este modulo es el iterface USB-serial que usa BFL
root@mena:/# echo 'ftdi_sio' > /etc/modules-boot.d/50-ftdi_sio
root@mena:/# modprobe ftdi_sio
Este es el momento clave, conectamos el asic al puerto usb y revisamos los logs con dmesg buscando las ultimas lineas y que se ha creado el puerto /dev/ttyUSB0
[ 875.044000] usbcore: registered new interface driver usbserial
[ 875.052000] usbcore: registered new interface driver usbserial_generic
[ 875.060000] usbserial: USB Serial support registered for generic
[ 875.072000] usbcore: registered new interface driver ftdi_sio
[ 875.080000] usbserial: USB Serial support registered for FTDI USB Serial Device
[ 875.088000] ftdi_sio 1-1:1.0: FTDI USB Serial Device converter detected
[ 875.096000] usb 1-1: Detected FT232H
[ 875.100000] usb 1-1: Number of endpoints 2
[ 875.104000] usb 1-1: Endpoint 1 MaxPacketSize 2
[ 875.108000] usb 1-1: Endpoint 2 MaxPacketSize 2
[ 875.116000] usb 1-1: Setting MaxPacketSize 512
[ 875.120000] usb 1-1: FTDI USB Serial Device converter now attached to ttyUSB0
si no nos aparece ttyUSB0 algo no está funcionando y el dispositivo no está siendo detectado.
Descargate los cambio que he hecho desde
https://github.com/ioxxoi/openwrtminer (chequea posibles nuevas versiones)
https://github.com/ioxxoi/openwrtminer/blob/master/openwrtminer_v0.1.0.tgztrasferimos el archivo con los cambios:
scp openwrtminer_v0.1.0.tgz root@192.168.0.1:/root
desde el router destarareamos el paquete
root@Mena:/# cd /
root@Mena:/# tar -zxvf /root/openwrtminer_v0.1.0.tgz
etc/bfgminer.cfg
etc/init.d/bfgminer
www/miner.php
root@Mena:/#
Modificamos nuestro fichero de configuración de bfgminer
vi /etc/bfgminer.cfg
ARGS="--real-quiet --api-listen --api-allow 127.0.0.1,192.168.0.0/24 --api-port 4028 -S bfsb:auto -o stratum.bitcoin.cz:3333 -u usr.worker -p t0pS3cr3t -o eustratum.ozco.in:3333 -u usr -p t0pS3cr3t -o stratum.ozco.in:80 -u usr -p t0pS3cr3t"
activamos en el arranque el bfgminer
root@mena:/# /etc/init.d/bfgminer enable
Este es el moemnto de arrancar el bfgminer a mano:
bfgminer --api-listen --api-allow 127.0.0.1,192.168.0.0/24 --api-port 4028 -S bfsb:auto -o stratum.bitcoin.cz:3333 -u usr.worker -p t0pS3cr3t -o eustratum.ozco.in:3333 -u usr -p t0pS3cr3t -o stratum.ozco.in:80 -u usr -p t0pS3cr3t
y si va fino cancelar y arancar desde el servicio:
root@mena:/# /etc/init.d/bfgminer start
revisamos el proceso con ps -w
root@Mena:/# ps -w | grep bfgminer
2357 root 32456 S /usr/bin/bfgminer --real-quiet --api-listen --api-allow 127.0.0.1,192.168.0.0/24 --api-port 4028 -S bfsb:
2380 root 1492 S grep bfgminer
root@Mena:/#
revisamos la parada del servicio
/etc/init.d/bfgminer stop
ps -w
root@Mena:/# ps -w | grep bfgminer
root@Mena:/# ps -w | grep bfgminer
2402 root 1492 S grep bfgminer
root@Mena:/#
y lo arrancamos de nuevo
root@mena:/# /etc/init.d/bfgminer start
y probamos el api
oot@Mena:/www# bfgminer-rpc summary 127.0.0.1 4028
Reply was 'STATUS=S,When=1382879009,Code=11,Msg=Summary,Description=bfgminer 3.3.0|SUMMARY,Elapsed=11353,MHS av=29088.800,Found Blocks=0,Getworks=424,Accepted=4248,Rejected=25,Hardware Errors=339,Utility=22.450,Discarded=2260,Stale=0,Get Failures=0,Local Work=83203,Remote Failures=0,Network Blocks=29,Total MH=330248625.2468,Work Utility=404.289,Difficulty Accepted=75580.15326162,Difficulty Rejected=300.00457771,Difficulty Stale=0.00000000,Best Share=52980,Device Hardware%=0.4412,Device Rejected%=0.3922,Pool Rejected%=0.3954,Pool Stale%=0.0000|'
[STATUS] =>
(
[STATUS] => S
[When] => 1382879009
[Code] => 11
[Msg] => Summary
[Description] => bfgminer 3.3.0
)
[SUMMARY] =>
(
[0] => SUMMARY
[Elapsed] => 11353
[MHS av] => 29088.800
[Found Blocks] => 0
[Getworks] => 424
[Accepted] => 4248
[Rejected] => 25
[Hardware Errors] => 339
[Utility] => 22.450
[Discarded] => 2260
[Stale] => 0
[Get Failures] => 0
[Local Work] => 83203
[Remote Failures] => 0
[Network Blocks] => 29
[Total MH] => 330248625.2468
[Work Utility] => 404.289
[Difficulty Accepted] => 75580.15326162
[Difficulty Rejected] => 300.00457771
[Difficulty Stale] => 0.00000000
[Best Share] => 52980
[Device Hardware%] => 0.4412
[Device Rejected%] => 0.3922
[Pool Rejected%] => 0.3954
[Pool Stale%] => 0.0000
)
root@Mena:/www#
Vamos a preparar el interfcae web de estado partiendo del miner.php de bfgminer con algún cambio estetico por mi parte
en /etc/config/uhttpd descomentar
list interpreter ".php=/usr/bin/php-cgi"
En /etc/php.ini hay que fijar la zona horaria
[Date]
date.timezone = "Europe/Madrid"
y hay que tener instalado el paquete de la zona horario en cuestion , por ejemplo para madrid zoneinfo-europe
reiniciamos el servidor web
/etc/init.d/uhttpd restart
y probamos el interface web de estado del minero
https://192.168.1.1/miner.php
un detalle más, vamos a añadir autenticacion a nuestra pagina de estatus usando la autenticación del servidor web,
hay que tener cuidadin que uno nunca sabe quien puede llegar a mirar.
root@Mena:~# echo "/miner.php:miner:`uhttpd -m t0pS3cr3t`" >> /etc/httpd.conf
root@Mena:~# chmod 600 /etc/httpd.config
root@Mena:~# /etc/init.d/uhttpd restart
si todo esta fino rebotamos y revisamo el interface web para ver que todo ha arrancado de manera
automágica.
retoque final, he añadido una verificaciónd e estado, si el minero no me da los megahases esperados reinicio el servicio las tres primeras veces, si aún no se recupera rebooto el equipo.
de esta forma me da lo mismo que sea un problema de red o de software, esto se ejecuta cada 5 minutos en el cron
root@Mena:~# cat /etc/crontabs/root
# m h dom mon dow user command
*/5 * * * * /usr/local/bin/bfgminer.cron
el script /usr/local/bin/bfgminer.cron esta incluido en github
https://github.com/ioxxoi/openwrtminer/blob/master/usr/local/bin/bfgminer.crony a minar ...
Se aceptan centimillos o incluso Bitcoins enteros
16Pp6HKZUGbwyRfEJY8QbU1mxrFBCbqFXw
[/code]