Mise à jour automatique heure serveur

ntp

Avoir un serveur à la bonne heure et synchronisé avec les autres serveurs Internet permet d’avoir une référence de temps commune à tout le monde.
On utilise pour cela le protocole NTP (Network Time Protocol) qui permet à un ordinateur de synchroniser son horloge sur d’autres ordinateurs de référence via internet.

Installation du paquet NTP

On commence par installer le paquet ntp qui contient tout le nécessaire.

sudo apt-get install ntp

A la fin de l’installation, le service ntp démarre automatiquement, vérifier son statut aevc la commande suivante: il doit être à Active

sudo systemctl status ntp
● ntp.service - LSB: Start NTP daemon
   Loaded: loaded (/etc/init.d/ntp; generated; vendor preset: enabled)
   Active: active (running) since Mon 2018-04-23 13:22:54 CEST; 21min ago
     Docs: man:systemd-sysv-generator(8)
  Process: 22001 ExecStop=/etc/init.d/ntp stop (code=exited, status=0/SUCCESS)
  Process: 22012 ExecStart=/etc/init.d/ntp start (code=exited, status=0/SUCCESS)
    Tasks: 2 (limit: 4915)
   CGroup: /system.slice/ntp.service
           └─22023 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 109:113

avril 23 13:41:30 olibox ntpd[22023]: Soliciting pool server 212.83.158.83
avril 23 13:41:38 olibox ntpd[22023]: Soliciting pool server 2a03:4980:7:b200:ba27:ebff:fe72:7731
avril 23 13:42:32 olibox ntpd[22023]: Soliciting pool server 163.172.225.159
avril 23 13:42:36 olibox ntpd[22023]: Soliciting pool server 212.129.9.36
avril 23 13:42:36 olibox ntpd[22023]: Soliciting pool server 163.172.12.49
avril 23 13:42:45 olibox ntpd[22023]: Soliciting pool server 2001:41d0:2:37ca:1::68
avril 23 13:43:39 olibox ntpd[22023]: Soliciting pool server 37.187.5.167
avril 23 13:43:41 olibox ntpd[22023]: Soliciting pool server 163.172.225.159
avril 23 13:43:42 olibox ntpd[22023]: Soliciting pool server 51.15.192.212
avril 23 13:43:51 olibox ntpd[22023]: Soliciting pool server 2001:41d0:a:588b::1

Configuration /etc/ntp.conf

Le fichier de configuration de ntp se trouve dans /etc/ntp.conf

sudo nano /etc/ntp.conf

Pour un serveur qui est hébergé en France , spécifier des serveurs ntp situés en France (cf. http://www.pool.ntp.org/zone/fr)
Pour cela, remplacer les 4 entrées server du fichier /etc/ntp.conf 

pool 0.fr.pool.ntp.org iburst
pool 1.fr.pool.ntp.org iburst
pool 2.fr.pool.ntp.org iburst
pool 3.fr.pool.ntp.org iburst

ntp utilise plusieurs serveurs pour se mettre à l’heure, cela augmente sa précision et en cas d’indisponibilité sur un des serveurs de référence, les autres sont toujours là …
Vous remarquerez l’option iburst spécifiés après le nom du serveur, en cas d’indisponibilité du serveur, ntp essaie plusieurs fois avant d’abandonner
Redémarrer le service ntp pour activer nos modifications

sudo service ntp restart

Utiliser la commande ntpq -p pour afficher les informations de synchronisation (notamment les serveurs qui vous servent de référence de temps).

ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 0.fr.pool.ntp.o .POOL.          16 p    -   64    0    0.000    0.000   0.001
 1.fr.pool.ntp.o .POOL.          16 p    -   64    0    0.000    0.000   0.001
 2.fr.pool.ntp.o .POOL.          16 p    -   64    0    0.000    0.000   0.001
 3.fr.pool.ntp.o .POOL.          16 p    -   64    0    0.000    0.000   0.001

Utilisation de la commande timedatectl

Les systèmes d’exploitation modernes font la distinction entre les deux types d’horloges suivants :

  • Une horloge temps réel (« Real-Time Clock », ou RTC), communément appelée horloge matérielle, (habituellement un circuit intégré sur la carte système) est complètement indépendante de l’état actuel du système d’exploitation et fonctionne même lorsque l’ordinateur est éteint.
  • Une horloge système, également appelée horloge logicielle, est habituellement maintenue par le noyau et sa valeur initiale est basée sur l’horloge temps réel. Une fois le système démarré et l’horloge système initialisée, celle-ci est entièrement indépendante de l’horloge temps réel.

Le temps système est toujours conservé sous le format du temps universel coordonné (« Coordinated Universal Time », ou UTC) puis converti dans les applications au temps local selon les besoins. Le temps local correspond à l’heure réelle dans votre fuseau horaire et prend en compte l’heure d’été (« daylight saving time », ou DST). L’horloge temps réel peut utiliser l’heure UTC ou l’heure locale. L’heure UTC est recommandée.

L’utilitaire timedatectl est distribué dans le cadre du gestionnaire de services et systèmes systemd et permet de réviser et modifier la configuration de l’horloge système. Vous pouvez utiliser cet outil pour modifier l’heure et la date actuelle, pour définir le fuseau horaire, ou pour activer la synchronisation automatique de l’horloge système avec un serveur distant.

Afficher l’heure et la date actuelle

Pour afficher l’heure et la date actuelle, ainsi que des informations détaillées sur la configuration de l’horloge système et de l’horloge matérielle, veuillez exécuter la commande timedatectl sans aucune autre option de ligne de commande :

timedatectl

Ceci affiche l’heure locale et universelle, le fuseau horaire en cours d’utilisation, le statut de la configuration NTP (« Network Time Protocol »), ainsi que des informations supplémentaires liées à DST.
Exemple : Afficher l’heure et la date actuelle
Voici un exemple de la sortie de commande timedatectl sur un système qui n’utilise pas NTP pour synchroniser l’horloge système avec un serveur distant

timedatectl
      Local time: lun. 2018-04-23 13:53:34 CEST
  Universal time: lun. 2018-04-23 11:53:34 UTC
        RTC time: lun. 2018-04-23 11:53:32
       Time zone: Europe/Paris (CEST, +0200)
 Network time on: yes
NTP synchronized: yes
 RTC in local TZ: no

Modifier l’heure actuelle

Pour modifier l’heure actuelle, veuillez saisir ce qui suit dans l’invite de shell en tant qu’utilisateur root

timedatectl set-time HH:MM:SS

Veuillez remplacer HH par les heures, MM par les minutes, et SS par les secondes, le tout doit être saisi sous un format à deux chiffres.
Cette commande met à jour l’heure système et l’horloge matérielle. Le résultat est similaire à l’utilisation des commandes date --set et hwclock --systohc.
La commande échouera si un service NTP est activé. Pour désactiver le service de façon temporaire timedatectl set-ntp no.
Exemple : Modifier l’heure actuelle
Pour modifier l’heure actuelle à 11:26 p.m. (23h26), veuillez exécuter la commande suivante en tant qu’utilisateur root

timedatectl set-time 23:26:00

Par défaut, le système est configuré pour utiliser l’heure UTC. Pour configurer votre système à maintenir l’horloge à l’heure locale, veuillez exécuter la commande timedatectl avec l’option set-local-rtc en tant qu’utilisateur root

timedatectl set-local-rtc boolean

Pour configurer votre système afin de maintenir l’horloge à l’heure locale, veuillez remplacer boolean par yes (ou bien par y, true, t, ou 1). Pour configurer le système de manière à utiliser UTC, veuillez remplacer boolean par no (ou bien par, n, false, f, ou 0). L’option par défaut est no.

Modifier la date actuelle

Pour modifier la date actuelle, veuillez saisir ce qui suit dans l’invite de shell en tant qu’utilisateur root

timedatectl set-time YYYY-MM-DD

Veuillez remplacer YYYY par une année à quatre chiffres, MM par un mois à deux chiffres, et DD par un jour du mois à deux chiffres.
Veuillez remarquer que modifier la date sans spécifier l’heure actuelle fera que l’heure sera paramétrée sur 00:00:00.
Exemple : Modifier la date actuelle Pour modifier la date actuelle sur le 2 juin 2013 et garder la même heure (11:26 p.m., ou 23h26), veuillez exécuter la commande suivante en tant qu’utilisateur root 

timedatectl set-time '2013-06-02 23:26:00'

Modifier le fuseau horaire

Pour répertorier tous les fuseaux horaire disponibles, veuillez saisir ce qui suit dans une invite de shell

timedatectl list-timezones

Pour modifier le fuseau horaire en cous d’utilisation, veuillez saisir ce qui suit en tant qu’utilisateur root

timedatectl set-timezone time_zone

Veuillez remplacer time_zone par l’une des valeurs répertoriées par la commande timedatectl list-timezones.
Exemple : Modifier le fuseau horaire
Pour identifier le fuseau horaire le plus proche de votre location actuelle, veuillez utiliser la commande timedatectl avec l’option de ligne de commande list-timezones. Par exemple, pour répertorier tous les fuseaux horaires en Europe

timedatectl list-timezones | grep Europe
Europe/Amsterdam
Europe/Andorra
Europe/Athens
Europe/Belgrade
Europe/Berlin
Europe/Bratislava
[...]

Pour changer le fuseau horaire sur Europe/Prague, veuillez saisir ce qui suit en tant qu’utilisateur root

timedatectl set-timezone Europe/Prague

Synchroniser l’horloge système avec un ou des serveurs de temps

Edition du fichier de configuration timesyncd.conf :

sudo nano /etc/systemd/timesyncd.conf

Définir les serveurs de temps :

[Time]
NTP=
FallbackNTP=0.arch.pool.ntp.org 1.arch.pool.ntp.org 2.arch.pool.ntp.org 3.arch.pool.ntp.org

Activer la synchronisation :

timedatectl set-ntp true

Stopper la synchronisation :

timedatectl set-ntp false

Contrairement aux ajustements manuels décrits dans les sections précédentes, la commande timedatectl vous permet également d’activer la synchronisation automatique de votre horloge système avec un groupe de serveurs à distance en utilisant le protocole NTP. L’activation de NTP active chronyd ou ntpd, selon le service installé.
Le service NTP peut être activé et désactivé par une commande sur le modèle suivant

timedatectl set-ntp boolean

Pour activer votre système pour synchroniser l’horloge système avec un serveur NTP à distance, veuillez remplacer boolean par yes (option par défaut).
Pour désactiver cette fonctionnalité, veuillez remplacer boolean par no.
Exemple : Synchroniser l’horloge système avec un serveur à distance
Pour activer la synchronisation automatique de l’horloge système avec un serveur à distance

timedatectl set-ntp true

La commande échouera si un service NTP n’est pas installé.

Client NTP systemd-timesyncd

Systemd livre un démon appelé systemd-timesyncd qui peut être utilisé pour synchroniser l’heure système avec les serveurs NTP distants.
Le démon n’est pas destiné à remplacer le démon NTP bien établi, mais comme une implémentation client du protocole SNTP qui peut être utilisé pour des tâches moins avancées et sur des systèmes à ressources limitées.
Veuillez noter que lorsque l’horloge système est réglée sur Heure locale, systemd-timesyncd ne met pas à jour l’horloge matérielle.

Le démon enregistre l’horloge actuelle sur le disque chaque fois qu’une nouvelle synchronisation NTP a été acquise et l’utilise pour éventuellement corriger l’horloge système au début du démarrage, afin d’accueillir des systèmes qui n’ont pas de RTC tels que le Raspberry Pi et Olimex .

Activation

Le service systemd-timesyncd est disponible avec systemd. Pour le lancer et l’activer, exécutez simplement:

sudo timedatectl set-ntp true  # activé par défaut sur les versions récentes de systemd

Pour vérifier l’état du service, utilisez l’état du timedatectl:

timedatectl status
      Local time: Mon 2017-05-29 12:33:42 UTC
  Universal time: Mon 2017-05-29 12:33:42 UTC
        RTC time: n/a
       Time zone: Etc/UTC (UTC, +0000)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a

Configuration /etc/systemd/timesyncd.conf

Lors du démarrage, systemd-timesyncd lira le fichier de configuration de /etc/systemd/timesyncd.conf, qui ressemble à ceci:

[Time]
#Servers=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org

Pour ajouter des serveurs temporels ou modifier ceux fournis, décommentez la ligne pertinente et énumèrer leur nom d’hôte ou IP séparés par un espace. Par exemple, vous pouvez utiliser n’importe quel serveur fourni par le projet de pool NTP :

[Time]
Servers=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org

En plus de la configuration du démon, les serveurs NTP peuvent également être fournis via une configuration systemd-networkd avec une option NTP = ou, dynamiquement, via un serveur DHCP.

Option NTP (les serveurs de temps en France http://www.pool.ntp.org/zone/fr)

[Time]
NTP=0.fr.pool.ntp.org 1.fr.pool.ntp.org 2.fr.pool.ntp.org 3.fr.pool.ntp.org

Démarrer le service et activer NTP

sudo systemctl start systemd-timesyncd.service
sudo timedatectl set-ntp true

Avertissement: Le service écrit sur un fichier local /var/lib/systemd/clock avec chaque synchronisation. Cet emplacement est codé en dur et ne peut pas être modifié. Cela peut être problématique pour une exécution de la partition racine en lecture seule ou pour essayer de minimiser les écritures sur une carte SD.

Le serveur NTP à utiliser sera déterminé en utilisant les règles suivantes:

  • Tous les serveurs NTP par interface obtenus à partir de la configuration systemd-networkd.service ou via DHCP ont priorité.
  • Les serveurs NTP définis dans /etc/systemd/timesyncd.conf seront ajoutés à la liste par interface au moment de l’exécution et le démon contactera les serveurs à leur tour jusqu’à ce que l’on en trouve un qui répond.

Après une modification du fichier /etc/systemd/timesyncd.conf ,il faut relancer le service

systemctl restart systemd-timesyncd.service

En cas d'erreur sur le status du type

Condition: start condition failed at Thu 2018-07-26 16:45:04 CEST; 24s ago
           └─ ConditionFileIsExecutable=!/usr/sbin/ntpd was not met

Il faut supprimer l’application ntp du serveur et relancer le service

apt purge ntp
systemctl restart systemd-timesyncd.service

Le serveur de temps utilisé

systemctl status systemd-timesyncd.service
[...]
   Status: "Synchronized to time server 92.243.6.5:123 (0.fr.pool.ntp.org)."
[...]

Vérifier si la date et l’heure sont synchronisées avec le serveur de temps NTP

timedatectl status
[...]
 Network time on: yes
NTP synchronized: yes
[...]