Raspberry Pi aikapalvelin – Osa 3 / Chrony

Sosiaalisen median puolella mainittiin myös Chrony vaihtoehtoisena ohjelmistona aikapalvelimeen. Itselläni ei ollut Chronystä aikaisempaa kokemusta, mutta päätin kuitenkin testata ja tutkia asiaa.

Internetiä selailtuani ja vertailuja silmäiltyäni, vaikuttaisi Chrony ihan lupaavalta. Tosin asennuksen jälkeen tuntui hetken siltä, että ntp:n asetukset olivat selkeämmät. Siitä löytynee ehkä myös hieman paremmin tietoa ja esimerkkejä, mutta löytyi sitä varsin hyvin Chronyllekkin.

Tällä sivulla oli hyvin vertailtu eri ominaisuuksia Chronyn, ntp:n ja openntpd:n välillä:
chrony – Comparison of NTP implementations

Chronyn vahvuuksiin vaikuttaisi kehujen perusteella myös kuuluvan kyky saada itsensä nopeammin kartalle “kylmiltään”. Tämä voisi olla radioamatöörikäytössä eduksi mikäli aikapalvelimen käynnistää vain aina tarpeen mukaan, eli se ei olisi jatkuvasti päällä. En ole toisaalta tätä asiaa vielä ehtinyt todentamaan suuntaan enkä toiseen, joten tässä vaiheessa suhtaudun väitteeseen siis vain Chronyn kannattajien mainospuheena enkä absoluuttisena totuutena. En kuitenkaan myöskään väitä etteikö asia voisi olla juuri niinkuin on mainostettu. Ehkäpä testailun myötä asiaan tulee jotain selkeyttä myös omalla kohdalla.

Tässä artikkelissa on käyty läpi aikapalvelimen toteutus ainoastaan Chronyn osalta. Jos haluat tehdä aikapalvelimen suoraan Chronyn päälle, seuraa aiemmista artikkeleista muita kohtia mutta jätä ntp asentamatta (ja sovella siinä kohtaa tämän artikkelin toimenpiteitä). Muilta osin (GPS, PPS, palomuuri, jne) asiat tehdään siis samalla tavalla kuin ntp:n kanssa.

Jotta pääsin testaamaan Chronyä, niin ensin piti tietysti poistaa vanha ohjelmisto. GPSD ja PPS tools jätetään kuitenkin paikoilleen, eli vain itse aikapalvelinohjelma vaihdetaan Chronyyn.

Poistaminen tehdään komennolla:
sudo apt-get remove ntp

Tai vaihtoehtoisesti voit vain ottaa ntp:n pois käytöstä mikäli haluat säilyttää sen:
sudo systemctl disable ntp

Käynnistä Raspi uudelleen.
sudo reboot

Nyt voidaan asentaa Chrony:
sudo apt-get install chrony

Otetaan Chrony käyttöön:
sudo systemctl enable chrony
sudo systemctl start chrony

Nyt Chronyn pitäisi olla käynnissä ja käynnistyä myös automaattisesti Raspin käynnistyessä. Tarkistetaan vielä palvelun status:
sudo systemctl status chrony

Jos status on “Active (running)”, kaikki hyvin tähän asti.

Muokataan seuraavaksi Chronyn asetustiedostoa.
sudo nano /etc/chrony/chrony.conf

Palvelimia voit lisätä esimerkiksi seuraavalla rivillä:
server time.mikes.fi

Omalla kohdallani lisäsin myös varsinaisen aikapalvelimeni ip osoitteen, mutta jätän sen tietoturvasyistä näistä julkisista esimerkeistä pois. Esimerkeissä näkyvät palvelimet ovat julkisia, joista edellämainittu on määritelty käsin ja loput arpoutuvat “poolista”.

Varsinkin käsin määriteltyjen palvelimien kohdalla kannattaa myös kiinnittää huomiota siihen kuinka usein haluat näitä palvelimia kuormittaa kyselyillä. Omaa palvelinta voi häiritä vähän useammin, mutta välttämättä jonkun toisen palvelua tarjoavan palvelimia ei kannata ihan niin usein (saatetaan tulkita häiriköinniksi). Asiaan voit vaikuttaa lisämääreillä minpoll ja maxpoll. Näillä on toki myös oletusarvot (minpoll 6 ja maxpoll 10). Älä laita minpoll arvoa ainakaan oletusta pienemmäksi julkisen palvelimen kohdalla.

GPS:ltä tulevan ajan ja PPS pulssin lisääminen meinasi ensin hieman aiheuttaa ihmetystä, mutta hetken tutkimusten jälkeen päädyin lisäämään seuraavanlaiset rivit:
refclock SHM 0 refid NMEA offset 0.320 noselect
refclock PPS /dev/pps0 refid PPS lock NMEA prefer

GPS:n (nimetty määrittelyssä NMEA) offset arvo tietysti säädetään mahdollisimman hyvin kohdalleen niinkuin ntp:n kanssakin. Sille on kuitenkin annettu noselect määrite ettei sitä käytetä varsinaisena luotettavana aikana. PPS pulssi on puolestaan “prefer” ja lukittu GPS:ään.

Chrony ei näköjään oletusarvoisesti jakele aikaa ulospäin, joten aikapalvelinkäyttöä ajatellen pitää pääsy palvelimeen hyväksyä erikseen. Sitä varten lisätään yksinkertaisesti rivi:
allow

Äskeinen rivi sallii pääsyn kaikille. Voit myös rajoittaa pääsyn esimerkiksi vain lähiverkosta määrittelemällä perään lähiverkon osoiteavaruuden. Vastaavasti voit kieltää esimerkiksi tietyin ip osoitteen tai osoiteavaruuden lisäämällä “deny” rivin.

Näihin serverien ja referenssikellojen määrittelyihin saa laitettua lisämääritteitäkin, mutta kovin pitkälle en ole vielä niiden kanssa ehtinyt. Jokatapauksessa komentorivillä “man chrony” näyttäisi avaavan ihan hyvän listauksen määrittelyistä joihin kannattaa ajan kanssa tutustua.

Edellämainittujen rivien lisäämisellä sain Chronyn toimintaan ja myöskin PC:n kellon synkronoitua testiaikapalvelimen tarjoamaan aikaan.

Jotta muutokset tulevat voimaan, käynnistetään palvelu uudelleen:
sudo systemctl restart chrony

Chronyn sourceja (“ajan lähteitä” siis, mutta käytän mieluummin englannin kielistä nimitystä joka kuulostaa mielestäni fiksummalta) voimme tarkastella komennolla:
chronyc sources

Rivien alussa M ja S sarakkeiden merkitykset Chronyssä ovat manuaalin mukaan seuraavanlaiset.

M-sarake näyttää sourcen moden:
^ palvelin
= peer
# paikallinen referenssi (esim GPS ja PPS)

S-sarake puolestaan näyttää sourcen tilan:
* tarkoittaa, että chrony on synkronoitunut tähän sourceen.
+ tarkoittaa, että chrony käyttää tätä sourcea algoritmissään yhdessä valitun sourcen kanssa.
– tarkoittaa, että chrony EI käytä tätä sourcea tällä hetkellä.
? tarkoittaa, että sourceen ei joko saada yhteyttä tai sen kanssa on mahdollisesti jotain ongelmia. Käynnistyksen yhteydessä tämä lienee kaikilla, eli kestää hetken ennenkuin tila muuttuu joksikin muuksi. Myös “noselect” määrittelyissä saattaa näkyä kysymysmerkkinä (esim GPS/NMEA tapauksessa).
x tarkoittaa, että sourcen aika poikkeaa oleellisesti muista ja chrony epäilee sen olevan pielessä.
~ tarkoittaa, että ajassa on isoja vaihteluita.

Esimerkkikuvassa siis NMEA datan kohdalla olemme itse kertoneet määrittelyissä ettei sitä käytetä (noselect). Neljännellä rivillä olevaan palvelimeen taas ei näyttäisi saavan yhteyttä (Reach on 0). Muut palvelimet näyttäisi olevan ok, mutta tällä hetkellä niitä ei käytetä laskutoimituksiin vaan mennään PPS pulssin mukaan.

Source listaan saa selitteet mukaan lisämääreellä -v
chronyc sources -v

Ajan synkronoitumista voidaan tarkastella myös seuraavalla komennolla:
chronyc tracking

Sekä:
chronyc sourcestats -v

Tässä kohtaa kannattaa myös tarkkailla NMEA kohdan arvoja suhteessa muihin palvelimiin ja säätää tarvittaessa offset asetusta mikäli heittoa on kovin paljon. Muista muutosten jälkeen käynnistää palvelu uudelleen ja anna reilusti aikaa arvoille tasaantua ennenkuin säädät lisää. Yllä olevassa kuvassa palvelu on hetkä aiemmin käynnistetty uudelleen, joten lukemat ovat todennäköisesti erilaiset vähän myöhemmin.

Tarkemmin tietoa komennoista saat avaamalla manuaalin komentoriviltä:
man chronyc

Kuten alussa totesin, tämä Chrony on vielä itselleni uusi tuttavuus. Kokosin tähän kuitenkin pääpiirteissään sen mitä olin tähän mennessä ehtinyt kokeilemaan ja oppimaan. Se vaihdanko varsinaiseen aikapalvelimeeni Chronyn, jää vielä nähtäväksi. Radioamatöörikäytössä harvemmin tarvitsee sentään mikrosekunteja halkoa vaikka tarkka aika halutaankin, joten molemmat toimivat varmasti tarkoitukseen oikein hyvin. Eikä toisaalta äärimmäisen vakavaan touhuun kannata edes käyttää Raspia ja edullisia GPS moduleja, vaan jotain hieman parempaa. Tähän käyttöön nämä kuitenkin ajavat asiansa.