Gestion précise de l'heure et de la date Version française du Managing Accurate Date and Time Avi Alkalay IBM équipe Impact Linux : http://ibm.com/linux [http://ibm.com/linux] Consultant Linux et normes ouvertes : architecte en chef informatique et logiciels Suggestion d'utiliser pool.ntp.org et des serveurs publics de temps NTP de strate 2 : Brad Knowles Suggestion d'utiliser ntpq au lieu de ntpdc: Kent Borg Explication des informations données par ntpq et ntpdc: Yura Moron Adaptation japonaise [http://www.linux.or.jp/JF/JFdocs/TimePrecision-HOWTO/]: Takeo Nakano Adaptation russe [http://computerlib.narod.ru/html/linuxtime.htm]: SHAKI Adaptation hongroise [http://tldp.fsf.hu/HOWTO/TimePrecision-HOWTO-hu/index.html], la section chrony et la toute première section: Mihaly Gyulai Adaptation française [http://www.traduc.org/docs/HOWTO/lecture/TimePrecision-HOWTO.html]: Philippe Wautelet Relecture de la version française: Raphaël Semeteys Préparation de la publication de la v.f.: Jean-Philippe Guérard Version : 1.0.9.fr.1.0 Copyright © 2002, 2003, 2004 Avi Alkalay Copyright © 2004, 2005 Philippe Wautelet, Raphaël Semeteys, Jean-Philippe Guérard 2005-09-24 +------------------------------------------------------------------------+ | Historique des versions | |------------------------------------------------------------------------| | Version 1.0.9.fr.1.0 | 2005-09-24 | PW, RS, JPG | |------------------------------------------------------------------------| | Adaptation française de la version 1.0.9. | |------------------------------------------------------------------------| | Version 1.0.9 | 2005-05-03 | Avi | |------------------------------------------------------------------------| | Inclusion d'un lien vers la traduction française (Included link to | | french translation). | |------------------------------------------------------------------------| | Version 1.0.8 | 2004-10-29 | MG | |------------------------------------------------------------------------| | Adaptation hongroise, la section chrony et la toute première section | | (Hungarian translation, the chrony section and the very first | | section). | |------------------------------------------------------------------------| | Version 1.0.7.fr.1.0 | 2005-03-22 | PW, RS, JPG | |------------------------------------------------------------------------| | Première traduction française. | |------------------------------------------------------------------------| | Version 1.0.7 | 2004-07-09 | AVI | |------------------------------------------------------------------------| | Note près de la licence pour signaler qu'il n'est pas nécessaire de | | demander une autorisation pour traduire ce document ; petites | | corrections pour plusieurs phrases (Disclaimer near to license, to let | | people know they can translate without asking permission; Small fixes | | in some phrases). | |------------------------------------------------------------------------| | Version 1.0.6 | 2004-02-25 | AVI | |------------------------------------------------------------------------| | Ajouté remerciements et lien vers la traduction russe (Included | | credits and link to russian translation). | |------------------------------------------------------------------------| | Version 1.0.5 | 2003-07-05 | AVI | |------------------------------------------------------------------------| | Changé l'adresse vers les serveurs de temps publics et ajouté | | pool.ntp.org (Changed public time servers list URL. Added | | pool.ntp.org). | |------------------------------------------------------------------------| | Version 1.0.4 | 2002-12-21 | AVI | |------------------------------------------------------------------------| | Ajouté remerciements et lien vers la traduction japonaise (Added | | japanese translation link and credits). | |------------------------------------------------------------------------| | Version 1.0.3 | 2002-08-24 | AVI | |------------------------------------------------------------------------| | Corrigé les largeurs d'écrans et de listings (Fixed wrong screen and | | programlisting widths). | |------------------------------------------------------------------------| | Version 1.0.2 | 2002-08-04 | AVI | |------------------------------------------------------------------------| | Lien vers une page de serveurs de temps publics (Link to public time | | servers page). | |------------------------------------------------------------------------| | Version 1.0.1 | 2002-05-07 | AVI | |------------------------------------------------------------------------| | Conversion finale en XML et réorganisation des fichiers (Final XML | | conversion. Files reorganization). | |------------------------------------------------------------------------| | Version 1.0 | 2002-04-28 | AVI | |------------------------------------------------------------------------| | Image terminée (Finalized image). | |------------------------------------------------------------------------| | Version 0.8 | 2002-04-27 | AVI | |------------------------------------------------------------------------| | Remplacé ntpdc par ntpq dans l'exemple (Switched from ntpdc example to | | ntpq, based on contributions). | |------------------------------------------------------------------------| | Version 0.8.1 | 2002-04-20 | AVI | |------------------------------------------------------------------------| | Graphique amélioré et liens vers d'autres documents (Improved graphic. | | Links to other doc locations). | |------------------------------------------------------------------------| | Version 0.8 | 2002-04-14 | AVI | |------------------------------------------------------------------------| | Amélioration de la figure NTP (Better tuning of NTP graphic). | |------------------------------------------------------------------------| | Version 0.76 | 2002-04-13 | AVI | |------------------------------------------------------------------------| | Ajouté une figure sur l'architecture (Inclusion of architecture | | graphic). | |------------------------------------------------------------------------| | Version 0.75 | 2002-04-10 | AVI | |------------------------------------------------------------------------| | Correction orthographe et utilisation DocBook XSLT 1.50 (Spell | | checked. Using DocBook XSLT 1.50). | |------------------------------------------------------------------------| | Version 0.65 | 2002-03-31 | AVI | |------------------------------------------------------------------------| | Passé au format XML 4.1.2 DocBook (Upgraded to XML 4.1.2 DocBook | | format). | |------------------------------------------------------------------------| | Version 0.6 | 2002-03-29 | AVI | |------------------------------------------------------------------------| | Terminé le mécanisme des fuseaux horaires sur Linux. Créé l'annexe. Il | | ne reste plus que les dessins. (Finished timezone mechanism on Linux. | | Created appendix. Now only drawings are needed). | |------------------------------------------------------------------------| | Version 0.4 | 2002-03-24 | AVI | |------------------------------------------------------------------------| | Toute la structure est définie. Tous les exemples de commandes sont | | écrits (All skeleton defined. All command examples written). | |------------------------------------------------------------------------| | Version 0.2 | 2002-03-19 | AVI | |------------------------------------------------------------------------| | Première version DocBook (First DocBook version). | +------------------------------------------------------------------------+ Résumé Ce document présente la gestion de la date et de l'heure sous Linux. Il explique également comment régler la date et l'heure de votre système et comment synchroniser votre machine via le protocole NTP. -------------------------------------------------------------------------- Table des matières 1. Pourquoi avoir une horloge précise ? 1.1. De quels facteurs dépend l'horloge matérielle ? 2. L'heure et la date en informatique 3. Qu'est-ce qu'un fuseau horaire ? 3.1. L'heure d'été 3.2. Exemples de fuseaux horaires 3.3. Les fuseaux horaires et Linux 4. Les paramètres corrects pour votre machine Linux 4.1. Sélection du fuseau horaire 4.2. Régler l'horloge matérielle 5. Synchronisation précise de l'heure 5.1. NTP : protocole de diffusion du temps en réseau (Network Time Protocol) 5.2. Construire une architecture simple de synchronisation de l'heure 5.3. Configuration NTP 5.4. Observer votre machine se synchroniser 5.5. Lancer automatiquement NTP au démarrage 6. Une horloge précise avec le programme chrony 6.1. En quoi chrony diffère de ntp ? 6.2. Comment utiliser chrony ? A. À propos de ce document 1. Pourquoi avoir une horloge précise ? Si votre ordinateur ne se connecte jamais à d'autres ordinateurs (ou à d'autres appareils utilisant une horloge), la précision de l'horloge n'est pas critique en elle-même, elle dépend des besoins de l'utilisateur. Cependant, les programmes qui d'une façon ou l'autre utilisent internet dépendent d'une date et d'une heure précises. Voici quelques situations où vous pourriez en avoir besoin : o Pour des logiciels effectuant des transactions ; o Pour des applications commerciales (p.ex. eBay) ; o Pour des clients et serveurs de messagerie ; o Pour des sites web qui utilisent des cookies ; o Pour des applications web distibuées ; o Pour certains services web ; o Pour des applications distribuées à base de composants telles que J2EE, .NET, et cætera ; o Pour des systèmes de fichiers modernes avancés et parallèles tels que AFS, DFS, GFS, GPFS, et cætera. Et bien sûr, pour utiliser votre ordinateur pour régler votre montre. 1.1. De quels facteurs dépend l'horloge matérielle ? Ici, nous allons un peu parler de la précision de l'horloge matérielle. Dans les PC, des oscillateurs à quartz gèrent l'horloge matérielle. La fréquence de l'oscillateur est divisée et finalement on obtient un compteur qui est incrémenté d'une unité toutes les secondes (en réalité c'est plus compliqué que çà, mais c'est suffisant pour nous). L'oscillateur fonctionne même lorsque l'ordinateur est éteint. Dès lors, au démarrage de l'ordinateur (et de Linux), l'horloge matérielle peut donner l'heure actuelle. La stabilité de cette horloge dépend principalement de la température de son environnement mais aussi de la pression atmosphérique et de la stabilité de la tension de son alimentation électrique. L'horloge matérielle est fiable à court terme. Cependant, à long terme, elle dérive par rapport à l'heure exacte. Puisque l'on peut continuellement comparer la fréquence de notre horloge matérielle à celle d'une horloge exacte, on peut calculer la fréquence de l'horloge matérielle et ainsi reconstituer l'heure exacte. Si cette horloge exacte se trouve dans notre réseau local, la précision de l'horloge de votre machine Linux sera de l'ordre de 0.01s. Si vous utilisez plutôt internet, votre horloge sera au plus à 0.2s de l'heure exacte. 2. L'heure et la date en informatique Pour déterminer l'heure actuelle en un endroit donné de la planète, un ordinateur a besoin d'exactement deux informations : 1. l'heure UTC exacte (en français Temps Universel Coordonné -- qui a remplacé l'heure GMT) ; 2. le fuseau horaire local. Pour les ordinateurs, il y a aussi une horloge matérielle interne qui sert de temps de base pour le système d'exploitation. La date et l'heure du système d'exploitation (nous n'utiliserons plus que le terme date ou heure pour exprimer les deux à partir de maintenant) sont réglées au démarrage par un script qui lit l'horloge matérielle et l'ajuste en fonction du fuseau horaire (il n'est pas stocké dans le BIOS). Après cette synchronisation, les heures du BIOS et du système d'exploitation sont complètement indépendantes. Dès lors, après un certain temps, il peut y avoir plusieurs secondes de décalage. Laquelle est correcte ? Sans précautions particulières, aucune. Nous allons maintenant discuter comment les rendre toutes les deux 100% fiables. 3. Qu'est-ce qu'un fuseau horaire ? Les fuseaux horaires sont des divisions géographiques du globe terrestre tous les 15° de longitude, commençant à Greenwich en Angleterre, créées pour aider les gens à déterminer l'heure qu'il est partout dans le monde. De nos jours, il s'agit plus de divisions politiques que géographiques, parce que parfois les gens ont besoin d'avoir la même heure que d'autres en des lieux pas trop éloignés. Et pour faire des économies d'énergies, nous avons aujourd'hui l'heure d'été qui correspond à un changement de fuseau horaire. Les fuseaux horaires sont généralement définis par les gouvernements ou par un institut d'astronomie et sont représentés par un code de 3 ou 4 lettres. Voir Section 3.2, « Exemples de fuseaux horaires » pour des exemples. Si vous voulez connaître l'heure actuelle n'importe où dans le monde, vous pouvez utiliser les sites web timezoneconverter.com [http://www.timezoneconverter.com/] (en anglais) ou horlogeparlante.com [http://www.horlogeparlante.com/] (en français) 3.1. L'heure d'été Pour faire des économies d'énergie, les gouvernements ont créé l'heure d'été (appelée en anglais Daylight Savings Time ou DST). Nos horloges sont avancées d'une heure et cela fait sembler nos journées plus longues. En fait, cela revient seulement à changer de fuseau horaire. Le temps primitif (UTC) est encore, et restera toujours, le même. Nous verrons plus tard comment activer ou désactiver automatiquement l'heure d'été dans Linux. 3.2. Exemples de fuseaux horaires Il n'y a rien de plus parlant que des exemples : Tableau 1. Fuseaux horaires du Brésil. Décalage par rapport à l'heure UTC +------------------------------------------------------------------------+ | Nom et décalage | Nom et décalage heure | Lieux | | | d'été | | |-----------------+-----------------------+------------------------------| | BREST -2:00 | BREDT -1:00 | Fernando de Noronha | |-----------------+-----------------------+------------------------------| | | | Sao Paulo, Rio, Brasilia, | | BRST -3:00 | BRDT -2:00 | Minas Gerais, Région | | | | Nord-Est, Région Sud, et | | | | cætera | |-----------------+-----------------------+------------------------------| | BRWST -4:00 | BRWDT -3:00 | Région Ouest | |-----------------+-----------------------+------------------------------| | BRAST -5:00 | BRADT -4:00 | Acre | +------------------------------------------------------------------------+ Si vous avez une table telle que celle-ci pour les USA ou l'Europe, envoyez-la moi s'il-vous-plaît. 3.3. Les fuseaux horaires et Linux Les systèmes Linux utilisent les fuseaux horaires dynamiques GLIBC basés sur /etc/localtime. Ce fichier est un lien vers (ou une copie) d'un fichier d'information de fuseau horaire situé généralement dans le répertoire /usr/share/zoneinfo. D'un point de vue géophysique, il y a seulement 360°/15°=24 fuseaux horaires dans le monde. Mais pour rendre les choses faciles pour tous et pour tenir compte de toutes les variations politiques (comme l'heure d'été), vous trouverez des centaines de fichiers d'information de fuseau horaire dans /usr/share/zoneinfo, chacun valable pour une ville, un pays, et cætera. Certains pays, comme le Brésil, n'ont pas un jour fixe pour passer à l'heure d'été. Il est défini chaque année quelques mois avant l'été et peut vous obliger à changer votre fichier d'information de fuseau horaire qui peut être compilé avec la commande zic à partir d'un fichier comme celui-ci. Exemple 1. Fichier d'information de fuseau horaire pour le Brésil # Fuseaux horaires du Brésil # # Les fuseaux horaires brésiliens sont : # BREST: Est de Brasilia. Fernando de Noronha. # BRST: Brasilia, Sao Paulo, Rio, Nord-est, Sud, et cætera # BRWST: Ouest de Brasilia. Mato Grosso, Manaus # BRAST: Acre. # # En heure d'été, la lettre 'S' devient 'D'. # # Pour installer, exécuter : # # # zic Brazil.txt # # Les fichiers de fuseaux horaires seront installés dans # /usr/share/zoneinfo (dépend de votre distribution). Ensuite, # créez un lien symbolique de votre zone vers /etc/localtime : # # # ln -sf /usr/share/zoneinfo/Brazil/Brasilia /etc/localtime # # # Si vous avez des mises à jour ou de nouveaux standards pour ce # fichier, envoyez-les en anglais à # # Avi Alkalay # # Dernière mise à jour : 18 Nov 2000 # Ce fichier est disponible sur http://avi.alkalay.net/linux/zoneinfo/ # # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S Rule Brazil 1931 1932 - Oct 3 0:00 1:00 D Rule Brazil 1932 1933 - Mar 31 0:00 0 S Rule Brazil 1949 only - Dec 1 0:00 1:00 D Rule Brazil 1950 only - Apr 30 0:00 0 S Rule Brazil 1950 1952 - Dec 1 0:00 1:00 D Rule Brazil 1951 only - Apr 16 0:00 0 S Rule Brazil 1952 only - Mar 31 0:00 0 S Rule Brazil 1953 only - Feb 28 0:00 0 S Rule Brazil 1963 only - Oct 23 0:00 1:00 D Rule Brazil 1964 only - Mar 1 0:00 0 S Rule Brazil 1965 only - Jan 31 0:00 1:00 D Rule Brazil 1965 only - Mar 31 0:00 0 S Rule Brazil 1965 only - Dec 1 0:00 1:00 D Rule Brazil 1966 1968 - Mar 1 0:00 0 S Rule Brazil 1966 1967 - Nov 1 0:00 1:00 D Rule Brazil 1984 only - Nov 2 0:00 1:00 D Rule Brazil 1985 only - Mar 15 0:00 0 S Rule Brazil 1985 only - Nov 2 0:00 1:00 D Rule Brazil 1986 only - Mar 15 0:00 0 S Rule Brazil 1986 only - Oct 25 0:00 1:00 D Rule Brazil 1987 only - Feb 14 0:00 0 S Rule Brazil 1987 only - Oct 25 0:00 1:00 D Rule Brazil 1988 only - Feb 7 0:00 0 S Rule Brazil 1988 only - Oct 16 0:00 1:00 D Rule Brazil 1989 only - Jan 29 0:00 0 S Rule Brazil 1989 only - Oct 15 0:00 1:00 D Rule Brazil 1990 only - Feb 11 0:00 0 S Rule Brazil 1990 only - Oct 21 0:00 1:00 D Rule Brazil 1991 only - Feb 17 0:00 0 S Rule Brazil 1991 only - Oct 20 0:00 1:00 D Rule Brazil 1992 only - Feb 9 0:00 0 S Rule Brazil 1992 only - Oct 25 0:00 1:00 D Rule Brazil 1993 only - Jan 31 0:00 0 S Rule Brazil 1993 only - Oct 17 0:00 1:00 D Rule Brazil 1994 only - Feb 20 0:00 0 S Rule Brazil 1994 only - Oct 16 0:00 1:00 D Rule Brazil 1995 only - Feb 19 0:00 0 S Rule Brazil 1995 only - Oct 15 0:00 1:00 D Rule Brazil 1996 only - Feb 11 0:00 0 S Rule Brazil 1996 only - Oct 06 0:00 1:00 D Rule Brazil 1997 only - Feb 16 0:00 0 S Rule Brazil 1997 only - Oct 06 0:00 1:00 D Rule Brazil 1998 only - Mar 01 0:00 0 S Rule Brazil 1998 only - Oct 11 0:00 1:00 D Rule Brazil 1999 only - Feb 21 0:00 0 S Rule Brazil 1999 only - Oct 03 0:00 1:00 D Rule Brazil 2000 only - Feb 27 0:00 0 S Rule Brazil 2000 only - Oct 8 0:00 1:00 D Rule Brazil 2001 only - Feb 18 0:00 0 S # Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL] Zone Brazil/DeNoronha -2:00 Brazil BRE%sT Zone posix/Brazil/DeNoronha -2:00 Brazil BRE%sT Zone right/Brazil/DeNoronha -2:00 Brazil BRE%sT Zone Brazil/East -2:00 Brazil BRE%sT Zone posix/Brazil/East -2:00 Brazil BRE%sT Zone right/Brazil/East -2:00 Brazil BRE%sT Zone America/Sao_Paulo -3:00 Brazil BR%sT Zone America/Rio_de_Janeiro -3:00 Brazil BR%sT Zone America/Brasilia -3:00 Brazil BR%sT Zone posix/America/Sao_Paulo -3:00 Brazil BR%sT Zone posix/America/Rio_de_Janeiro -3:00 Brazil BR%sT Zone posix/America/Salvador -3:00 Brazil BR%sT Zone posix/America/Brasilia -3:00 Brazil BR%sT Zone posix/Brazil/Central -3:00 Brazil BR%sT Zone posix/Brazil/Brasilia -3:00 Brazil BR%sT Zone posix/Brazil/Sao_Paulo -3:00 Brazil BR%sT Zone posix/Brazil/Salvador -3:00 Brazil BR%sT Zone posix/Brazil/Rio_de_Janeiro -3:00 Brazil BR%sT Zone right/America/Sao_Paulo -3:00 Brazil BR%sT Zone right/America/Rio_de_Janeiro -3:00 Brazil BR%sT Zone right/America/Salvador -3:00 Brazil BR%sT Zone right/America/Brasilia -3:00 Brazil BR%sT Zone right/Brazil/Central -3:00 Brazil BR%sT Zone right/Brazil/Brasilia -3:00 Brazil BR%sT Zone right/Brazil/Sao_Paulo -3:00 Brazil BR%sT Zone right/Brazil/Salvador -3:00 Brazil BR%sT Zone right/Brazil/Rio_de_Janeiro -3:00 Brazil BR%sT Zone Brazil/Central -3:00 Brazil BR%sT Zone Brazil/Brasilia -3:00 Brazil BR%sT Zone Brazil/Sao_Paulo -3:00 Brazil BR%sT Zone Brazil/Rio_de_Janeiro -3:00 Brazil BR%sT Zone Brazil/Salvador -3:00 Brazil BR%sT Zone Brazil/West -4:00 Brazil BRW%sT Zone Brazil/Manaus -4:00 Brazil BRW%sT Zone Brazil/Rondonia -4:00 Brazil BRW%sT Zone Brazil/Roraima -4:00 Brazil BRW%sT Zone Brazil/Mato_Grosso -4:00 Brazil BRW%sT Zone posix/Brazil/Manaus -4:00 Brazil BRW%sT Zone posix/Brazil/Mato_Grosso -4:00 Brazil BRW%sT Zone right/Brazil/Manaus -4:00 Brazil BRW%sT Zone right/Brazil/Mato_Grosso -4:00 Brazil BRW%sT Zone posix/America/Manaus -4:00 Brazil BRW%sT Zone right/America/Manaus -4:00 Brazil BRW%sT Zone Brazil/Acre -5:00 Brazil BRA%sT Une ligne Rule définit la date et l'heure à laquelle s'effectue un changement de fuseau horaire, tandis qu'une ligne Zone référence la règle (Rule) qui la gérera. Notez que le nom de la Zone est en fait le nom du fichier dans le répertoire /usr/share/zoneinfo et qu'il peut y avoir plusieurs noms pour le même fuseau horaire afin qu'il soit plus facile de trouver sa propre zone. Les commentaires du fichier expliquent comment installer ces fuseaux horaires en utilisant le compilateur de fichier d'information de fuseau horaire zic. Pour le rendre effectif, vous n'avez plus qu'à créer un lien (ou copier) du fichier d'information de fuseau horaire vers /etc/localtime. Pour certaines distributions, il y a une méthode de niveau supérieur (et préférable) pour régler le fuseau horaire décrite dans Section 4.1, « Sélection du fuseau horaire ». Après avoir fait pointer /etc/localtime vers le fichier de fuseau horaire correct, les règles de cette zone s'appliquent déjà et les changements de fuseau sont automatiques ; vous n'avez plus à changer l'heure manuellement. La séquence suivante de commandes illustre la dynamique de la gestion des fuseaux horaires sous Linux. Notez qu'elles ont toutes été exécutées en moins d'une minute : bash$ ls -al /etc/localtime lrwxrwxrwx 1 root root 35 May 22 2001 /etc/localtime -> /usr/share/zoneinfo/Brazil/Brasilia bash$ date Fri Mar 29 20:13:38 BRST 2002 bash# ln -sf /usr/share/zoneinfo/GMT /etc/localtime bash$ date Fri Mar 29 23:13:47 GMT 2002 bash# ln -sf /usr/share/zoneinfo/Brazil/Brasilia /etc/localtime bash$ date Fri Mar 29 20:14:03 BRST 2002 À 20:13, j'étais dans le fuseau horaire par défaut du Brésil (BRST) ; ensuite, je suis passé à l'heure GMT et l'horloge du système est passée à 23:13 ! Quand votre fuseau horaire passera à l'heure d'été, vous verrez un effet similaire, mais cette fois les règles sont toutes à l'intérieur de votre fichier /etc/localtime (qui ne change pas au contraire de cet exemple). Une application tournant sur cette machine (par exemple un serveur web générant des fichiers journaux) sera sensible à ce changement ; il est donc très important pour les développeurs de se souvenir que l'heure locale est égale à l'heure universelle actuelle plus le fuseau horaire actuel, comme décrit dans Section 2, « L'heure et la date en informatique ». Finalement, je suis revenu à mon fuseau horaire de départ. 4. Les paramètres corrects pour votre machine Linux Quel que soit le système que vous voulez installer, vous devez connaître votre fuseau horaire. Il peut être déterminé par une ville, une région ou un pays. Vous devez aussi décider comment régler l'heure du BIOS. Ici, vous pouvez suivre deux stratégies : Machine avec seulement Linux Dans ce cas, vous pouvez mettre l'heure du BIOS à l'heure UTC. Les changements de fuseaux horaires seront gérés dynamiquement comme expliqué dans Section 3.3, « Les fuseaux horaires et Linux ». Machine avec Linux et MS Windows Windows manipule l'heure d'une manière plus primitive que Linux. Pour Windows, l'heure du BIOS correspond toujours à l'heure locale, les changements de fuseaux sont donc plus agressifs car ils changent directement l'horloge matérielle. Et puisque Linux et Windows initialisent tous deux leur heure à partir de l'horloge matérielle, si les deux sont présents, Linux doit la manipuler de la même façon. Dans ce cas, vous devez mettre votre BIOS à l'heure locale. 4.1. Sélection du fuseau horaire Sur les systèmes Red Hat Linux et dérivés, vous pouvez régler la stratégie pour l'horloge matérielle et les fuseaux horaires grâce à la commande timeconfig, qui utilise une interface conviviale. Vous pouvez aussi le faire de façon non-interactive : Exemple 2. Outil de configuration de l'heure bash# timeconfig "Brasil/East" # règle l'horloge matérielle à l'heure locale bash# # et le fuseau horaire sur la zone est du Brésil bash# bash# timeconfig --utc "Brasil/East" # règle l'horloge matérielle à l'heure UTC bash# # et le fuseau horaire sur la zone est du Brésil De toute façon, cela change le fichier /etc/sysconfig/clock qui est lu au démarrage. Vous pouvez l'éditer manuellement. Il ressemble à ceci : Exemple 3. /etc/sysconfig/clock file ZONE="Brazil/East" UTC=true ARC=false 4.2. Régler l'horloge matérielle Je vous conseille de ne changer votre horloge matérielle que si vous comprenez comment obtenir l'heure exacte, comme expliqué dans Section 5, « Synchronisation précise de l'heure ». La commande hwclock lit ou règle l'horloge matérielle en fonction des paramètres que vous lui donnez et qui sont documentés dans son manuel. Mais vous n'avez normalement pas à l'utiliser si vous avez une distribution moderne. Après avoir choisi votre stratégie pour l'horloge matérielle et les fuseaux horaires, vous pouvez utiliser la commande de haut niveau setclock pour régler correctement votre horloge matérielle. Vous n'avez pas besoin de passer de paramètres car setclock appelle intelligemment hwclock pour régler le BIOS en se basant sur l'heure courante de votre système d'exploitation. Vous devriez donc toujours utiliser la commande setclock. Mais si vous êtes minimaliste et préférez la façon compliquée, voici quelques exemples d'utilisation de hwclock : Exemple 4. Utilisation de setclock et hwclock bash# setclock # La manière simple de régler l'horloge matérielle bash# bash# hwclock # Lit l'horloge matérielle bash# bash# hwclock --systohc --utc # Règle l'horloge matérielle avec l'heure UTC bash# # basée sur l'heure actuelle du système bash# bash# hwclock --systohc # Règle l'horloge matérielle avec l'heure actuelle bash# # basée sur l'heure actuelle du système bash# bash# hwclock --set --date "21 Oct 2004 21:17" # Règle l'horloge matérielle avec l'heure spécifiée Puisque l'heure du système est indépendante de l'horloge matérielle, tout changement dans le BIOS n'apparaîtra que lors du démarrage suivant. Une autre option pour changer l'horloge matérielle est de redémarrer l'ordinateur et d'accéder à l'écran de configuration du BIOS. Sur les plates-formes IBM e-server zSeries [http://ibm.com/servers/eserver/zseries/os/linux/] vous devez le faire au niveau de z/VM parce que Linux tourne sur des machines virtuelles créées par z/VM. 5. Synchronisation précise de l'heure Avoir l'heure exacte sur tous vos systèmes est aussi important que d'avoir une stratégie solide de la sécurité du réseau (ce qui est bien plus qu'utiliser des pare-feu). C'est un des éléments essentiels d'une administration système basée sur de bonnes pratiques qui mène à des systèmes bien organisés et sûrs. Une heure précise est particulièrement nécessaire lorsqu'on travaille avec des applications distribuées, des services web ou des outils distribués de surveillance réseau. 5.1. NTP : protocole de diffusion du temps en réseau (Network Time Protocol) Nous ne décrirons pas ici le protocole, mais comment cette magnifique invention, ajoutée à la présence envahissante d'internet, peut nous être utile. Vous pouvez en apprendre plus sur www.ntp.org [http://www.ntp.org/]. Une fois le système configuré, NTP arrivera à garder l'heure exacte en ne faisant que de très petits ajustements pour ne pas perturber les applications en cours d'exécution. L'heure exacte peut être obtenue en utilisant des appareils basés sur la fréquence électronique des atomes. Il existe aussi une méthode basée sur le système de satellites GPS. La première est plus fiable, mais la seconde n'est pas si mauvaise. Les deux nécessitent un matériel très spécifique et très cher, mais leurs propriétaires (en général des universités ou des laboratoires de recherche) les connectent à des ordinateurs qui font tourner un serveur NTP qui sont connectés à internet et qui vous laissent y accéder gratuitement. Et c'est grâce à eux que nous synchroniserons nos systèmes. 5.2. Construire une architecture simple de synchronisation de l'heure Vous aurez besoin de : 1. Une connexion directe ou indirecte (à travers un pare-feu) à internet. 2. Choisir des serveurs NTP. Vous pouvez utiliser le serveur public pool.ntp.org [http://www.fortytwo.ch/time/] ou en choisir dans la deuxième strate de serveurs de temps publics [http://www.eecis.udel.edu/~mills/ntp/clock2a.html] sur le site web de NTP. Si vous n'avez pas d'accès à internet, votre administrateur WAN (ce doit être un type intelligent) peut probablement vous donner des adresses internes. 3. Avoir le logiciel NTP installé sur tous les systèmes que vous voulez synchroniser. Vous pouvez trouver les RPM sur les cédéroms de votre distribution Linux favorite ou faire une recherche [http://rpmfind.net/linux/rpm2html/search.php?query=ntp] sur http://rpmfind.net/ [http://rpmfind.net/]. Voici un exemple d'une bonne architecture : Figure 1. Serveurs relais locaux pour NTP [1]Architecture NTP Si vous avez plusieurs machines à synchroniser, ne les faites pas toutes accéder aux serveurs NTP externes que vous avez choisis. Seuls deux de vos serveurs doivent accéder aux serveurs NTP externes. Les autres machines se synchroniseront sur ces deux dernières. Nous les appellerons serveurs relais. Vos serveurs relais peuvent être n'importe lesquelles de vos machines déjà disponibles sur votre réseau. NTP consomme très peu de mémoire et de processeur. Vous n'avez pas besoin d'une machine dédiée à cette fonction. [2][Astuce] Astuce Créer des alias pour les noms d'hôtes de vos serveurs relais locaux est une bonne idée. Vous pouvez définir par exemple ntp1.mon-domaine.fr et ntp2.mon-domaine.fr. Puis n'utilisez que ces noms en configurant les machines clientes. De cette façon, vous pouvez déplacer la fonctionnalité NTP vers un nouveau serveur relais (avec un adresse IP et un nom d'hôte différents) sans avoir à reconfigurer les clients. Demandez à votre administrateur DNS de créer ces alias. 5.3. Configuration NTP Pour vos serveurs relais Éditez /etc/ntp.conf et ajoutez les serveurs distants que vous avez choisis : Exemple 5. Fichier /etc/ntp.confdes machines relais server ntp.cnrs.fr # Un serveur de strate 1 de cnrs.fr server autre-ntp.gouv.fr # Un serveur de strate 2 de gouv.fr De nouveau, vous pouvez utiliser le serveur public pool.ntp.org [http://www.fortytwo.ch/time/] ou obtenir une liste de serveurs de temps publics [http://www.eecis.udel.edu/~mills/ntp/clock2a.html] sur le site web de NTP. Pour vos clients Éditez /etc/ntp.conf et ajoutez vos serveurs relais avec un nom standard : Exemple 6. Fichier /etc/ntp.conf des machines clientes server ntp1.mon-domaine.fr # Mon premier serveur relais local server ntp2.mon-domaine.fr # Mon deuxième serveur relais local Si votre machine a une heure UTC différente de plusieurs minutes par rapport aux serveurs NTP, NTP ne fonctionnera pas. Dans ce cas, vous devez d'abord faire un synchronisation complète. Je vous recommande de le faire en dehors des heures de production. Vous n'avez besoin de le faire que lors de l'initialisation de votre configuration NTP, jamais plus après : Exemple 7. Première synchronisation bash# ntpdate autre-ntp.gouv.fr [3]1 24 Mar 18:16:36 ntpdate[10254]: step time server 200.100.20.10 offset -15.266188 sec bash# ntpdate autre-ntp.gouv.fr [4]2 24 Mar 18:16:43 ntpdate[10255]: adjust time server 200.100.20.10 offset -0.000267 sec [5]1 Première synchronisation complète. L'horloge retardait de 15 secondes. [6]2 Deuxième synchronisation complète, juste pour être sûr. Maintenant, nous ne retardons pratiquement plus, ce qui est une bonne chose. La dernière étape consiste à démarrer ou à redémarrer le démon NTP sur chaque machine : bash# service ntpd restart 5.4. Observer votre machine se synchroniser Maintenant que tout est configuré, NTP va garder l'heure de votre machine synchronisée. Vous pouvez observer ce processus en utilisant la commande d'interrogation NTP (ntpq) : Exemple 8. Un exemple d'interrogation de l'état de la synchronisation temporelle bash# ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== -jj.cs.umb.edu gandalf.sigmaso 3 u 95 1024 377 31.681 -18.549 1.572 milo.mcs.anl.go ntp0.mcs.anl.go 2 u 818 1024 125 41.993 -15.264 1.392 -mailer1.psc.edu ntp1.usno.navy. 2 u 972 1024 377 38.206 19.589 28.028 -dr-zaius.cs.wis ben.cs.wisc.edu 2 u 502 1024 357 55.098 3.979 0.333 +taylor.cs.wisc. ben.cs.wisc.edu 2 u 454 1024 347 54.127 3.379 0.047 -ntp0.cis.strath harris.cc.strat 3 u 507 1024 377 115.274 -5.025 1.642 *clock.via.net .GPS. 1 u 426 1024 377 107.424 -3.018 2.534 ntp1.conectiv.c 0.0.0.0 16 u - 1024 0 0.000 0.000 4000.00 +bonehed.lcs.mit .GPS. 1 u 984 1024 377 25.126 0.131 30.939 -world.std.com 204.34.198.40 2 u 119 1024 377 24.229 -6.884 0.421 La signification de chaque colonne remote Est le nom du serveur NTP distant. Si vous utilisez l'option -n, vous verrez les adresses IP de ces serveurs à la place de leurs noms. refid Indique d'où chaque serveur obtient son heure. Il peut s'agir d'un nom d'hôte ou de quelque chose comme .GPS., indiquant une source GPS (Global Positioning System). st La strate est un nombre allant de 1 à 16 qui indique la précision du serveur distant. 1 est le plus fiable, 16 signifie que le serveur n'est pas disponible. Votre strate sera égale à celle du serveur distant le plus fiable plus 1. Ne vous connectez jamais à un serveur de la strate 1, utilisez ceux de niveau 2 ! Ces serveurs sont largement suffisants pour nos besoins, et cette politique permet de réduire le trafic vers les serveurs de la première strate. poll L'intervalle (en secondes) entre deux requêtes de temps. La valeur sera comprise entre les valeurs minimales et maximales autorisées. Initialement la valeur sera petite pour permettre une synchronisation rapide. Une fois que les horloges sont synchrones, le temps entre deux requêtes augmentera pour diminuer le trafic réseau et la charge sur les serveurs de temps populaires. reach C'est une représentation en base 8 d'un tableau de 8 bits représentant les 8 dernières fois que la machine a essayé d'atteindre le serveur. Le bit est mis à 1 si le serveur distant a pu être atteint. delay Le délai (en secondes) nécessaire pour recevoir une réponse à une demande de "quelle heure est-il ?". offset La valeur la plus importante. Le décalage de temps entre le serveur local et le serveur distant. Pendant la synchronisation, le décalage diminue, indiquant que l'horloge locale devient plus précise. jitter Cette colonne indique la dispersion, qui est une mesure de la variance statistique du décalage pendant plusieurs paires de requête/réponse successives. Des valeurs faibles de la dispersion sont meilleures que des valeurs élevées. Plus elles sont faibles, plus la synchronisation temporelle sera précise. Signification des signes devant les noms de serveur - Signifie que le service NTP local n'aime pas beaucoup ce serveur + Signifie que le service NTP local aime ce serveur x Marque un mauvais serveur * Indique le serveur préféré actuel 5.5. Lancer automatiquement NTP au démarrage Si vous voulez toujours avoir le service NTP sur votre machine même si vous la redémarrez, faites ceci sur chaque machine : bash# chkconfig --level 2345 ntpd on Cela garantira un démarrage automatique. Si votre machine fonctionne longtemps sans redémarrage (des mois ou des années), vous remarquerez une importante différence entre la très imprécise horloge matérielle et l'heure système (maintenant très précise). Les distributions Linux modernes copient l'heure système dans l'horloge matérielle chaque fois que le système est arrêté en utilisant un mécanisme similaire à la commande setclock. De cette façon, au démarrage suivant, vous obtiendrez une date et une heure presque aussi précises que ce qu'elles étaient lors de l'arrêt de votre ordinateur. 6. Une horloge précise avec le programme chrony 6.1. En quoi chrony diffère de ntp ? Chrony utilise aussi le protocole NTP et est aussi conçu pour rendre l'horloge de Linux plus fiable. Il est aussi adapté à des systèmes qui n'ont pas de connexion internet. La source d'heure exacte peut donc être n'importe quelle horloge précise à partir de laquelle on puisse lire l'heure et la transmettre au programme. De plus, il est également capable d'estimer la dérive de l'horloge matérielle et, en se basant sur celle-ci, d'ajuster l'horloge matérielle au démarrage de l'ordinateur. La version 1.20 de chrony ne supporte pas encore les horloges internes de type GPS ou les récepteurs radio DCF, mais la structure du programme rend de telles extensions possibles. 6.2. Comment utiliser chrony ? Chrony est constitué de deux parties : le démon chronyd et l'interface utilisateurchronyc. Vous pouvez trouver chrony sur chrony.sunsite.dk/index.php [http://chrony.sunsite.dk/index.php/] A. À propos de ce document Copyright 2002, 2003, 2004 Avi Alkalay. Copyright 2004, 2005 Philippe Wautelet et copyright 2005 Raphaël Semeteys pour la traduction française. This document must be distributed under the terms of [7]GNU Free Documentation License. Please translate, adapt, improve, redistrubute using the original XML DocBook source right bellow. Let me know if you want me to put a link to your translation/adaptation/improvement here. Ce document doit être distribué sous les termes de la licence de documentation libre GNU (GFDL) [http://www.gnu.org/copyleft/fdl.html]. Traduisez, adaptez, améliorez ou redistribuez SVP en utilisant le fichier source original ci-dessous au format XML DocBook. Faites-moi savoir si vous voulez que j'ajoute un lien ici vers votre version traduite, adaptée ou améliorée. Ce document est disponible aux endroits suivants : o Site officiel de la version originale [http://avi.alkalay.net/linux/docs/TimePrecision/] [Code source XML DocBook [http://avi.alkalay.net/linux/docs/TimePrecision/timeprecision.tar.gz]] ; o LinuxDoc, en tant que guide pratique (version anglaise) [http://en.tldp.org/HOWTO/TimePrecision-HOWTO/] [une seule page [http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/html_single/TimePrecision-HOWTO.html]] [PDF [http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/pdf/TimePrecision-HOWTO.pdf]] ; o Takeo Nakano traduction japonaise [http://www.linux.or.jp/JF/JFdocs/TimePrecision-HOWTO/] [version texte [http://www.linux.or.jp/JF/JFdocs/TimePrecision-HOWTO.txt]] ; o SHAKI traduction russe [http://computerlib.narod.ru/html/linuxtime.htm] ; o Mihaly Gyulai traduction hongroise [http://tldp.fsf.hu/HOWTO/TimePrecision-HOWTO-hu/index.html] ; o Dernière version française de ce document [http://www.traduc.org/docs/howto/lecture/TimePrecision-HOWTO.html] [Code source XML DocBook [http://www.traduc.org/cgi-bin/viewcvs.cgi/guides_pratiques/TimePrecision-HOWTO.xml]].