ntpd 設定

$Id: ntpd.html,v 1.5 2008/12/09 09:17:12 candy Exp candy $

ntpd と「うるう秒」

ntpd うるう秒 を作成しました。

GPS (マース15tm) で NTP サーバ

ジュピターよりも新しく、 かつジュピターよりも手軽に利用できる GPS (マース15tm) による NTP サーバの構築については、 GPS マース 15tm で NTP サーバ!! の巻 を参照して下さい。 (2008.03.17 追記)

FreeBSD での ntpd の設定方法

NTP の概略については、国立天文台の ネットワーク時刻同期システムページCRL, NTT, IIJ, MFEED のページ を参照してください。

  1. /etc/rc.conf
  2. 	ntpd_enable="YES"
    	ntpd_config="/usr/local/etc/ntp.conf"
    
    と書きます。 ntpd は内蔵クロックの面倒は見てくれません。 (正確には、起動後しばら経って、 他のサーバに同期した時に一度だけ内蔵クロックを合わせてくれる。) したがって長期間 PC を連続稼働すると、 どんどん内蔵クロックがずれてしまいます。 この状態で再起動すると、しばらくの間時計が狂ったままになるので、
    	ntpdate_enable="YES"
    	ntpdate_flags="-sbv どこかのNTPサーバ"
    
    も書いて、起動時に即座に内蔵クロックも合わせるようにしています。

    参考: ntpd(8)

  3. /usr/local/etc/ntp.conf
  4. 	#
    	driftfile /usr/local/etc/ntp.drift
    	server server1.example.com prefer
    	server server2.example.com
    	peer client1.example.com
    	peer client2.example.com
    	peer client3.example.com
    	peer client4.example.com
    
    と書きます。 高い stratum のサーバは server に、 同じ stratum 同士は peer に設定します。 至近の server には prefer を付けましょう。

    参考: ntpd.conf(5)

  5. 再起動すれば ntp サーバが動きます。 ntpq で確認しましょう。
    	$ ntpdc -p
    	     remote           refid      st t when poll reach   delay   offset  jitter
    	==============================================================================
    	*server1.example .GPS.            1 u  256  512  377    0.490    0.941   0.008
    	+server2.example .GPS.            1 u  282  512  377    0.764    0.685   0.604
    	-client1.example server1.example  2 u  328  512  375    0.001    5.324   0.222
    	-client2.example server1.example  2 u  330  512  376    0.431   -3.973   0.283
    	-client3.example client2.example  3 u   29   64  373    0.673   -1.848   0.200
    	+client4.example server1.example  2 u  278  512  377    0.322   -0.699   0.176
    

FreeBSD + ジュピターで ntpd

ジュピターにはデフォルトの出力形式である NMEA-0183 形式と Rockwell バイナリフォーマットの 2 種類があります。 NMEA は標準のドライバで使用できますが、 バイナリフォーマットは専用のドライバが必要です。

NMEA 編

ジュピターのデフォルトの出力形式である NMEA-0183 形式で ntpd を動かします。 ただし、ジュピターの場合 NMEA 出力が PPS と同期していないため、 精度的には全く使い物になりません。 (PPS を使っても無駄です。) どこかの NTP サーバのクライアントとして動かした方がよほど正確ですが、 何らかの理由で、ネットにつなげない場合には有効でしょう。

  1. デバイス名
  2. gpsX を使用します。
    FreeBSD 4.X の場合
    	ln -s cuaa0 /dev/gps0
    	ln -s cuaa1 /dev/gps1
    
    FreeBSD 5.X の場合
    	/etc/devfs.conf に
    	---------------------
    	link cuaa0 gps0
    	link cuaa1 gps1
    	---------------------
    	と追加し、
    	/etc/rc.d/devfs restart
    

  3. ntp.conf
  4. 	server 127.127.20.X
    	fudge 127.127.20.X time1 N
    
    X はジュピターをつないだポート(cuaa0 なら 0、cuaa1 なら 1)を指定します。 N は、試行錯誤で適当な値を見付けましょう。 どのみち 1 秒位ずれてしまうので、気安め程度です。

バイナリフォーマット編

ジュピターの出力形式をバイナリモードにすると、 PPS と同期した出力が得られ、 標準偏差 2 マイクロ秒以下の精度で同期します。 (PC の内蔵クロックの精度にもよります。) 接続方法は、こちらを参照してください。

  1. ntpd
  2. 専用の ntpd が必要になります。 FreeBSD 4.6.2R でコンパイルした 4.1.0 と FreeBSD 5.3R でコンパイルした 4.2.0 があります。

  3. カーネルの設定
  4. PPS を利用するには、PPS_SYNC を組み込む必要があります。 内蔵クロックの精度が悪い場合は、CALIBRATION も指定します。

    	options	PPS_SYNC
    	options	CLK_USE_I8254_CALIBRATION
    	options	CLK_USE_TSC_CALIBRATION     # FreeBSD 5.X では不要
    
    を指定すると良いようです。 参考: ntpd for Furuno GPS

  5. デバイス名
  6. gpsX を使用します。
    FreeBSD 4.X の場合
    	ln -s cuaa0 /dev/gps0
    	ln -s cuaa1 /dev/gps1
    
    FreeBSD 5.X の場合
    	/etc/devfs.conf に
    	---------------------
    	link cuaa0 gps0
    	link cuaa1 gps1
    	---------------------
    	と追加し、
    	/etc/rc.d/devfs restart
    

  7. ntp.conf (4.1.0 用)
  8. PPS を使うには fudge コマンドの flag3 を 1 にします。 (NMEA ドライバと同じ)
    	server 127.127.51.X prefer
    	fudge 127.127.51.X time1 -1 flag3 1
    
    X はジュピターをつないだポート(cuaa0 なら 0、cuaa1 なら 1)を指定します。

    参考: Generic NMEA GPS Receiver

  9. 確認方法
  10. ntpq -p で確認すると、64 秒ごとに reach が 1 → 3 → 7 → 17 → 37 → 77 → 177 → 377 と増えていきます。

    	$ ntpq -p
    	     remote           refid      st t when poll reach   delay   offset  jitter
    	==============================================================================
    	*REFCLK(51,0)    .GPS.            0 l   39   64  377    0.000    0.012   0.040
    
    ntpdc -c kern で status を見ると、reach が増えて行くにつれ、
    下のような順で変化します。
    
    	status:               2001  pll nano
    	status:               2101  pll ppssignal nano
    	status:               2141  pll unsync ppssignal nano
    	status:               2107  pll ppsfreq ppstime ppssignal nano
    

おまけ: TS-820 + NMEA 編

標準の ntpd が使用できます。

  1. カーネル
  2. 	options	PPS_SYNC
    	options	CLK_USE_I8254_CALIBRATION
    	options	CLK_USE_TSC_CALIBRATION     # FreeBSD 5.X では不要
    

  3. デバイス
  4. FreeBSD 4.X の場合
    	ln -s cuaa0 /dev/gps0
    	ln -s cuaa1 /dev/gps1
    
    FreeBSD 5.X の場合
    	/etc/devfs.conf に
    	---------------------
    	link cuaa0 gps0
    	link cuaa1 gps1
    	---------------------
    	と追加し、
    	/etc/rc.d/devfs restart
    

  5. ntp.conf (4.1.0)
  6. 	server 127.127.20.X
    	fudge 127.127.20.X time1 N flag3 1
    
    参考: Generic NMEA GPS Receiver

    おまけ2: SONY IPS-5000 編

    Jupiter 対応の 4.1.0 には SONY IPS-5000 用のドライバも入ってます。 UTC と同期していないので、精度はあまりよくありません。

    1. デバイス
    2. 	ln -s cuaa0 /dev/gps0
      	ln -s cuaa1 /dev/gps1
      

    3. ntp.conf (4.1.0)
    4. 	server 127.127.50.X
      	fudge 127.127.50.X time1 N
      

    5. フォーマット
    6. 	SONY81YYmmddwHHMMSSN...
      	最初の 6 バイトはバージョン、その次から UTC 時刻です。
      	YY = 年
      	mm = 月(01-12)
      	dd = 日(01-31)
      	w  =  曜日(0-7, 日=0)
      	HH = 時(00-24)
      	MM = 分(00-59)
      	SS = 秒(00-60)
      

[戻る]