search
LoginSignup
0

More than 1 year has passed since last update.

NetBSD Advent Calendar 2020 Day 2

posted at

NetBSDでもchronyで時刻同期してみる

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 を設定します。私の環境では以下のような設定を行いました。
基本的には serverallow ディレクティブの設定で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に揃えてしまうのも良さそうです。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0