SSブログ

adjtimexもntpdも使えねーと思ったのは私だけではなかった [プログラム]

マザーボードによっては水晶の周波数の精度が非常に悪く、linuxの時計が非常に不正確になります。
私の使っているマザーボードでは、なんと1時間あたり1秒以上ずれてしまうので、頻繁に時計合わせを行なわなければなりません。そこで、インターネット上のntpサーバを使って合わせるようにしました。
しかしながら、このマシン、夜中はネットワークが切られてしまい、ntpサーバに接続できなくなってしまいます。その結果、平日は毎朝8秒以上ものずれが、さらに、月曜の朝には1分ものずれが生じています。

なんとかしなければなりません。

水晶自体のずれに対しては、adjtimexを使って「無理矢理」合わせ込む手法があります。
しかしながら、adjtimexは諸刃の剣で、もし、ずれの計測に失敗してしまうと、時計がさらにひどくずれていく、のです。ずれの計測はdebianではわずか2分程度で、当然のことながら、それはかなり不正確でやはり手動で調整しなければなりません。私のマシンでは、実際0.01%のずれの測定に失敗し、10%と設定されてしまい、1分で6秒もずれるという、どうにもならない事態になりました。しかも、その原因がわからず、1か月近くもその状態で運用されていたという…
さらに、aptでupgradeされたときに、再び「ずれの計測」が行なわれて設定されてしまうかもしれません。holdしておくのも手ですが、holdしたのを忘れると、他がupgradeされたとき、ふいに動かなくなることがあるかもしれません。

余談ですが、時刻合わせはntpdateをcronで動かすようにしています。ntpdでないのは、ntpdが『私にとって「使えねー」』からです。ntpdは常時運転で多くのホストにサービスするためのものでしょう。パーソナル向きではないのです。本当は、このマシンをローカルのntpサーバにしたいのですが、パーソナル向きのntpdがないので、それもあきらめていました。

しかしながら、世の中には、私が不便で「使えねー」と思ったのと同じように思っている人が少なからずいるようです。そして、彼等は使えるものを自分でつくり出してしまいました。

それが、chronyです。まだ、日本語記事がほとんどありませんが、「こいつはすごい」です。
adjtimexとntpdがほぼ全自動で動作します。「使えねー」2つのプログラムは捨てて、使えるchronyに乗り換えましょう。


まず、adjtimexを捨てます。ずれを正確に設定していたのなら、--purgeは付けない方がいいでしょう。また、ntpdをインストールしていたら、それも捨てましょう。
apt-get remove --purge adjtimex
次にchronyをインストールします。
apt-get install chrony
設定ファイルを修正します。
/etc/chrony/chrony.confを修正します。
項目をざっと眺めて、私のところでは、以下のところを修正しました。なんか、全自動で調整してくるようなので、設定の修正はごくごくわずかです。

問合せ先ntpサーバの設定部分:
-server 0.debian.pool.ntp.org offline minpoll 8
-server 1.debian.pool.ntp.org offline minpoll 8
-server 2.debian.pool.ntp.org offline minpoll 8
-server 3.debian.pool.ntp.org offline minpoll 8
+# minpoll, maxpoll, always-online(even if offline) change
+server 0.debian.pool.ntp.org minpoll 10 maxpoll 14
+server 1.debian.pool.ntp.org minpoll 10 maxpoll 14
+server 2.debian.pool.ntp.org minpoll 10 maxpoll 14
+server 3.debian.pool.ntp.org minpoll 10 maxpoll 14
minpollとmaxpollを変更しました。数値は、2のべき乗の指数で指定します。サーバに問い合わせるための間隔です。minpoll 10なので、2の10乗=1024秒=約17分ごとにサーバに問い合わせます。maxpollのデフォルトが10ですので、こちらも修正し、maxpoll 14、つまり、2の14乗=約4時間半としまいsた。
offlineを削除しました。でないと、chronycを使ってonlineにしないと、サーバに問い合わせません(/etc/init.d/chronyを参照のこと)。online/offlineの制御が面倒なので(自分でスクリプトを書かなければならない)、常にonlineとしてしまいました。

ローカルからのntpの問い合わせを許可する部分:
+allow 127/8
プライベートIPからの問い合わせは許可していますが、loopbackからの問い合わせは許可していません。なので、追加しました。意味があるかどうかは別の話ですが、私はテスト用に使いました。これで、ntpdate -qu 127.0.0.1が動作するようになります。

設定を修正したら、chronydの再起動です。/etc/init.d/chrony restartしろと書かれていますが、私は、
/etc/init.d/chrony stop
sleep 10
/etc/init.d/chrony start
をお勧めします。

これで、ずれた時間ともおさらばです。ローカルのntpサーバにもなります。すばらしいプログラムです。chronyの作者に感謝。

共通テーマ:パソコン・インターネット

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。