2007. 7. 3. 15:22

Clockspeed를 이용한 시간 동기화.

Clockspeed를 이용한 시간 동기화.


D. J. Bernstein 이 만든 clockspeed는 NTP 프로토콜을 사용해 믿을만한 소스와의 시간 동기화에 쓰이는 sntpclock,
로컬 네트워크상의 컴퓨터들의 시간을 동기화 시키는데 쓰이는 데몬과 클라이언트 (taiclockd, taiclock)등을 포함하고 있다.


1. 컴파일/설치
2. 시간 조정
3. 정확한 시간으로 유지하기
4. 로컬 네트워크의 시간 동기화
5. daemontools로 clockspeed 구동하기


1. 컴파일 / 설치
?ClockSpeed 소스를 다운로드 한다.
http://cr.yp.to/clockspeed.html 사이트 참고


다운로드
http://cr.yp.to/clockspeed/clockspeed-0.62.tar.gz



# tar xzf clockspeed-0.62.tar.gz# cd clockspeed-0.62# make# make setup check


파일들은 /usr/local/clockspeed/ 에 설치되며 /etc/leapsecs.dat도 생긴다.
실행파일들은 /usr/local/clockspeed/bin 에 설치되므로 $PATH에 추가해준다.
(아래 와 같이 make시에 에러가 발생된다면 패치를 적용한후 컴파일 한다.

http://qmail.kldp.org/src/patches/glibc-2.3.1/clockspeed-0.62.errno.patch => glibc 2.3.1. 이상에서는 컴파일 에러가 됨.

make시 에러 문구 내용.


*** clockview.c:46: warning: return type of `main’ is not `int’


직접 에러패치 파일을 만들수도 있다.
# wget http://www.bsdian.com/~master/clockspeed-0.62.errno.patch혹은, 아래 처럼 만들자..# vi clockspeed-0.62.errno.patch
diff -u clockspeed-0.62.old/clockview.c clockspeed-0.62/clockview.c— clockspeed-0.62.old/clockview.c 1998-10-13 12:37:49.000000000 -0500+++ clockspeed-0.62/clockview.c 2003-05-08 09:59:26.000000000 -0500@@ -1,5 +1,6 @@ #include #include +#include #include “substdio.h” #include “readwrite.h” #include “strerr.h”diff -u clockspeed-0.62.old/error.h clockspeed-0.62/error.h— clockspeed-0.62.old/error.h 1998-10-13 12:37:49.000000000 -0500+++ clockspeed-0.62/error.h 2003-05-08 09:07:13.000000000 -0500@@ -1,7 +1,7 @@ #ifndef ERROR_H #define ERROR_H -extern int errno;+#include extern int error_intr; extern int error_nomem;diff -u clockspeed-0.62.old/leapsecs_read.c clockspeed-0.62/leapsecs_read.c— clockspeed-0.62.old/leapsecs_read.c 1998-10-13 12:37:49.000000000 -0500+++ clockspeed-0.62/leapsecs_read.c 2003-05-08 09:07:13.000000000 -0500@@ -2,7 +2,6 @@ #include #include #include -extern int errno; #include “tai.h” #include “leapsecs.h”
패치 적용하는 방법 아래 참고.
If you have glibc-2.3.1 then none of the software written by djb willcompile because of an incompatible declaration of errno.Here you can find patches correcting this problem, and source rpmswhich use these patches.To use the patches==================From the top distribution directory, apply the appropriate errno patchwith -p1. So, for example, for djbdns, you would dotar zxvf djbdns-1.05.tar.gzcd djbdns-1.05patch -p1 < /path/to/djbdns-1.05.errno.patch참고 : http://qmail.org/moni.csi.hu/pub/glibc-2.3.1/패치를 하였으니 컴파엘에 들어간다…


#make#make setup check컴파일 성공적으로 되었다면, 시간 조정에 들어간다.
2. 시간조정


일단 정확한 시간 소스를 제공할 믿을 만한 ?NTp 서버를 사용해야 하는데, ntp.nasa.gov 를 사용하자….
ntp.nasa.gov의 ip 주소는 198.123.30.132 이다.
NTP 서버의 ip를 이용하여, 자신의 시스템과 NTP 서버간의 시간 차이를 알아보자.
www:~# sntpclock 198.123.30.132 | clockviewbefore: 2004-10-04 08:34:03.420452000000000000after: 2004-10-04 11:21:28.786438787944868206위에서 본것 같이 꽤 차이가 나고 있다… 다음을 실행하여 시간을 맞춘다.


www:~# sntpclock 198.123.30.132 | clockadd다시 얼마나 차이가 나는지 재확인..


www:~# sntpclock 198.123.30.132 | clockviewbefore: 2004-10-04 11:22:02.452292000000000000after: 2004-10-04 11:22:02.452249708414793014거의 시간차이가 없음을 알수 있다.
3. 정확한 시간으로 유지하기
RTC 자체의 부정확함 때문에 한번 시간을 정확히 맞추었다 하더라도 얼마간의 시간이
지나면 다시 오차가 생기기에, 이것을 막기 위해 clockspeed를 다음과 같은 방법으로 실행해줌.


1. clockspeed를 실행하고 NTP 서버와의 오차를 기록한다…
$ clockspeed &$ sntpclock 198.123.30.132 > /usr/local/clockspeed/adjust &


2. 몇시간 뒤에 다시 오차를 clockspeed에게 알려준다.
 $ sntpclock 198.123.30.132 > /usr/local/clockspeed/adjust &


3. 몇일 후에 오차를 확인해보고 위 과정을 반복한다.
$ sntpclock 198.123.30.132 | clockview$ sntpclock 198.123.30.132 > /usr/local/clockspeed/adjust &


4. 3번과정을 몇주후, 몇개월 후에 한번 실행해주면 NTP 서버와 거의 오차가 없는 완벽한 동기화가 이뤄짐…
5. daemontools로 clockspeed 구동하기.
다음 내용은 홍덕기 님의 자료를 인용.

◦ daemontools에 clockspeed 서비스 디렉토리를 생성.

#mkdir /var/service/clockspeed

◦ 서비스의 실행 스크립트를 생성

#vi /var/service/clockspeed/run#!/bin/shexec 2>&1PATH=”/usr/local/clockspeed/bin:/sbin:/usr/sbin:/bin:/usr/bin:$PATH”exec clockspeed
◦ run 스크립트를 샐행 모드로 설정해준다.

$ chmod 755 /var/service/clockspeed/run

◦ daemontools 서비스로 실행

#ln -s /var/service/clockspeed /service 위와 같이 하면 항상 백그라운드로 clockspeed를 띄워 둘 수 있다.
아래와 같이 백그라운드에 항상 실행되어 있는 것을 알수 있다.
# ps ax 975 pts/0 Ss 0:00 -bash 976 pts/0 S 0:00 -su 996 pts/0 S 0:00 clockspeed 1080 ? S 0:00 supervise clockspeed 1081 ? S 0:00 clockspeed 1088 pts/0 R+ 0:00 ps ax


출처: http://people.kldp.org/~eunjea/clockspeed.php#install