Protocol
NTP(Network Time Protocol) 크로스컴파일(포팅)
불량껌
2010. 6. 8. 10:45
NTP는 네트워크를 통한 시간 동기화에 사용되는 프로토콜이다. NTPD(ntp데몬)은 NTP를 이용해 시간 동기화에 사용되는 데몬을 말한다.
정확한 시간을 얻기위해 주로 사용되는 방법은 GPS의 시간을 받아오는 방법과 세슘원자 시계를 이용하는 방법이있다. 당연히 세슘원자 시계를 구매하는 비용보다.. GPS를 이용한것이 가장 저렴하다.
1계층(Stratum 1)은 호스트에 정확한 시간을 알 수 있는 장치(GPS나 원자시계)를 달아 얻은 시간을 NTP를 이용해 다른 서버에 전달해주는 서버를 말한다.
2계층(Stratum 2)은 1계층에서 NTP를 이용해 시각 정보를 받아 다시 다른 서버에 전달해주는 서버를 말한다.
NTP는 15계층까지 가도 1계층과 1/1000 초 정도의 차이밖에 나지 않도록 설계되었다.
NTP Source를 받아 설치 및 크로스컴파일 사용법을 알아보겠다.
1. NTP Source를 받는다.
http://www.ntp.org/ 에서 다운받는다
여기서 사용된 소스파일은 ntp-4.2.6.p1.tar.gz 이다.
2. 압축풀고 설치
tar xvfz ntp-4.2.6.p1.tar.gz으로 푼다.
./configure --필요한 옵션을 한다.
크로스컴파일 위주로 설명한다.
./configure --prefix=/설치장소/ --target=mips-linux --host=mips-linux --without-crypto
설치전에 mips-linux-gcc등이 설치가 되어있어야한다. 컴파일러는 당연히 설치되어있어야지 뭘 하지...
--without-crypto는 source자체의 버그를 피해가기 위하여 넣었다.
make하면 ipv6관련되어 오류가 일어난다. x86으로 설치하면 오류없이 make가 완료되지만 cross compile하면
이런 오류가 나온다. 약간의 소스를 수정하였다.
오류 수정후
make
make install
설치가 완료 되었다.
설치장소로 가면 bin폴더에 실행 파일들이 있다.
file ntpd를 해보면 현재 파일이 mips로 컴파일된것을 확인 할 수 있다.
여러 파일이 만들어 져있다.
ntpd - ntp데몬으로 ntp서버와 시간을 주기적으로 동기화 한다.
ntpdate - 현재 시간을 서버와 동기화 한다.
ntpq - ntp.conf에 입력한 서버의 정보를 볼 수 있다.
나머지는 구글링해보면 나온다.
여기서 내가 필요로 하는것은 mips장비의 시간을 현재시간으로 맞추기 위한 것이므로 ntpd만 필요하다.
3.실행
ftp로 mips장비에 ntpd를 copy한다. ntp 경로를 보기 위해 ntpq도 같이 copy해준다.
mips장비에 현재 ntp가 사용중이라면.. kill해줘야 한다. 내 장비는 ntp자체가 없다.
ntpd를 실행 하기 위해서는 /etc/ntp.conf 파일이 필요하다 없으면 만들면 된다.
여러가지 내용이 들어간다. 자세한 내용은 생략..
여기서 필요한 것은 시간을 동기화 하기위한 server이다.
vi /etc/ntp.conf에서 밑에 서버만 추가한다.
server time.bora.net
server time.kriss.re.kr
server time.nist.gov
server ntp1.epidc.co.kr
server ntp2.epidc.co.kr
여러개 넣어줘도 상관없다.
그리고나서 ntpd를 실행한다. ntpd를 그냥 실행 시켜도 상관없다. 하지만 필요한 옵션을 주어서 실행한다.
./ntpd -g
./ntpq -p를 하면 ntp.conf에 입력한 서버에 대한 정보가 출력된다.
date로 현재 시간을 확인해본다. 동기화 하는데 몇분정도 시간이 걸린다.
Tue Jun 8 10:35:08 KST 2010 로 출력이 된다.
4.문제점 및 해결
실행하는데 두가지 문제점이 발생했다. 먼저 default gateway설정이 안되어 있던점과 시간이 KST가 아닌 UTC로 출력이되어 현재 시간과 다르게 동기화가 되었다.
default gateway의 문제점은 ping으로 확인해 볼 수 있다. ping www.naver.com 으로 했을경우 ping이 잘 되면 default gateway가 설정되어있는 것이다. 직접 확인하는 방법으로 route를 입력해보면 현재 설정되어있는 routing table이 출력된다.
default gateway가 설정되어 있지 않다면 route add default gw "IP주소" "인터페이스" 를 입력하면 된다.
여기서 내가 입력한 값은 route add default gw 192.168.0.1 lan 이다.
시간이 KST가 아닌 다른 것으로 출력이 된다면 /etc/profile에서 환경변수를 등록해주면 된다.
/etc/profile에서
export TZ=KST-09:00:00
을 입력한다.