Mini HOWTO Clock
 Ron  Bean,  Dec. 1996 [email protected] (Adaptation francaise
 par Gacquer frederic [email protected])
 Dec. 1996

 Jeudi 2 avril 1998 V 1.0.

 11..  IInnttrroodduuccttiioonn

 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.)

 _N_o_t_e  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).

 22..  UUttiilliisseerr llee pprrooggrraammmmee ''cclloocckk''

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

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

 22..11..

 VVeerriiffiieerr vvoottrree iinnssttaallllaattiioonn

 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).

 22..22..

 MMeessuurreerr llee ttaauuxx ddee ddeerriivvee tteemmppoorreellllee ddee vvoottrree hhoorrllooggee

 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.

 22..33..

 EExxeemmppllee

 22..33..11..

 MMeettttrree aa jjoouurr llee tteemmppss

 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.

 22..33..22..

 PPoouurr rreemmeettttrree aa jjoouurr llee tteemmppss eett vveerriiffiieerr llee ttaauuxx ddee ddeerriivvee

 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.

 22..33..33..

 CCaallccuulleerr llee ffaacctteeuurr ddee ccoorrrreeccttiioonn

 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

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

 22..44..

 QQuueellqquueess mmoottss aa pprrooppooss ddee xxnnttppdd

 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.