J'utilise une boîte basée sur Ubuntu 12.04 à l'intérieur de Vagrant en utilisant VirtualBox. Jusqu'à présent, tout va bien - sauf une chose:
Supposons que le VM est en cours d'exécution. Ensuite, l'hôte passe en mode veille. Après l'avoir à nouveau réveillé, le VM est toujours en cours d'exécution, mais son l'horloge interne continue là où elle s'est arrêtée lorsque l'hôte est tombé. Cela signifie donc essentiellement: mettre l'hôte en veille pendant 15 minutes, le réveiller à nouveau, puis l'horloge interne de la machine virtuelle a 15 minutes de retard.
Comment puis-je résoudre ce problème (régler l'heure manuellement n'est pas une option pour des raisons évidentes ;-))? Existe-t-il un moyen d'exécuter un script à l'intérieur d'un Vagrant VM chaque fois que le système hôte change son état?
J'ai lu dans la documentation que par défaut les VirtualBox Guest Additions synchronisent l'heure avec l'hôte toutes les 10 secondes. Apparemment, cela ne se produit pas, mais je ne trouve aucun endroit où il est désactivé. Alors des idées?
PS: les compléments invités sont installés et correspondent à la version de VirtualBox utilisée.
La documentation manque ici de détails.
Ce que VirtualBox fait toutes les 10 secondes, ce n'est qu'un léger ajustement (quelque chose comme 0,005 seconde). Ce n'est que lorsque la différence de temps atteint un seuil (20 minutes par défaut) qu'une "vraie" resynchronisation est effectuée.
Vous pouvez réduire le seuil (c'est-à-dire à 10 secondes) avec la commande suivante:
VBoxManage guestproperty set <vm-name> "/VirtualBox/GuestAdd/VBoxService/--timesync-set-threshold" 10000
En résumant les réponses de @zilupe et @Slobodan Kovacevic, la solution consiste à ajouter ce qui suit à Vagrantfile
:
config.vm.provider 'virtualbox' do |vb|
vb.customize [ "guestproperty", "set", :id, "/VirtualBox/GuestAdd/VBoxService/--timesync-set-threshold", 1000 ]
end
Cela synchronisera les horloges à chaque fois que la désynchronisation devient> 1 s (1000 ms)
Je donne une autre solution pour synchroniser l'heure entre l'invité et l'hôte sans installer l'ajout d'invité Virtualbox:
installez ntp sur votre invité, et dé-commentez ces lignes dans /etc/ntp.conf
:
disable auth
broadcastclient
Ensuite, redémarrez ntp
avec service ntp restart
Diffusion active sur votre hôte:
Pour les utilisateurs Linux, modifiez votre /etc/ntp.conf
fichier et configurer la diffusion (vous devez adapter l'IP):
diffuser 192.168.123.255
Pour les utilisateurs de Windows, activez le service " Windows Time ". Vous pouvez alors lire cette page pour le configurer pour diffuser le temps
Ensuite, redémarrez le service de temps sur l'hôte.
Pour que je puisse faire fonctionner la synchronisation temporelle, je devais faire ceci:
vboxmanage setextradata «machine-name» "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" 0
Il active la synchronisation horaire. C'était, pour une raison quelconque, éteint.
J'ai trouvé une solution:
Sudo chmod u+s /usr/sbin/ntpdate
~/.bashrc
: ntpdate -u ntp.ubuntu.com
Après cela, chaque fois que vous vous connectez au système Linux, l'heure sera synchronisée une fois.
vous pouvez installer les ajouts d'invité VirtualBox dans le VM pour synchroniser l'heure automatiquement par VB.