[Armadillo:09406] ntpclient で事故
Yasuhisa Nakamura
email@hidden
2014年 1月 9日 (木) 02:50:06 JST
中村です。
久しぶりに、不具合+修正情報です。
1月7日の午前8時ころ、同じソフトを入れている数10台の
Armadillo-420うちの10数台のシステムクロックが一斉に
2036.2.7になってしまった、という報告を受けました。
ntpclinetを使って1時間に1回、ntp.nict.go.jpで
時刻合わせをしています。
調べてみると、どうやらこれ↓が原因のようです。
http://www2.nict.go.jp/aeri/sts/tsp/PubNtp/qa.html#q4-2
[Q.4-2] 2036年2月7日になってしまった
[A.4-2]
本NTPサーバは起動時に、NTP時刻をゼロリセットしますが、
NTP時刻で「ゼロ」とは1900年1月1日 0:00:00 (UTC)を表します。
この時、クライアントによっては、32ビット整数値の最大値42億
9496万7295秒後(2036年2月7日 6時28分15秒 (UTC))の次の秒として
扱うものもあります。しかし、本サーバでは、正しい時刻を設定
するまでは、Stratum=0 (unspecified or invalid) としてサーバ
応答しますので、Stratumも併せて参照してください。
ntpclinetのソースを見ると、Stratum値のチェックをせずに
システムクロックを書き換えています。
実際のNTPサーバでの再現試験は無理ですが、ntpclientのソースを
いじって受信した時刻を0(ゼロ)にしてみたところ、システム
クロックが2036年2月7日 6時28分16秒になってしまいました。
とりあえず、システムクロックを書き換える前にStratum値が
ゼロでないことをチェックするようなパッチを当てたのですが、
気になったのでntpclientの最新のバージョンを調べてみました。
ソースはここにあります。
http://doolittle.icarus.com/ntpclient/
過去のもおいてあって、
ntpclient_2000_339.tar.gz
ntpclient_2000_338.tar.gz
ntpclient_2000_337.tar.gz
ntpclient_2000_345.tar.gz
ntpclient_2003_194.tar.gz (do not use)
ntpclient_2006_318.tar.gz (do not use)
ntpclient_2007_365.tar.gz
ntpclient_2010_365.tar.gz (current)
atmark-distのものと比較してみると、distに入っているのは
2003年バージョンのようです。
do not use というコメントが・・・・
2003年から順に中身をみていくと、今回問題になった部分は、
2006年版では修正がなされていました。
めったに起きることではないかもしれませんが、
ntpclientを使うアプリを作るときは、2007年版か2010年版に
差し替えることをお勧めします。
(まだ私自身、差し替えはやっていないので、atmark-distで
ビルドできるか、わかりませんけど・・・)
atmark-distの次のリリースで入れ替えてもらえると嬉しいカモ。
#ntpclientなんか使わないでntpdで調整しろって声も聞こえて
#きそうですが、今回はそういう話はナシでお願いしますね。
--
なかむら
armadillo メーリングリストの案内