概要
自宅に導入したQNAP社のNASにChronyを入れて、時刻を同期してみました。おそらくQNAP社製NASの大半が、以下の方法で設定可能だと思います。
Chronyは、スクラッチから書かれたNTPクライアント・サーバーで、高精度の時刻同期を効率よく実現します。素のntpdが苦手とする仮想PC、ラップトップPC、モバイル回線、手作業での時刻合わせといった、環境が安定しない状況下でもいい感じに統計を取り 、ベストエフォートの時刻情報を提供します。昔NTPを初めて知った時に、こんな機能があれば良いなあと思っていたものがすべて入っており、使い勝手の良いツールです。Windows版が無いのが残念。
もちろん、QNAPのNAS自体にも元々時刻同期の仕組みはあるのですが、最短でも1時間に1回しか同期してくれず、しかもなぜか私の環境では時々同期に失敗するという事情がありました。色々と調べましたが良くわからないので「もうChronyを入れて解決しよう」となりました。
手順は、[QNAPにntpdをインストールしてNTPサーバーにしてみた]を参考にします。基本的にはそのページとほぼ同じで、1 Entwareのインストール、2 Chronyのインストール、3 設定ファイルの修正、4 chronydの起動で良いのですが、いくつか注意点があります。
設定手順
NAS本体の設定
当然ながら、NAS本体の 時刻同期機能 および NTPサーバー機能 は無効にします。
Entwareのインストール
Entwareは、QTSなどのNASでも使用可能なLinuxパッケージ管理ツールです。https://github.com/Entware/Entware/wiki/Install-on-QNAP-NASからstandard installationをダウンロード、PCでQNAPのApp Centerを開き、右上の「手動でインストール」ボタンでパッケージを指定してインストールします。QNAPの非公認パッケージなので、 リスクは理解した上でインストール しましょう。
Chronyのインストール
SSHかTelnetでNASにログインして作業します。Entwareがインストールされていれば/opt/bin/opkgコマンドでパッケージを管理可能になっていて、これはDebian系で言うaptコマンドに相当します。なので、
sudo /opt/bin/opkg install chrony
でChronyをインストールできます。
[~] # sudo /opt/bin/opkg install chrony
Installing chrony (4.4-1) to root...
Downloading http://bin.entware.net/x64-k3.2/chrony_4.4-1_x64-3.2.ipk
Installing libgcc (8.4.0-11) to root...
Downloading http://bin.entware.net/x64-k3.2/libgcc_8.4.0-11_x64-3.2.ipk
Installing libc (2.27-11) to root...
Downloading http://bin.entware.net/x64-k3.2/libc_2.27-11_x64-3.2.ipk
Installing libssp (8.4.0-11) to root...
Downloading http://bin.entware.net/x64-k3.2/libssp_8.4.0-11_x64-3.2.ipk
Installing libpthread (2.27-11) to root...
Downloading http://bin.entware.net/x64-k3.2/libpthread_2.27-11_x64-3.2.ipk
Installing librt (2.27-11) to root...
Downloading http://bin.entware.net/x64-k3.2/librt_2.27-11_x64-3.2.ipk
Installing libcap (2.69-1) to root...
Downloading http://bin.entware.net/x64-k3.2/libcap_2.69-1_x64-3.2.ipk
Configuring libgcc.
Configuring libc.
Configuring libpthread.
Configuring libssp.
Configuring librt.
Configuring libcap.
Configuring chrony.
[~] #
設定ファイルの修正
Entwareでインストールしたプログラムによる読み書きは、基本的に /opt以下で完結 した方が良いようです。Chronyについても/opt/etc/chrony/以下にサンプルの設定ファイルが置かれるので、そのうちいずれかをchrony.confにリネームしたうえでvi等で修正すれば良いでしょう。このファイルは普通にChronyのマニュアル通りに記述すれば良いのですが、ドリフトファイル等のファイル・ディレクトリー名を記述する箇所は、下記のように /opt以下に変更 すべきだと思われます。
pool ntp.nict.jp minpoll 6 maxpoll 13 iburst
driftfile /opt/var/lib/chrony/drift
bindcmdaddress 127.0.0.1
bindcmdaddress ::1
makestep 1.0 3
rtcsync
log measurements statistics tracking
logdir /opt/var/log/chrony
allow 192.168.0.0/24
chronydの起動
起動には/opt/etc/init.d/S06chronyd という名前のスクリプトを使いますが、そのままでは上手く動きません。というのも、QTSでのSuperuserの名前はadminであるのに対し、Chronyではrootであることを前提としているため、齟齬が発生しているようです。そこで、S06chronyd内の ARGS変数を修正 し、実行するアカウント名を追加します。
#!/bin/sh
ENABLED=yes
PROCS=chronyd
ARGS="-u admin" #adminアカウントで実行
PREARGS=""
DESC=$PROCS
PATH=/opt/sbin:/opt/bin:/opt/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
chmod 750 /opt/var/run/chrony
. /opt/etc/init.d/rc.func
これで準備ができました。既に、システムを再起動すると自動実行されるように設定されていますが、手動でも開始できます。
sudo /opt/etc/init.d/S06chronyd start
をコマンドラインに入力します。
[~] # sudo /opt/etc/init.d/S06chronyd start
Starting chronyd... done.
[~] #
動作確認
動作確認は、chronycコマンドで可能です。
[~] # /opt/bin/chronyc sources
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^- ntp-k1.nict.jp 1 6 17 11 +1598us[+1598us] +/- 11ms
^* ntp-a2.nict.go.jp 1 6 17 11 -783us[ -87us] +/- 6044us
^- ntp-b2.nict.go.jp 1 6 17 11 -578us[ -578us] +/- 5528us
^- ntp-b3.nict.go.jp 1 6 17 11 +424us[ +424us] +/- 5190us
[~] #
成功しました。NTPサーバーとしても動いているため、allowを適切に記述すれば他からの接続も可能です。