Soluții - PC Magazine Romania, Februarie 2004
Tempus
Răzvan Sandu
Motto:
"[...]
Întrebat-am bufnița cu ochiul sferic
Oarba care vede-n întuneric
Tainele nespuse de cuvânt:
-Unde sunt cei care nu mai sunt ?
-Unde sunt cei care nu mai sunt ?
Răspuns-a bufnița: Când va cădea
Marele-ntuneric, vei vedea."
Nechifor Crainic - Unde sunt cei care nu mai sunt
Poezie compusă în închisoarea Aiud
Pe birou, sub conul de lumină al veiozei, au rămas deschise "Principiile"
lui Newton - o carte mare, cu legătură masivă. Ridic privirea din paginile ei,
presărate cu gravuri și formule, către fereastră. Dincolo de geam, cerul gri
acoperă cartierul aproape pustiu, cu căsuțele lui coșcovite sub noianul de fulgi.
Întotdeauna mi-a plăcut camera asta, cu confortul și căldura ei din alt secol
- biroul din lemn de nuc, cărțile tehnice vechi rânduite pe rafturi care ajung
până aproape de tavan, fotoliul, fotografia bunicului în uniformă, bătaia calmă
a pendulei... Acum, în tăcerea pioasă dinaintea tainei Crăciunului, sufletele
parcă s-au făcut mai mari. Aproape că am reușit să uit că undeva, pe-alături,
există supermarket-uri, cozi la brazi și la sifoane, oameni intoxicati caragialește
cu sarmale, SMS-uri, manele, petarde, telefoane, carne proaspătă de porc sacrificat
printre blocuri...
Astăzi, dragi prieteni, vom vorbi despre Timp.
Planeta noastră
Pentru ca un computer să cunoască ora și data exacte într-un anumit punct al
Pământului, el are nevoie de exact două informații, care alcătuiesc, împreună,
conceptul de Timp Global:
- timpul universal (Universal Time Coordinate - UTC), considerat, prin convenție,
cel stabilit de observatorul astronomic de la Greenwich, Marea Britanie;
- zona de timp (time zone) în care se găsește acel punct.
Prin aproximare, imaginați-vă Pământul ca pe o sferă perfectă care se rotește
în jurul unei axe ce trece prin cei doi poli ai săi (Axa Lumii). Vă puteți închipui
această sferă ca fiind "tăiată" de planul ce trece prin axa sa (deci
și prin Poli) și prin localitatea Greenwich. Jumătatea de cerc determinată pe
suprafața Pământului de poli și de Greenwich reprezintă meridianul acestei localităti,
ales prin convenție drept "meridianul zero". Similar, pornind de la
"meridianul zero" către est și către vest se pot trasa semicercuri
ce trec prin Axa Lumii și împart Pământul in 24 de "felii" egale (fuse
orare). Din punct de vedere geofizic, este suficient să considerăm că în toate
localitățile ce se găsesc în interiorul unui fus orar ora este aceeași, decalată
cu exact 1, 2, 3... ore față de Timpul Universal. Spre exemplu, Bucureștiul
se găsește în interiorul fusului orar 2, deci există permanent o diferență de
două ore între București și ora de la Greenwich (când la Greenwich este ora
12 noaptea, la București este ora 2 noaptea).
Din punct de vedere practic, lucrurile nu stau chiar atât de simplu, fiindcă
apar două variații de la această schemă:
- pentru comoditate, guvernele urmăresc, pe cât se poate, ca ora din localitățile
țărilor lor să fie aceeași. Acest lucru nu este posibil în toate statele,
de exemplu în țările care se desfășoară pe o mare întindere în longitudine,
pe mai multe fuse orare (cum ar fi, de exemplu, Statele Unite);
- din motive de economisire a energiei, prin convenție internațională, se
aplică programul Daylight Savings Time - DST. El prevede ca în timpul verii
ora locală oficială să fie decalată în avans cu o oră față de cea "geofizică",
pentru ca timpul "zilei"(de activitate economică) să fie maxim.
Dacă ora locală oficială ar fi calculată pretutindeni exclusiv pe baza împărțirii
geofizice în 24 de fuse orare, nu ar fi nevoie să definim decât 24 de zone de
timp pe întreaga suprafață a globului. Date fiind însă cele spuse mai sus, este
nevoie de un tabel mult mai complex, care să prevadă diferențele existente între
Timpul Universal și fiecare punct al globului, fie vară sau iarnă.
Pe sistemul vostru Linux, fișierele care conțin aceste informații se găsesc
în directorul /usr/share/zoneinfo. Zona de timp în care se află chiar calculatorul
vostru este prevăzută în fișierul /etc/localtime. De fapt, localtime nu este
un fișier, ci un link simbolic către fișierul-zonă corespunzător din directorul
/usr/share/zoneinfo.
Sursa pentru obținerea Timpului Universal poate fi un ceas atomic (aceste ceasuri
funcționează, de obicei, pe lângă observatoarele astronomice sau pe lângă marile
laboratoare de cercetare) sau un sistem GPS (Global Positioning System). În
cazul în care sunteți responsabili cu întreținerea rețelei vreunei instituții
foarte mari, poate fi necesar să achiziționați un dispozitiv hardware specializat
- de cele mai multe ori, un ceas radio care recepționează semnalele emise de
observatorul astronomic local și permite menținerea unei "baze de timp"
extrem de exacte. Aceasta este o investiție importantă, care nu este accesibilă
oricui. Însă, de obicei, proprietarii acestui tip de echipamente conectează
ceasurile la Internet, "distribuind" ora și altor utilizatori. Tot
ceea ce este necesar pentru a obține "ora exactă", este o mașină Linux
corect configurată și conectată la rețea.
La ceasornicăria din colț
Primul lucru de care veți dori să fiți siguri este faptul că ceasul vostru
hardware, aflat pe placa de bază, funcționează bine. Până la a cumpăra un ceas
atomic, mă gândesc că o baterie nouă pentru placă de bază ar fi o bună investiție
ą !
Modul cum veți regla ceasul în BIOS depinde de sistemele de operare pe care
le aveți instalate. Dacă computerul vostru face dual-boot între Linux și Windows,
este neapărat necesar să îl reglați folosind ora locală. Windows are o imagine
mult mai simplistă asupra noțiunii de timp decât Linux: el presupune, întotdeauna,
că ceasul hardware al plăcii de bază este corect și că arată ora locală. De
notat că Windows XP a început să "învețe" câte ceva despre citirea
orei din Internet, dar este încă departe de a furniza nativ mecanismele sofisticate
existente în Unix.
Dimpotrivă, dacă pe mașina voastră rulați numai Linux, vă sfătuiesc cu căldură
să folosiți UTC pentru a regla ceasul hardware. Practic, pentru România, asta
înseamnă să setați ora în BIOS cu două ore în urmă. Desigur, reglajul minutelor
și al secundelor trebuie să fie cât mai precis, iar data trebuie să fie și ea
corectă.
Spre deosebire de Windows, Linux nu se bazează pe ceasul hardware al plăcii
de bază pentru a menține ora sistemului. El citește informația furnizată de
acesta în momentul bootării, dar, după aceea, pune în funcțiune un ceas software,
care funcționează în paralel. Mai departe, în momentul închiderii calculatorului
(în procesul shutdown), ceasul hardware este "potrivit" după cel software
(care este mai exact). Pe o mașină Linux, când folosiți comanda date pentru
a afla ora, ceea ce interogați, de fapt, este ceasul software.
Ceea ce trebuie să faceți, mai întâi, este să vă asigurați, 100%, că informația
despre zona de timp în care vă aflați este cea corectă. Comanda timeconfig vă
permite să faceți reglajul dorit:
timeconfig "Europe/Bucharest"
sau
timeconfig —utc "Europe/Bucharest"
Prima comandă reglează ceasul hardware folosind ora dată de ceasul software,
indică ca zonă de timp zona "Europa/București" și interpretează informația
despre timp dată de ceasul hardware ca oră locală. Cea de a doua comandă este
similară, dar ceasul hardware citit în momentul bootării va fi interpretat ca
și cum ar fi reglat după UTC. Pe sistemele mele Fedora și Red Hat, acești parametri
sunt stocați in fișierul /etc/sysconfig/clock.
Comanda hwclock vă permite să accesați din Linux, în mod direct, ceasul hardware
al sistemului (să îl citiți și să îl reglați). Fără parametri, hwclock vă va
afișa ora hardware. Este posibil să constatați că între cele două ceasuri, hardware
și software (citite cu hwclock și date) există diferențe semnificative. Este
cazul să sincronizați, mai întâi, cele două ceasuri, folosind ora corectă. Spre
exemplu:
hwclock -w
setează ceasul hardware după cel software, specificând că se va memora ora
locală conform zonei de timp și datei setate curent, sau
hwclock -u -s
setează ceasul software după cel hardware, specificând că se va memora ora
UTC.
Detalii suplimentare puteți găsi, bineînțeles, în pagina manual a comenzii
hwclock.
Incursiune în supranatural: atenție, demoni!
Așa cum vă spuneam, Linux poate să țină ceasul software al sistemului foarte
exact sincronizat cu serverele de timp din Internet. Este nevoie, însă, să porniți
ntpd, daemonul serviciului Network Time Protocol. Acest lucru se poate face,
cel mai comod, cu utilitarul ntsysv.
Desigur, aveți nevoie de o legătură la rețea. Puteți începe prin a vizita pagina
http://www.ntp.org și prin a consulta
lista de servere de timp (time servers) publice existentă acolo. Dintre acestea,
e necesar să alegeți trei, a căror denumire să o introduceți în fișierul /etc/ntp.conf
cu directive de forma:
server somemachine.somedomain.ro
De reținut faptul că politețea și normele Internet vă obligă, chiar și în cazul
în care folosiți un server de timp public, să notificați prin e-mail administratorului
acestui server că utilizați serviciile sale. Acest lucru ajută personalul de
întreținere să poată cuantifica încărcarea propriilor servere.
Într-o organizație mare, se recomandă să aveți cel puțin două mașini care să
îndeplinească rolul de servere de timp, iar stațiile de lucru interne să fie
sincronizate cu acestea și nu cu cele externe din Internet. Serverele interne
- cărora vă sfătuiesc să le creați alias-uri DNS de forma ntp1.firma.ro și ntp2.firma.ro
- se pot "corecta" unul pe celălalt, dacă în fișierul /etc/ntp.conf
veți folosi (reciproc) directiva peer in loc de directiva server. Deoarece funcția
de server de timp este foarte puțin pretențioasă din punct de vedere al resurselor,
nu vă va fi greu să găsiți în rețeaua voastră două mașini care să o îndeplinească.
Încheiere
Iată că am reușit să vă schițez o introducere în configurarea serverului de
timp, care nu este prea simplă. Detalii puteți găsi în documentul Time-Precision-HOWTO
de la www.tldp.org la www.eecis.udel.edu/~mills/ntp/
html/notes.html și în paginile manual ale utilitarelor enumerate. Între timp,
putem întâmpina Anul Nou cu precizie de picosecundă ☺ ! Și, nu uitați,
vă aștept la www.linuxwill.go.ro
și [email protected] !
|