私は組み込みLinux(ARM / busybox)システムを使用しています。 systemd および timedatectl システム実行ファイルはありますが、/etc/timezone、/usr/share/zoneinfo、または zic タイムゾーンデータコンパイラはありません。
この組み込みシステムには十分なシステムディスク容量があります。
timedatectlが提供するタイムゾーン機能にアクセスするために、/usr/share/zoneinfoの内容をamd64 Linux実装から私の組み込みARM Linux実装に「現状のまま」コピーできますか?
ご協力ありがとうございます。
答え1
はい、バイナリタイムゾーンファイルはプラットフォームに依存しません。
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
通常、異なるオペレーティングシステムや同じオペレーティングシステムの異なるバージョンで共有する意図はありません。