启动时,systemd 给我
系统时间早于构建时间,提前时钟
如果硬件时钟早于构建时间。
但它从哪里获得这个构建时间呢?将时间提前至 09/Sept/2020
但uname -v
给了我 2021 年 2 月 15 日
并/etc/timestamp
包含 2021 年 7 月 21 日。
那么 systemd 从哪里获得这个构建时间呢?
答案1
该时间戳可能来自 systemd 守护进程的构建时间,而不是内核的构建时间 (uname)。我不知道 /etc/timestamp 来自哪里。
看完之后系统代码,我认为构建时间是在编译 systemd 二进制文件时设置的,或者如果存在,则从文件 /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)