Linux /usr/share/zoneinfo/ プラットフォームは独立していますか?

Linux /usr/share/zoneinfo/ プラットフォームは独立していますか?

私は組み込み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または上位バイトから)に基づいて1つ以上のバイトシーケンスとして表されます。 [...]

読書ライブラリがはるかに古くなっている場合は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通常、異なるオペレーティングシステムや同じオペレーティングシステムの異なるバージョンで共有する意図はありません。

関連情報