} 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) {
} else
log_warning("Environment variable name '%s' is not valid. Ignoring.", value);
- } else if (!streq(key, "systemd.restore_state") &&
- !streq(key, "systemd.gpt_auto") &&
- (startswith(key, "systemd.") || startswith(key, "rd.systemd."))) {
-
- const char *c;
-
- /* Ignore systemd.journald.xyz and friends */
- c = key;
- if (startswith(c, "rd."))
- c += 3;
- if (startswith(c, "systemd."))
- c += 8;
- if (c[strcspn(c, ".=")] != '.') {
-
- log_warning("Unknown kernel switch %s. Ignoring.", key);
-
- log_info("Supported kernel switches:\n"
- "systemd.unit=UNIT Default unit to start\n"
- "rd.systemd.unit=UNIT Default unit to start when run in initrd\n"
- "systemd.dump_core=0|1 Dump core on crash\n"
- "systemd.crash_shell=0|1 Run shell on crash\n"
- "systemd.crash_chvt=N Change to VT #N on crash\n"
- "systemd.confirm_spawn=0|1 Confirm every process spawn\n"
- "systemd.show_status=0|1|auto Show status updates on the console during bootup\n"
- "systemd.log_target=console|kmsg|journal|journal-or-kmsg|syslog|syslog-or-kmsg|null\n"
- " Log target\n"
- "systemd.log_level=LEVEL Log level\n"
- "systemd.log_color=0|1 Highlight important log messages\n"
- "systemd.log_location=0|1 Include code location in log messages\n"
- "systemd.default_standard_output=null|tty|syslog|syslog+console|kmsg|kmsg+console|journal|journal+console\n"
- " Set default log output for services\n"
- "systemd.default_standard_error=null|tty|syslog|syslog+console|kmsg|kmsg+console|journal|journal+console\n"
- " Set default log error output for services\n"
- "systemd.setenv=ASSIGNMENT Set an environment variable for all spawned processes\n"
- "systemd.restore_state=0|1 Restore backlight/rfkill state at boot\n");
- }
-
} else if (streq(key, "quiet") && !value) {
log_set_max_level(LOG_NOTICE);
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 };
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 ")",
- getuid(), t);
+ _cleanup_free_ char *t;
+
+ t = uid_to_name(getuid());
+ log_debug(PACKAGE_STRING " running in user mode for user "UID_FMT"/%s. (" SYSTEMD_FEATURES ")", getuid(), strna(t));
}
if (arg_running_as == SYSTEMD_SYSTEM && !skip_setup) {
}
}
- 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));
if (reexecute) {
const char **args;
unsigned i, args_size;
- sigset_t ss, o_ss;
+ sigset_t ss;
/* Close and disarm the watchdog, so that the new
* instance can reinitialize it, but doesn't get
/* reenable any blocked signals, especially important
* if we switch from initial ramdisk to init=... */
- sigemptyset(&ss);
- sigprocmask(SIG_SETMASK, &ss, &o_ss);
+ reset_all_signal_handlers();
+
+ assert_se(sigemptyset(&ss) == 0);
+ assert_se(sigprocmask(SIG_SETMASK, &ss, NULL) == 0);
if (switch_root_init) {
args[0] = switch_root_init;
log_error("Failed to execute /bin/sh, giving up: %m");
} else
log_warning("Failed to execute /sbin/init, giving up: %m");
-
- sigprocmask(SIG_SETMASK, &o_ss, NULL);
}
if (arg_serialization) {