시작할 때 systemd는 나에게 다음을 제공합니다.
시스템 시간이 빌드 시간보다 빠르며 시계보다 빠릅니다.
하드웨어 시계가 빌드 시간보다 빠른 경우.
하지만 이 빌드 시간은 어디서 가져오나요? 2020년 9월 9일로 시간을 앞당기세요
그런데 uname -v
2021년 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)