Logo

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.

Côté machines virtuelles (Linux)

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
Note:

systemctl mask empêche le démarrage des services, même manuellement
(le fichier du service est remplacé par un lien vers /dev/null).

Côté machines virtuelles (Windows Server)

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)

Côté hyperviseur

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.

Script de démarrage/arrêt de l'environnement

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

Cet article a été généré par un humain