2015-11-26 9 views
7

How to Correct TimezoneCome correggere l'orologio di sistema nel vagabondo automaticamente

L'ultima volta, ho capito come regolare un orologio di sistema nel server di vagabondo. Tuttavia, quando fermo il vagabondo e lo avvio di nuovo, l'orologio di sistema è sempre in ritardo di 9 ore. Posso regolare usando il comando ntp manualmente, ma mi piacerebbe sapere come regolare automaticamente l'orologio di sistema.

Ho provato il seguente, ma ancora non funziona. Ci sono dei suggerimenti?

How to sync time on host wake-up within VirtualBox?

risposta

17

Il metodo che uso e che non dovrebbe essere provider specifico è quello di aggiungere il seguente nel mio Vagrantfile

config.vm.provision :shell, :inline => "sudo rm /etc/localtime && sudo ln -s /usr/share/zoneinfo/Europe/Paris /etc/localtime", run: "always" 

si avrebbe bisogno di sostituire '/ Europe/Paris' con il fuso orario si desidera impostare

+0

Dopo corrispondenza della versione di guest addtion, funziona perfettamente. (Non riesco a vedere chiaramente se il disallineamento della versione è davvero importante per questo problema) Penso che dovrei imparare il rubino se continuerò a usare vagabondo. Grazie mille! – Sho

+0

@Sho: puoi anche usare vagabondo con script di provisioning di shell o scrivendoli con pupazzo o cuoco. non sei obbligato a usare il rubino. Sono abbastanza soddisfatto del provisioning di shell. – Sharpy35

3

Un po 'migliorata versione che rileva automaticamente fuso orario:

La porzione di rilevamento automatico è venuto dal here.

Vagrant.configure("2") do |config| 
    require 'time' 
    offset = ((Time.zone_offset(Time.now.zone)/60)/60) 
    timezone_suffix = offset >= 0 ? "+#{offset.to_s}" : "#{offset.to_s}" 
    timezone = 'Etc/GMT' + timezone_suffix 
    config.vm.provision :shell, :inline => "sudo rm /etc/localtime && sudo ln -s /usr/share/zoneinfo/" + timezone + " /etc/localtime", run: "always" 
end 
0

L'ora del mio SO Vagrant Guest non era sincronizzata entro 7 giorni. I metodi di cui sopra non hanno funzionato per me, poiché le aggiunte Guest e ntp non erano installate nel mio computer Guest.

ho finalmente risolto il problema utilizzando l'hack da https://askubuntu.com/a/683136/119371

cfg.vm.provision "shell", inline: "date -s \"$(wget -qSO- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f5-8)Z\"", run: "always", privileged: true, upload_path: "/home/vagrant/tmp/vagrant-shell" 

Il metodo di cui sopra non sincronizzare il tempo di sistema operativo guest con la macchina host o qualsiasi server NTP. Invia una richiesta HTTP a google.com e aggiorna l'ora del sistema con il tempo nel campo dell'intestazione della risposta HTTP.

Quindi, a seconda della velocità e della latenza della connessione a Internet, il tempo aggiornato potrebbe essere ridotto di alcuni millisecondi a pochi secondi (in genere < 100 ms). Ma non dovrebbe importare nella maggior parte dei casi.

In seguito è la versione curl, se non si desidera utilizzare wget per qualsiasi motivo

cfg.vm.provision "shell", inline: "date -s \"$(curl -I google.com 2>&1 | grep Date: | cut -d' ' -f3-6)Z\"" 
3

risposta accettato non è abbastanza robusto, in quanto non tiene conto delle persone che viaggiano tra i fusi orari, e richiede gli utenti finali modificano Vagrantfile invece di fare semplicemente vagrant up.

Basandosi sulla risposta di Scott P., ecco una soluzione più flessibile che corrisponde automaticamente al fuso orario della VM al tz dell'host. C'è un errore di battitura/errore nella selezione del fuso orario Etc/GMT del suo frammento, come da POSIX GMT + 7 set orologio 7 ore dietro (vedi Wiki explanation), quindi abbiamo bisogno di scambiare offset:

Vagrant.configure("2") do |config| 
require 'time' 
offset = ((Time.zone_offset(Time.now.zone)/60)/60) 
timezone_suffix = offset >= 0 ? "-#{offset.to_s}" : "+#{offset.to_s}" 
timezone = 'Etc/GMT' + timezone_suffix 
config.vm.provision :shell, :inline => "sudo rm /etc/localtime && sudo ln -s /usr/share/zoneinfo/" + timezone + " /etc/localtime", run: "always" 
end 
Problemi correlati