La causa della mancata sincronizzazione con un server il cui orario è così diverso è documentata qui :
5.1.1.4. Cosa succede se l'ora di riferimento cambia?
Idealmente, il tempo di riferimento è lo stesso ovunque nel mondo. Una volta sincronizzato, non dovrebbero esserci cambiamenti inattesi tra l'orologio del sistema operativo e l'orologio di riferimento. Pertanto, NTP non ha metodi speciali per gestire la situazione.
Invece, la reazione di ntpd dipenderà dall'offset tra l'orologio locale e il tempo di riferimento. Per un piccolo offset ntpd regola normalmente l'orologio locale; per offset piccoli e maggiori, ntpd rifiuterà il tempo di riferimento per un po '. In quest'ultimo caso l'orologio del sistema operativo continuerà con le ultime correzioni effettive mentre il nuovo tempo di riferimento viene rifiutato. Dopo un po 'di tempo, piccoli offset (significativamente meno di un secondo) saranno ruotati (regolati lentamente), mentre offset più grandi causeranno il passo dell'orologio (impostare di nuovo). Enormi offset vengono respinti e ntpd si interromperà, credendo che debba essere successo qualcosa di molto strano.
Nella mia attuale configurazione NTP, anch'essa controllata da puppet
, forzo la sincronizzazione con il server, sia nel ntp.conf
file, usando tinker panic
, sia nelle impostazioni del demone ( /etc/sysconfig/ntpd
), come descritto nella ntpd(8)
manpage:
-g Normalmente, ntpd esce con un messaggio nel registro di sistema se l'offset supera la soglia di panico, che per impostazione predefinita è 1000 s. Questa opzione consente di impostare l'ora su qualsiasi valore senza restrizioni; tuttavia, questo può succedere solo una volta. Se la soglia viene superata, ntpd uscirà con un messaggio nel registro di sistema. Questa opzione può essere utilizzata con le opzioni -q e -x.
Lo faccio perché posso fidarmi del server NTP a cui mi sto connettendo.
La parte pertinente del modulo che si applica ai client è la seguente:
class ntp (
$foo
$bar
...
){
$my_files = {
'ntp.conf' => {
path => '/etc/ntp.conf',
content => template("ntp/ntp.conf.$template.erb"),
selrole => 'object_r',
seltype => 'net_conf_t',
require => Package['ntp'], },
'ntp-sysconfig' => {
path => '/etc/sysconfig/ntpd',
source => 'puppet:///modules/ntp/ntp-sysconfig',
require => Package['ntp'], },
...
}
$my_files_defaults = {
ensure => file,
owner => 'root',
group => 'root',
mode => '0644',
selrange => 's0',
selrole => 'object_r',
seltype => 'etc_t',
seluser => 'system_u',
}
create_resources(file, $my_files, $my_files_defaults)
exec { 'ntp initial clock set':
command => '/usr/sbin/ntpd -g -q -u ntp:ntp',
refreshonly => true,
timeout => '-1',
subscribe => File['/etc/ntp.conf'],
}
}
E i contenuti dei file di riferimento sono:
$ cat devops/puppet/modules/ntp/files/ntp-sysconfig
# Drop root to id 'ntp:ntp' by default.
OPTIONS="-u ntp:ntp -p /var/run/ntpd.pid -g -a"
e:
$ cat devops/puppet/modules/ntp/templates/ntp.conf.RedHat.erb
# HEADER: This file was autogenerated by puppet.
# HEADER: While it can still be managed manually, it
# HEADER: is definitely not recommended.
tinker panic 0
<% server.each do |ntpserver| -%>
server <%= ntpserver %> autokey
<% end -%>
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10
driftfile /var/lib/ntp/drift
crypto pw hunter2
crypto randfile /dev/urandom
keysdir /etc/ntp
Qui hiera
manca la parte, ma ti viene l'idea.
tinker panic 0