
  Mini HOWTO Clock
  Ron  Bean,  Dec. 1996 rbean@execpc.com (Adaptation francaise
  par Gacquer frederic gacquer@neuronnexion.fr)
  Dec. 1996

  Jeudi 2 avril 1998 V 1.0.

  1.  Introduction

  Les puces d'horloge temps-reel sur les cartes meres des  PC  (et  meme
  des  stations  de  travail  plus onereuses) sont de notoriete publique
  inexactes. Linux fourni une  maniere  simple  pour  corriger  cela  de
  maniere  logicielle,  rendant  virtuellement  l'horloge *tres* precise
  meme sans horloge externe. Mais la plupart des personnes  ne  semblent
  pas etre au courant, pour plusieurs raisons :

  1. Ce  n'est  pas  indique dans la plupart des documentations "Comment
     installer linux", et cela serait difficile de le  mettre  en  place
     automatiquement  au  moment  de l'installation du systeme (bien que
     pas impossible en theorie, si vous avez un modem).

  2. Si vous essayez "man clock" vous obtiendrez clock(3), ce qui  n'est
     pas ce que vous souhaitez. (Essayez "man 8 clock").

  3. La  plupart  des gens ne semblent pas tenir compte de l'heure qu'il
     est de toute facon.

  4. Le peu qui y  font  attention  regulierement  veulent  utiliser  le
     logiciel xntpd de louie.udel.edu pour se synchroniser a une horloge
     externe, comme un serveur reseau de temps ou une horloge radio.

  Ce mini-howto decrit une approche de bas-niveau. Si vous etes vraiment
  interesse par ce genre de chose, je vous recommende vivement de passer
  du temps a  <http://www.eecis.udel.edu/~ntp/> qui inclus toutes sortes
  de choses interessantes, incluant une documentation complete sur xntpd
  et  des  liens  sur  NIST  et   USNO   (j'ai   quelques   commentaires
  supplementaires sur xntpd a la fin.)

  Note  si vous avez plus d'un systeme d'exploitation sur votre machine,
  vous devez en laisser seulement un remettre  a  jour  l'horloge  CMOS,
  ainsi  ils  n'interfererons  pas l'un envers l'autre. Si vous executez
  regulierement a la fois linux et windows sur  la  meme  machine,  vous
  pourriez   eventuellement   preferer   quelques   uns  des  programmes
  sharewares de gestion de l'horloge disponible pour windows (suivre les
  liens a partir de l'URL ci-dessus).

  2.  Utiliser le programme 'clock'

  Tout  ce  que  vous  devez savoir est dans la page de manuel clock(8),
  mais ce mini-HOWTO va vous guider pas a pas.

  Note Vous devez etre root pour executer  'clock',  ou  n'importe  quel
  autre programme qui modifie soit le temps systeme soit l'horloge CMOS.

  2.1.

  Verifier votre installation

  Cherchez dans vos fichiers de demarrage une  commande  du  style  peut
  etre  dans  /etc/rc.local,  /etc/rc.d/rc.sysinit,  ou  dans un endroit
  similaire.

  Si c'est 'clock -s' ou 'clock  -us',  changez  le  's'  en  'a',  puis
  regardez  si  vous  avez  un fichier /etc/adjtime, ne contenant qu'une
  ligne ressemblant a quelque chose comme cela :

              0.000000 842214901 0.000000

  Ces nombres sont le facteur de correction (en secondes par  jour),  le
  moment  ou  l'horloge  a  ete  reajustee la derniere fois (en secondes
  depuis le 1er janvier 1970), et les secondes partielles  qui  ont  ete
  arrondies  la  derniere fois. Si vous n'avez pas ce fichier, connectez
  vous en tant que root et creez le, avec une seule ligne qui  ressemble
  a (que des zeros) :

                0.0 0 0.0

  Ensuite  executez  'clock  -a' ou 'clock -ua' manuellement a partir du
  shell pour mettre a jour le deuxieme nombre (utiliser le 'u' si  votre
  horloge est configuree en Universel plutot que temps local).

  2.2.

  Mesurer le taux de derive temporelle de votre horloge

  Pour  commencer,  vous  devez  connaitre  l'heure qu'il est :-). Votre
  temps local du jour peut  ou  peut  ne  pas  etre  exact.  Ma  methode
  preferee  est  d'appeler  l'horloge  parlante  au 3699 (c'est un appel
  gratuit). Si vous avez acces a un serveur reseau de temps, vous pouvez
  utiliser   le  programme  ntpdate  du  progiciel  xntpd  (utiliser  le
  parametre -b pour empecher le noyau  de  cafouiller  l'horloge  CMOS).
  Sinon utiliser systeme. Vous devrez vous rappeler la derniere fois que
  vous avez change l'heure, donc ecrivez la date quelque part ou vous ne
  la  perdrez  pas.  Si  vous  avez utilise ntpdate, faire 'date +%s' et
  ecrire le nombre de secondes depuis le 1er janvier 1970.

  Puis revenez quelques jours ou semaines apres et regardez  de  combien
  l'horloge a derive. Si vous mettez l'horloge a jour a la main, je vous
  recommanderais d'attendre au moins  deux  semaines,  et  de  seulement
  calculer le taux de derive le plus proche d'un dixieme de secondes par
  jour. Apres plusieurs mois vous pourrez obtenir le  plus  proche  d'un
  centieme  de  secondes  par  jour  (quelques  personnes affirment etre
  encore plus precis mais je resterais prudent dans  ce  cas).  Si  vous
  utilisez  ntpdate, vous n'aurez pas a attendre si longtemps, mais dans
  tous les cas vous pourrez toujours affiner plus tard.

  Vous pouvez avoir cron qui execute 'clock -a' a des moments  reguliers
  pour  garder  le temps systeme en accord avec le temps (corrige) CMOS.
  Cette commande sera  aussi  executee  a  partir  de  vos  fichiers  de
  demarrage  a chaque fois que vous relancerez le systeme, ainsi si vous
  le faites souvent (comme quelques uns d'entre nous le font), cela peut
  suffire a vos besoins.

  Remarquez  que certains programmes peuvent se plaindrent si le systeme
  saute plus d'une seconde a la fois, ou s'il  retranche  du  temps.  Si
  vous  avez  ce  probleme,  vous  pouvez utiliser xntpd ou ntpdate pour
  corriger le temps plus graduellement.

  2.3.

  Exemple

  2.3.1.

  Mettre a jour le temps

  Se connecter root. Appeler  le  3699  (vocal),  ecouter  l'annonce  de
  l'heure.  Puis taper:

                date -s hh:mm:ss

  Mais  ne  tapez  Entree que lorsque vous entendez le bip. (vous pouvez
  utiliser  'ntpdate'  ici  plutot  que  'date',   et   eviter   l'appel
  telephonique).  Cela met a jour le 'temps noyau'. Puis taper :

              clock -w

  Cela met a jour l'horloge CMOS pour correspondre au temps noyau.  Puis
  taper:

              date +%j

  (ou 'date +%s' si vous  utilisez  'ntpdate',  plutot  que  'date'  ci-
  dessus) et ecrire le nombre qu'il vous donne pour la prochaine fois.

  2.3.2.

  Pour remettre a jour le temps et verifier le taux de derive

  Trouver la date que vous avez ecrit la  derniere  fois.  Se  connecter
  root puis taper:
                  clock -a

  Cela  met  a  jour  le temps noyau qui correspond ainsi au temps CMOS.
  Appeler le 3699 (vocal), ecouter l'annonce. Puis taper :

                  date

  et appuyer sur Entree quand vous entendez le signal sonore, mais alors
  que  vous  attendez,  notez  le temps annonce, et ne raccrochez pas de
  suite. Cela vous dit a quel temps votre machine  pensait  etre,  quand
  cela aurait du etre exact a la minute. Maintenant entrez :

                  date hh:mm:00

  utilisant  la minute *apres* celle qui vient juste d'etre annoncee, et
  appuyez sur entree quand vous entendez  le  signal  sonore  a  nouveau
  (maintenant  vous pouvez raccrocher). Pour hh utiliser le temps local.
  Cela met a jour le 'temps noyau'.

  Puis taper :

                   clock -w

  qui ecrit le nouveau (correct) temps dans l'horloge CMOS.   Maintenant
  tapez :

                   date +%j

  (ou 'date +%s' si c'est ce que vous avez utilise avant).

  Vous  avez maintenant trois nombres (deux dates et une heure) qui vont
  vous permettre de calculer la derive de temps.

  2.3.3.

  Calculer le facteur de correction

  quand vous executez 'date' a l'instant, est-ce que votre machine etait
  en  avance  ou  en  retard ? Si elle avancait, vous aurez a retrancher
  quelques secondes, alors ecrivez le comme un nombre negatif.  Si  elle
  retardait,  vous  aurez  a ajouter quelques secondes, alors ecrivez le
  comme positif.

  Maintenant soustrayez les deux dates. Si vous avez utilise 'date +%j',
  les  nombres representent le jour de l'annee (1-365, ou 1-366 pour les
  annees bissextiles).  Si vous avez passe le 1er janvier  depuis  votre
  derniere  modification  horaire  vous  aurez a ajouter 365 (ou 366) au
  deuxieme nombre. Si vous avez utilise 'date +%s'  alors  votre  nombre
  est en secondes, et vous aurez a le diviser par 86400 pour obtenir des
  jours.

  Si vous avez deja un facteur de  correction  dans  /etc/adjtime,  vous
  aurez a tenir compte du nombre de secondes que vous avez deja corrige.
  Si vous avez trop corrige, ce nombre aura le signe oppose a celui  que
  vous  venez juste de mesurer; si vous n'avez pas assez corrige il aura
  le meme signe.  Multipliez  l'ancien  facteur  de  correction  par  le
  nombre  de  jour,  et  ensuite  ajouter  le nouveau nombre de secondes
  (addition signee  -- si les deux  nombres  ont  le  meme  signe,  vous
  obtiendrez  un  nombre  plus  grand, s'ils ont des signes opposes vous
  aurez un nombre plus petit).

  Puis divisez le nombre total de secondes par le nombre de  jours  pour
  obtenir   le   nouveau  facteur  de  correction,  et  le  mettre  dans
  /etc/adjtime a la place de l'ancien. Conservez la  nouvelle  date  (en
  secondes par jour) pour la prochaine fois.

  Voici a quoi ressemble mon /etc/adjtime :

                   -9.600000 845082716 -0.250655

  Note  (on  remarque  que 9.6 secondes par jour c'est presque 5 minutes
  par mois !)

  2.4.

  Quelques mots a propos de xntpd

  Votre systeme a en fait deux horloges  --  l'horloge  temps  reel  sur
  batterie  qui  garde trace du temps quand le systeme est eteint (aussi
  connue  comme "l'horloge CMOS", "horloge materielle" ou "RTC")  et  le
  'temps  noyau'  (parfois  appellee  "horloge  logicielle"  ou "horloge
  systeme") qui est base sur l'interruption timer et qui est initialisee
  a  partir  de  l'horloge  CMOS au demarrage du systeme.  Les deux vont
  deriver a des  rythmes  differents,  ainsi  elles  vont  graduellement
  s'ecarter l'une de l'autre, tout en s'ecartant du temps 'reel'.

  Toutes  les references a "l'horloge" dans la documentation de xntpd se
  referent a "l'horloge noyau". Quand vous executez xntpd ou  timed  (ou
  n'importe  quel autre programme qui utilise l'appel systeme adjtimex),
  le noyau linux suppose que l'horloge du noyau  est  plus  precise  que
  l'horloge CMOS, et remets a jour le temps CMOS toutes les 11 minutes a
  partir de ce moment (jusqu'a ce que l'on relance  l'ordinateur).  Cela
  signifie  que  'clock' ne sais plus quand l'horloge CMOS a ete modifie
  la derniere fois, ainsi vous ne pouvez plus  utiliser  le  facteur  de
  correction  dans /etc/adjtime. Vous pouvez utiliser ntpdate dans votre
  fichier de demarrage pour  mettre  a  jour  initialement  l'horloge  a
  partir d'un serveur de temps avant de lancer xntpd. Si vous n'avez pas
  toujours acces a une source fiable de  temps  lors  de  l'allumage  de
  l'ordinateur, cela peut etre un peu genant -- xntpd n'est pas vraiment
  concu pour etre utilise dans des situations comme celles la.

  Xntpd inclue des drivers pour plusieurs horloges radio, et  peut  etre
  configure  pour appeler le service de temps telephonique de NIST a des
  temps reguliers (soyez sur de calculer l'incidence sur  votre  facture
  telephonique  lors  du parametrage de l'intervalle entre deux appels).
  Il peut aussi appliquer un facteur de  correction  a  l'horloge  noyau
  s'il  perd  contact  avec les autres sources pour une periode de temps
  assez longue.

  La plupart des  horloges  radio  coutent  3-4000$,  mais  vous  pouvez
  obtenir  des plans pour une 'boite gadget' peu chere (en fait un modem
  300 baud) qui se met entre votre ordinateur et n'importe quelle  radio
  onde  courte  reglee  sur  la  station  de  temps canadienne CHU (voir
  <ftp://ftp.udel.edu/pub/ntp/gadget.tar.Z>). Le recepteur Heathkit  WWV
  ("l'Horloge  la  Plus  Precise") est aussi encore disponible (bien que
  n'etant pas en kit), et coute aux environs de 4-500 $. Les signaux GPS
  contiennent  aussi  des  informations de temps, et quelques recepteurs
  GPS peuvent se connecter sur le port serie. Cela peut etre la solution
  la moins onereuse dans un futur proche.

  En  theorie,  on  peut ecrire un programme pour utiliser le service de
  temps telephonique NIST  pour  calculer  automatiquement  le  taux  de
  derive  de  l'horloge  CMOS  et  de l'horloge noyau. Je ne suis pas au
  courant d'un quelconque programme  demon  qui  ferait  cela,  mais  la
  plupart du code peut etre emprunte a xntpd.

