VagrantfileでVirtualBoxのホスト時刻同期を明示的に有効にする

  • Vagrant
  • VirtualBox

この記事は、構成と文章の整理にAIを使っています。
あくまで読みやすくするための補助で、内容そのものをAIにすべて任せて書いているわけではありませんが、ところどころ相談しながら整えています。

以下のようなVagrantfileの設定を見る機会があった。

config.vm.provider :virtualbox do |vb|
# メモリサイズ
vb.memory = "2048"
# 時刻同期
vb.customize ["setextradata", :id, "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled", 0]
end

ホスト時刻同期を有効にする設定

GetHostTimeDisabled はVirtualBoxのVMMDev拡張データで、Guest Additionsによるホスト時刻との定期同期を制御するフラグ。

  • 1 : ホスト時刻同期を無効化する
  • 0 : ホスト時刻同期を有効にする(デフォルトもこの値)

なのでこのVagrantfileの1行は、「ゲストOSの時刻をホストOSと定期的に同期させる」設定になる。デフォルト値と同じではあるものの、明示的に書いておくことで意図がコードから読み取れるようになる。チーム開発でVagrantfileを共有する場合、他の場所(グローバル設定やbase box側)でこの値を上書きしていないかを確認する目的も兼ねられる。

書き方は setextradata サブコマンドでキーに VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled を指定し、値に 0 を渡すだけ。vb.customize は VBoxManage コマンドをそのまま呼び出すラッパーなので、同じことをCLIから行う場合は以下と同義になる。

VBoxManage setextradata <VM名> "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" 0

この拡張データは公式リファレンスでの記載が薄いオプションで、Guest Additionsのバージョンによって挙動が変わる可能性がある。確実に同期されているか確認したい場合は、VM起動後にゲスト側で date コマンドなどを使って実際の時刻がホストと合っているか見ておいたほうがいい(実機未確認)。