Linux /usr/share/zoneinfo/ 与平台无关吗?

Linux /usr/share/zoneinfo/ 与平台无关吗?

我正在使用嵌入式 Linux (ARM/busybox) 系统。它有 systemd 和 timedatectl 系统可执行文件,但没有 /etc/timezone、/usr/share/zoneinfo 或 zic 时区数据编译程序。

我在这个嵌入式系统上有足够的系统磁盘空间。

是否可以将 /usr/share/zoneinfo 内容从 amd64 Linux 实现“按原样”复制到我的嵌入式 ARM Linux 实现,以访问 timedatectl 提供的时区功能?

感谢您的帮助。

答案1

是的,二进制时区文件与平台无关。

例如,在维基百科文章“tz 数据库”:

tz 数据库作为一组文本文件发布,其中以人类可读的格式列出了规则和区域转换。为了使用,这些文本文件被编译成一组与平台无关的二进制文件——每个时区一个。参考源代码包括一个名为 zic(区域信息编译器)的编译器,以及读取这些文件并在标准 API(例如localtime()和 )中使用它们的代码mktime()

二进制格式本身记录在联机帮助页中tz 文件(5)RFC 8536:

tzset(3) 使用的时区信息文件通常位于名称类似于 /usr/share/zoneinfo 的目录下。这些文件使用 Internet RFC 8536 中描述的格式。每个文件都是 8 位字节的序列。在文件中,二进制整数由网络顺序中的一个或多个字节的序列表示(bigendian,或高位字节在前),[...]

如果阅读库比 旧得多zic,可能会出现一些不兼容性,具体取决于zic运行时使用的参数:

-b bloat
输出 bloat 指定的向后兼容数据。如果膨胀很严重,请生成额外的数据条目来解决旧软件中潜在的错误或不兼容问题,例如错误处理 64 位生成数据的软件。如果膨胀较小,请保持输出文件较小;这可以帮助检查错误和不兼容性。尽管当前默认值是 fat,但这一点打算在未来的 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通常不打算由不同操作系统或同一操作系统的不同版本共享。

相关内容