mercoledì 5 agosto 2015

Usbmount

Un amico mi ha chiesto un sistema (per un gioco) di creare un sistema di registrare il passaggio dei concorrenti da alcuni passaggi obbligati....ovviamente il sistema doveva essere al costo minimo possibile ed i dati di passaggio dovevano essere registrati su un dispositivo portato dal concorrente (non e' previsto che ci potesse essere un collegamento Internet nei punti di passaggio ed i punti di passaggio dovevano essere recuperati anche molte ore dopo il termine del gioco)



Scartata l'ipotesi Rfid, per il costo del singolo chip Rfid scrivibile intorno ai 3-4 euro ciascuno e per il costo del programmatore di chip, una possibile soluzione e' quella di usare una Raspberry e delle normali chiavette USB per registrare i dati del passaggio

In pratica il concorrente deve inserire la chiavetta nella Raspberry ed in automatico devono inseriti i dati e la chiavetta deve essere estrarre senza smontare esplicitamente il dispositivo

La soluzione e' stata quella di usare una Raspbian minimale (senza Xwindow) ed il pacchetto Usbmount che crea automaticamente i device /media/usb, /media/usb0/ (apt-get install usbmount)

Per intercettare l'evento di inserimento della chiavetta e poter scrivere i dati sulla stessa si puo' modificare lo script /etc/usbmount/mount.d/00_create_model_symlink aggiungendo al termine del file (prima dell'exit) qualcosa del tipo

echo "luca" > /media/usb0/file.txt

in generale il sistema funziona bene anche se non e' velocissimo perche' impiega circa 5 secondi per la scrittura

ho provato anche un altro sistema ovvero creare una regola /etc/udev/rules.d/100-miaregola.rules con questo contenuto

ACTION=="add", SUBSYSTEM=="block", KERNEL=="sd[a-z]1", RUN+="/home/luca/usb.sh" 

nella home ho poi ho messo uno script che doveva scrivere il file sul dispositivo USB. Curiosamente, nonostante l'evento di inserimento della penna USB venisse correttamente intercettato (ho usato logger per scrivere in syslog e verificare) la scrittura del file, nonostante tutti i tentativi di svuotare le cache, avveniva solo alla disconnessione della penna USB e quindi sul disco fisso (cioe' in /media/sdb1 ma solo quando il device era stato smontato)