강좌 & 팁
글 수 2,412
2011.01.09 20:43:18 (*.138.143.120)
69224
먼저 필요한 파일들을 구한다.
tzdata : 시간대 설정 정보파일
tzcode : 시간대 정보를 컴파일하기 위한 소스
zic : 시간대 정보를 컴파일할 파일(/usr/arm-linux/sbin/zic 에 있다)
tzdata : ftp://elsie.nci.nih.gov/pub/tzdata*.tar.gz
참조 http://www-ftp.lip6.fr/pub/OpenBSD/src/lib/libc/time/tz-link.htm
zic : ftp://elsie.nci.nih.gov/pub/tzcode*.tar.gz
를 다운받아 컴파일하던지 아니면 glibc 를 크로스 컴파일하면 /prefix/sbin/zic 에 생성된다.
참조 링크
설치법
1. zic 를 타겟 보드의 적당한 디렉토리에 설치한다(/bin/ /sbin/)
2. 적당한 디렉토리에 tzdata*.tar.gz 의 압축을 푼다. (tzdata 라는 디렉토리를 만들어 그곳에 푼다.)
디렉토리는 아래와 같이 나온다.
root@boggle70-desktop:timezone# ls -l
합계 1648
-r--r--r-- 1 8800 root 15334 2010-10-13 01:36 Makefile
-r--r--r-- 1 8800 root 3826 2010-10-13 01:36 README
-r--r--r-- 1 8800 root 24073 2010-10-13 01:36 Theory
-r--r--r-- 1 8800 root 39947 2010-11-01 22:18 africa
-r--r--r-- 1 8800 root 15694 2010-11-01 22:18 antarctica
-r--r--r-- 1 8800 root 4479 2010-10-13 01:36 asctime.c
-r--r--r-- 1 8800 root 107888 2010-11-01 22:18 asia
-r--r--r-- 1 8800 root 62521 2010-11-01 22:18 australasia
-r--r--r-- 1 8800 root 4102 2010-11-01 22:18 backward
-r--r--r-- 1 8800 root 3417 2010-10-13 01:36 checktab.awk
-r--r--r-- 1 8800 root 5161 2010-10-13 01:36 date.1
-rw-r--r-- 1 8800 root 6151 2010-10-25 21:19 date.1.txt
-r--r--r-- 1 8800 root 22848 2010-10-13 01:36 date.c
-r--r--r-- 1 8800 root 1707 2010-10-13 01:36 difftime.c
-r--r--r-- 1 8800 root 3020 2010-11-01 22:18 etcetera
-r--r--r-- 1 8800 root 116278 2010-11-01 22:18 europe
-r--r--r-- 1 8800 root 411 2010-11-01 22:18 factory
-r--r--r-- 1 8800 root 1374 2010-10-13 01:36 ialloc.c
-r--r--r-- 1 8800 root 4180 2010-11-01 22:18 iso3166.tab
-r--r--r-- 1 8800 root 55948 2010-10-13 01:36 itca.jpg
-r--r--r-- 1 8800 root 2857 2010-11-01 22:18 leapseconds
-r--r--r-- 1 8800 root 49985 2010-10-13 01:36 localtime.c
-r--r--r-- 1 8800 root 5985 2010-10-13 01:36 newctime.3
-rw-r--r-- 1 8800 root 6075 2010-10-25 21:19 newctime.3.txt
-r--r--r-- 1 8800 root 6827 2010-10-13 01:36 newstrftime.3
-rw-r--r-- 1 8800 root 4992 2010-10-25 21:19 newstrftime.3.txt
-r--r--r-- 1 8800 root 5434 2010-10-13 01:36 newtzset.3
-rw-r--r-- 1 8800 root 6898 2010-10-25 21:19 newtzset.3.txt
-r--r--r-- 1 8800 root 119672 2010-11-01 22:18 northamerica
-r--r--r-- 1 8800 root 1211 2010-11-01 22:18 pacificnew
-r--r--r-- 1 8800 root 7223 2010-10-13 01:36 private.h
-r--r--r-- 1 8800 root 1206 2010-10-13 01:36 scheck.c
-r--r--r-- 1 8800 root 19324 2010-11-01 22:18 solar87
-r--r--r-- 1 8800 root 19342 2010-11-01 22:18 solar88
-r--r--r-- 1 8800 root 19618 2010-11-01 22:18 solar89
-r--r--r-- 1 8800 root 67509 2010-11-01 22:18 southamerica
-r--r--r-- 1 8800 root 18657 2010-10-13 01:36 strftime.c
-r--r--r-- 1 8800 root 1564 2010-11-01 22:18 systemv
-r--r--r-- 1 8800 root 3290 2010-10-13 01:36 time2posix.3
-rw-r--r-- 1 8800 root 3402 2010-10-25 21:19 time2posix.3.txt
-r--r--r-- 1 8800 root 20585 2010-10-13 01:36 tz-art.htm
-r--r--r-- 1 8800 root 32595 2010-10-13 01:36 tz-link.htm
-rw-r--r-- 1 root root 192605 2011-01-09 19:52 tzcode2010n.tar.gz
-rw-r--r-- 1 root root 191722 2011-01-09 19:52 tzdata2010o.tar.gz
-r--r--r-- 1 8800 root 4308 2010-10-13 01:36 tzfile.5
-rw-r--r-- 1 8800 root 4486 2010-10-25 21:19 tzfile.5.txt
-r--r--r-- 1 8800 root 5008 2010-10-13 01:36 tzfile.h
-r--r--r-- 1 8800 root 1196 2010-10-13 01:36 tzselect.8
-rw-r--r-- 1 8800 root 1087 2010-10-25 21:19 tzselect.8.txt
-r--r--r-- 1 8800 root 7117 2010-10-13 01:36 tzselect.ksh
-r--r--r-- 1 8800 root 5839 2010-10-13 01:36 usno1988
-r--r--r-- 1 8800 root 21156 2010-10-13 01:36 usno1989
-r--r--r-- 1 8800 root 21154 2010-10-13 01:36 usno1989a
-r--r--r-- 1 8800 root 10354 2010-10-13 01:36 usno1995
-r--r--r-- 1 8800 root 10405 2010-10-13 01:36 usno1997
-r--r--r-- 1 8800 root 10405 2010-10-13 01:36 usno1998
-r--r--r-- 1 8800 root 504 2010-10-13 01:36 workman.sh
-r--r--r-- 1 8800 root 707 2010-11-01 22:18 yearistype.sh
-r--r--r-- 1 8800 root 1461 2010-10-13 01:36 zdump.8
-rw-r--r-- 1 8800 root 1449 2010-10-25 21:19 zdump.8.txt
-r--r--r-- 1 8800 root 15926 2010-10-13 01:36 zdump.c
-r--r--r-- 1 8800 root 12755 2010-10-13 01:36 zic.8
-rw-r--r-- 1 8800 root 13242 2010-10-25 21:19 zic.8.txt
-r--r--r-- 1 8800 root 64893 2010-10-13 02:37 zic.c
-r--r--r-- 1 8800 root 19419 2010-11-01 22:18 zone.tab
-r-xr-xr-x 1 8800 root 1438 2010-10-13 01:36 zoneinfo2tdf.pl
iso3166.tab : ISO 3166-글자체의 국가코드와 국가명 표
zone.tab : 국가명, 위도, 경도, TZ값, 그리고 기술적인 명령 표.
3. 컴파일을 한다.
root@boggle70-desktop:timezone# make
sed \
-e 's|AWK=[^}]*|AWK=nawk|g' \
-e 's|TZDIR=[^}]*|TZDIR=/usr/local/etc/zoneinfo|' \
<tzselect.ksh >tzselect
chmod +x tzselect
cc -DTZDIR=\"/usr/local/etc/zoneinfo\" -c -o zic.o zic.c
cc -DTZDIR=\"/usr/local/etc/zoneinfo\" -c -o localtime.o localtime.c
cc -DTZDIR=\"/usr/local/etc/zoneinfo\" -c -o asctime.o asctime.c
cc -DTZDIR=\"/usr/local/etc/zoneinfo\" -c -o scheck.o scheck.c
cc -DTZDIR=\"/usr/local/etc/zoneinfo\" -c -o ialloc.o ialloc.c
cp yearistype.sh yearistype
chmod +x yearistype
cc -DTZDIR=\"/usr/local/etc/zoneinfo\" zic.o localtime.o asctime.o scheck.o ialloc.o -o zic
cc -DTZDIR=\"/usr/local/etc/zoneinfo\" -c -o zdump.o zdump.c
cc -DTZDIR=\"/usr/local/etc/zoneinfo\" zdump.o localtime.o ialloc.o -o zdump
cc -DTZDIR=\"/usr/local/etc/zoneinfo\" -c -o difftime.o difftime.c
Makefile 에서 TOPDIR 의 경로를 적당히 바꾼다.
root@boggle70-desktop:timezone# make install 하면 쭉 만들어진다.
4. 만들어진 파일일을 하나 살펴보자
root@boggle70-desktop:timezone# file install/etc/zoneinfo/Asia/Seoul
install/etc/zoneinfo/Asia/Seoul: timezone data, version 2, 6 gmt time flags, 6 std time flags, no leap seconds,
12 transition times, 6 abbreviation chars
타겟보드에서 zic 를 사용하고자 한다면 모르지만 zic 를 굳이 타겟에서 하지 않아도 생성된 데이타는
아키텍쳐에 관계없이 사용할수 있는 시간대의 정보 파일이다.
양을 줄이기 위해서 필요없는 국가들은 알아서 삭제하라.
반드시 필요한 파일은 zoneinfo 디렉토리의 파일들이다.
5. 마지막으로 NTP 와 시스템 전체에 이 설정을 적용하기 위한 방법이다.
GNU C Library 에서 로컬타임을 적용하기 위한 방법중에 한가지를 소개한다.
문서는 http://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html 를 참조한다.
환경변수에 TZ 변수를 적용하는 방법이다.
/etc/profile 에 아래를 추가한다.
export TZ=":/etc/localtime"
이제 부팅시에 TZ 환경변수는 GMT + xxx 와 같은 스트링을 사용하지 않고
/etc/localtime 에 컴파일된 파일을 읽어 시간설정을 하게 된다.
export 의 내용은 아래와 같이 보인다.
declare -x TZ=":/etc/localtime"
적용할 시간대에 /etc/localtime 의 심볼링크를 만들면 시간 적용이 된다.
ln -sf /usr/local/etc/zoneinfo/Asia/Seoull /etc/localtime
root:/etc# ls -la localtime
lrwxrwxrwx 1 root root 34 Jan 1 1970 localtime -> /usr/local/etc/zoneinfo/Asia/Seoul
과 같이 하면 시간적용이 된다.
이제 rdate -s time.bora.net 을 해서 ntp 와 시간을 동기시키면 모든 적용이 끝난다.
확인해보면
root:/etc# date
Sun Jan 9 20:48:10 KST 2011
와 같이 시간이 표시되고 ftp 나 파일 생성시 모두 이시간이 적용된다.
주의 사항
이렇게 열심히 Timezone 을 맞추어도 커널에서 gettimeofdate 를 통해 얻어 오는 것은 GMT 기준시간이다.