Yuichiro_S の Twitterでは文字数が足りないもの

Twitterに書くには向いてないことを書きます。文字数制限だとか、検索に引っかからないだとか、流れてしまって読んでもらえないだとか。

OS X 10.9.4 Mavericksで時計がズレる; ntpdが正常に動作しない

めちゃくちゃ時計ズレるんですよね。
環境設定からntp使うチェックボックスをトグルすると時計合うんですが、めんどくさすぎる。

結論を一番最初に書きます。 私の環境では、pacemakerを無効化して、MacPortsからインストールしたntpdに入れ替えることで解決しました。

Apple純正ntpdのpoll間隔を変更して対処している方へ
64秒に1回のペースでntpサーバにアクセスしている可能性が高いです。サーバに無用な負荷をかけることになります。他の解決手段をおすすめします。


さて、詳細です。

時計ズレるとぼやいていたら、これを教えてもらいました。
OS X MavericksではNTPサーバーとの同期が出来ず、時間がずれる不具合がある?

まったく同期されなくなるらしいです。

たしかにntpqで見るとoffset 1200、jitter 400とかなってて明らかにおかしい。
jitterよりもoffsetのほうが大きい時点で何もかもがおかしい。

あ、ntpについてあまり知らなくて記事の意味がわからないようでしたらNTP設定 - とあるSIerの憂鬱 を読むといいと思います。

とりあえず一番お手軽そうな解決方法:/etc/ntp.confにminpoll 6 maxpoll 10を設定する
OS X MavericksではNTPサーバーとの同期が出来ず、時間がずれる不具合がある?に書いてあったやつです。

とりあえず時計はズレなくなりました。
しかし、少ししてから気付きました。
時計が安定したらpoll間隔が2^10秒になるはずなのですが、2^6秒のまま。
64秒に1回アクセスしてたらさすがに迷惑ですよね。
そもそも、offsetとjitterがともに300くらいでまぁまぁおかしい。

このあたりでntpdまわりを入れ替えないと解決しないことに気付きました。

そこで、MacPortsからntpd入れてみました。

/usr/libexec/ntpd-wrapperを編集してportsのntpdを起動するようにします。

exec /opt/local/bin/ntpd -p /var/run/ntpd.pid
#exec /usr/sbin/ntpd -c /private/etc/ntp-restrict.conf -n -g -p /var/run/ntpd.pid -f /var/db/ntp.drift

portsのntpdはAppleのntpdと設定ファイルが違うので/etc/ntpd.confを編集します。
デフォルトだと、ntpd.confにはserver行だけあってdriftfileの記述はなく、restrictの記述はntp-restrict.confにあります。

server ntp.nict.jp 
server ntp.nict.jp 
server ntp.nict.jp
server ntp1.jst.mfeed.ad.jp
server ntp2.jst.mfeed.ad.jp
server ntp3.jst.mfeed.ad.jp
server s2csntp.miz.nao.ac.jp

driftfile /var/db/ntp.drift

restrict default nomodify nopeer noquery limited kod
restrict 127.0.0.1

動いてはいるようだがoffsetとjitterの数字が明らかにおかしい(300くらい)。

このあたりでもっと根本的な問題だと気付きました。

そこかしこにpacemakerが新しく入ったせいだと書いてあります。

ntp time drift mavericks | Apple Support Communities
を見るとpacemaker殺してMountain LionのntpdをTime Machineから発掘せよとか書いてあります。

pacemakerとはなんぞや。
pacemaker(8) Mac OS X Manual Page

"pacemaker adjusts the system clock periodically to compensate for clock drift. The clock drift is nor-mally normalmally computed by ntpd(8), which writes a clock drift value in /var/db/ntp.drift."

ntpdのドリフトに比べてなにが優れているのかまったくわからないわけです。
ドリフトというのは、ntpサーバと比べてるうちにシステムクロックのズレ方が分かるのであらかじめ自分で調整することなんですが(1日に3秒進むと分かっていれば3秒遅らせればいい)、もともとntpdについてる機能なのになぜ分けたのか……

仕方がないのでpacemakerを殺します。 ntp time drift mavericks | Apple Support Communitiesによれば /System/Library/LaunchDaemons/com.apple.pacemaker.plistを削除すればOKです。

これで、portsのntpdがまともに動くようになりました。offset jitter ともに 10ms以下です。 スリープしてレジュームすると一時的にjitterが500msくらいになりますけど。

ちなみに、portsのntpqはntpq -4してIPv4で使わないとなぜかconnection refusedになります。 ntp.confにいろいろな書き方でrestrict ::1に類することを書いたのですが……


蛇足:
ところで、pacemakerを殺したらレジューム時に1分近く固まるのが治ったんですけど、なんなんですかね。