{"id":2570,"date":"2012-06-28T14:43:16","date_gmt":"2012-06-28T13:43:16","guid":{"rendered":"http:\/\/www.blaess.fr\/christophe\/?p=2570"},"modified":"2012-11-30T13:38:20","modified_gmt":"2012-11-30T12:38:20","slug":"une-petite-seconde-de-plus-en-juin","status":"publish","type":"post","link":"https:\/\/www.blaess.fr\/christophe\/2012\/06\/28\/une-petite-seconde-de-plus-en-juin\/","title":{"rendered":"Une petite seconde de plus en juin&#8230;"},"content":{"rendered":"<p style=\"text-align: justify;\"><a href=\"http:\/\/www.blaess.fr\/christophe\/2012\/06\/28\/une-petite-seconde-de-plus-en-juin\/\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright  wp-image-2573\" title=\"Leap-Second\" src=\"http:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2012\/06\/leap-second.png\" alt=\"Leap-Second\" width=\"150\" height=\"150\" \/><\/a>Vous le savez peut-\u00eatre, l&rsquo;<a title=\"Site de l'IERS\" href=\"http:\/\/www.iers.org\">IERS<\/a> (<em>International Earth Rotation and Reference Systems Service<\/em>) a d\u00e9cid\u00e9 d&rsquo;ajouter une <a title=\"&quot;Seconde intercalaire&quot; sur Wikipedia\" href=\"http:\/\/fr.wikipedia.org\/wiki\/Seconde_intercalaire\">seconde intercalaire<\/a> (<em>leap second<\/em>) \u00e0 la fin de la derni\u00e8re minute du mois de juin. Ces secondes, que l&rsquo;on ins\u00e8re tous les deux ou trois ans \u00e0 la fin du mois de d\u00e9cembre ou de juin (la derni\u00e8re date du 31\/12\/2008) servent \u00e0 ajuster l&rsquo;heure officielle avec la rotation de la terre. Cela \u00e0 commenc\u00e9 il y a quarante ans, le 30 juin 1972.<\/p>\n<p style=\"text-align: justify;\">\n<!--more-->\n<\/p>\n<p style=\"text-align: justify;\">Cette seconde est ajout\u00e9e au m\u00eame instant dans le monde entier. Il y aura donc une seconde num\u00e9rot\u00e9e 23:59:60 le 30\/06\/2012 suivant l&rsquo;heure UTC, ce qui se traduira en France par une heure 01:59:60 le dimanche 01\/07\/2012.<\/p>\n<p style=\"text-align: justify;\">Inutile de guetter votre montre num\u00e9rique, votre four \u00e0 micro-ondes ou votre r\u00e9veil-matin, ils n&rsquo;en tiendront tr\u00e8s probablement pas compte (quand \u00e0 la Freebox&#8230; <a title=\"[ACTU] Mais pourquoi la Freebox reste-t-elle \u00e0 l\u2019heure d\u2019hiver&nbsp;?\" href=\"http:\/\/www.blaess.fr\/christophe\/2012\/03\/27\/actu-mais-pourquoi-la-freebox-reste-t-elle-a-l-heure-d-hiver\/\">tout est possible&nbsp;!<\/a>). Votre PC sous Linux en revanche devrait normalement \u00eatre capable d&rsquo;afficher la seconde intercalaire, pourvu qu&rsquo;il soit correctement configur\u00e9. Je ne traite pas de la configuration d&rsquo;un serveur NTP, mais simplement des commandes utilisateur courantes.<\/p>\n<p style=\"text-align: justify;\">Essayons tout d&rsquo;abord de demander \u00e0 la commande <code>date<\/code> d&rsquo;afficher l&rsquo;heure locale correspondant au <em>timestamp<\/em> Unix (nombre de secondes \u00e9coul\u00e9es depuis le 01\/01\/1970) aux alentours de cette seconde. J&rsquo;ai bien s\u00fbr t\u00e2tonn\u00e9 un peu pour trouver la valeur.<\/p>\n<pre>$ <strong>date -d @1341100798<\/strong>\ndimanche 1 juillet 2012, 01:59:58 (UTC+0200)\n$ <strong>date -d @1341100799<\/strong>\ndimanche 1 juillet 2012, 01:59:59 (UTC+0200)\n$ <strong>date -d @1341100800<\/strong>\ndimanche 1 juillet 2012, 02:00:00 (UTC+0200)\n$ <strong>date -d @1341100801<\/strong>\ndimanche 1 juillet 2012, 02:00:01 (UTC+0200)\n$<\/pre>\n<p style=\"text-align: justify;\">Pas de seconde intercalaire en vue. Mon poste de travail est bas\u00e9 sur une distribution Ubuntu 12.04 standard. Il n&rsquo;y a visiblement pas de support pour les <em>leap seconds<\/em>. C&rsquo;est traditionnellement le cas, le <em>timestamp<\/em> est calcul\u00e9 sans tenir compte de ces secondes (ce qui fait qu&rsquo;il est d\u00e9cal\u00e9 d&rsquo;une vingtaine de secondes par rapport \u00e0 une horloge qui aurait r\u00e9ellement compt\u00e9 les secondes \u00e9coul\u00e9es depuis le 01\/01\/1970).<\/p>\n<p style=\"text-align: justify;\">Rien ne nous interdit toutefois d&rsquo;ajouter un petit support pour cette seconde intercalaire \u00e0 venir.<\/p>\n<h1>Compilation d&rsquo;un fichier timezone<\/h1>\n<p style=\"text-align: justify;\">En r\u00e9alit\u00e9, l&rsquo;interpr\u00e9tation de l&rsquo;heure absolue (le <em>timestamp<\/em>) d\u00e9pend d&rsquo;un certain nombre de r\u00e8gles (le fuseau horaire, l&rsquo;heure d&rsquo;\u00e9t\u00e9, etc.) qui sont configur\u00e9es dans des fichiers timezone. Ces fichiers se trouvent dans <code>\/usr\/share\/zoneinfo<\/code>.<\/p>\n<p style=\"text-align: justify;\">Si vous employez comme moi le fuseau <code>Europe\/Paris<\/code> (d\u00e9crit dans le fichier <code>\/etc\/timezone<\/code>), l&rsquo;heure sera interpr\u00e9t\u00e9e suivant les r\u00e8gles d\u00e9crites dans <code>\/usr\/share\/zoneinfo\/Europe\/Paris<\/code>.<\/p>\n<p style=\"text-align: justify;\">Or ce fichier ne connait vraisemblablement pas la seconde intercalaire du mois de juin. Nous pouvons l&rsquo;y ajouter. Malheureusement, le fichier zoneinfo est un fichier binaire, compil\u00e9 \u00e0 partir d&rsquo;une description en clair des r\u00e8gles d&rsquo;interpr\u00e9tation, ceci gr\u00e2ce \u00e0 l&rsquo;utilitaire <code>zic<\/code>.<\/p>\n<p style=\"text-align: justify;\">Pour obtenir le fichier de r\u00e8gles \u00e0 compiler, on peut t\u00e9l\u00e9charger les sources de la Glibc et se rendre dans son sous-r\u00e9pertoire <code>timezone\/<\/code>. On y trouve entre autre le fichier <a title=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2012-06-28\/europe\" href=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2012-06-28\/europe\"><code>europe<\/code><\/a> ainsi qu&rsquo;un fichier <code>leapseconds<\/code>. Celui-ci n&rsquo;est pas pris en compte pour g\u00e9n\u00e9rer les fichiers <code>zoneinfo<\/code> d&rsquo;Ubuntu.<\/p>\n<p style=\"text-align: justify;\">J&rsquo;ai cr\u00e9\u00e9 un petit fichier <a title=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2012-06-28\/leap-second\" href=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2012-06-28\/leap-second\"><code>leap-second<\/code><\/a> qui ne contient que notre seconde intercalaire \u00e0 venir.<\/p>\n<pre>Leap\t2012\tJun\t30\t23:59:60\t+\tS<\/pre>\n<p style=\"text-align: justify;\">Je vais simplement compiler le fichier <code>europe<\/code> avec <code>zic<\/code>, en lui demandant de cr\u00e9er les fichiers dans le r\u00e9pertoire courant et non pas dans <code>\/usr\/share\/zoneinfo<\/code>.<\/p>\n<pre>$ <strong>ls<\/strong>\neurope  leap-second\n$ <strong>\/usr\/sbin\/zic -L leap-second -d . europe<\/strong> \n$ ls\nAfrica  America  Arctic  Asia  Atlantic  CET  EET  europe  Europe  leap-second  MET  WET\n$ <strong>ls -l Europe\/Paris<\/strong> \n-rw-r--r-- 1 cpb cpb 2965 juin  28 15:10 Europe\/Paris\n$<\/pre>\n<h1>Installation<\/h1>\n<p style=\"text-align: justify;\">Nous allons remplacer le fichier <code>Europe\/Paris<\/code> du syst\u00e8me par <a title=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2012-06-28\/Paris\" href=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2012-06-28\/Paris\">le n\u00f4tre<\/a> (apr\u00e8s avoir sauvegard\u00e9 le pr\u00e9c\u00e9dent).<\/p>\n<pre>$ <strong>sudo cp \/usr\/share\/zoneinfo\/Europe\/Paris \/usr\/share\/zoneinfo\/Europe\/Paris-Bkup<\/strong>\n$ <strong>sudo cp .\/Europe\/Paris \/usr\/share\/zoneinfo\/Europe\/Paris<\/strong>\n$<\/pre>\n<p style=\"text-align: justify;\">Il faut alors utiliser le menu syst\u00e8me pour fixer \u00e0 nouveau le fuseau horaire. Ceci a pour effet de copier le fichier <code>zoneinfo<\/code> correspondant (celui que nous venons d&rsquo;installer) dans <code>\/etc\/localtime<\/code>. C&rsquo;est ce dernier fichier qui est en effet consult\u00e9 par la commande <code>date<\/code>, sauf si on fixe explicitement auparavant la variable d&rsquo;environnement <code>TZ<\/code>.<\/p>\n<h1>Essai<\/h1>\n<pre>$ <strong>date -d @1341100798<\/strong>\ndimanche 1 juillet 2012, 01:59:58 (UTC+0200)\n$ <strong>date -d @1341100799<\/strong>\ndimanche 1 juillet 2012, 01:59:59 (UTC+0200)\n$ <strong>date -d @1341100800<\/strong>\ndimanche 1 juillet 2012, 01:59:60 (UTC+0200)\n$ <strong>date -d @1341100801<\/strong>\ndimanche 1 juillet 2012, 02:00:00 (UTC+0200)\n$<\/pre>\n<p style=\"text-align: justify;\">Et oui, \u00e7a fonctionne, nous avons bien une heure <code>01:59:<strong>60<\/strong><\/code>.<\/p>\n<p style=\"text-align: justify;\">Notez que si l&rsquo;on fixe la variable TZ pour utiliser l&rsquo;ancien fichier <code>zoneinfo<\/code>, cela donne:<\/p>\n<pre>$ <strong>export TZ=Europe\/Paris-Bkup<\/strong>\n$ <strong>date -d @1341100799<\/strong>\ndimanche 1 juillet 2012, 01:59:59 (UTC+0200)\n$ <strong>date -d @1341100800<\/strong>\ndimanche 1 juillet 2012, 02:00:00 (UTC+0200)\n$ <strong>date -d @1341100801<\/strong>\ndimanche 1 juillet 2012, 02:00:01 (UTC+0200)\n$<\/pre>\n<h1>Conclusion<\/h1>\n<p style=\"text-align: justify;\">Je ne pense pas \u00eatre devant mon PC \u00e0 deux heures du matin dimanche, mais si c&rsquo;est le cas, je ferai une capture d&rsquo;\u00e9cran, c&rsquo;est promis.<\/p>\n<p style=\"text-align: justify;\">PS: Si vous avez l&rsquo;occasion d&rsquo;observer cette seconde interm\u00e9diaire sur une set-top-box, un r\u00e9cepteur radio ou GPS, un serveur NTP, etc. cela m&rsquo;int\u00e9resse de savoir s&rsquo;ils ont affich\u00e9 <em>01:59:60<\/em> comme nous l&rsquo;avons vu.<\/p>\n<p>&nbsp;<\/p>","protected":false},"excerpt":{"rendered":"<p>Vous le savez peut-&ecirc;tre, l&rsquo;IERS (International Earth Rotation and Reference Systems Service) a d&eacute;cid&eacute; d&rsquo;ajouter une seconde intercalaire (leap second) &agrave; la fin de la derni&egrave;re minute du mois de juin. Ces secondes, que l&rsquo;on ins&egrave;re tous les deux ou trois ans &agrave; la fin du mois de d&eacute;cembre ou de juin (la derni&egrave;re date [&hellip;]<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,8],"tags":[],"class_list":["post-2570","post","type-post","status-publish","format-standard","hentry","category-actualite","category-linux-2"],"_links":{"self":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/2570","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/comments?post=2570"}],"version-history":[{"count":2,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/2570\/revisions"}],"predecessor-version":[{"id":3237,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/2570\/revisions\/3237"}],"wp:attachment":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/media?parent=2570"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/categories?post=2570"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/tags?post=2570"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}