테스트 서버 : RHEL 4.7 32 bit

커널 : 2.6.9-78.ELsmp

 

ntp, ptp 를 사용하지 않는 리눅스 서버는 윤초 보정에 대응하기 위해 윤초에 대응할 수 있는 kernel과 tzdata 버전으로 업데이트 해야 된다.

 

1. 패치 전

[root@localhost ~]# rpm -qa | grep tzdata
tzdata-2008b-3.el4

[root@localhost ~]# ls -la /etc/localtime
-rw-r–r– 1 root root 152 11월 13 2010 /etc/localtime

[root@localhost ~]# ls -la /usr/share/zoneinfo/Asia/Seoul
-rw-r–r– 2 root root 152 5월 31 2008 /usr/share/zoneinfo/Asia/Seoul

[root@localhost ~]# ls -la /usr/share/zoneinfo/right/Asia/Seoul
-rw-r–r– 2 root root 336 5월 31 2008 /usr/share/zoneinfo/right/Asia/Seoul

* zdump : time zone dumper
[root@localhost ~]# zdump -v Asia/Seoul | tail -n 10
Asia/Seoul Sat May 9 14:59:59 1987 UTC = Sat May 9 23:59:59 1987 KST isdst=0 gmtoff=32400
Asia/Seoul Sat May 9 15:00:00 1987 UTC = Sun May 10 01:00:00 1987 KDT isdst=1 gmtoff=36000
Asia/Seoul Sat Oct 10 13:59:59 1987 UTC = Sat Oct 10 23:59:59 1987 KDT isdst=1 gmtoff=36000
Asia/Seoul Sat Oct 10 14:00:00 1987 UTC = Sat Oct 10 23:00:00 1987 KST isdst=0 gmtoff=32400
Asia/Seoul Sat May 7 14:59:59 1988 UTC = Sat May 7 23:59:59 1988 KST isdst=0 gmtoff=32400
Asia/Seoul Sat May 7 15:00:00 1988 UTC = Sun May 8 01:00:00 1988 KDT isdst=1 gmtoff=36000
Asia/Seoul Sat Oct 8 13:59:59 1988 UTC = Sat Oct 8 23:59:59 1988 KDT isdst=1 gmtoff=36000
Asia/Seoul Sat Oct 8 14:00:00 1988 UTC = Sat Oct 8 23:00:00 1988 KST isdst=0 gmtoff=32400
Asia/Seoul Mon Jan 18 03:14:07 2038 UTC = Mon Jan 18 12:14:07 2038 KST isdst=0 gmtoff=32400
Asia/Seoul Tue Jan 19 03:14:07 2038 UTC = Tue Jan 19 12:14:07 2038 KST isdst=0 gmtoff=32400

* 2015년 7월 1일 윤초 보정이 right 내의 파일에도 빠져있다.

[root@localhost ~]# zdump -v right/Asia/Seoul | tail -n 10
right/Asia/Seoul Sun Dec 31 23:59:60 1995 UTC = Mon Jan 1 08:59:60 1996 KST isdst=0 gmtoff=32400
right/Asia/Seoul Mon Jan 1 00:00:00 1996 UTC = Mon Jan 1 09:00:00 1996 KST isdst=0 gmtoff=32400
right/Asia/Seoul Mon Jun 30 23:59:60 1997 UTC = Tue Jul 1 08:59:60 1997 KST isdst=0 gmtoff=32400
right/Asia/Seoul Tue Jul 1 00:00:00 1997 UTC = Tue Jul 1 09:00:00 1997 KST isdst=0 gmtoff=32400
right/Asia/Seoul Thu Dec 31 23:59:60 1998 UTC = Fri Jan 1 08:59:60 1999 KST isdst=0 gmtoff=32400
right/Asia/Seoul Fri Jan 1 00:00:00 1999 UTC = Fri Jan 1 09:00:00 1999 KST isdst=0 gmtoff=32400
right/Asia/Seoul Sat Dec 31 23:59:60 2005 UTC = Sun Jan 1 08:59:60 2006 KST isdst=0 gmtoff=32400
right/Asia/Seoul Sun Jan 1 00:00:00 2006 UTC = Sun Jan 1 09:00:00 2006 KST isdst=0 gmtoff=32400
right/Asia/Seoul Mon Jan 18 03:13:44 2038 UTC = Mon Jan 18 12:13:44 2038 KST isdst=0 gmtoff=32400
right/Asia/Seoul Tue Jan 19 03:13:44 2038 UTC = Tue Jan 19 12:13:44 2038 KST isdst=0 gmtoff=32400

 

2. 패치 후

[root@localhost ~]# rpm -Uvh tzdata-2015d-1.0.1.el4.noarch.rpm
Preparing… ########################################### [100%]
1:tzdata ########################################### [100%]

[root@localhost ~]# rpm -qa | grep tzdata
tzdata-2015d-1.0.1.el4

[root@localhost ~]# ls -la /etc/localtime
-rw-r–r– 1 root root 231 May 28 22:54 /etc/localtime

[root@localhost ~]# ls -la /usr/share/zoneinfo/Asia/Seoul
-rw-r–r– 2 root root 231 May 28 22:54 /usr/share/zoneinfo/Asia/Seoul

[root@localhost ~]# ls -la /usr/share/zoneinfo/right/Asia/Seoul
-rw-r–r– 2 root root 439 May 28 22:54 /usr/share/zoneinfo/right/Asia/Seoul

[root@localhost ~]# cp /usr/share/zoneinfo/right/Asia/Seoul /etc/localtime
cp: overwrite `/etc/localtime'? y

[root@localhost ~]# /usr/sbin/tzdata-update –tzdata

* tzdata만 업데이트해서는 윤초 보정에 대응을 할 수 없다.(이유는 아래 zdump의 내용을 보면 알 수 있다.)

반드시 tzdata를 업데이트 후 2015년 윤초 보정이 가능한 timezone (right)파일을 복사하고 tzdata-update 실행할 것.

– /etc/localtime 파일을 /usr/share/zoneinfo/right/Asia/Seoul(윤초가 반영된) 파일로 변경하고 tzdata-update –tzdata 명령으로 업데이트 하지 않으니 30초 정도 느린 현상이 발생했었다.

시스템을 재부팅 해도 30초 느린 증상은 해결되지 않았지만,  tzdata-update –tzdata 명령과 동시에 시간이 정확히 맞아졌다. CentOS 6.x와 tzdata-2015f-1.el6.noarch 에서 경험.

* Run "/usr/sbin/tzdata-update –tzdata" to update the timezone data

 

[root@localhost ~]# ls -la /etc/localtime
-rw-r–r– 1 root root 439 May 28 23:15 /etc/localtime

[root@localhost ~]# zdump -v Asia/Seoul | tail -n 10
Asia/Seoul Sat May 9 16:59:59 1987 UTC = Sun May 10 01:59:59 1987 KST isdst=0 gmtoff=32400
Asia/Seoul Sat May 9 17:00:00 1987 UTC = Sun May 10 03:00:00 1987 KDT isdst=1 gmtoff=36000
Asia/Seoul Sat Oct 10 16:59:59 1987 UTC = Sun Oct 11 02:59:59 1987 KDT isdst=1 gmtoff=36000
Asia/Seoul Sat Oct 10 17:00:00 1987 UTC = Sun Oct 11 02:00:00 1987 KST isdst=0 gmtoff=32400
Asia/Seoul Sat May 7 16:59:59 1988 UTC = Sun May 8 01:59:59 1988 KST isdst=0 gmtoff=32400
Asia/Seoul Sat May 7 17:00:00 1988 UTC = Sun May 8 03:00:00 1988 KDT isdst=1 gmtoff=36000
Asia/Seoul Sat Oct 8 16:59:59 1988 UTC = Sun Oct 9 02:59:59 1988 KDT isdst=1 gmtoff=36000
Asia/Seoul Sat Oct 8 17:00:00 1988 UTC = Sun Oct 9 02:00:00 1988 KST isdst=0 gmtoff=32400
Asia/Seoul Mon Jan 18 03:14:07 2038 UTC = Mon Jan 18 12:14:07 2038 KST isdst=0 gmtoff=32400
Asia/Seoul Tue Jan 19 03:14:07 2038 UTC = Tue Jan 19 12:14:07 2038 KST isdst=0 gmtoff=32400

[root@localhost ~]# zdump -v right/Asia/Seoul | tail -n 10
right/Asia/Seoul Sat Dec 31 23:59:60 2005 UTC = Sun Jan 1 08:59:60 2006 KST isdst=0 gmtoff=32400
right/Asia/Seoul Sun Jan 1 00:00:00 2006 UTC = Sun Jan 1 09:00:00 2006 KST isdst=0 gmtoff=32400
right/Asia/Seoul Wed Dec 31 23:59:60 2008 UTC = Thu Jan 1 08:59:60 2009 KST isdst=0 gmtoff=32400
right/Asia/Seoul Thu Jan 1 00:00:00 2009 UTC = Thu Jan 1 09:00:00 2009 KST isdst=0 gmtoff=32400
right/Asia/Seoul Sat Jun 30 23:59:60 2012 UTC = Sun Jul 1 08:59:60 2012 KST isdst=0 gmtoff=32400
right/Asia/Seoul Sun Jul 1 00:00:00 2012 UTC = Sun Jul 1 09:00:00 2012 KST isdst=0 gmtoff=32400
right/Asia/Seoul Tue Jun 30 23:59:60 2015 UTC = Wed Jul 1 08:59:60 2015 KST isdst=0 gmtoff=32400
right/Asia/Seoul Wed Jul 1 00:00:00 2015 UTC = Wed Jul 1 09:00:00 2015 KST isdst=0 gmtoff=32400   —> 다가올 2015년 7월 1일 00시 00분 00초 윤초 보정에 대한 정보를 확인할 수 있다.
right/Asia/Seoul Mon Jan 18 03:13:41 2038 UTC = Mon Jan 18 12:13:41 2038 KST isdst=0 gmtoff=32400
right/Asia/Seoul Tue Jan 19 03:13:41 2038 UTC = Tue Jan 19 12:13:41 2038 KST isdst=0 gmtoff=32400

 

* tzdata를 업데이트하고 right zoneinfo 를 적용하였으면 커널도 2.6.9-89 이상으로 업데이트 해야된다.

 

* 추가 정보

– ntp를 사용하는 경우 -x (slew 옵션)을 설정하여 해결 할 수도 있다. 즉, tzdata를 업데이트 하지 않아도 ntp 서비스를 통해 leap time 보정을 받을 수 있다.

– 또한 시간에 민감한 서비스라면 각 어플리케이션에서도 윤초에 대응할 수 있게 패치가 되어 있어야 한다.

– RHEL 5 ~ 7 버전에 대한 윤초 대응 방법은 커널버전, ntp 버전, tzdata 버전 별로 상이 하다. 따라서 다른 문서를 참고해서 해당 시스템에 맞게 적용해야 된다. 

아래는 레드햇 참고 문서이다.

https://access.redhat.com/articles/15145

 

* 아래는 RHEL4(CentOS 4) 용 최신 tzdata rpm 파일이다

tzdata-2015d-1.0.1.el4.noarch

* 아래는 윤초 취약점이 존재하는지 체크하는 스크립트 파일이다. RHEL(CentOS) 4 ~ 7 버전의 취약점 조사 가능.

leap_vulnerability

* 아래는 ntp 사용 시 윤초 대응에 대한 문서

https://access.redhat.com/ko/node/1393383

* 아래는 ntp를 사용하지 않을 때와, 만약 사용할 경우 ntp 및 OS 버전별 대응 방법에 대한 문서.

https://access.redhat.com/solutions/1441373

* 윤초 검증에 사용될 수 있는 ntptime

http://d.hatena.ne.jp/labunix/20120306

* Now you can confirm what action you need in the following Action Matrix.

https://access.redhat.com/solutions/1441373#matrix

* How to clear the Leap Second Insertion flag after it has been received?

https://access.redhat.com/articles/199563

 

* 수동 시간 설정.

# date -s "2015-06-30 23:40:00"

Linux leap second, 윤초 대응

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다