Création d’une mise à jour personnalisée de tzdata sous Debian Squeeze

Voici un mini-tutoriel du type pense-bête concernant la création d’une mise à jour de la base tzdata pour Debian.

Pour rappel, la base de données tzdata est le référentiel ‘mondial’ concernant les décalages horaires (horaires d’été / horaires d’hiver) ainsi que bien entendu des décalages entre fuseaux horaires. Cette base est utilisée pratiquement par tout système d’exploitation (hormis Windows).

Il est important que votre ordinateur (ou serveur) soit à jour concernant cette base. En effet, cela aide par exemple lorsque vous recevez une demande de réunion de quelqu’un qui n’est pas dans le même fuseau horaire que vous (genre Maroc / France), ou bien dans le monde des serveurs pour l’aspect corrélation des journaux.

Toujours est-il, ici au Maroc, les dates de début et fin de l’horaire d’été sont plus ou moins décidées chaque année quelques jours avant. Il est assez difficile d’avoir le paquetage tzdata à jour au moment du passage à l’horaire d’été sur Debian (il y a un délai pour la publication de la mise à jour du tzdata).

Donc, voici ce tutoriel pour faire la petite modification « DST » (Daylight Saving Time ou Horaire d’été) sur le paquetage source tzdata (de Debian) et générer la nouvelle version du .deb.

Se connecter sur son poste (ou une machine virtuelle de « build ») en tant que root, puis exécuter les commandes suivantes :

mkdir tzdata_build
cd tzdata_build/

La commande suivante va récupérer les sources de tzdata et les fichiers associés Debian

apt-get source tzdata

On récupère maintenant les dépendances pour la génération du .deb. (Ne pas s’étonner de voir des choses liées à Java, car la génération tzdata s’occupe aussi du tzdata-java

apt-get build-dep tzdata

Ensuite on décompresse les sources avec cette commande :

dpkg-source -x tzdata_2011n-0squeeze1.dsc

Puis on se place dans les sources :

cd tzdata-2011n/

Ici commence l’étape « sensible », on va ajouter deux lignes, la première pour le début du DST et la seconde pour la fin. J’ai trouvé ce qu’il fallait ajouter niveau Maroc (pour l’année 2012) en parcourant les archives de la liste tzdata.

Donc on fait un petit « vi » sur le fichier « africa » (pour le Maroc) :

vi africa

Voici le diff par rapport à la version actuelle du tzdata de Debian Squeeze :

diff africa.orig africa
2c2
< # @(#)africa 8.33
---
> # @(#)africa 8.34
795a796,797
> Rule Morocco 2012 max - Apr lastSun 2:00 1:00 S
> Rule Morocco 2012 max - Sep lastSun 3:00 0 -

On note que les lignes ajoutées sont sans limite dans le temps (chaque année au dernier dimanche d’avril on ajoute 60 minutes à 02h00 du matin – donc il sera 03h00 – et on retire 60 minutes le dernier dimanche de septembre à 03h00 du matin – donc il sera 02h00 – ).

Par ailleurs, on note aussi que pendant le mois lunaire du Ramadan, le décalage de +1h sera retiré. Malheureusement, la date de début (et de fin) du Ramadan dépendant des observations de la Lune quelques jours (voir la veille) avant pour déclarer son début (idem pour la fin), il faudra donc prévoir 2 mises à jour (une avant le ramadan autour du 20 juillet 2012 et une juste avant la fin du ramadan autour du 18 août 2012)

Il faut également modifier le fichier changelog pour incrémenter le numéro de « sous-version » Debian. Pour cela, éditer le fichier suivant :

vi debian/changelog

Sur la première ligne changer (par exemple) le « squeeze1 » par « squeeze2 », ce qui donne la ligne suivante :

tzdata (2011n-0squeeze2) stable; urgency=low

Bon revenons à la re-génération du tzdata, exécuter la commande suivante pour la lancer :

dpkg-buildpackage -rfakeroot -b

Ensuite, pour installer les mises à jour, exécuter la commande suivante :

dpkg -i ../tzdata_2011d-0squeeze2_all.deb ../tzdata-java_2011d-0squeeze2_all.deb

NB. Le paquetage tzdata-java n’est utile que si vous avez Java sur votre poste de travail ou serveur.

Les nouveaux paquetages sont générés dans le répertoire parent (cd ..), la nomenclature du paquetage tzdata « 2011d-0squeeze2_all » représente une « micro-sous-version » du paquetage. Ainsi lorsque la vrai mise à jour Debian va sortir, celle-ci aura un numéro de version plus important (ex. tzdata_2012b-3squeeze1), et donc votre poste se mettra à jour normalement et remplacera votre version personnalisée.

Voilà.

./