diff options
-rw-r--r-- | TODO | 2 | ||||
-rw-r--r-- | src/core/main.c | 39 | ||||
-rw-r--r-- | src/shared/hwclock.c | 1 |
3 files changed, 30 insertions, 12 deletions
@@ -28,8 +28,6 @@ F18: * refuse automount triggers when automount is queued for stop, much like we refuse socket triggers when sockets are queued for stop -* perfomance messages for selinux are gone from debug log? - * There's something wrong with escaping unit names: http://lists.freedesktop.org/archives/systemd-devel/2012-August/006292.html * logind: different policy actions for idle, suspend, shutdown blockers: allow idle blockers by default, don't allow suspend blockers by default diff --git a/src/core/main.c b/src/core/main.c index 199383e636..9d2d55154c 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -1285,10 +1285,15 @@ int main(int argc, char *argv[]) { saved_argc = argc; log_show_color(isatty(STDERR_FILENO) > 0); - log_show_location(false); - log_set_max_level(LOG_INFO); - if (getpid() == 1) { + if (getpid() == 1 && detect_container(NULL) <= 0) { + + /* Running outside of a container as PID 1 */ + arg_running_as = MANAGER_SYSTEM; + make_null_stdio(); + log_set_target(LOG_TARGET_KMSG); + log_open(); + if (in_initrd()) { char *rd_timestamp = NULL; @@ -1302,11 +1307,6 @@ int main(int argc, char *argv[]) { } } - arg_running_as = MANAGER_SYSTEM; - - make_null_stdio(); - log_set_target(detect_container(NULL) > 0 ? LOG_TARGET_JOURNAL : LOG_TARGET_JOURNAL_OR_KMSG); - if (!skip_setup) { if (selinux_setup(&loaded_policy) < 0) goto finish; @@ -1314,8 +1314,6 @@ int main(int argc, char *argv[]) { goto finish; } - log_open(); - if (label_init(NULL) < 0) goto finish; @@ -1339,7 +1337,28 @@ int main(int argc, char *argv[]) { log_error("Failed to set the kernel's time zone, ignoring: %s", strerror(-r)); } } + + /* Set the default for later on, but don't actually + * open the logs like this for now. Note that if we + * are transitioning from the initrd there might still + * be journal fd open, and we shouldn't attempt + * opening that before we parsed /proc/cmdline which + * might redirect output elsewhere. */ + log_set_target(LOG_TARGET_JOURNAL_OR_KMSG); + + } else if (getpid() == 1) { + + /* Running inside a container, as PID 1 */ + arg_running_as = MANAGER_SYSTEM; + log_set_target(LOG_TARGET_CONSOLE); + log_open(); + + /* For the later on, see above... */ + log_set_target(LOG_TARGET_JOURNAL); + } else { + + /* Running as user instance */ arg_running_as = MANAGER_USER; log_set_target(LOG_TARGET_AUTO); log_open(); diff --git a/src/shared/hwclock.c b/src/shared/hwclock.c index d9d5600ff3..67eb2eff8b 100644 --- a/src/shared/hwclock.c +++ b/src/shared/hwclock.c @@ -154,6 +154,7 @@ int hwclock_set_time(const struct tm *tm) { return err; } + int hwclock_is_localtime(void) { FILE *f; bool local = false; |