やっぱり時間が正確でないとログに書き出される時間も
正確ではなくなるのでntpdを使うことに決める。
またSolarisやRedHatでももともとついている
xntpのバージョンにはバグがあるようなので・・・

【準備】
http://www.eecis.udel.edu/~ntp/
からntpdをダウンロードしてくる

ftp://ftp.udel.edu/pub/ntp/ntp4/ntp4.1.72.tar.gz
現在(2001/07/03)の最新版はxntp3-5.93-exportである。
※だったが2002/01/14時点では名前もxntpdからntpdに
変わっていた。
よって新しいものにする。

アーカイブの置き場所は/workとする

【インストール】
・ファイルの展開
[nitta@home5 xntpd]$ tar zxvf ntp4.1.72.tar.gz

・コンパイル
[nitta@home5 xntpd]$ cd ntp4.1.72
[nitta@home5 ntp4.1.72]$ # ./configure \
                  --prefix=/usr/local/ntp \
                  --with-openssl-libdir \
                  --with-openssl-incdir \
                  --with-crypto 2>&1 | tee configure.log

※ntp4バージョンからconfigureにいろいろオプションが指定できるようになっている。
 しかもopensslサポートのようなので一応sslつきでコンパイルをしてみる。
 ほかにはGPSもいろいろサポートされているようだが今ひとつ使い方がわかりにくいので
 その辺は本家のサイトを参考にすると良いかもしれない。

opensslのインストールはこちらを参考にしていただきたい。
[nitta@home5 ntp4.1.72]$ make 2>&1 |tee make.log
※ここでmake.logを見るとわんさとwarningの文字が吐き出されているが
 makeをした直後に
Compiling with GCC now generates lots of new warnings.

Don't be concerned. They're just warnings.

Don't send bug reports about the warnings, either.

Feel free to send patches that fix these warnings, though.
ということで気にするな!!そしてバグレポートもパッチも送るな!!
ということらしいので気にせずmakeをすることにする。

[root@home5 ntp4.1.72]# make install 2>&1 | tee make_install.log

make_install.logから分かるが/usr/local/ntp/binの中に以下のようにインストールされる。
bash-2.05# tree /usr/local/ntp
/usr/local/ntp
`-- bin
   |-- genkeys
   |-- ntp-wait
   |-- ntpd
   |-- ntpdate
   |-- ntpdc
   |-- ntpq
   |-- ntptime
   |-- ntptimeset
   `-- ntptrace

1 directory, 9 file
s

のファイルがインストールされている。

【設定】
設定ファイルはごくごく単純な下記のようなものでもntpサーバとして
機能する。
[root@home5 ntp4.1.72]# cat /etc/ntp.conf
#自分の近くのntpサーバ、今回はOCNからなのでこれ↓
server ntp-os01.ocn.ad.jp
#driftファイルの場所
driftfile /etc/ntp.drift
#ログの場所
logfile /var/log/ntpd.log

#自分をntpサーバにする
server 127.127.1.1 prefer
fudge 127.127.1.1

restrict 127.0.0.1 # allow local host
restrict 192.168.128.0 mask 255.255.255.0
※せっかくopensslサポートでセキュアなntpサーバの構築を
 目指したがどうしてもntp.keysの作成に失敗するので断念した。
 


【起動ファイルの作成】
●Linuxの場合
/etc/rc.d/rc.local
ファイルの最後の方に
if [ -f /usr/local/bin/xntpd ]; then
(echo 'Starting NTP service') > /dev/console
/usr/local/bin/xntpd > /dev/console
else
(echo ' xntpd not found') > /dev/console
fi

●Solarisの場合
※Solarisでは/etc/rc2.d/S74xntpdは/etc/init.d/xntpdへのハードリンクになっている。
 もう一度ハードリンクを作り直します。

# cp -p /etc/init.d/xntpd /etc/init.d/xntpd.bak
# rm /etc/rc2.d/S74xntpd ;ln /etc/init.d/xntpd /etc/rc2.d/S74xntpd
# vi /etc/init.d/xntpd
#!/sbin/sh
case "$1" in
'start')
  [ -f /etc/ntp.conf ] || exit 0

  ARGS=`/usr/bin/cat /etc/ntp.conf | /usr/bin/nawk '
  BEGIN {
    first = 1
  }
   /^#/ {
  next
  }
  /^multicastclient/ {
  if (first) {
  first = 0
  printf("-s -w -m") 
  }
  if (NF == 1)
  printf(" 224.0.1.1")
  else
  printf(" %s", $2)
  next
  }
  /^server 127.127/ {
  next
  }
  /^server/ {
  if (first) {
  first = 0
  printf("-s -w")
  }
  printf(" %s", $2)
  next
  }
  '`
  if [ -n "$ARGS" ]; then
# Wait until date is close before starting xntpd
(/usr/local/ntp/bin/ntpdate $ARGS; sleep 2; /usr/local/ntp/bin/ntpd) &
else
/usr/local/ntp/bin/ntpd &
  fi
;;

'stop')
/usr/bin/pkill -x -u 0 '(ntpdate|ntpd)'
;;

*)
echo "Usage: $0 { start | stop }"
exit 1
;;
esac
exit 0
参考までにどのように変更したかはこのとおり
bash-2.05# diff xntpd xntpd.bak
8c8
< #[ ! -d /usr/sbin -o ! -d /usr/lib/inet ] && exit 1
---
> [ ! -d /usr/sbin -o ! -d /usr/lib/inet ] && exit 1
12c12
< [ -f /etc/ntp.conf ] || exit 0
---
> [ -f /etc/inet/ntp.conf ] || exit 0
14c14
< ARGS=`/usr/bin/cat /etc/ntp.conf | /usr/bin/nawk '
---
> ARGS=`/usr/bin/cat /etc/inet/ntp.conf | /usr/bin/nawk '
24c24
< printf("-s")
---
> printf("-s -w -m")
38c38
< printf("-s")
---
> printf("-s -w")
46c46
< (/usr/sbin/ntpdate $ARGS; sleep 2; /usr/local/ntp/bin/ntpd -c /et
c/ntp.conf) &
---
> (/usr/sbin/ntpdate $ARGS; sleep 2; /usr/lib/inet/xntpd) &
48c48
< /usr/local/ntp/bin/ntpd -c /etc/ntp.conf &
---
> /usr/lib/inet/xntpd &
53c53
< /usr/bin/pkill -x -u 0 '(ntpdate|ntpd)'
---
> /usr/bin/pkill -x -u 0 '(ntpdate|xntpd)'


【起動】
インストールしたばかりのときはいちいちリブートはせずに
直接デーモンを立ち上げます。

[root@home5 ntp4.1.72]# /etc/init.d/xntpd start
[root@home5 ntp4.1.72]# ps -ef |grep ntpd
root 24892 1 0 21:48:11 ? 0:00 /usr/local/ntp/bin/ntpd -c /etc/ntp.conf
プロセスがあがっていればOK


【動作確認】
[root@home5 bin]# ntpq -p
remote refid st t when poll reach delay offset disp
==============================================================================
*ntp-os01.ocn.ad 203.139.161.118 3 u 44 64 77 43.70 -30.992 380.20

*印がついていると同期が取れている

[root@home5 bin]# ntptrace
remote refid st t when poll reach delay offset disp
==============================================================================
*LOCAL(1) LOCAL(1) 5 l 5 64 377 0.00 0.000 0.93
+ntp-os01.ocn.ad 202.234.233.105 3 u - 64 377 40.83 -2.132 3.12
stratum:1次サーバからの深さ
offset:プロトコルが問い合わせるのにかかった時間(秒)
synch distance:上位サーバからの時間のずれ(秒)

・/var/adm/messages のログ確認
[root@home5 log]# grep ntpd messages
Jan 14 22:05:02 home3 ntpdate[24939]: [ID 558275 daemon.notice] adjust time server 210.145.255.76 offset -0.002518 sec
Jan 14 22:05:04 home3 ntpd[24941]: [ID 702911 daemon.notice] ntpd 4.1.72@1.762-rMon Jan 14 19:33:35 JST 2002 (1)
Jan 14 22:05:04 home3 ntpd[24941]: [ID 702911 daemon.notice] kernel time discipline status 0040

上手くいってる。
ログの場所の記述を間違えたりするとCannot open /var/ntp.logなどエラーが出てきます。
それから/var/log/ntpd.logも確認しておく

[root@home5 log]# cat ntpd.log
14 Jan 21:48:11 ntpd[24892]: signal_no_reset: signal 18 had flags 20000
14 Jan 21:51:30 ntpd[24892]: time set 0.000000 s
14 Jan 21:51:30 ntpd[24892]: synchronisation lost
ログが吐き出されていれば成功!!

【ログローテーション設定
●Linuxの場合
Linuxにはログローテーション用のソフトウェアが入っています。
[root@home5 logrotate.d]# rpm -qa|grep logrotate
logrotate-3.5.4-1

[root@home5 logrotate.d]# cd /etc/logrotate.d
[root@home5 logrotate.d]# vi syslog
/var/log/ntpd.log {
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2>/dev/null` 2>/dev/null || true
endscript
}
この5行をsyslogのなかに記述してやります。
これでntpd.logもローテーションしてくれます。
●Solarisの場合
# vi /usr/local/bin/newntpdlog
#! /bin/sh
#
LOG=ntpd.log
cd /var/log
test -f $LOG.2 && mv $LOG.2 $LOG.3
test -f $LOG.1 && mv $LOG.1 $LOG.2
test -f $LOG.0 && mv $LOG.0 $LOG.1
mv $LOG $LOG.0
cp /dev/null $LOG
chmod 644 $LOG
/etc/init.d/xntpd stop
/etc/init.d/xntpd start
# crontab -e
0 4 * * 0 /usr/local/bin/newntplog
毎週日曜日午前4時にローテーションするようにcronに登録しておきます。
これで問題ないでしょう!
ntp4.1.72インストール(2002/01/14)