Amazon Linuxの時刻同期にchronyを使う
Amazon Linuxではntpdによる時刻同期が用意されていますが、EPEL(Extra Packages for Enterprise Linux)リポジトリに入っているchronyも使えます。
chronyはFedora 16から採用されている時刻同期デーモンです。設定ファイルや引数がシンプルで分かりやすいので好きです。
Chrony は、ノートPCのように常時ネットワーク接続がないシステムにおいてもうまく動作するよう設計されてます。また、標準的な ntp よりも速く時刻同期できます。Chrony は、仮想マシンで実行しているシステムにおいて使用されるとき、すぐに狂う時刻を訂正する助けにするために時刻の訂正のためのより大きな範囲や、時刻の素早い変更へのよりよい反応のような、いくつかの優位性があります。
http://docs.fedoraproject.org/ja-JP/Fedora/16/html/Release_Notes/sect-Release_Notes-Changes_for_Sysadmin.html
私の環境ではntpdが動かないためchronydを使っています。ntpdが動かない原因はOpenVPNのtunインタフェースみたいですが、解決方法がいまだ分からず。IPv6無効化とか、引数に-I loとか-Lとか-U 0とか渡してもダメでした><
ec2$ sudo ntpd -u ntp:ntp -p /var/run/ntpd.pid -g -n -D5 ntpd 4.2.4p8@1.1612-o Tue Aug 9 20:11:55 UTC 2011 (1) addto_syslog: set_process_priority: Leave priority alone: priority_done is <2> addto_syslog: precision = 0.773 usec create_sockets(123) addto_syslog: ntp_io: estimated max descriptors: 1024, initial socket boundary: 16 setsockopt SO_TIMESTAMP enabled on fd 16 address 0.0.0.0 bind() fd 16, family 2, port 123, addr 0.0.0.0, flags=0x89 flags for fd 16: 0x802 Searching for addr 0.0.0.0 in list of addresses - NOT FOUND Added addr 0.0.0.0 to list of addresses addto_syslog: Listening on interface #0 wildcard, 0.0.0.0#123 Disabled setsockopt SO_TIMESTAMP enabled on fd 17 address :: bind() fd 17, family 10, port 123, addr ::, flags=0x81 flags for fd 17: 0x802 Searching for addr :: in list of addresses - NOT FOUND Added addr :: to list of addresses addto_syslog: Listening on interface #1 wildcard, ::#123 Disabled update_interfaces(123) ./../libisc/ifiter_getifaddrs.c:108: INSIST(ifa->ifa_addr != ((void *)0)) failed.
ちなみに、Gentoo LinuxではOpenVPNとntpdの組合せでも問題なく動いています。
Amazon Linux 2012.03とchrony
Amazon Linux 2012.03からkernel 3.2が採用されています。EPELにあるchrony 1.25はkernel 3.xをサポートしないため、そのままでは動きません。chrony 1.26以降にアップデートする必要があります。
今回は、EPELのSRPMをリビルドすることにしました。tar ballを1.26に差し替えるだけでOKでした。
cd ~/tmp wget http://download.fedoraproject.org/pub/epel/6/SRPMS/chrony-1.25-2.el6.src.rpm rpm -ivh chrony-1.25-2.el6.src.rpm cd ~/rpm/SPECS cp -a chrony.spec chrony.spec.dist vim chrony.spec
chrony.specは以下のように変更します。
--- chrony.spec.dist 2011-05-19 23:43:27.000000000 +0900 +++ chrony.spec 2012-04-03 23:02:39.790961903 +0900 @@ -1,6 +1,6 @@ Name: chrony -Version: 1.25 -Release: 2%{?gitpatch}%{?dist} +Version: 1.26 +Release: 1.20120403%{?gitpatch}%{?dist} Summary: An NTP client/server Group: System Environment/Daemons
chrony 1.26のtar ballを配置してリビルドします。リビルドできたらRPMをインストールします。
cd ~/rpm/SOURCES wget http://download.tuxfamily.org/chrony/chrony-1.26.tar.gz rpmbuild -bb chrony.spec cd ~/rpm/RPMS/x86_64 sudo yum install chrony-1.26-1.20120403.amzn1.x86_64.rpm sudo vim /etc/chrony.conf sudo service chronyd start
chronycコマンドでステータスを確認できます。例えば、以下のように。
ec2$ chronyc tracking Reference ID : xxx.xx.xxx.xxx (xxxx.xxxx.xx.xx) Stratum : 3 Ref time (UTC) : Tue Apr 3 15:11:02 2012 System time : 0.000005183 seconds slow of NTP time Frequency : 30.038 ppm slow Residual freq : 0.509 ppm Skew : 2.341 ppm Root delay : 0.034858 seconds Root dispersion : 0.026567 seconds
これで時刻同期されるようになりました。システム時刻は運用管理の拠り所となる重要なものなので、時刻同期を忘れないでくださいね。