Editing
Raspberry Pi NTP Server
(section)
Jump to navigation
Jump to search
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
== Configurarea Raspberry Pi ca server NTP folosint NEO-7M == Un server NTP asigura sincronizarea corecta a orei pentru toate dispozitivele dintr-o retea, prevenind erori în loguri, autentificari sau servicii care depind de timp precis. Folosind un modul GPS cu PPS, un Raspberry Pi poate deveni o sursa Stratum‑1 foarte stabila și independenta de internet. Acest proiect prezinta configurarea unui astfel de server NTP simplu și fiabil pentru uz local. === Componente folosite === Pentru realizarea acestui server NTP stratum 1 am folosit componente simple, accesibile si usor de integrat. Lista de mai jos include toate elementele hardware necesare pentru configuratie. * Raspberry Pi 1 Model B - 180 RON (pret din 2012) * Modul GPS u-blox NEO-7M - 49,07 RON * Antena GPS ~28 dB gain - 67 RON * Fire jumper female–female - 5,79 RON * Card SD 16 GB - aprox 30 RON <nowiki>*</nowiki><i>preturi valabile in decembrie 2025</i> === Configurare UART și activare PPS === Pe Raspberry Pi, consola seriala este activa implicit, ceea ce blocheaza utilizarea interfetei UART pentru modulul GPS. Pentru a putea folosi portul serial și semnalul PPS, este necesara dezactivarea consolei și activarea manuala a suportului UART și PPS. ==== Dezactivarea consolei seriale ==== Pentru dezactivarea consolei seriale editam fisierul /boot/firmware/cmdline.txt de unde stergem segmentul care contine consola, de obicei ceva de forma: <code class="mw-code mw-highlight plainlinks" style="display:block"><!-- --> console=serial0,115200 </code> Lasam restul liniei pe un singur rand, exact cum era. ==== Verificarea activarii UART ==== Editam fisierul /boot/firmware/config.txt unde ne asiguram ca exista: <code class="mw-code mw-highlight plainlinks" style="display:block"><!-- --> [all]  enable_uart=1 </code> ==== Activarea modulului PPST ==== Incarcam modulul PPS executand: <code class="mw-code mw-highlight plainlinks" style="display:block"><!-- --> echo 'pps-gpio' >> /etc/modules </code> Pentru configurarea pinului PPS (GPIO 18) editam din nou fisierul /boot/firmware/config.txt iar in partea de jos adaugam: <code class="mw-code mw-highlight plainlinks" style="display:block"><!-- --> dtoverlay=pps-gpio,gpiopin=18 </code> Aceasta indica kernelului ca semnalul PPS este conectat la GPIO 18. Dupa ce efectuam aceste modificari, oprim systemul in vederea conectarii modului de GPS. === Conectarea modului GPS === Dupa dezactivarea consolei seriale și activarea suportului PPS, interfața UART a Raspberry Pi devine libera pentru comunicarea cu modulul GPS. Conectarea se face direct pe pinii GPIO, folosind alimentarea de 5V, masa comuna și liniile de date RX/TX, plus semnalul PPS. ==== Schema de conectare ==== [[File:GPIOtoGPS.jpg|800px|none|Pagina Pringipala UrBackup]] * Conectam pinul de 5V al Raspberry Pi la pinul de alimentare al modulului GPS. * Conectam GND la masa modulului GPS. * Conectam TX0 de pe Raspberry Pi la RX al modulului GPS (Pi transmite → GPS primește). * Conectam RX0 de pe Raspberry Pi la TX al modulului GPS (GPS transmite → Pi primește). * Conectam GPIO 18 la pinul PPS al modulului GPS, conform configurarii din config.txt === Test pentru UART si PPS === Dupa conectarea modulului GPS si configurarea UART/PPS, putem verifica functionarea celor doua interfete direct din sistem. ==== Test UART (NMEA) ==== Pentru a verifica daca modulul GPS transmite date NMEA prin UART: <code class="mw-code mw-highlight plainlinks" style="display:block"><!-- --> <b># cat /dev/serial0</b>  $GNRMC,140221.00,A,4423.43286,N,02605.77991,E,0.096,,250226,,,A,V*14  $GNVTG,,T,,M,0.096,N,0.178,K,A*3C  $GNGGA,140221.00,4423.43286,N,02605.77991,E,1,10,2.11,105.1,M,34.9,M,,*44  $GNGSA,A,3,10,23,15,29,16,26,27,18,,,,,3.30,2.11,2.54,1*00  $GNGSA,A,3,02,25,,,,,,,,,,,3.30,2.11,2.54,3*07  ............. </code> Acest rezultat confirma faptul ca Pi-ul primeste date GPD de la modul Daca totul este configurat corect, ar trebui sa apara siruri NMEA. In cazul in care nu apare asemenator mai sus, verificati conexiunile RX/TX si setarile UART. ==== Instalare unelte PPS si testare ==== Pentru testarea semnalului PPS, instalati pachetul necesar: * apt install pps-tools Dupa instalare, verificam semnalul PPS: <code class="mw-code mw-highlight plainlinks" style="display:block"><!-- --> <b># ppstest /dev/pps0</b>  trying PPS source "/dev/pps0"  found PPS source "/dev/pps0"  ok, found 1 source(s), now start fetching data...  source 0 - assert 1769914968.660167945, sequence: 330 - clear 0.000000000, sequence: 0  source 0 - assert 1769914969.660165119, sequence: 331 - clear 0.000000000, sequence: 0  source 0 - assert 1769914970.660164293, sequence: 332 - clear 0.000000000, sequence: 0 </code> Un rezultat corect va afisa impulsuri detectate la fiecare secunda. === Configurare gpsd === Instalam pachetele necesare pentru gestionarea modulului GPS: * apt install gpsd gpsd-clients ==== Startup config pentru gpsd ==== Editam fisierul de configurare gpsd: <code class="mw-code mw-highlight plainlinks" style="display:block"><!-- --> <b># nano /etc/default/gpsd</b>    START_DAEMON="true"  DEVICES="/dev/serial0 /dev/pps"  GPSD_OPTIONS="-n"  USBAUTO="false"  GPSD_SOCKET="/var/run/gpsd.sock" </code> * START_DAEMON -> Porneste automat serviciul gpsd la boot. Daca este "false", gpsd nu se lanseaza singur. * DEVICES -> Aceasta linie indica gpsd sa deschida doua dispozitive simultan ** /dev/serial0 → fluxul NMEA provenit de pe UART (datele GPS clasice: GGA, RMC, sateliti etc.) ** /dev/pps → semnalul PPS hardware folosit pentru sincronizare precisa la nivel de secunda * GPSD_OPTIONS -> Porneste gpsd chiar daca nu exista clienti conectati. Fara "-n", gpsd asteapta un client inainte sa initializeze modulul GPS. * USBAUTO -> Dezactiveaza detectarea automata a dispozitivelor GPS USB; necesar cand folosim un modul pe UART. * GPSD_SOCKET -> Definește socket-ul UNIX prin care aplicatiile (cgps, chrony etc.) comunica cu gpsd. Repornim serviciul executand: * service gpsd restart ==== Testare gpsd ==== Testam functionarea modulului GPS: <code class="mw-code mw-highlight plainlinks" style="display:block"><!-- --> <b># cgps -s</b>  lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqklqqqqqqqqqqqqqqqqSeen 21/Used 14qqk  x Time 2026-02-25T14:06:01.000Z (18)xxGNSS S PRN Elev Azim SNR Usex  x Latitude 44.43550340 N xxGP 10 10 28.0 182.0 43.0 Y x  x Longitude 26.10252040 E xxGP 15 15 16.0 80.0 46.0 Y x  x Alt (HAE, MSL) 128.736, 93.872 m xxGP 18 18 67.0 45.0 32.0 Y x  x Speed 0.02 km/h xxGP 23 23 57.0 144.0 37.0 Y x  x Track (true, var) 166.0, 5.8 deg xxGP 26 26 52.0 222.0 23.0 Y x  x Climb 1.92 m/min xxGP 27 27 30.0 299.0 27.0 Y x  x Status 3D DGPS FIX (9 secs) xxGP 29 29 22.0 105.0 38.0 Y x  x Long Err (XDOP, EPX) 0.56, +/- 2.2 m xxSB127 40 31.0 142.0 35.0 Y x  x Lat Err (YDOP, EPY) 0.64, +/- 2.4 m xxSB128 41 15.0 114.0 31.0 Y x  x Alt Err (VDOP, EPV) 1.28, +/- 4.5 m xxGA 2 302 65.0 200.0 36.0 Y x  x 2D Err (HDOP, CEP) 0.85, +/- 3.4 m xxGA 25 325 19.0 157.0 34.0 Y x  x 3D Err (PDOP, SEP) 1.54, +/- 7.4 m xxGA 30 330 44.0 304.0 22.0 Y x  x Time Err (TDOP) 0.90 xxGA 34 334 49.0 242.0 25.0 Y x  x Geo Err (GDOP) 1.79 xxGA 36 336 74.0 38.0 29.0 Y x  x Speed Err (EPS) +/- 17.5 km/h xxGP 5 5 5.0 34.0 0.0 N x  x Track Err (EPD) n/a xxGP 16 16 55.0 285.0 0.0 N x  x Time offset -2113301 s xxGP 20 20 9.0 57.0 25.0 uN x  x Grid Square KN34bj13 xxSB123 36 39.0 184.0 40.0 N x  x ECEF X, VX 4099907.290 m 0.020 m/sxxSB126 39 27.0 132.0 0.0 N x  x ECEF Y, VY 2008197.370 m 0.010 m/sxxSB136 49 35.0 209.0 0.0 N x  x ECEF Z, VZ 4439297.500 m 0.020 m/sxxGA 6 306 4.0 81.0 37.0 N x  mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqjmqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj </code> Din coloana situata in partea dreapta observam ca sistemul nostru se conecteaza la: * GP - GPS (Global Positioning System) este un sistem global de navigatie prin satelit dezvoltat de Statele Unite. * GA - Galileo este sistemul european de navigatie prin satelit (GNSS), dezvoltat de Uniunea Europeana. * SB - SBAS (Satellite-Based Augmentation System) este un sistem care imbunatateste precizia si fiabilitatea pozitionarii GNSS (GPS, Galileo etc.) Alte sisteme de GNSS care nu sunt prezente in conexiunea nostra ar pute fi: * GL - GLONASS este sistemul de navigatie prin satelit al Federatiei Ruse * BD - BeiDou este sistemul de navigatie prin satelit al Chinei === Configurarea serverului NTP === Acest server foloseste un modul GPS cu suport PPS pentru a furniza timp de inalta precizie, transformand sistemul intr-o sursa NTP stratum 1. In pasii urmatori configuram Chrony astfel incat sa foloseasca exclusiv GPS si PPS ca referinte de timp. ==== Instalare Chrony ==== Inainte de instalare ne asiguram ca sistemul foloseste un singur serviciu NTP (Chrony va deveni sursa principala). * apt install chrony ==== Verificarea surselor NTP initiale ==== <code class="mw-code mw-highlight plainlinks" style="display:block"><!-- --> <b># chronyc sources</b>  MS Name/IP address Stratum Poll Reach LastRx Last sample  ===============================================================================  ^* time.cloudflare.com 3 6 7 0 +3337us[ -12.3s] +/- 26ms  ^+ 31.25.10.207 3 6 7 0 -3833us[ -12.3s] +/- 93ms  ^- 92-180-26-89.orangero.net 3 6 7 1 -2427us[ -12.3s] +/- 98ms  ^+ ntp0.chroot.ro 2 6 7 1 -2785us[ -12.3s] +/- 52ms  <b># chronyc tracking</b>  Reference ID : A29FC87B (time.cloudflare.com)  Stratum : 4  Ref time (UTC) : Wed Feb 25 14:12:12 2026  System time : 0.000358473 seconds fast of NTP time  Last offset : +0.000938197 seconds  RMS offset : 0.000938197 seconds  Frequency : 21.559 ppm fast  Residual freq : -96.777 ppm  Skew : 0.076 ppm  Root delay : 0.052518558 seconds  Root dispersion : 0.001089336 seconds  Update interval : 1.7 seconds  Leap status : Normal </code> chronyc sources afiseaza sursele NTP publice pe care sistemul le foloseste implicit, inainte de configurarea GPS‑ului. chronyc tracking arata ca sistemul functioneaza momentan ca stratum 3, fiind doar un client NTP obisnuit. ==== Editare configuratie Chrony ==== In aceasta etapa eliminam sursele NTP publice si configuram Chrony sa foloseasca exclusiv GPS (NMEA) si PPS ca referinte de timp. Ajustam parametrii de corectie initiala si stabilim PPS ca sursa principala, astfel incat serverul sa poata functiona ca stratum 1. Rezultatul final este un server NTP autonom, sincronizat direct din semnal GPS cu precizie sub‑microsecunda. <code class="mw-code mw-highlight plainlinks" style="display:block"><!-- --> <b># nano /etc/chrony/chrony.conf</b>    #pool 2.debian.pool.ntp.org iburst  makestep 0.1 -1  initstepslew 1.0 GPS    # GPS serial time (NMEA)  refclock SHM 0 delay 0.2 refid GPS poll 4 noselect    # PPS precise time  refclock PPS /dev/pps0 refid PPS lock GPS poll 4 prefer </code> *<b>2.debian.pool.ntp.org</b> este serverul NTP public folosit initial de catre chrony *<b>makestep</b> permite corectii mari de timp atunci cand diferenta este prea mare pentru slew. Modificam din initialul "makestep 1.0 3" pentru a permite corectii oricand, cu limita mai mica. *<b>initstepslew</b> corecteaza timpul la boot daca diferenta fata de GPS este mai mare de 1 secunda. ===== refclock SHM (NMEA) ===== NMEA este fluxul de timp citit din GPS prin gpsd și expus către Chrony printr-un segment SHM (shared memory). Acest semnal conține ora completă, dar are o întârziere naturală de aproximativ 200 ms și o precizie relativ slabă. Îl folosim cu noselect pentru că nu vrem ca NMEA să fie sursa principală de timp; rolul lui este doar să ofere context temporal pentru PPS, astfel încât impulsul PPS să poată fi „legat” corect de ora GPS. ===== refclock PPS ===== PPS este semnalul hardware de precizie foarte mare (sub‑microsecundă), generat o dată pe secundă de modulul GPS. Spre deosebire de NMEA, PPS nu conține ora, ci doar impulsul exact, motiv pentru care îl „blocăm” pe GPS (lock GPS) pentru a-i oferi contextul temporal. Îl marcăm ca prefer deoarece PPS trebuie să fie sursa principală de sincronizare, fiind cea mai precisă referință disponibilă. Dupa salvarea noii configuratii restartam chrony * service chrony restart ==== Verificarea surselor NTP adaugate ==== <code class="mw-code mw-highlight plainlinks" style="display:block"><!-- --> <b># chronyc sources</b>  MS Name/IP address Stratum Poll Reach LastRx Last sample  ===============================================================================  #? GPS 0 4 377 12 +289ms[ +289ms] +/- 129ms  #* PPS 0 4 363 12 -13us[ -13us] +/- 57ms  <b># chronyc tracking</b>  Reference ID : 50505300 (PPS)  Stratum : 1  Ref time (UTC) : Wed Feb 25 14:21:25 2026  System time : 0.000000158 seconds slow of NTP time  Last offset : -0.000000000 seconds  RMS offset : 0.000000006 seconds  Frequency : 21.246 ppm fast  Residual freq : -0.000 ppm  Skew : 0.159 ppm  Root delay : 0.000000001 seconds  Root dispersion : 0.000071716 seconds  Update interval : 16.0 seconds  Leap status : Normal </code> Dupa aplicarea configuratiei, Chrony incepe sa renunte la sursele NTP publice si sa foloseasca exclusiv GPS si PPS. In primele secunde, chronyc sources poate arata doar GPS, iar PPS apare abia dupa ce semnalul devine stabil. Pe masura ce PPS este validat si blocat pe GPS, chronyc tracking trece automat de la stratum 3 la stratum 1, confirmand ca serverul functioneaza acum ca o sursa autonoma de timp de inalta precizie. ==== Configurarea serverului pentru acces LAN ==== După ce serverul NTP funcționează corect pe GPS + PPS și a devenit stratum 1, următorul pas este să îl facem disponibil în rețeaua locală. Practic, permitem dispozitivelor din LAN să folosească acest server ca sursă principală de timp. Chrony nu răspunde implicit către rețea, așa că trebuie să activăm explicit accesul pentru subnetul nostru. <code class="mw-code mw-highlight plainlinks" style="display:block"><!-- --> <b># nano /etc/chrony/chrony.conf</b>    allow 192.168.1.0/24 </code> După restart, Chrony ascultă pe toate interfețele pentru UDP 123, fiind gata să răspundă clienților din LAN. <code class="mw-code mw-highlight plainlinks" style="display:block"><!-- --> <b># netstat -tulnp</b>  Active Internet connections (only servers)  Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name  ..........  udp 0 0 0.0.0.0:123 0.0.0.0:* 848/chronyd  .......... </code> Cu aceste setari, configurarea serverului NTP este completa. Sistemul functioneaza acum ca un server stratum 1 bazat pe GPS + PPS, stabil, autonom si gata sa ofere timp precis intregii retele. Practic, in acest punct serverul este complet operational si pregatit sa serveasca LAN‑ul
Summary:
Please note that all contributions to Linux Wiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Linux Wiki:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Navigation menu
Personal tools
Not logged in
Talk
Contributions
Log in
Namespaces
Page
Discussion
English
Views
Read
Edit
Edit source
View history
More
Navigation
Main page
Aplicatii Linux
UrBackup
rSyslog
KeepAlived
USB over IP
Pi-hole
DHCP
BIND DNS
Hardware Linux
Adaugare Disk
Extindere Disk
Docker
Instalare Docker CE
Portainer
Container UrBackup
Container PiHole
Raspberry Pi
NTP Server
Snippets
History Command
Access Control List
Tools
What links here
Related changes
Special pages
Page information