Automatizando el minado de criptomonedas en una Raspberry Pi

Publicado por emontes en

Previamente les comenté respecto de cómo minar criptomonedas en una Raspberry Pi, quedando pendiente la automatización de la ejecución de la aplicación de minería de criptomonedas, de tal forma que si por alguna razón la Raspberry Pi se reiniciaba por ejemplo por un corte de luz o porque la aplicación crasheó por un error de código, dicha aplicación se inicie en forma automática.

Esto se puede lograr a través de cron, pero este proceso ya es arcaico y las distribuciones más modernas de Linux disponen de un nuevo sistema de inicio llamado systemd con el cual es posible transformar un comando o un script en un daemon el cual se ejecute cada vez que el sistema detecte que no se está ejecutando.

Paso 0. Actualizar las dependencias y paquetes del sistema

Siempre antes de realizar modificaciones, instalaciones, compilaciones, etc al sistema, es necesario actualizar las dependencias y paquetes de este

sudo apt-get update
sudo apt-get upgrade

Paso 1. Verificar si está instalado systemd y nohup

Si por alguna razón nuestra distribución de Linux no tiene instalado systemd, es necesario instalarlo para automatizar la ejecución de la aplicación de minería de criptomonedas, ya que es mucho más fiable que cron. También necesitaremos un paquete llamado nohup el cual permitirá la ejecución de la aplicación de minería en segundo plano sin mostrar en pantalla el log, sino que lo irá almacenando en un archivo llamado nohup.log.

sudo apt-get install systemd nohup

Si alguno de los dos paquetes no está instalado, lo instalará, y por otra parte si está instalado, el comando responderá con un mensaje indicando que ya está instalado y que no es necesario actualizarlo.

Paso 2. Crear el servicio para automatizar la aplicación de minería

Para crear el servicio usaremos el siguiente comando

sudo systemctl edit miner.service

Esto creará el archivo miner.service en /etc/systemd/system. El nombre del archivo no necesariamente debe ser el del ejemplo, puede ser cpuminer.service, minerd.service, etc.

Una vez creado hay que editarlo para agregarle contenido y que de esta forma el servicio funcione como un daemon.

sudo nano /etc/systemd/system/miner.service

El contenido de dicho archivo debe ser el siguiente

[Unit]
Description=RaspberryPi-CPUMiner
After=network.target

[Service]
Type=simple
ExecStart = /usr/bin/nohup ./CryptoMiners/RaspberryPi-CPUMiner/minerd-multi -a cryptonight -o stratum+tcp://[POOL-URL:PORT] -u [WALLET]
WorkingDirectory=/home/pi
Restart=on-failure

[Install]
WantedBy=multi-user.target

El ejemplo muestra 3 secciones, Unit, Service e Install. En la sección Unit, en Description se debe indicar la descripción del servicio, mientras que el parámetro indicado en After indica en este caso que el servicio debe ser iniciado después de los servicios de red.

En la sección Service, Type debe ser simple para este tipo de servicios, en ExecStart se indica el comando que se va a ejecutar, reemplazando [POOL-URL:PORT] por la url de la pool a la cual la aplicación de minería se va a conectar con su puerto respectivo, y [WALLET] corresponde a tu billetera digital a la cual se transferirán las recompensas en criptomonedas con que se premia el minado. WorkingDirectory corresponde al directorio donde se encuentra la aplicación de minado, y Restart es el parámetro que indica al sistema cuando se debe reiniciar el servicio, que en este caso será cuando el proceso falle. Finalmente en la sección Install, encontraremos WantedBy cuyo parámetro para este servicio.

Es importante notar que en la línea del parámetro ExecStart, el comando que el servicio va a ejecutar, debe incluir la ruta absoluta tanto para el comando nohup como para la aplicación de minería utilizada que en este caso es minerd-multi.

Una vez realizados los cambios es necesario grabarlos con Ctrl-O, confirmar la operación presionando Y y luego ENTER, teniendo cuidado en que el editor no agregue caracteres adicionales al nombre, cosa que puede ocurrir ya que el sistema lo abre como archivo temporal como medida de protección a la modificación de ficheros importantes. Una vez grabado el archivo salimos del editor usando Ctrl-X.

Paso 3. Activar el servicio

Una vez creado el servicio sólo resta activarlo para que el sistema lo ejecute en forma automática cada vez que el proceso falle o no esté corriendo. Para esto es necesario reiniciar systemd de tal forma que considere el nuevo servicio que hemos creado, luego habilitarlo y finalmente ejecutarlo.

sudo systemctl daemon-reload
sudo systemctl enable miner.service
sudo systemctl start miner.service

Con esto el servicio ya estará funcionando y no tendremos que preocuparnos si hay un corte de luz o alguien desconectó la Raspberry Pi de la electricidad, y podremos seguir minando criptomonedas sin esta preocupación sabiendo que la aplicación de minería se ejecutará en forma automática durante el booteo.

Si queremos verificar que el proceso está corriendo, basta con ejecutar el siguiente comando y buscar la línea que hace alusión a la aplicación mencionada en ExecStart.

ps -aux | less

Links:


1 comentario

Cómo transferir Raspbian a una tarjeta microSD en macOS | Code is Poetry · 15/07/2019 a las 07:21

[…] lo cual ya había comentado en las entradas Minando criptomonedas en una Raspberry Pi y Automatizando el minado de criptomonedas en una Raspberry Pi, y en otros proyectos que comentaré más […]

Deja una respuesta

Marcador de posición del avatar

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *