X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fcore%2Fmain.c;h=b3ee1b9b889960589c7730cccb8687a88e1609d6;hp=3e57f07c422dafd17f8b0535feb0a9671a8741f8;hb=ca05941b9a6d7855bda2a7cb2cc16bbd3911acdd;hpb=5a85ca1cb622fda4a39c8a6f00dccea7f8a1e82a diff --git a/src/core/main.c b/src/core/main.c index 3e57f07c4..b3ee1b9b8 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -286,7 +286,8 @@ static int parse_proc_cmdline_item(const char *key, const char *value) { } else if (streq(key, "rd.systemd.unit") && value) { - return set_default_unit(value); + if (in_initrd()) + return set_default_unit(value); } else if (streq(key, "systemd.log_target") && value) { @@ -412,11 +413,16 @@ static int parse_proc_cmdline_item(const char *key, const char *value) { } } else if (streq(key, "quiet") && !value) { + + log_set_max_level(LOG_NOTICE); + if (arg_show_status == _SHOW_STATUS_UNSET) arg_show_status = SHOW_STATUS_AUTO; } else if (streq(key, "debug") && !value) { + log_set_max_level(LOG_DEBUG); + if (detect_container(NULL) > 0) log_set_target(LOG_TARGET_CONSOLE); @@ -1302,6 +1308,7 @@ int main(int argc, char *argv[]) { bool loaded_policy = false; bool arm_reboot_watchdog = false; bool queue_default_job = false; + bool empty_etc = false; char *switch_root_dir = NULL, *switch_root_init = NULL; static struct rlimit saved_rlimit_nofile = { 0, 0 }; @@ -1573,6 +1580,9 @@ int main(int argc, char *argv[]) { if (in_initrd()) log_info("Running in initial RAM disk."); + empty_etc = dir_is_empty("/etc") > 0; + if (empty_etc) + log_info("Running with unpopulated /etc."); } else { _cleanup_free_ char *t = uid_to_name(getuid()); log_debug(PACKAGE_STRING " running in user mode for user "PID_FMT"/%s. (" SYSTEMD_FEATURES ")", @@ -1584,11 +1594,10 @@ int main(int argc, char *argv[]) { status_welcome(); #ifdef HAVE_KMOD - if (detect_container(NULL) <= 0) - kmod_setup(); + kmod_setup(); #endif hostname_setup(); - machine_id_setup(""); + machine_id_setup(NULL); loopback_setup(); test_mtab(); @@ -1630,9 +1639,18 @@ int main(int argc, char *argv[]) { } } - if (arg_running_as == SYSTEMD_SYSTEM) + if (arg_running_as == SYSTEMD_SYSTEM) { bump_rlimit_nofile(&saved_rlimit_nofile); + if (empty_etc) { + r = unit_file_preset_all(UNIT_FILE_SYSTEM, false, NULL, UNIT_FILE_PRESET_FULL, false, NULL, 0); + if (r < 0) + log_warning("Failed to populate /etc with preset unit settings, ignoring: %s", strerror(-r)); + else + log_info("Populated /etc with preset unit settings."); + } + } + r = manager_new(arg_running_as, &m); if (r < 0) { log_error("Failed to allocate manager object: %s", strerror(-r));