
起動時に systemd は私に以下を提供します。
システム時間がビルド時間より速く、クロックよりも速くなります。
ハードウェアクロックがビルド時間より速い場合。
しかし、このビルド時間はどこから来ますか? 2020年9月9日に時間を早める
しかし、uname -v
2021年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)