Heure correcte dans une VM Linux dans Hyper-V : la fin

Suite et fin de ce sujet : soit un Linux non supporté par Hyper-V, donc sans Integration Components pour le maintenir à l'heure. Comment faire en sorte que son horloge ne dérive pas trop dans le temps ? J'ai deux VM dans ce cas à la maison : une Debian 4.0r3 sans interface graphique très peu chargée (en fait ce n'est qu'une passerelle SSH) et une Ubuntu LTS Server 8.04 un peu plus sollicitée, puisqu'elle héberge toute la pile LAMP (Apache, MySQL, PHP). Le premier constat est que la seconde dérive beaucoup plus rapidement que la première. Mais l'application qu'elle héberge nécessite une horloge relativement fiable.

Comme souvent, la solution est extrêmement simple. Il s'agit simplement de remettre la machine à l'heure régulièrement. Dans mon cas, une fois par jour suffit amplement. Comme vu dans les articles précédents, le démon ntpd n'est pas adapté à l'environnement virtuel, et l'option clock=pit est nécessaire sur les noyaux récents. D'autre part vsntp est une possibilité mais il y a plus simple "dans la boîte", comme indiqué ci-dessous. Ces instructions doivent être réalisées dans le contexte de root : dans Ubuntu, utilisez la commande sudo -s pour obtenir un shell dans le contexte de root.

Rappel : mon expérience se limite à Debian et Ubuntu.

Etape 1 : option clock=pit

il faut ajouter l'option clock=pit dans le fichier /boot/grub/menu.lst, à la fin de la ligne kernel par défaut. Il s'agit de la première ligne kernel suivant la ligne ## ## End Default Options ##. Exemple :

## ## End Default Options ##

title           Ubuntu 8.04, kernel 2.6.24-18-server
root            (hd0,0)
kernel          /boot/vmlinuz-2.6.24-18-server root=UUID=d2cd13e1-bc9e-4657-86eb-26f150b41aaf ro quiet splash clock=pit
initrd          /boot/initrd.img-2.6.24-18-server
quiet

Remarque : si, lors de l'installation de mises à jour, le noyau est mis à jour, alors il faut réappliquer cette modification au fichier menu.lst.

Etape 2 : programmer une mise à l'heure quotidienne avec ntpdate

Vérifier ou installer ntpdate :

# apt-get install ntpdate

Vérifier que ntpdate fonctionne comme prévu et remet votre système à l'heure :

# ntpdate fr.pool.ntp.org

Créer un fichier /etc/cron.daily/ntpdate contenant les lignes suivantes :

#!/bin/sh

/usr/sbin/ntpdate fr.pool.ntp.org

Ajouter à ce fichier l'attribut exécutable :

# chmod a+x /etc/cron.daily/ntpdate

Dans mon exemple, j'utilise fr.pool.ntp.org comme nom de serveur NTP, qui donne en réalité un serveur parmi un pool de serveurs français (voir https://www.pool.ntp.org/ pour plus d'infos). Vous pouvez bien sûr le remplacer par celui qui vous ira le mieux.

Terminé ! Reste à vérifier de temps à autre que l'heure est correcte (attention, la commande est date, pas time comme sous Windows.) Et de toutes manières, vous mettez à jour vos systèmes (apt-get update et apt-get dist-upgrade sont vos amis), donc vous redémarrez régulièrement vos Linux à cause des mises à jour du noyau, parce que vous vous souciez plus de votre sécurité que de votre uptime. Non ?