저는 임베디드 Linux(ARM/busybox) 시스템을 사용하고 있습니다. systemd 및 timedatectl 시스템 실행 파일은 있지만 /etc/timezone, /usr/share/zoneinfo 또는 zic 시간대 데이터 컴파일러는 없습니다.
이 임베디드 시스템에는 시스템 디스크 공간이 충분합니다.
timedatectl에서 제공하는 시간대 기능에 액세스하기 위해 /usr/share/zoneinfo의 내용을 amd64 Linux 구현에서 내 임베디드 ARM Linux 구현으로 "있는 그대로" 복사할 수 있습니까?
당신의 도움을 주셔서 감사합니다.
답변1
예, 바이너리 시간대 파일은 플랫폼 독립적입니다.
예를 들어,Wikipedia 기사 "tz 데이터베이스":
tz 데이터베이스는 사람이 읽을 수 있는 형식으로 규칙 및 영역 변환을 나열하는 텍스트 파일 세트로 게시됩니다. 사용을 위해 이러한 텍스트 파일은 다음 세트로 컴파일됩니다.플랫폼 독립적인 바이너리- 시간대별로 하나씩. 참조 소스 코드에는 zic(Zone Information Compiler)이라는 컴파일러와
localtime()
이러한 파일을 읽고 및 와 같은 표준 API에서 사용하는 코드가 포함되어 있습니다mktime()
.
바이너리 형식 자체는 맨페이지에 문서화되어 있습니다.tz 파일(5)그리고RFC 8536:
tzset(3)에서 사용하는 시간대 정보 파일은 일반적으로 /usr/share/zoneinfo와 유사한 이름을 가진 디렉토리에 있습니다. 이러한 파일은 인터넷 RFC 8536에 설명된 형식을 사용합니다. 각 파일은 8비트 바이트의 시퀀스입니다. 파일에서 이진 정수는 네트워크 순서(bigendian 또는 상위 바이트부터)에 따라 하나 이상의 바이트 시퀀스로 표시됩니다. [...]
독서 라이브러리가 훨씬 오래된 경우 zic
, 다음 사항에 따라 일부 비호환성이 발생할 수 있습니다.zic
런타임 중에 사용되는 매개변수:
-b bloat는
bloat에 지정된 이전 버전과 호환되는 데이터를 출력합니다. 팽창이 심각한 경우 추가 데이터 항목을 생성하여 64비트 생성 데이터를 잘못 처리하는 소프트웨어와 같은 이전 소프트웨어의 잠재적인 버그나 비호환성을 해결하십시오. 팽창이 작은 경우 출력 파일을 작게 유지하면 버그와 비호환성을 확인하는 데 도움이 될 수 있습니다. 현재 기본값은 뚱뚱하지만 향후 zic 버전에서는 변경될 예정입니다. 64비트 데이터를 잘못 처리하는 소프트웨어는 2038년 이후 타임스탬프를 잘못 처리하는 경우가 많기 때문입니다. 출력 크기를 줄이는 다른 방법은 -r 옵션도 참조하세요.
답변2
나는 Ubuntu 시스템에서 /usr/share/zoneinfo/의 tarball을 생성하고 이를 복사하여 임베디드 시스템에 압축을 풀었고 다음은 "그냥 작동했습니다".
따라서 /usr/share/zoneinfo처럼 보입니다.예플랫폼 독립적.
root@mityomapl138:~# timedatectl set-timezone America/New_York
root@mityomapl138:~# timedatectl
Warning: ignoring the TZ variable, reading the system's timezone setting only.
Local time: Thu 2024-01-18 11:13:37 EST
Universal time: Thu 2024-01-18 16:13:37 UTC
RTC time: Thu 2024-01-18 16:13:37
Timezone: America/New_York (EST, -0500)
NTP enabled: n/a
NTP synchronized: yes
RTC in local TZ: no
DST active: no
Last DST change: DST ended at
Sun 2023-11-05 01:59:59 EDT
Sun 2023-11-05 01:00:00 EST
Next DST change: DST begins (the clock jumps one hour forward) at
Sun 2024-03-10 01:59:59 EST
Sun 2024-03-10 03:00:00 EDT
답변3
귀하의 질문은 구체적으로 이에 관한 것이지만 플랫폼 독립적인 파일에 대해 /usr/share/zoneinfo
더 일반적으로 답변할 수 있습니다 . /usr/share
예를 들어, 다음과 같이 코딩됩니다.파일 시스템 계층 표준:
이
/usr/share
계층 구조는 모든 읽기 전용 스키마 독립적 데이터 파일에 적용됩니다.이 계층 구조는 특정 운영 체제의 모든 아키텍처 플랫폼에서 공유되도록 고안되었습니다. 예를 들어 i386, Alpha 및 PPC 플랫폼이 있는 사이트는
/usr/share
중앙에서 설치되는 단일 디렉터리를 유지할 수 있습니다. 그러나/usr/share
일반적으로 다른 운영 체제나 동일한 운영 체제의 다른 버전에서 공유할 의도는 없습니다.