La plupart des ordinateurs basent en effet leur date sur le temps écoulé depuis le 1er janvier 1970. (The UNIX Epoch)
Le temps écoulé étant rarement stocké en décimal, il ne devrait pas trop y avoir de bug à déplorer. KMail est une des rares applications à avoir annoncé un bug pour le 9 septembre (dans une ancienne version).
Les _gros_ problèmes devraient arriver en 2038 quand 32 bits ne seront plus suffisant pour coder le nombre de secondes depuis l'epoch. Le problème est connu depuis longtemps (il est évoqué dans le "Unix Programmer's Manual" de Thompson et Ritchie du 3 novembre 1971), mais quoiqu'on dise ou fasse il restera des machines 32 bits qui mettront la zone en 2038.
Tout bon geek se devant de marquer l'évenement, un fort traffic est à prévoir sur la tribune de LinuxFR dans la nuit de samedi à dimanche. N'oubliez pas vos clients NTP, et bon anniversaire. (Notons que le vrai geek dormira tranquillement pendant que sa machine postera toute seule sur la tribune)
Aller plus loin
- Le bug de KMail (7 clics)
- Unix Programmer's Manual (14 clics)
- Soyez à l'heure avec NTP (3 clics)
# Ca va etre la fete :-)
Posté par swix . Évalué à -1.
Et bonne nouvelle Epoch à vous tous :-)
[^] # Re: Ca va etre la fete :-)
Posté par swix . Évalué à 2.
watch -n 1 'expr 1000000000 - `date -u +%s` | figlet'
[^] # Re: Ca va etre la fete :-)
Posté par Anonyme . Évalué à 0.
[^] # Re: Ca va etre la fete :-)
Posté par Pierre Tramal (site web personnel) . Évalué à 2.
while [ true ]; do; sleep 1; echo $((1000000000 - `date +%s`)); done
[^] # Re: Ca va etre la fete :-)
Posté par Pierre Tramal (site web personnel) . Évalué à 3.
while [ true ]; do sleep 1; echo $((1000000000 - `date +%s`)); done
# 2038
Posté par gle . Évalué à 8.
Enfin, ce n'est pas tellement l'architecture 32 bits du microprocesseur qui est en cause, mais plutôt la taille des champs dans les structures du noyau. Si gcc dévide de passer le type long à 64 bits (ce qui est permis par la norme C il me semble), une recompilation suffira à corrier le problème, même sur les processeurs 32 bits.
[^] # Re: 2038
Posté par Wawet76 . Évalué à 1.
[^] # Re: 2038
Posté par Gaël Le Mignot . Évalué à 7.
long est "un entier au moins aussi grand que int".
Il est possible d'avoir un long qui soit beaucoup plus lent, les endroits où la vitesse est importante doivent utiliser int. Le problème est le même que sur les 286 où pour beaucoup de compilateurs int = 16bits et long = 32bits.
D'autant plus que normalement, l'heure n'est stockée que sur des time_t et non des int ou des long. Faire passer time_t à 64-bits ne devrait poser d'énormes problèmes de vitesse (les calculs intensifs sur la date sont très rares).
[^] # Re: 2038
Posté par Wawet76 . Évalué à 1.
Enfin perso, j'utilise java.util.Date et donc ca ne buggera pas tant qu'il y aura quelqu'un pour maintenir une JRE correcte. (Ca devrait même supporter les passages à des calendriers non-grégoriens. Faudrait que je regarde ca tient...)
[^] # Re: 2038
Posté par Anonyme . Évalué à -1.
Merci de donner la référence d'une supposée citation de la norme. Je ne trouve aucune référence à cela dans ISO/IEC 9899:1999 (pour le C). "int" est suffisament grand pour contenir les valeurs comprises entre INT_MIN et INT_MAX,telles définies dans <limits.h> (6.2.5 [#5])
Par contre, il existe bien des types entiers spécifiés tels qu'ils soient les plus rapides ayant au moins une certaine taille. Exemple: int_fast32_t (7.18.1.3). Ce sont des typedefs définis dans <stdint.h>
> Faire passer time_t à 64-bits ne devrait poser d'énormes problèmes de vitesse.
C'est déjà le cas sur certaines architectures. Je pense aux IA-64, Alpha, SPARC V9. Bref, les archis 64-bits quoi. ;-)
[^] # Re: 2038
Posté par Anonyme . Évalué à -1.
Moi j'ai effectivement ca dans le K&R ("Le langage C" par Kernighan & Ritchie), paragraphe 2.2.
Ca n'est pas une norme a proprement parler, mais au moment au ils ont ecrit ce bouquin, le C n'etait pas normalise de toute facon...
[^] # Re: 2038
Posté par Rin Jin (site web personnel) . Évalué à 2.
Il nous ont pété les couilles pour l'an 2000, et il n'y a eu aucun probleme sur les soft récents (enfin je crois, arrétez moi si je me trompe)
[^] # Re: 2038
Posté par Wawet76 . Évalué à 3.
[^] # Re: 2038
Posté par Gaël Le Mignot . Évalué à 3.
[^] # Re: 2038
Posté par gle . Évalué à 2.
En fait, il faidrait juste passer "time_t" en "long long". Maintenant, si les programmeurs sont des porcs et qu'ils ont directement utilisé int, ça leur apprendra. De toute façon, à la compil, on doit pouvoir avoir un warning quand on fait une conversion avec perte, non?
[^] # Re: 2038
Posté par Gaël Le Mignot . Évalué à 5.
Non, beaucoup plus que ça.
Pour une addition il faut additionner deux fois 32 bits, puis gérer l'éventuelle retennue. Pour une multiplication ou une division c'est beaucoup plus compliqué (comme pour multiplier 2 nombres à chiffres... 42 * 51 c'est plus comliqué que de faire 4 * 5 et 2 * 5)
> De toute façon, à la compil, on doit pouvoir avoir un warning quand on fait une conversion avec perte, non?
Je ne connais pas l'option de gcc qui fait ça. :(
# Introduction à NTP
Posté par Wawet76 . Évalué à 10.
1 - Choisir un serveur ntp.
La première chose est de se renseigner auprès de son provider. Nerim fournit ntp.nerim.net pour ses abonnés.
Si votre fournisseur n'a pas de serveur, ecrivez pour lui dire d'en mettre un en place et rabattez vous sur un public en attendant. http://www.eecis.udel.edu/~mills/ntp/clock2.htm(...) pour une liste de serveur (3 sont Francais). N'oubliez pas de lire le champs "Access Policy".
2 - Choisir son client
Deux possibilités : soit vous prenez un petit client qui met le PC à l'heure quand il est lancé (au démarage par exemple), soit lancez le deamon NTP qui corrigera en permanence les écarts de votre horloge et qui pourra servir de serveur pour le reste du réseau si vous avez plusieurs machines.
Pour le client "One shot", ntpdate est très bien.
Installation et conf sur Debian :
- aptget install ntpdate
- mettre l'ip du serveur ntp dans le script /etc/init.d/ntpdate
Si vous utilisez Windows, NTPTime fait le boulot sans girophare ni quoique ce soit.
http://home.att.net/~Tom.Horsley/ntptime.html(...)
- modifier le .reg pour indiquer le serveur et le repertoire de log
- fusionner le .reg (clic-droit, installer)
- WinNT et 2000 : lancer ntptime --install pour le mettre en service
- Win9X : faite un raccourci vers ntptime dans le menu démarrer.
voili voilou.
[^] # Re: Introduction à NTP
Posté par Fabien Penso (site web personnel, Mastodon) . Évalué à -5.
[^] # Re: Introduction à NTP
Posté par Wawet76 . Évalué à 0.
Bref... Ca faisait un peu long pour une news...
[^] # XP et fourberies...
Posté par Beurt . Évalué à 0.
Y'a de plus en plus de commentaires qui ressemblent fortement à des news (avec des URL et tout et tout)...
Ah ben c'est qu'il faut les gagner ces XP ! :o)
[^] # Re: Introduction à NTP
Posté par Wawet76 . Évalué à 2.
Bon en fait cette news est vraiment fourbe, mais pour une autre raison : Je l'ai postée pour montrer que je contribue encore à LinuxFR (alors que ca c'est beaucoup ralenti depuis mon changement de boulot), afin de ne pas paraitre trop boulet dans le mail que je vais envoyer dans quelques minutes pour me plaindre de l'abo à LMF qui n'est toujours pas actif. :D
[^] # Re: Introduction à NTP
Posté par Anonyme . Évalué à -3.
Dis, c'est prévu pour quand la page XP-top50 ?
[^] # Re: Introduction à NTP
Posté par PLuG . Évalué à 9.
Le protocole NTP s'il fontionne effectivement bien avec un seul serveur de référence, est prévu pour en utiliser plutot 3.
Pourquoi 3 ? Parce que avec 3 sources, le daemon NTP peut se rendre compte quand l'un d'eux dévie et ne plus en tenir compte. Ca parait anodin mais j'ai déjà vu des serveur ntp sur internet dévier jusqu'a 30 secondes d'écart ...
Feter la nouvelle epoch 30' trop tard ce serai domage non ?
Quand a l'usage de votre bande passante faite par ntp, ne vous en souciez pas. Ce protocole est vraiment bien étudié. Au lancement le daemon analyse la différence de vitesse entre l'horloge interne de votre serveur et les références, et il envoie des requetes assez fréquentes ... mais ensuite il fait des corrections par lui même et n'envoie des requetes que pour confirmer ses corrections. Si il voit qu'il ne s'est pas trompé, il diminue encore la fréquence des vérifications ... le trafic devient quasiement nul !![ Donc utilisable sur le cable meme avec la limite d'upload]
[^] # Re: Introduction à NTP
Posté par cornofulgur . Évalué à 3.
Il y a du voudou dans ce protocole. ;)
[^] # Re: Introduction à NTP
Posté par Jerome Demeyer . Évalué à 3.
mais il est vrai que l'on n'est pas un milliardième de seconde de précision par le net... mais en a tu besoin ?
Si oui, alors il éxiste des bornes de réception hertzienne du signal de l'horloge atomique de Francfort. C'est plus precis :)
PS : "J'ai survecu au passage du billennium !"
[^] # Re: Introduction à NTP
Posté par cornofulgur . Évalué à 3.
Il est vain d'essayer d'atteindre le Billénnium dans la Tribune. Les photons nous mentent. Les Hertz trichent. Les atomes se moquent de nous. Je vais aller me coucher. ;o)
[^] # Re: Introduction à NTP
Posté par Philippe Martin . Évalué à 2.
Une petite question : j'ai installé ntpd sur un de mes serveurs, mais ntpdate n'arrive pas à se synchroniser dessus. Je suis obligé d'utiliser nettime entre les deux : ntpd se synchro sur un primaire, nettime sur ntpd et ntpdate sur nettime.
[^] # Re: Introduction à NTP
Posté par Anonyme . Évalué à 2.
Installation :
1) Compilez (editez conf-home, puis make setup check) .
2) Lancez sntpclock <ip d'un serveur sntp> | clockadd => votre horloge est à l'heure.
3) Lancez clockspeed &
4) Ajoutez sntpclock <ip> > /usr/local/adjust
Et votre horloge sera toujours à l'heure, meme déconnectée du réseau. clockspeed corrige la déviation de votre horloge.
Attention à bien utiliser le temps atomique international et non le traditionnel et débile UTC. Pour les parisiens, ça revient à faire un ln -s /usr/share/zoninfo/right/Europe/Paris /etc/localtime sous Linux. Sous BSD, allez dans /usr/src/share/zoneinfo puis faites un make -DLEAPSECONDS install .
Vala.
# -46386 timestamps roulaizent :o)
Posté par Anonyme . Évalué à -2.
global $LANG;
$timestamp = mktime(substr($t,8,2),substr($t,10,2),substr($t,12,2),
substr($t,4,2),substr($t,6,2),substr($t,0,4));
+ if (($d = $timestamp-1000000000)<=0) return $d;
C'est rigolo mais ca risque de planter les wmco1nco1n dans la Tribune. =]
# Pour les feignasses...
Posté par Philippe Martin . Évalué à 2.
03 46 09 09 * sleep 38; post.sh Bonne epoch à tous. Que le cul vous pèle et qu\'il vous y pousse des chègues
(C'est une expression bien de chez moi !)
post.sh est disponible chez Marie Moustey, ou à l'adresse http://feloy.free.fr/post.sh(...)
(Merci à gqueri pour ce script).
[^] # Re: Pour les feignasses...
Posté par Philippe Martin . Évalué à 2.
46 03 09 09 *
[^] # Re: Pour les feignasses...
Posté par un nain_connu . Évalué à 2.
[pastis:~] $ at 03:46 tomorrow
warning: commands will be executed using /bin/sh
at> post.sh nioc nioc
at> ^D
[^] # Re: Pour les feignasses...
Posté par falbala . Évalué à 6.
Voilà un truc qui marche :
#!/bin/sh
/usr/bin/nc linuxfr.org 80 << EOF
POST http://linuxfr.org/board/add.php3(...) HTTP/1.0
Host: linuxfr.org
User-Agent: devil from `hostname` with `uname`-`uname -r`
Referer: http://linuxfr.org/news/(...)
Content-Type: application/x-www-form-urlencoded
Content-Length: 29
Connection: close
message=your%20message%20here
EOF
[^] # Re: Pour les feignasses...
Posté par Gael . Évalué à 1.
tu connais beaucoup d'OS avec netcat installé dans /usr/bin ? :)
mon script était écrit pour bash 2.04 qui gère les socket et il marche sous plein d'os
a+, gael
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.