systemd는 어디에서 푸시할 빌드 시간을 얻나요?

systemd는 어디에서 푸시할 빌드 시간을 얻나요?

시작할 때 systemd는 나에게 다음을 제공합니다.

시스템 시간이 빌드 시간보다 빠르며 시계보다 빠릅니다.

하드웨어 시계가 빌드 시간보다 빠른 경우.

하지만 이 빌드 시간은 어디서 가져오나요? 2020년 9월 9일로 시간을 앞당기세요

그런데 uname -v2021년 2월 15일을 줬어요

2021년 7월 21일 이 /etc/timestamp포함됩니다.

그렇다면 systemd는 이 빌드 시간을 어디서 얻나요?

답변1

타임스탬프는 아마도 커널의 빌드 시간(uname)이 아니라 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)

관련 정보