NTP (Network Time Protocol) はネットワークを介してシステムの時刻を同期させるためのプロトコルです。まず、コンピュータは信頼できる時刻の発信源となるサーバから、時刻を取得します。次にコンピュータ自身が時刻の発信源となって、ネットワークに時刻を提供します。つまり、目的は 2 つ存在することになります。絶対時刻を管理することと、ネットワーク内にある全マシンの時刻を同期させることです。
システム時刻の正確性は、様々な状況下で重要となります。内蔵のハードウエア時計は、データベースやクラスタなどのアプリケーションの要件に適合するほど正確なものではありませんし、だからといって手作業で時刻を修正してしまったりすると、時刻が逆戻りすることによって、重要なアプリケーションの動作に問題が発生したりしてしまいます。ネットワークに接続されているコンピュータであれば、通常は全てのマシンのシステム時刻を同期させる必要がありますが、この場合も手作業での修正は好ましくありません。 NTP ではこれらの問題を解決する仕組みを備えています。 NTP では、ネットワーク経由でシステムの時刻を信頼できる時刻に少しずつ調整する仕組みを提供しています。このほか、ラジオ制御の時計など、ローカルの参照時計を管理する機能もあります。
openSUSE Leap 15 以降では、 chrony
が NTP の既定の実装になっています。 chrony
は 2 種類のパーツから構成されています。 1 つは chronyd
と呼ばれるデーモンで、システムの起動時に開始されるものです。もう 1 つは chronyc
と呼ばれるもので、 chronyd
の状態を監視したり、動作中に様々なパラメータを変更したりするためのコマンドラインインターフェイスです。
openSUSE Leap 15.2 以降では、 YaST モジュールの NTP クライアントは chrony
をデーモンを使用せずに実行するよう設定する際、 cron デーモンではなく systemd-timer を使用するようになっています。
Active Directory を利用して時刻同期を行う場合は、 手順7.2「 に示されている手順に従ってください。 を利用した Active Directory ドメインへの参加」
chrony
パッケージに付属する NTP デーモン (chronyd
) は、ローカルコンピュータのハードウエア時計を参照先として使用するように事前設定されています。ハードウエア時計の正確さは、その時刻の発信源に大きく依存しています。たとえば原子時計や GPS レシーバは非常に正確な時刻源となりますが、一般的な PC に搭載されている RTC チップは、信頼できる時刻源とは言えません。このような場合は、 YaST を利用して時刻同期を行ってください。
YaST NTP クライアント設定 (
› ) のウインドウでは、 NTP デーモンの起動のタイミングや設定元の種類、そして独自のタイムサーバの指定を行うことができます。NTP デーモンの起動については、下記のいずれかを選択することができます:
必要な場合にのみ chrony
デーモンを手作業で起動したい場合は、 を選択してください。
chrony
を恒久的に起動したりせず、定期的にシステム時刻を設定したい場合は、 を選択してください。なお、 で間隔を指定することもできます。
システムの起動時に chronyd
を開始したい場合は、 を選択してください。こちらを選択しておくことをお勧めします。
のドロップダウンボックスでは、 または のいずれかを選択します。お使いのサーバが固定の (公開されている) NTP サーバを利用する場合は を、 DHCP を介して NTP サーバの情報を提供しているネットワークの場合は を選択してください。
時刻の問い合わせ先となるタイムサーバの設定は、
ウインドウの下半分に書かれています。この一覧は、 , , の各ボタンで変更することができます。新しいタイムサーバを追加するには、
を押します:欄には、そのマシンの同期先となるタイムサーバの URL か、タイムサーバのプールの URL を指定します。入力が終わったら を押すと、タイムサーバとの通信を確認することができます。
chronyd
の起動時に多くの要求を送信して同期を高速化するには、 を選択します。
chronyd
を素早く起動することができます。これは、システムの起動時にインターネットに接続できない環境のほか、 NetworkManager でネットワーク接続を管理しているような場合に便利な機能です。
を押して閉じます。
chronyd
は /etc/chrony.conf
にある設定ファイルを読み込みます。お使いのコンピュータの同期を維持するため、 chrony
に対してどのタイムサーバを使用するのかを指定します。タイムサーバの指定は完全修飾ホスト名のほか、 IP アドレスでも指定することができます。たとえば下記のようになります:
0.suse.pool.ntp.org 1.suse.pool.ntp.org 2.suse.pool.ntp.org 3.suse.pool.ntp.org
下記のようにして pool (プール) を指定することもできます。プールは複数の IP アドレスに展開される仕組みです:
pool pool.ntp.org
同じネットワーク内にある複数のコンピュータの時刻を同期するにあたっては、それら全てを外部のサーバと同期させる構成はお勧めできません。その代わりに、いずれか 1 台のコンピュータを外部のタイムサーバと同期させ、残りのコンピュータをそのコンピュータに同期させることをお勧めします。この場合は、サーバ側の /etc/chrony.conf
内に local
ディレクティブを指定して、信頼できるタイムサーバと区別するようにしてください:
local stratum 10
chrony
を開始するには、下記のように実行します:
systemctl start chronyd.service
chronyd
の準備が完了すると、時刻が安定して受信され、ローカルコンピュータの時計の調整を行うためのドリフトファイルが作成されるまで、しばらくの時間がかかります。ドリフトファイルは、コンピュータが起動されてからのハードウエア時計のズレの計算結果を表したファイルです。補正は直ちに開始されるため、これによってシステム時刻の安定性を高めるようになっています。
システムの起動時に chrony
サービスを開始するには、下記のように実行します:
systemctl enable chronyd.service
yast-timesync.service
サービスとの競合についてchronyd.service
に加えて、 openSUSE Leap には yast-timesync.service
という名前のサービスが含まれています。 yast-timesync.service
はタイマーで 5 分おきに動作するよう設定され、 chronyd
に -q
オプションを付けて動作させたあと、終了するようになっています。ただし、 chronyd
は同時に 1 つまでしか起動できない仕様であることから、 chronyd
サービスを動作させている場合は、このサービスを有効化または起動してはなりません。
chronyc
による動作中の chronyd
の設定 #Edit sourcechronyd
の動作中に何らかの変更を行いたい場合は、 chronyc
を使用することができます。 chronyc
では、 chronyd
の操作に関する状態レポートを生成することもできます。
chronyc
は対話モードと非対話モードの両方に対応しています。 chronyc
を対話モードで起動したい場合は、コマンドラインに chronyc
とだけ入力してください。これによりプロンプトが表示され、コマンドの入力を待機するようになります。たとえば NTP の対向でオンラインのものとオフラインのものの数を知りたい場合は、下記のように実行します:
#
chronyc
chronyc> activity 200 OK 4 sources online 2 sources offline 1 sources doing burst (return to online) 1 sources doing burst (return to offline) 0 sources with unknown address
chronyc
のプロンプトを終了するには、 quit
もしくは exit
と入力してください。
対話プロンプトが必要ない場合は、コマンドを直接指定して実行することもできます:
#
chronyc
activity
chronyc
を利用した変更は恒久的なものではありません。 chronyd
を再起動すると、元の設定に戻ってしまいます。設定を恒久化させたい場合は、 /etc/chrony.conf
を編集してください。
利用可能な chronyc
のコマンド一覧について、詳しくはマニュアルページ ( man 1 chronyc
) をお読みください。
システムの起動時にネットワークの接続が利用できないような環境では、 chronyd
は起動できるものの、設定ファイル内に書かれたタイムサーバの DNS 名が解決できないことになります。
chronyd
では server
, pool
, peer
の各ディレクティブで指定したタイムサーバ名を、成功するまで間隔を増やしながら解決を試みます。
chronyd
の起動時にはタイムサーバに接続できないことがわかっている場合は、下記のようにして offline
オプションを指定してください:
server サーバアドレス offline
上記のように設定すると、 chronyd
は下記のコマンドを送信するまで、サーバへの問い合わせを行わないようになります:
#
chronyc online サーバアドレス
なお、 auto_offline
オプションを指定すると、 chronyd
はタイムサーバに対して 2 回リクエストを送信しても応答がない場合、そのタイムサーバがオフライン状態にあるものと判断するようになります。これにより、ネットワーク接続が切れている状態でも 'offline' コマンドを実行する必要がなくなります。
ソフトウエアパッケージ chrony
は、他のプログラム (たとえば gpsd
) を利用して SHM や SOCK ドライバ経由でタイミングデータを取得することができます。 /etc/chrony.conf
内に refclock
ディレクティブを指定することで、ハードウエア参照時計を同期先として使用することができます。このディレクティブには、 2 種類の必須パラメータがあります。 1 つはドライバ名で、もう 1 つはドライバ固有のパラメータです。 2 つのパラメータは 0 個以上の refclock
オプションの後ろに続きます。 chronyd
では、下記のドライバに対応しています:
PPS - カーネルの Pulse Per Second
API 向けのドライバです。たとえば下記のように設定します:
refclock PPS /dev/pps0 lock NMEA refid GPS
SHM - NTP 共有メモリドライバです。たとえば下記のように設定します:
refclock SHM 0 poll 3 refid GPS1 refclock SHM 1:perm=0644 refid GPS2
SOCK - Unix ドメインソケットドライバです。たとえば下記のように設定します:
refclock SOCK /var/run/chrony.ttyS0.sock
PHC - PTP ハードウエアクロックドライバです。たとえば下記のように設定します:
refclock PHC /dev/ptp0 poll 0 dpoll -2 offset -37 refclock PHC /dev/ptp1:nocrossts poll 3 pps
個別のドライバのオプションについて、詳しくは man 8 chrony.conf
をお読みください。