BOINC (Berkeley Open Infrastructure for Network Computing) è un software libero per il calcolo distribuito volontario (vedi anche la relativa voce di Wikipedia).

L'ho trovato nel repository di Ubuntu Bionic e, dopo averlo provato, ho deciso di contribuire anch'io.

In cantina avevo un vecchio computer che non usavo da tempo ma con caratteristiche ancora notevoli:

  • CPU: Intel® Xeon® E5-2695 v2
  • RAM: 16GiB (8GB x2, DDR3 1333 MHz,  ECC)
  • Disco:  INTEL SSDSC2BW12 da 120 GB
  • Sistema Operativo: Ubuntu 18.04 Bionic Beaver

Da un paio di misurazioni veloci risulta che la potenza elettrica assorbita a pieno carico si aggira attorno ai 170W.

Sebbene aiutare la ricesca scientifica mi gratifichi non avevo intenzione di spendere oltre 20€ al mese per tenere acceso 24h/24h il computer. Così decisi di installarlo a casa dei miei genitori che da diversi anni possiedono un impianto fotovoltaico da 3 kWp.

Per evitare di usare elettricità proveniente dalla rete elettrica ho creato un sistema per l'accensione e lo spegnimento sincronizzati con la luce diurna.

I due elementi fondamentali sono:

  • sunwait è un piccola utility che calcola l'ora dell'alba e del tramonto in una determinata coordinata geografica. Si può installare facilmente dal repository di Ubuntu.
  • rtcwake permette lo spegnimento e la riaccensione a una determinata ora di un sistema Linux.

 Per permettere lo spegnimento al tramonto ho realizzato lo scirpt waitingSunset.sh:

#!/bin/bash

SLEEP_HOUR=`sunwait list angle 6 set 45.9N 12.6E`

# L'opzione "list" restitutisce l'ora dell'evento tramonto (opzione "set") nel

# luogo identificato dalla coordinate 45.9N 12.6E.

# L'opzione "angle 6" anticipa l'ora del tramonto di quasi 1 ora così

# da usare solo energia proveniente dai pannelli sufficientemente irradiati

echo "Spegnimento previsto per oggi alle $SLEEP_HOUR"

sunwait wait angle 6 set 45.9N 12.6E

# sunwait viene chiamato con l'opzione wait che lo mette in stato di "sonno"

#fino all'ora calcolata con gli stessi parametri della precedente chiamata.

/root/sustainableBOINC/nightSleep.sh

# In fine viene chiamato lo script che metterà in sospensione il computer

 

Per riattivare il computer ad un orario compatibile con una buona produzione elettrica ho usato nightSleep.sh:

#!/bin/bash

WAKEUP_HOUR=`sunwait list angle 6 rise 45.9N 12.6E`

# Prima di chiamare rtcwake calcolo l'ora dell'alba (opzione "rise").

TOMORROW_DATE="tomorrow $WAKEUP_HOUR"

NOW_DATE=`date +%T`

echo "Inizio pausa notturna dalle $NOW_DATE di oggi alle $WAKEUP_HOUR di domani"

/usr/sbin/rtcwake -u -m off -t $(date +\%s -d "$TOMORROW_DATE") >> /tmp/rtcwake.log 2>&1

# rtcwake spegnerà il computer e lo riaccenderà all'ora calcolata in precedenza

 

Affinchè il tutto funzioni è necessario che lo script waitingSunset.sh venga eseguito all'avvio del computer. Per fare questo ho aggiunto la nuova unità sustainableBOINC.service a systemd:

[Unit]
Description=Avvio waitingSunset

[Service]
ExecStart=/root/sustainableBOINC/waitingSunset.sh

[Install]
WantedBy=multi-user.target

 

Nel caso qualcosa andasse storto in fase di spegnimento forzo l'avvio di nightSleep.sh alle 21:00 di ogni giorno con crontab

0 21 * * *      /root/sustainableBOINC/nightSleep.sh

Dopo averlo attivato con systemctl il sistema è pronto per sostenere la ricerca!

 

Curioso di sapere il mio ranking su BOINC?