systemdはどこでプッシュするビルド時間を取得しますか?

systemdはどこでプッシュするビルド時間を取得しますか?

起動時に systemd は私に以下を提供します。

システム時間がビルド時間より速く、クロックよりも速くなります。

ハードウェアクロックがビルド時間より速い場合。

しかし、このビルド時間はどこから来ますか? 2020年9月9日に時間を早める

しかし、uname -v2021年2月15日を与えました。

2021年7月21日が/etc/timestamp含まれます。

それでは、systemdはこのビルド時間をどこで取得しますか?

ベストアンサー1

タイムスタンプは、おそらくカーネルのビルド時間ではなく、systemdデーモンのビルド時間からのものです。 /etc/timestampがどこから来たのかわかりません。

読んだ後システムコード、システムバイナリをコンパイルするとき、または/usr/lib/clock-epochファイル(存在する場合)でビルド時間が設定されているようです。

エラーメッセージは次のとおりです。

$ ag 'System time before build time'

src/core/main.c
1602:                log_info("System time before build time, advancing clock.");

このエラーメッセージの条件は、関数の出力によって異なります。

$ ag clock_apply_epoch

src/shared/clock-util.c
142:int clock_apply_epoch(ClockChangeDirection *ret_attempted_change) {

...これは、ハードコーディングされたパスを計算するか、コンパイル時に定義された定数を使用します。

$ ag EPOCH_FILE

src/shared/clock-util.c
140:#define EPOCH_FILE "/usr/lib/clock-epoch"
152:        if (stat(EPOCH_FILE, &st) < 0) {
154:                        log_warning_errno(errno, "Cannot stat " EPOCH_FILE ": %m");

定数は次のように定義されます。

$ ag TIME_EPOCH
meson.build
724:conf.set('TIME_EPOCH', time_epoch)

おすすめ記事