FreeBSD 10.3-RELEASE では、ntpd デフォルト設定ファイルで閏秒ファイルを読み込むようになっています。
しかし、10.3-RELEASEの閏秒ファイルの有効期限が2016年6月1日となっているため、以下のようなエラーメッセージが出力されます。
May 31 09:03:20 freebsd10 ntpd[987]: leapsecond file ('/var/db/ntpd.leap-seconds.list'): will expire in less than one day
Jun 1 20:13:15 freebsd10 ntpd[983]: leapsecond file ('/var/db/ntpd.leap-seconds.list'): expired less than 1 day ago
1日1回、閏秒ファイルをチェックして自動更新する仕組みもありますが、正しく動作しません。
ここでは、手動で閏秒ファイルを更新する手順を書きます。
閏秒ファイル手動更新
FreeBSD-CURRENT の閏秒ファイルを取得して ntpd を再起動します。
サーバ証明書でエラーが出る場合は、sudo pkg install ca_root_nss
でルートCA証明書をインストールします。
$ cd /tmp
$ svnlite export https://svn.FreeBSD.org/base/head/etc/ntp/leap-seconds
$ sudo cp leap-seconds /var/db/ntpd.leap-seconds.list
$ sudo service ntpd restart
ログメッセージを確認して、期限切れとなっていない有効な閏秒ファイルが読み込まれていることを確認します。
Aug 25 17:14:10 freebsd10 ntpd[9743]: ntpd 4.2.8p8-a (1): Starting
Aug 25 17:14:10 freebsd10 ntpd[9744]: leapsecond file ('/var/db/ntpd.leap-seconds.list'): good hash signature
Aug 25 17:14:10 freebsd10 ntpd[9744]: leapsecond file ('/var/db/ntpd.leap-seconds.list'): loaded, expire=2017-06-01T00:00:00Z last=2017-01-01T00:00:00Z ofs=37
自動更新の仕組み
$daily_ntpd_leapfile_enable
が YES
なら、1日1回 periodic daily
により /etc/periodic/daily/480.leapfile-ntpd
から service ntpd fetch
が実行されます。
service ntpd fetch
は以下のような動作を順にします。
-
$ntp_db_leapfile
より$ntp_src_leapfile
が新しければ、$ntp_db_leapfile
を$ntp_src_leapfile
で置き換える。 -
$ntp_db_leapfile
の有効期限が近づいたら、$ntp_leapfile_sources
から最新ファイルを取得し、$ntp_db_leapfile
より新しければ置き換える。
変数のデフォルト値は以下のように設定されています。
daily_ntpd_leapfile_enable="NO" # Fetch NTP leapfile
ntp_src_leapfile="/etc/ntp/leap-seconds"
# Initial source for ntpd leapfile
ntp_db_leapfile="/var/db/ntpd.leap-seconds.list"
# Working copy (updated weekly) leapfile
ntp_leapfile_sources="https://www.ietf.org/timezones/data/leap-seconds.list"
# Source from which to fetch leapfile
自動更新が動作しない理由
FreeBSD 10.3-RELEASE の /etc/ntp/leap-seconds
より https://www.ietf.org/timezones/data/leap-seconds.list の方がタイムスタンプが古いため、ダウンロードしたファイルで置き換えられません。
2016年8月25日時点では以下のようになっています。
source | last update | file expires |
---|---|---|
FreeBSD 10.3-RELEASE | 3660508800 (2015-12-31) | 3673728000 (2016-06-01) |
FreeBSD 12.0-CURRENT | 3676752000 (2016-07-06) | 3705264000 (2017-06-01) |
www.ietf.org | 3629404800 (2015-01-05) | 3691872000 (2016-12-28) |
また、ca_root_nss パッケージがインストールされていない場合は、www.ietf.org アクセス時にサーバ証明書の検証に失敗し、ダウンロードされません。