Help us understand the problem. What is going on with this article?

FreeBSD 10.3-RELEASE ntpd 閏秒ファイル更新

More than 3 years have passed since last update.

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_enableYES なら、1日1回 periodic daily により /etc/periodic/daily/480.leapfile-ntpd から service ntpd fetch が実行されます。
service ntpd fetchは以下のような動作を順にします。

  1. $ntp_db_leapfile より $ntp_src_leapfile が新しければ、$ntp_db_leapfile$ntp_src_leapfile で置き換える。
  2. $ntp_db_leapfile の有効期限が近づいたら、$ntp_leapfile_sources から最新ファイルを取得し、$ntp_db_leapfile より新しければ置き換える。

変数のデフォルト値は以下のように設定されています。

/etc/defaults/periodic.conf
daily_ntpd_leapfile_enable="NO"                         # Fetch NTP leapfile
/etc/defaults/rc.conf
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 アクセス時にサーバ証明書の検証に失敗し、ダウンロードされません。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした