Résumé:
Cet article explique rapidement comment démarrer un lot de machines virtuelles à une même date passée, et les empêcher de se synchroniser via NTP.
Ceci afin de disposer d'un environnement de Lab toujours fonctionnel lorsqu'on a enregistré des licences temporaires de POC pour des produits commerciaux.
Contexte:
Environnement Qemu/KVM (libvirt), machines virtuelles Windows Server, Linux Ubuntu, CentOS/RHEL.
Pour désactiver complètement la synchronisation NTP sur une machine Ubuntu:
timedatectl set-ntp false
systemctl stop systemd-timesyncd
systemctl disable systemd-timesyncd
systemctl mask systemd-timesyncd
Sur CentOS (ou sur Ubuntu s'il utilise chronyd):
systemctl stop chronyd
systemctl disable chronyd
systemctl mask chronyd
Pour les Linux plus anciens qui utilisent ntpd:
systemctl stop ntp
systemctl disable ntp
systemctl mask ntp
systemctl mask empêche le démarrage des services, même manuellement
(le fichier du service est remplacé par un lien vers /dev/null).
Désactiver le service de synchronisation NTP du système, W32Time:
sc stop w32time
sc config w32time start= disabled
Vérifier qu'il n'y a pas de synchronisation du temps par les guest tools (qemu-guest-agent, SPICE guest tools).
Créer un script destiné à s'assurer que même si Windows a récupéré une heure différente pendant le boot, elle sera remise à la valeur voulue.
Exemple (remplacer 2011-11-11 11:11:00 par la date et l'heure souhaitées):
c:\setdate.bat
$date = Get-Date "2011-11-11 11:11:00"
Set-Date $date
Ajouter ce script dans le scheduler, au démarrage:
schtasks /create /tn "Set Date" /tr c:\setdate.bat /sc onstart /ru SYSTEM
Lancer secpol.msc
Editer le fichier C:\Windows\System32\drivers\etc\hosts et ajouter une ligne:
192.168.99.99 time.windows.com
(Remplacer l'adresse IP par une adresse inexistante ou injoignable)
Editer le fichier XML de chaque VM. En début de fichier, remplacer:
<domain type='kvm'>
Par:
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
A la fin du XML:
<qemu:commandline>
<qemu:arg value='-rtc'/>
<qemu:arg value='base=2011-11-11T11:11:00'/>
</qemu:commandline>
Dans cet exemple la date fixée au démarrage sera 11/11/2011 et l'heure 11:11:00.
Remplacer le timestamp par la valeur souhaitée, en pensant à rester cohérent avec le timestamp défini côté système dans le script setdate.bat.
Pour que toutes les machines virtuelles d'un même lot devant démarrer à une même date fictive arbitraire ne soient pas décalées temporellement entre elles, éviter de les démarrer manuellement. Utiliser plutôt un script de gestion du démarrage qui effectue les actions pour toutes les VM en même temps.
Exemple:
$ vi start_env.sh
#!/bin/bash
/usr/bin/virsh start machine1 &
/usr/bin/virsh start machine2 &
/usr/bin/virsh start machine3 &
--
TG - 07/2026