見出し画像

仮想環境での開発中に発生するゲストOSの時刻ズレを自動で修正する

こんにちは。最近SHIFTに入社した三輪です。SHIFT社内のプロダクト開発に従事しております。

SHIFTのプロダクトはマイクロサービスな構成で開発しているため、ローカルに複数のプロダクトを立てるためにVirtualBoxなどで仮想環境を複数用意しています。
認証ではOpenID Connectを利用していますが、認可のために取得したトークンが期限切れとなり使えなくなってしまって、何か設定を間違えたかな…としばらくハマっていました。
原因としてはホストOSとゲストOSの時刻がズレていたことでntpコマンドを打てば直りますが、時刻ズレはゲストがサスペンドすると発生します。
なのでいちいちコマンドを打たなくてもホストとゲストの時刻が同じになるようにしました。


OSの時刻をNTPサーバと同期する

NTP(Network Time Protocol)とは、ネットワーク経由で時刻を合わせるときに使用される通信プロトコルのことです。
ほとんどのPCはこのNTPを使って、自動的にNTPサーバ(時報サーバ)に問い合わせを行い時刻合わせをしています。
今私が使っているWindows PCでもこの自動問い合わせはされており、「w32tm /query /status」コマンドで確認できます。

> w32tm /query /status

閏インジケーター: 0 (警告なし)
階層: 5 (二次参照 - (S)NTP で同期)
精度: -23 (ティックごとに 119.209ns)
ルート遅延: 0.0093480s
ルート分散: 3.7845279s
参照 ID: 0x0ADC010B (ソース IP:  10.220.***.***)
最終正常同期時刻: 2021/12/20 9:07:47
ソース: (ローカルNTPサーバ).shiftinc.jp
ポーリング間隔: 10 (1024s)

10分間隔で問い合わせを行ってくれているようですね。

仮想環境でntpサーバと同期する場合、ntpdateパッケージをインストールする必要があります。(OSはCentOS7)

$ sudo yum install ntpdate
インストール:
  ntpdate.x86_64 0:4.2.6p5-29.el7.centos

完了しました!

$ sudo ntpdate ntp.nict.jp
20 Dec 10:27:39 ntpdate[9532]: step time server 133.243.238.164 offset 4.691048 sec

これでntpを使って時刻合わせが出来るようになりました。

NTPコマンドを定期的に実行する

上の手順で時刻合わせまで出来るようになったので、自動で時刻合わせをしてくれる設定をします。
bashを使っているので、.bashrcにコマンドを仕込んでいきます。

.bash_profileとの違いは実行タイミングで、.bash_profileはログイン時にのみ読み込まれるのに対し、.bashrcはbashコマンド起動時に毎回読み込まれます。
仮想環境を終了させずにPCをサスペンドすることはよくあるので、今回は.bashrcを使うことにしました。
viコマンドで.bashrcを起動し、ntpdateコマンドを仕込みます。
ntpコマンドはroot権限で実行する必要があるためsudoをつけていますが、パスワードを求められなくてもいいように/etc/sudoersで設定をしています。(ローカル環境なのでsudoersを気軽に編集していますが、外部環境では慎重に編集してください!)

# .bashrc

# Set ntpdate automatically
sudo ntpdate ntp.nict.jp

これで完了です。

まとめ

以上でホストOSとゲストOSの時刻を合わせることができました。正確にはホストOSの時刻=ゲストOSの時刻にする設定ではないのですが、開発するうえで両者の時刻をずらす場合もあり得るかなと思ったので、この設定にしておきました。
今回のやり方だとbashコマンドを立ち上げるたびに通信を行うので、コマンド起動が若干遅く感じます。
また時間があれば、.bashrcに設定する以外の方法も記事にしてみたいと思います。

__________________________________

執筆者プロフィール:Taiga Miwa
受託会社で2年ほど勤務し、Railsを使ったWebアプリの新規開発を主に担当。Rails, React, Vue, GraphQLなどモダンな技術を使って開発を行っていた。最近SHIFTにジョインし、アーキテクト目指して修行中。得意技はRubyと魚捌き。

お問合せはお気軽に
https://service.shiftinc.jp/contact/

SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/

SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/

SHIFTの導入事例
https://service.shiftinc.jp/case/

お役立ち資料はこちら
https://service.shiftinc.jp/resources/

SHIFTの採用情報はこちら
https://recruit.shiftinc.jp/career/