OpenNTPD
OpenNTPD (OpenBSD プロジェクトのメンバー) はネットワークタイムプロトコルを使ってインターネット上の時刻サーバーとシステムクロックを同期することができるデーモンです。必要ならば OpenNTPD 自体も時刻サーバーとして使うことができます。RFC 5905 で定義されている Simple Network Time Protocol バージョン 4 と RFC 1305 で定義されている Network Time Protocol バージョン 3 が実装されています。
目次
インストール
openntpd パッケージをインストールしてください。ローカルコンピュータの時刻を同期したいだけならデフォルト設定で問題ありません。
設定
詳しい設定をしたいときは、/etc/ntpd.conf
ファイルを編集してください。利用可能なオプションは ntpd.conf(5) を参照。
クライアント
特定のサーバーと同期するには、"server" ディレクティブをアンコメント・編集します。www.pool.ntp.org/zone/@ であなたの地域にあるサーバーの URL を確認できます。
server ntp.example.org
"servers" ディレクティブも "server" ディレクティブと同じように機能しますが、DNS で複数の IP アドレスが解決される場合、全てのサーバーに同期されます。大抵の場合はデフォルトの "pool.ntp.org" で何の問題もありません。
servers pool.ntp.org
"server" や "servers" ディレクティブはいくらでも使うことができます。
サーバー
OpenNTPD を時刻サーバーとしてコンピュータで実行したい場合、"listen" ディレクティブをアンコメント・編集してください。例:
listen on *
上記の設定だと全てのインターフェイスを listen します。ループバックインターフェイスだけを listen するには:
listen on 127.0.0.1
精度を高めるために、まず現在の時刻を同期してから時刻サーバーは時刻を送信し始めます。システムの精度によって、数時間から数日かかることもあります。
使用方法
systemd で OpenNTPD を有効化
openntpd
サービスを起動・有効化してください。
openntpd をネットワーク接続に依存させる
ネットワーク接続が必ずしもあるわけではない場合 (ノートパソコンで無線接続している場合やダイアルアップ接続を使っている場合など)、起動時にシステムデーモンとして openntpd
を実行することは理にかなっていません。以下はネットワーク接続にあわせて openntpd
を制御する方法です。以下の設定は ntpd
でも使うことができます。
NetworkManager dispatcher を使う
NetworkManager の dispatcher スクリプトを使うことでネットワーク接続に合わせて OpenNTPD を立ち上げたり停止することができます。networkmanager-dispatcher-openntpdAUR で必要なスクリプトをインストールすることが可能です。
wicd を使う
以下のスクリプトを作成して chmod で実行可能権限を付与してください:
/etc/wicd/scripts/postconnect/openntpd-start.sh
#!/bin/sh systemctl start openntpd.service
/etc/wicd/scripts/predisconnect/openntpd-stop.sh
#!/bin/sh systemctl stop openntpd.service
dhcpcd フックを使う
/etc/dhcpcd.exit-hook
if $if_up; then systemctl start openntpd.service elif $if_down; then systemctl stop openntpd.service fi
dhcpcd#フックを見てください。
トラブルシューティング
時刻が同期されない
時刻が正しく設定されずログに以下のように表示される場合:
openntpd adjtime failed: Invalid argument
以下を実行してみてください:
# ntpd -s -d
上記のコマンドでシステムを手動で同期することができます。
時刻のズレが増える
バックグラウンドで openntpd を実行すると実際の時刻とコンピュータに保存されている時刻の同期エラーが発生することがあります。デスクトップの時計と実際の時刻のズレが増えていっている場合、openntpd デーモンをバックグラウンドではなく通常の方法で起動してください。