NetBSD Advent Calendar 2020 2日目の記事です。
今日はNetBSDでの時刻同期をchronyで行う手順を紹介しようと思います。
背景
仮想マシン上に各種バージョンのNetBSDをインストールしてカーネルビルドを試すような場合、ストレージ用のマシンにソースツリーを展開し、NFS経由で参照したいことがあります。その時にそれぞれのマシンで時刻がズレていたりするとビルド結果がおかしくなることがあり、ちゃんと時刻を同期させておくことが(意外と)重要です。
ntpdate
を使用すればお手軽な時刻を同期できるため、私の環境でも以下のようなCRON設定を行い、定期的に時刻合わせするという運用を行っていました。
# run five minutes after midnight, every day
5 0 * * * ntpdate s2csntp.miz.nao.ac.jp > /dev/null
これはこれで悪くはないのですが、Linux環境では別のお作法で時刻同期の設定を行うこともあり、「時刻同期したいだけなのにそれぞれの環境で個別の手順を覚えるのはちょっと面倒...。ntpdateで良いかな...」と考えていました。特にCentOS 7,8環境ではバージョンによって時刻同期の設定手順が異なっており、CentOS 8ではchronyを使用する方法になっていました。仕方なしに手順を調べたりしていたのですが、chronyのWebサイトを見るとNetBSDもサポートしているようで、これならNetBSDでもCentOSにも設定手順がある程度共用できそうな感じです。
そこで今日の記事では、NetBSDでchronyを利用した時刻同期設定を紹介しようと思います。
NetBSDでchronyを利用する
chronyのインストール
ソースコードからchronyをビルドする必要があるのかなと思っていましたが、パッケージで提供されているようで、単に pkg_add
でインストールすればまずは準備完了です。
$ sudo -i pkg_add -v pkgin
$ sudo -i pkgin search chrony
chrony-3.5.1 Daemon for maintaining the accuracy of computer clocks
$
$ sudo -i pkg_add -v chrony
以下のファイルがインストールされます。
$ pkg_info -L chrony
Information for chrony-3.5.1:
Files:
/usr/pkg/bin/chronyc
/usr/pkg/man/man1/chronyc.1
/usr/pkg/man/man5/chrony.conf.5
/usr/pkg/man/man8/chronyd.8
/usr/pkg/sbin/chronyd
/usr/pkg/share/examples/chrony/chrony.conf.example
/usr/pkg/share/examples/chrony/chrony.keys.example
/usr/pkg/share/examples/rc.d/chronyd
chronyでの時刻同期設定
必要なファイルの配置
パッケージ経由で設定用のサンプルファイル( chrony.conf.example
)と rc.d
用のスタートアップスクリプトが提供されるので、まずはそれを配置します。
$ sudo cp -i /usr/pkg/share/examples/rc.d/chronyd /etc/rc.d/chronyd
$ sudo cp -i /usr/pkg/share/examples/chrony/chrony.conf.example /usr/pkg/etc/chrony.conf
chrony.confの設定
配置した /usr/pkg/etc/chrony.conf
を設定します。私の環境では以下のような設定を行いました。
基本的には server
と allow
ディレクティブの設定でOKです。
$ diff -u /usr/pkg/share/examples/chrony/chrony.conf.example /usr/pkg/etc/chrony.conf
--- /usr/pkg/share/examples/chrony/chrony.conf.example 2020-10-09 08:42:58.000000000 +0900
+++ /usr/pkg/etc/chrony.conf 2020-12-02 08:22:47.396997981 +0900
@@ -27,6 +27,7 @@
# you can access at http://support.ntp.org/bin/view/Servers/WebHome or
# you can use servers from the pool.ntp.org project.
+server s2csntp.miz.nao.ac.jp iburst
! server foo.example.net iburst
! server bar.example.net iburst
! server baz.example.net iburst
@@ -143,6 +144,7 @@
#
# e.g. to enable client access from the 192.168.*.* class B subnet,
+allow 192.168.10.0/24
! allow 192.168/16
# .. but disallow the 192.168.100.* subnet of that,
chronydの起動
/etc/rc.d/chronyd
で時刻同期デーモンの chronyd
を起動します。
$ sudo /etc/rc.d/chronyd onestatus
chronyd is not running.
$
$ sudo /etc/rc.d/chronyd onestart
Starting chronyd.
$
$ sudo /etc/rc.d/chronyd onestatus
chronyd is running as pid 8860.
NTPサーバとの同期状況は chronyc sources
コマンドで確認できます。 ^*
は現在同期しているNTPサーバを示しており、この例では 133.40.41.136
と時刻同期しているようです。
$ chronyc sources
210 Number of sources = 1
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* 133.40.41.136 2 6 17 16 +8019us[-1023ms] +/- 59ms
chrony.conf
に設定した s2csntp.miz.nao.ac.jp
を名前解決してみると 133.40.41.136
が得られるため、設定したNTPサーバを利用していることが分かります。
$ nslookup s2csntp.miz.nao.ac.jp | egrep '^Name|^Address'
Address: 192.168.10.1#53
Name: s2csntp.miz.nao.ac.jp
Address: 133.40.41.135
Name: s2csntp.miz.nao.ac.jp
Address: 133.40.41.136
Name: s2csntp.miz.nao.ac.jp
Address: 133.40.41.134
時刻同期してみる
コマンドラインから時刻同期する場合は chronyc -a makestep
コマンドを使用します。
(実験用の仮想マシン上だったので、派手に時刻がズレていました...)
$ date ; sudo chronyc -a makestep ; date
水 12月 2 08:25:17 JST 2020
200 OK
水 12月 2 23:42:22 JST 2020
これでchronyを使用した時刻同期設定が行えました。
まとめ
chronyのインストールと時刻同期設定について紹介してみました。
ntpdate
でも良いといえばそうなのですが、chronyはCentOS 8系でも採用されており、設定手順をある程度揃えておけるというのは利点かもしれません。OpenBSDはチェックできていませんが、FreeBSDでもパッケージで提供されているようなので、BSD系での時刻同期をchronyに揃えてしまうのも良さそうです。