summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHarald Hoyer <harald@redhat.com>2012-05-16 14:22:44 +0200
committerLennart Poettering <lennart@poettering.net>2012-05-21 18:51:05 +0200
commitc3ba62509efe274c2bf6482056044e6fab65fec0 (patch)
treed26b952a26449e9e800ab366023c7caeb69d24a8
parente148ac5a6cccd1c9c23bf7b3085b50fdb1cd1cf9 (diff)
downloadsystemd-c3ba62509efe274c2bf6482056044e6fab65fec0.tar.gz
core/main.c: handle the initrd timestamp differently, if in the initrd
If systemd is in the initrd/initramfs, set the initrd timestamp and do not try to read it from the RD_TIMESTAMP environment variable.
-rw-r--r--src/core/main.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/core/main.c b/src/core/main.c
index d7143edae2..878eaf353f 100644
--- a/src/core/main.c
+++ b/src/core/main.c
@@ -1310,6 +1310,19 @@ int main(int argc, char *argv[]) {
log_set_max_level(LOG_INFO);
if (getpid() == 1) {
+ if (in_initrd()) {
+ char *rd_timestamp = NULL;
+
+ dual_timestamp_get(&initrd_timestamp);
+ asprintf(&rd_timestamp, "%llu %llu",
+ (unsigned long long) initrd_timestamp.realtime,
+ (unsigned long long) initrd_timestamp.monotonic);
+ if (rd_timestamp) {
+ setenv("RD_TIMESTAMP", rd_timestamp, 1);
+ free(rd_timestamp);
+ }
+ }
+
arg_running_as = MANAGER_SYSTEM;
log_set_target(detect_container(NULL) > 0 ? LOG_TARGET_JOURNAL : LOG_TARGET_JOURNAL_OR_KMSG);
@@ -1437,7 +1450,8 @@ int main(int argc, char *argv[]) {
/* Parse the data passed to us. We leave this
* variables set, but the manager later on will not
* pass them on to our children. */
- parse_initrd_timestamp(&initrd_timestamp);
+ if(!in_initrd())
+ parse_initrd_timestamp(&initrd_timestamp);
/* Unset some environment variables passed in from the
* kernel that don't really make sense for us. */