chrony
この記事は、NTP クライアントとサーバーの代替である、Chrony の設定と起動の方法について記述しています。Chrony はローミングや、ネットワークに接続している時間が限られるシステムに向いています。
目次
インストール
設定
最小限の設定ファイルは以下のようになります (ホストネームの代わりに IP アドレスを使用):
/etc/chrony.conf
server 1.2.3.4 offline server 5.6.7.8 offline server 9.10.11.12 offline driftfile /etc/chrony.drift rtconutc rtcsync
NTP サーバー
まず /etc/chrony.conf
にマシンが同期するサーバーを設定する必要があります。NTP サーバーは strata と呼ばれる多数の階層でクラス分けされています。独立したソースとされるデバイスは stratum 0 ソース、stratum 0 デバイスに直接接続しているサーバーは stratum 1 ソース、stratum 1 ソースに接続しているデバイスは stratum 2 ソースというふうに分類されます。
サーバーの stratum は正確性や信頼性を表しているわけではないことに注意してください。一般的に時刻同期に使われるのは stratum 2 のサーバーです。どのサーバーに接続するのかまだ決めてない場合、pool.ntp.org サーバー (別リンク) を使って一番地理的に近いサーバープールを選んでください。
設定例:
server 0.pool.ntp.org iburst server 1.pool.ntp.org iburst server 2.pool.ntp.org iburst server 3.pool.ntp.org iburst
起動時にコンピュータがインターネットに接続しない場合、offline オプションを使うことが推奨されます。サーバーに接続できるようになるまで chrony に接続を試みないようにすることができます:
server 0.pool.ntp.org offline server 1.pool.ntp.org offline server 2.pool.ntp.org offline server 3.pool.ntp.org offline
接続が確立されるまで DNS 解決は利用できないため、ホストネームのかわりに IP アドレスを使ったり、/etc/hosts
ファイルでホストネームに対して IP アドレスを指定すると良いでしょう。
chronyd にインターネット接続が確立されたことを知らせる
インターネットに接続したら、以下のコマンドを実行:
# chronyc chronyc> online 200 OK chronyc> exit
activity
オプションを使うことで状態を表示できます:
# chronyc activity 200 OK 3 sources online 0 sources offline 0 sources doing burst (return to online) 0 sources doing burst (return to offline) 0 sources with unknown address
コマンドを実行すると Chrony はあらかじめ設定された時刻サーバーに接続して必要であれば時刻を更新します。インターネットに接続しなくなったことを通知するには、以下のコマンドを実行:
# chronyc offline 200 OK # chronyc activity 200 OK 0 sources online 3 sources offline 0 sources doing burst (return to online) 0 sources doing burst (return to offline) 0 sources with unknown address
networkmanager や connman のディスパッチャサービスを使うことでオンライン・オフラインの状態を自動的に管理することができます。下を見てください。
最後に、/usr/share/doc/chrony/chrony.txt
のユーザーガイドを覚えておいてください、疑問がでたときに役にたつはずです。オンラインから読むこともできます [1]。関連する man ページも参照しましょう: man {chrony|chronyc|chronyd|chrony.conf}
。
For intermittently running desktops
The configuration described here is not really suited well for intermittently running desktops. A machine running Arch Linux for five years, accumulated a 300 s error within the RTC. After a reboot it took chrony a long time to adjust this difference.
/etc/sysconfig/chronyd
OPTIONS='-r -s'
/etc/chrony.conf
dumponexit dumpdir /var/lib/chrony rtcfile /var/lib/chrony/rtc
This keeps, interestingly, the RTC still out-of-date, but after each re-start, chrony adjusts the accumulated error of the RTC and the system time is quite synchronous to NTP even shortly after a start.
使用方法
chronyd の起動
パッケージには chronyd.service
が含まれています。詳しくは systemd を参照してください。
システムクロックとハードウェアクロックを同期させる
起動中に起動時刻をハードウェアクロック (RTC) から読み込みシステム時刻がセットされます。そして chrony デーモンが動いている間、数分毎に同期されます。ハードウェアクロックの時刻がズレていると、システム時刻も数分のあいだ時刻がズレることになります。この場合ハードウェアクロックをリセットする必要があります。
chronyc を使うことで強制的にシステム時刻をハードウェアに同期させることができます:
# chronyc chronyc> trimrtc 200 OK chronyc> quit
RTC とシステム時刻の差は数マイクロ秒以内になるはずです。すぐ後に完全に同期されます。
ネットワーク状態の通知
chrony.conf
でプールを offline で指定した場合、ネットワーク状態が変わったことを chrony に通知する必要があります。
ネットワーク状態を chrony に通知する方法としては chronyc を使用する方法と、使用しているネットワーク設定マネージャのディスパッチャを使用する方法があります。
NetworkManager
NetworkManager の dispatcher スクリプトを使うことで、ネットワークの接続によって chronyd をオンライン/オフラインモードに切り替えることができます。AUR から networkmanager-dispatcher-chronyAUR をインストールして使うことができます。
netctl
AUR から netctl-dispatcher-chronyAUR をインストールしてください。netctl にフックが追加され接続時に自動的に実行されます。