mercoledì 14 gennaio 2015

NTP Server con GPS via Android


In questo post viene spiegato come poter utilizzare un telefono Androided  un calcolatore con Linux per creare un semplice NTP server
Questa funzione e' utile nel caso che si abbiano diversi sensori che necessariamente devono lavorare ben sincronizzati ed e' stata necessaria dopo la recente vulnerabilita' di   NTP quando l'amministratore di una grande rete a cui mi appoggio ha deciso di tagliare tutto il traffico NTP (senza peraltro avvisare gli utenti)

Era richiesto che il PC ed il telefono fossero collegati via cavo USB (e non via Bluetooth) in modo da non avere perdita di connessione ed in modo anche di alimentare in modo semplice il telefono


Sul telefono Android si deve installare ed avviare l'applicazione BlueNMEA e si collega il telefono al PC (la modalita' sviluppatore deve essere attivata per aprire il canale ADB)




a questo punto da shell si forwarda tutto il traffico sul protocollo ADB verso la porta 4352 TCP del calcolatore

adb forward tcp:4352 tcp:4352

per verificare la connessione si puo' usare telnet

telnet localhost 4352

se tutto e' andato a buon fine si dovrebbero passare i messaggi NMEA (anche se non si e' ottenuto il fix del GPS si vedono comunque le stringhe)

a questo punto si puo' installare il demone GPSD 

apt-get install gpsd gpsd-clients python-gps

si lancia quindi il demone che ascolta la porta 4352 dopo prima era stato dirottato il trafffico GPS del telefono

gpsd tcp://localhost:4352

per verificare se funziona il demone si puo' usare a linea di comando 

cgps -d

mentre in X

xgps


per fare in modo da usare il dato del tempo per il server del tempo si deve installare il demone di NTP

apt-get install ntp 

e si modifica il file di configurazione in /etc/ntp.conf


# gps ntp
server 127.127.28.0 minpoll 4
fudge 127.127.28.0 time1 0.183 refid NMEA
server 127.127.28.1 minpoll 4 prefer
fudge 127.127.28.1 refid PPS

si riavvia il servizio e si puo' interrogare


ntpq -p