systemd 从哪里获得构建时间以推进?

systemd 从哪里获得构建时间以推进?

启动时,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)

相关内容