Poprawna godzina, data, ogólnie czas w systemie Linux jest niezwykle ważny, zwłaszcza, kiedy na serwerze mamy pracujące bazy danych, aplikacje. Poza konfiguracją (na przykład w bibliotekach, aplikacjach) jedną z ważniejszych rzeczy jest to, żeby systemowy czas był zawsze aktualny. Jak zatem pilnować czasu? Na pewno nie ręcznie. Z pomocą przychodzi wiele rozwiązań na rynku. Z reguły, kiedy mówimy o demonie czasu na serwerze, większość odpowiada automatycznie ntp. I zgoda. NTP jako serwer czasu, może być wykorzystywany na serwerze Linux jako mechanizm mający za zadanie nie tyle serwować czas dla innych serwerów, ale także utrzymywać poprawny czas na tym jednym, konkretnym serwerze.

Istnieje także nieco mniejsza aplikacja ntpdate, która nie zawiera całego serwera czasu, a jedynie koryguje czas w odpowiednim momencie poprzez wywołanie odpowiedniej komendy. Jedno i drugie rozwiązanie ma jednak swoje wady. Przede wszystkim instalując serwer czasu ntp, który zamierzamy wykorzystywać tylko do synchronizacji czasu, w mojej ocenie mija się z celem. Nie ma potrzeby instalowania całego kombajnu i dużej aplikacji ntp tylko po to, by na jednej maszynie utrzymywać czas w ryzach. Z drugiej strony, ntpdate – mniejsza aplikacja, która służy tylko do synchronizacji czasu, robi to w sposób mało delikatny. „Tnie” ona bowiem czas – tu i teraz. Jeśli na twoim serwerze jest 12:43, a na zegarze atomowym jest 11:00 to ntpdate po prostu utnie twój czas i cofnie go tu i teraz, od razu. To może powodować błędy dla bazy danych, aplikacji i inne różne komplikacje. Jeszcze inna sprawa to fakt, że instalując ntp jako demona, od razu będzie on nasłuchiwał na wszystkich interfejsach. Konieczne będzie zatem jego odpowiednie zabezpieczenie przed dostępem ze świata, gdyż niestety często nieaktualizowane serwery ntp padają ofiarami ataków.

Sporo komplikacji. Na szczęście z pomocą przychodzi inne, bardzo dobre rozwiązanie do płynnej synchronizacji czasu. To chrony, czyli aplikacja, która działa w trybie demona i umożliwia płynną regulację czasu w systemie linux, bez potrzeby nasłuchiwania na porcie, bez uciążliwego cięcia czasu. Jeśli ustawimy go odpowiednio dobrze, będzie on w stanie nawet bardzo odległy czas ustawić tak, że aplikacja, baza danych nawet nie zauważy, że cofnęła się o godzinę, dwie czy osiem. Oczywiście, nie będzie to od razu widoczne i to jest siła chrony i jego przewaga. Potrafi on płynnie, do każdej sekundy, milisekundy dokładać odpowiedni interwał tak, że na „gołe” oko nie zauważymy, że z każdą sekundą, o jakąś część milisekund, czas ten spowalnia lub przyspiesza. Aplikacja również tego nie zauważy.

Instalacja chrony w systemie Debian

Domyślnie chrony jest dostępny w repozytorium większości popularnych systemów Linux, dlatego jego instalacja nie powinna sprawić problemu.

apt-get install chrony

Sprawdzenie jakie serwery czasu mamy domyślnie dodane:

chronyc sources

W moim przypadku są to serwery europejskie, ale mamy w Polsce doskonałe serwery czasu, które możemy tu z powodzeniem wykorzystać. Do serwerów w Polsce, jeśli serwer jest w Polsce, będzie na pewno bliżej, a jako, że mamy w Polsce dobre serwery atomowe, to możemy właśnie z nich skorzystać.

Konfiguracja menadżera czasu

Konfiguracja w zależności od dystrybucji znajduje się:

Debian

/etc/chrony/chrony.conf

CentOS/RedHat

/etc/chrony.conf

Na początek należy zdefiniować serwery czasu. Najlepsze będą te atomowe. W Polsce, poza serwerami certyfikowanymi przez Główny Urząd Miar i podanymi do publicznej wiadomości serwerami czasu, mamy te serwery zlokalizowane przy instytutach.

Oficjalne od Głównego Urzędu Miar:

tempus1.gum.gov.pl
tempus2.gum.gov.pl

Akademickie:

server vega.cbk.poznan.pl
server ntp.itl.waw.pl
server zegar.umk.pl

Konfiguracja chrony.conf

server vega.cbk.poznan.pl iburst
server ntp.itl.waw.pl iburst
server zegar.umk.pl iburst

Dzięki iburst chrony zacznie od 4-8 zapytań do serwerów czasu, aby dokonać pierwszej synchronizacji. Będzie też cyklicznie powtarzać tą operację, kiedy źródło zmieni swój status offline na online.

keyfile /etc/chrony/chrony.keys

Lokalizacja kluczy symetrycznych współdzielonych między serwerami ntp i klientami (peers) w celach uwierzytelniania pakietów ntp za pomocą kodu uwierzytelniającego.

driftfile /var/lib/chrony/chrony.drift

W pliku driftfile chrony utrzymuje informacje o tempie, w jakim zegar atomowy dodaje lub odejmuje czas w stosunku do czasu rzeczywistego na serwerze.

log tracking measurements statistics

Informacje i logi jakie mają być odkładane.

logdir /var/log/chrony

Miejsce składowania logów.

Przykładowe logi:

smoothtime 50000 0.01

Smoothtime jest ustawieniem, które pozwala nam na delikatne ślizganie się zegara przy jego korygowaniu. Chodzi o to, aby baza danych czy aplikacja nie zauważyła, że czas się zmienia lub cofa. Jeśli cofniemy zegar o godzinę z powodu zmiany czasu, to przez następny x czasu chrony będzie dostosowywał w milisekundach ten czas, aż do wynikowego.

bindcmdaddress 127.0.0.1

Nasłuch tylko lokalny.

cmdallow 127.0.0.1

Zezwalaj na zapytania tylko z lokalnego adresu.

maxupdateskew 100.0

Ustalenie, jak szybko lub wolno działa zegar komputera w stosunku do serwerów czasu wskazanych w konfiguracji i szacuje próg błędu.

Po zaaplikowaniu konfiguracji podstawowej i przeładowaniu demona chrony, czas zacznie się synchronizować płynnie w systemie. Od tej pory, do momentu zatrzymania demona, czas będzie pilnowany przez niego, aby zawsze był aktualny.f