2009/07/09

RTC用電池を持たないALIXで時刻が起動時に設定されない件について

07/07 七夕の投稿の中で、ALIXでopenntpdを設定しているにも拘わらず電源投入後に時刻が狂ってしまうと書きました。 さらに/etc/default/openntpdの中にntpdateを記述しました。 結論からいうとデフォルト設定からいろいろ変更した末に、自分で変な設定にしてしまったようでした。

さて、偶然/etc/default/ntpdateを見つけて$ dpkg -L ntpdateを実行してみたところ、/etc/network/if-up.d/ntpdateファイルがパッケージに含まれている事がわかりました。 ネットワークインタフェースが起動するタイミングでntpdateが実行されるようです。

ほとんどのALIXはReal-Time-Clock(RTC)を保持する内蔵電池を持っていないので、電源を抜き差しすると時刻がリセットされてしまうのは仕様ですが、たまーに時刻がリセットされたままになるという現象に遭遇してきました。

設定の再確認

NTPクライアントとなる新しいALIXで/etc/default/以下のファイル2つを確認します。 まず以前の投稿で編集した/etc/default/openntpdファイルの"ntpdate"行を削除して戻します。

次に/etc/default/ntpdateの内容を次のようにしました。

NTPDATE_USE_NTP_CONF=no
NTPSERVERS="192.168.1.2"
NTPOPTIONS=""

NTPサーバーとなる192.168.1.2の方では適合に設定を行なっていますが、/etc/openntpd/ntp.confでは"listen on *"を実行しています。

現象の再現

192.168.1.2のNTPサーバー側で$ sudo /etc/init.d/openntpd restartを実行するとntpdデーモンが再起動します。NTPクライアント側から$ sudo /usr/sbin/ntpdate 192.168.1.2を実行すると、まだNTPサーバーが起動したばかりで外部サービスと十分な時刻同期を取っていないためエラーメッセージ、no server suitable for synchronization found、が表示されます。

ここでNTPクライアント側の新しいALIXを停止しAC電源プラグを抜き差しして起動すると、 時刻は2000年にリセットされたままとなります。

解決策の確認

解決策としてはクライアント側の/etc/default/ntpdateファイルを編集し、NTPSERVERSに外部サーバーを追記します。

NTPSERVERS="192.168.1.2 ntp.ring.gr.jp"

念のためNTPサーバー側で$ sudo /etc/init.d/openntpd restartを再度実行し、ntpdateコマンドを叩いてadjust time server xxx.xxx.xxx.xxx offset -0.130203 secのように時刻調整の結果が表示される事を確認しておきます。

この状態でAC電源プラグを抜き差しして起動すると、今度は時刻が正しく調整されます。

まとめ

いろいろ書きましたが"openntpd"と"ntpdate"パッケージの組合せでは、デフォルトの設定を使っている限り、あまり問題になる事はなさそうです。"NTPDATE_USE_NTP_CONF=yes"の設定を入れてみても、 ntpdate-debianスクリプトからは/etc/ntp.conf, /etc/ntp.conf.dhcpが対象で、/etc/opennepd/ntp.confは読み込まれません。

もし自前のNTPサーバーを持っていて/etc/default/ntpdateを編集する場合には、信頼できるNTPサーバーを複数記述しておく必要がありそうです。

デフォルトから変更する場合には、時刻同期については問題にならないか気をつける必要がありそうです。。 もちろんNTPサーバーに対する負荷といった事を考えると、やたらに外部NTPサーバーに接続するべきではないんですけどね。そこら辺を気にするあまり過去にいろいろ変更したのをすっかり忘れていて、自分のミスを再発見してしまいました。

0 件のコメント: